This website requires JavaScript.
a7f684626c
Fix lint: make scripts/demo/router.php PSR-12 compliant; tidy demo scripts
main
deploy-2026.10.03-279
jared
2026-10-03 16:58:52 -04:00
051ef6c915
README: add walkthrough GIF, gallery and architecture diagram; add demo seed and capture scripts
jared
2026-10-03 01:02:55 -04:00
13a0612f23
Fix migration runner: strip -- comments before splitting statements
jared
2026-10-03 01:02:55 -04:00
4885848375
Add MIT license
deploy-2026.10.03-275
jared
2026-10-03 00:16:58 -04:00
cc160fe8ce
Merge development: MCP ticket links + duplicate finder fixes (#113 )
deploy-2026.09.26-272
jared
2026-09-26 17:13:41 -04:00
c490d4f387
MCP: ticket links and similar-ticket search (#113 )
development
jared and Claude Opus 5.5
2026-09-26 17:08:04 -04:00
a9bc72fdcc
Fix the possible-duplicates finder; share it as SimilarTicketService (#113 )
jared and Claude Opus 5.5
2026-09-26 17:08:04 -04:00
5b43e7d18f
Merge development: per-warning Ceph dedup (#112 )
deploy-2026.09.25-268
jared
2026-09-25 16:39:35 -04:00
72feafb359
Give each Ceph HEALTH_WARN its own dedup ticket (#112 )
jared and Claude Opus 5.5
2026-09-25 15:59:37 -04:00
da916bc5a6
Merge development: fix ticket page 500 (#112 )
deploy-2026.09.25-264
jared
2026-09-25 15:45:07 -04:00
ad201691e4
Fix ticket page 500 from unbounded audit timeline (#112 )
jared and Claude Opus 5.5
2026-09-25 15:34:44 -04:00
dad066cb32
Merge development into main: MCP server documentation (#111 )
deploy-2026.09.24-258
jared and Claude Opus 5.5
2026-09-24 19:26:42 -04:00
9c633aa09b
Document the MCP server: connecting Claude Code, tools, architecture (#111 )
jared and Claude Opus 5.5
2026-09-24 19:26:40 -04:00
9bbe4ef9a0
Merge development into main: OAuth-protected remote MCP server (#111 )
deploy-2026.09.24-254
jared and Claude Opus 5.5
2026-09-24 19:21:30 -04:00
17be55bf8f
Add MCP write tools: create_ticket, add_comment, update_status, assign_ticket (#111 , phase 5)
jared and Claude Opus 5.5
2026-09-24 19:13:41 -04:00
f206bb5889
Extract ticket creation from TicketController into TicketCreationService (#111 )
jared and Claude Opus 5.5
2026-09-24 19:13:31 -04:00
9e462f7f00
Extract ticket assignment from assign_ticket.php into AssignmentService (#111 )
jared and Claude Opus 5.5
2026-09-24 19:13:31 -04:00
d5832fb58a
Extract comment creation from add_comment.php into CommentService (#111 )
jared and Claude Opus 5.5
2026-09-24 19:13:31 -04:00
6ce3380d6a
Move ApiTicketController out of update_ticket.php into its own file (#111 )
jared and Claude Opus 5.5
2026-09-24 19:13:31 -04:00
65deedc295
Add MCP identity mapping and read tools (#111 , phase 4)
jared and Claude Opus 5.5
2026-09-24 18:58:30 -04:00
13660b4398
Fix duplicated Host header rejecting all MCP requests under PHP-FPM (#111 )
jared and Claude Opus 5.5
2026-09-24 18:46:52 -04:00
5631731a28
Add OAuth-protected MCP endpoint scaffolding (#111 , phase 2)
jared and Claude Opus 5.5
2026-09-24 18:40:11 -04:00
d0a763079e
Merge development into main: API key visibility, notification retry, watch audit logging (#70 , #78 , #93 )
deploy-2026.09.12-242
jared and Claude Sonnet 5
2026-09-12 01:20:57 -04:00
35192aaadc
Retry failed Matrix webhook notifications with backoff (#78 )
jared and Claude Sonnet 5
2026-09-12 01:18:13 -04:00
6609320c83
Restrict API keys to public-visibility tickets by default (#70 )
jared and Claude Sonnet 5
2026-09-12 01:17:53 -04:00
e91f4547b6
Log watch/unwatch actions to the audit trail (#93 )
jared and Claude Sonnet 5
2026-09-12 01:17:13 -04:00
74544ac5b4
Merge development into main: LDAP avatar lookups now use LDAPS (#95 )
deploy-2026.09.12-238
jared and Claude Sonnet 5
2026-09-12 00:59:21 -04:00
863f84f37e
Switch LDAP avatar lookups to LDAPS (#95 )
jared and Claude Sonnet 5
2026-09-12 00:56:00 -04:00
b73a4c792c
Merge development into main: dashboard status chart excludes Closed (#110 )
deploy-2026.09.12-234
jared and Claude Sonnet 5
2026-09-11 22:26:37 -04:00
78ee5fdf48
Exclude Closed tickets from the dashboard status breakdown chart (#110 )
jared and Claude Sonnet 5
2026-09-11 22:23:33 -04:00
786674abf3
Merge development into main: user-activity fix + attachment thumbnails (#49 , #98 )
deploy-2026.09.12-230
jared and Claude Sonnet 5
2026-09-11 22:19:57 -04:00
dcf9b0cfa1
Generate real resized thumbnails for image attachments (#98 )
jared and Claude Sonnet 5
2026-09-11 22:17:35 -04:00
80169de16d
Fix User Activity report's Tickets Assigned column to use assignment date (#49 )
jared and Claude Sonnet 5
2026-09-11 22:17:25 -04:00
4aa83ffe58
Merge development into main: bulk-op atomicity docs + double-submit guard (#33 , #36 )
deploy-2026.09.12-226
jared and Claude Sonnet 5
2026-09-11 21:58:45 -04:00
844677bbce
Fix atomicity docblock and surface per-ticket bulk-op errors (#33 )
jared and Claude Sonnet 5
2026-09-11 21:56:26 -04:00
3fcd1cbf0e
Guard bulk-action buttons against double-submit (#36 )
jared and Claude Sonnet 5
2026-09-11 21:56:19 -04:00
3ab33d8df2
Merge development into main: concurrency/atomicity fixes (#34 , #35 , #37 )
deploy-2026.09.12-222
jared and Claude Sonnet 5
2026-09-11 21:45:25 -04:00
3778a599c3
Serialize dedup-hash lookups in create_ticket_api.php (#35 )
jared and Claude Sonnet 5
2026-09-11 21:41:57 -04:00
310dcd0840
Persist status-change comments transactionally with the update (#37 )
jared and Claude Sonnet 5
2026-09-11 21:41:48 -04:00
d205a9577a
Fix TOCTOU race in bulk operations by row-locking tickets (#34 )
jared and Claude Sonnet 5
2026-09-11 21:41:41 -04:00
5572f0be45
Merge development into main: quick/contained cleanup batch (#43 , #44 , #45 , #109 )
deploy-2026.09.11-218
jared
2026-09-11 15:20:11 -04:00
1600412a6d
Add a table-insert toolbar button to the markdown editor (#109 )
jared and Claude Sonnet 5
2026-09-11 15:11:03 -04:00
803c65616b
Update stale README Project Structure tree and migrations docs (#45 )
jared and Claude Sonnet 5
2026-09-11 15:10:56 -04:00
0e163f6607
Remove unused lt.markdown module (#43 )
jared and Claude Sonnet 5
2026-09-11 15:10:47 -04:00
e1448d8ea2
Document intentional empty catches, fix one real gap, allow == null in eqeqeq (#44 )
jared and Claude Sonnet 5
2026-09-11 15:08:05 -04:00
b6c17096b5
Merge development into main: search filter merge, workflow dup rejection, recurring-ticket loss alert, preview debounce (#58 , #62 , #88 , #108 )
deploy-2026.09.11-214
jared
2026-09-11 14:49:44 -04:00
6bd1bb082a
Debounce the live markdown preview (#108 )
jared and Claude Sonnet 5
2026-09-11 14:28:39 -04:00
a4828c1b7b
Alert and record a lost recurring-ticket occurrence on creation failure (#88 )
jared and Claude Sonnet 5
2026-09-11 14:28:31 -04:00
86ef91abcb
Reject duplicate workflow transitions with a clear error (#62 )
jared and Claude Sonnet 5
2026-09-11 14:28:21 -04:00
6d68af40e7
Merge into current URL params instead of replacing them in Advanced Search (#58 )
jared and Claude Sonnet 5
2026-09-11 14:28:12 -04:00
aa8173941a
Merge development into main: webhook timeout, comment-edit timeline fix, Bearer rate-limiting overhaul (#77 , #80 , #81 , #82 , #83 , #87 )
deploy-2026.09.11-210
jared
2026-09-11 14:11:48 -04:00
1b1801696f
Overhaul Bearer API rate limiting: real config, per-key isolation, skip session (#80 , #81 , #82 , #83 )
jared and Claude Sonnet 5
2026-09-11 14:05:14 -04:00
09cea2b388
Include ticket_id in comment-edit audit log so it appears on the timeline (#87 )
jared and Claude Sonnet 5
2026-09-11 14:05:01 -04:00
9702aafacd
Add connect-timeout to Matrix webhook calls (#77 )
jared and Claude Sonnet 5
2026-09-11 14:04:52 -04:00
66bf82bf46
Merge development into main: visibility-notification pruning + CSRF UX + custom field type validation (#48 , #50 , #57 , #73 , #86 )
deploy-2026.09.11-206
jared
2026-09-11 13:48:20 -04:00
fca0b42726
Validate field_type against the allowed enum in custom field definitions (#50 )
jared and Claude Sonnet 5
2026-09-11 13:31:33 -04:00
ae12fcd6fd
Auto-retry once after CSRF token resync in lt.api (#86 )
jared and Claude Sonnet 5
2026-09-11 13:31:25 -04:00
5b96e75ff6
Use lt.api instead of raw fetch() in notification bell (#57 )
jared and Claude Sonnet 5
2026-09-11 13:31:15 -04:00
3db3749c46
Re-check ticket visibility before surfacing in-app notifications (#48 )
jared and Claude Sonnet 5
2026-09-11 13:31:08 -04:00
9e83f8903a
Prune watchers when a ticket's visibility is tightened (#73 )
jared and Claude Sonnet 5
2026-09-11 13:30:59 -04:00
cabdae35cc
Merge development into main: Custom Fields wiring (#47 )
deploy-2026.09.11-202
jared
2026-09-11 13:17:33 -04:00
3266373cdf
Wire Custom Fields into ticket creation and viewing (#47 )
jared and Claude Sonnet 5
2026-09-11 13:12:42 -04:00
f342e446d3
Merge development into main: bulk-op notification/audit fixes + workflow-validated auto-reopen (#67 , #68 , #74 )
deploy-2026.09.11-198
jared
2026-09-11 12:44:06 -04:00
18c213ebd7
Route hwmonDaemon's auto-reopen through Workflow Designer validation (#68 )
jared and Claude Sonnet 5
2026-09-11 12:37:46 -04:00
6adbb29964
Fire notifications and fix audit_log shape for bulk status changes (#67 , #74 )
jared and Claude Sonnet 5
2026-09-11 12:37:37 -04:00
5a69c41f48
Merge development into main: error-handling rollout + session privilege re-sync (#38 , #39 , #56 , #105 )
deploy-2026.09.11-194
jared
2026-09-11 12:23:49 -04:00
6b7e67eee4
Periodically re-sync session privileges from Authelia (#56 )
jared and Claude Sonnet 5
2026-09-11 12:17:27 -04:00
71bf64c1e2
Complete ErrorHandler rollout: wire into all endpoints, fix display_errors gaps, add styled 500 page (#38 , #39 , #105 )
jared and Claude Sonnet 5
2026-09-11 12:17:15 -04:00
bcc732e605
Merge development into main: connection/security hardening batch (#85 , #94 , #103 , #104 )
deploy-2026.09.11-190
jared
2026-09-11 11:54:36 -04:00
9d8a73c355
Add recovery csrf_token to 12 hand-rolled CSRF rejection responses (#85 )
jared and Claude Sonnet 5
2026-09-11 11:42:46 -04:00
c78d24154a
Make TRUSTED_PROXIES' insecure-by-default risk loudly visible (#94 )
jared and Claude Sonnet 5
2026-09-11 11:42:29 -04:00
98d30cbc58
Route index.php and create_ticket_api.php through Database::getConnection() (#103 , #104 )
jared and Claude Sonnet 5
2026-09-11 11:42:21 -04:00
99a0cf59a8
Merge development into main: Matrix-notification visibility-leak batch (#46 , #69 , #71 , #72 )
deploy-2026.09.11-186
jared
2026-09-11 11:26:58 -04:00
5709c3134f
Verify mentioned-user access before sending @mention notifications (#69 )
jared and Claude Sonnet 5
2026-09-08 21:49:42 -04:00
60bafae8a0
Redact ticket title for non-public tickets in assignment notifications (#72 )
jared and Claude Sonnet 5
2026-09-08 21:49:34 -04:00
90d798966b
Exclude shared notify list and redact title in notifyWatchers() for non-public tickets (#71 )
jared and Claude Sonnet 5
2026-09-08 21:49:17 -04:00
442cd1d6f6
Redact ticket title for non-public tickets in create/status-change Matrix notifications (#46 )
jared and Claude Sonnet 5
2026-09-08 21:49:06 -04:00
3664719148
Merge development into main: high-priority security/reliability batch (#27 , #28 , #30 , #32 )
deploy-2026.09.09-182
jared
2026-09-08 21:33:33 -04:00
d7940b1e31
Fix ticket_watchers.ticket_id type mismatch and missing FK (#32 )
jared and Claude Sonnet 5
2026-09-08 21:28:42 -04:00
fba251b85d
Replace illusory transaction wrapping in migrate.php with statement-level resume (#30 )
jared and Claude Sonnet 5
2026-09-08 21:28:32 -04:00
fd777aa690
Fix visibility-group matching disagreement between filter and access check (#28 )
jared and Claude Sonnet 5
2026-09-08 21:28:25 -04:00
a9a39adcf8
Add missing rate limiting to create_ticket_api.php (#27 )
jared and Claude Sonnet 5
2026-09-08 21:28:18 -04:00
23d94bfae7
Merge development into main: quick-win UX/perf batch (#76 , #64 , #99 , #100 )
deploy-2026.09.09-178
jared
2026-09-08 21:18:14 -04:00
e39b4f81ea
Avoid insertAdjacentHTML flagged by semgrep in attachment pagination (#100 )
jared and Claude Sonnet 5
2026-09-08 21:05:43 -04:00
3d5adbbfda
Paginate attachment listing (#100 )
jared and Claude Sonnet 5
2026-09-08 20:57:22 -04:00
b0765eb7f4
Add HTTP Range/partial-content support to attachment downloads (#99 )
jared and Claude Sonnet 5
2026-09-08 20:57:16 -04:00
d84d8fae58
Make SLA priority-alert banner update live on priority change (#64 )
jared and Claude Sonnet 5
2026-09-08 20:57:10 -04:00
b6d3cc4e70
Consolidate dashboard clear-filters controls to one shared function (#76 )
jared and Claude Sonnet 5
2026-09-08 20:57:03 -04:00
cef1689c05
Merge development into main: 15-issue triage + fix batch
deploy-2026.09.08-172
jared and Claude Sonnet 5
2026-09-08 15:39:36 -04:00
3cca956ee7
Preserve native undo/redo in markdown toolbar buttons (#107 )
jared and Claude Sonnet 5
2026-09-08 14:21:39 -04:00
818af137f3
Add touch-event fallback to lt.sortable for kanban drag-and-drop (#65 )
jared and Claude Sonnet 5
2026-09-08 14:18:54 -04:00
338bed7eb7
Add per-ticket attachment count/storage quota (#55 )
jared and Claude Sonnet 5
2026-09-08 14:14:00 -04:00
67d3c13bb6
Fix .env.example: missing Matrix vars, plus a real parse_ini_file outage (#63 )
jared and Claude Sonnet 5
2026-09-08 14:12:04 -04:00
e4c240009d
Dashboard cleanup: chart empty-state message, dead click-handler (#101 )
jared and Claude Sonnet 5
2026-09-08 12:27:26 -04:00
6553c0227d
Fix dogpile cache-overwrite race in CacheHelper::remember() (#91 )
jared and Claude Sonnet 5
2026-09-08 12:25:04 -04:00
4fade1a9d3
Reject the semantic inverse of an existing ticket dependency (#51 )
jared and Claude Sonnet 5
2026-09-08 12:23:04 -04:00
3f1e06479d
Strip EXIF/GPS metadata from image uploads (#97 )
jared and Claude Sonnet 5
2026-09-08 12:22:02 -04:00
caeb9269d9
README: add missing StatsModel::invalidateCache() caller (#92 )
jared and Claude Sonnet 5
2026-09-08 11:59:23 -04:00
70ef42c311
Delete dead helpers/OutputHelper.php (#54 )
jared and Claude Sonnet 5
2026-09-08 11:58:58 -04:00
1e972fe7dc
Add memory_limit/max_execution_time sanity checks (#106 )
jared and Claude Sonnet 5
2026-09-08 11:58:20 -04:00