-
acc1f58a29
feat(capa): add action buttons to CAPA detail page
main
admin
2026-07-30 08:54:25 +08:00
-
955c49a29d
fix(test): remove unused beforeEach import in capa-owner-actions test
admin
2026-07-30 08:43:57 +08:00
-
a4253a80f5
feat(capa): allow overdue CAPAs to be acted on, fix owner page stats

adminandClaude Sonnet 4.6
2026-07-30 08:41:41 +08:00
-
3fd8dfe294
fix(pdf): sanitise non-WinAnsi chars, handle newlines in wrap
admin
2026-07-28 17:53:04 +08:00
-
740c6da3ba
fix(pdf): sanitise Content-Disposition filename, fix triagedByName test fixture
admin
2026-07-28 17:11:16 +08:00
-
28929f40e2
feat(ui): add Print Report button on closed incidents
admin
2026-07-28 17:06:33 +08:00
-
1b0941ec69
feat(pdf): add incident report PDF API route

adminandClaude Sonnet 4.6
2026-07-28 17:03:00 +08:00
-
e7d82f3a5a
fix(pdf): skip section gap on new page, reserve space for CAPA label

adminandClaude Sonnet 4.6
2026-07-28 16:56:13 +08:00
-
8bbdd4f843
feat(pdf): add incident report PDF builder
admin
2026-07-28 16:52:31 +08:00
-
dbc66460c4
fix(dashboard): include all CAPAs in on-time rate, count open+not-overdue as on-time
admin
2026-07-28 16:36:57 +08:00
-
87251b3fc6
fix(dashboard): compute CAPA overdue count from due_date instead of status field
admin
2026-07-28 16:31:45 +08:00
-
1103d842d5
fix(deploy): use sudo for systemctl restart ims
admin
2026-07-28 16:26:58 +08:00
-
6b427b840d
fix(capa): compute overdue status at render time in CAPA board page
admin
2026-07-28 16:21:23 +08:00
-
46d82df377
fix(capa): advance incident status to capa_pending on CAPA creation
admin
2026-07-28 15:54:47 +08:00
-
ed2a2f65e4
fix: switch AI endpoints from tool-calling to JSON output mode

adminandClaude
2026-07-26 10:49:44 +08:00
-
7bf3b6a409
fix: rename deepseek model from deepseek-chat to deepseek-v4-pro

adminandClaude
2026-07-26 10:17:26 +08:00
-
6a2551546d
fix: log DeepSeek error in risk-flags catch block
admin
2026-07-25 22:08:18 +08:00
-
9c67014bb9
fix(audit): wrap admin + capa mutations with their audit writes in single transactions

adminandClaude Sonnet 4.6
2026-07-24 06:44:05 +08:00
-
8acca41ca1
docs: phase 9 — update vps-cron.md, add cutover runbook

adminandClaude Sonnet 4.6
2026-07-24 06:35:15 +08:00
-
b3811b3633
feat(ops): phase 8 — data migration scripts + fix password_reset_tokens in schema.sql

adminandClaude Sonnet 4.6
2026-07-24 06:30:34 +08:00
-
04c36f9d45
fix(sw): remove dead pathname startsWith('/') guard after basePath drop
admin
2026-07-23 22:34:20 +08:00
-
0389d6091a
fix(config): phase 7 follow-up — fix remaining /ims/ occurrences in sw.js, notifications, components

adminandClaude Sonnet 4.6
2026-07-23 22:32:11 +08:00
-
9d047e168f
feat(config): phase 7 — drop /ims basePath, update all hardcoded paths, refresh env spec

adminandClaude Sonnet 4.6
2026-07-23 22:27:46 +08:00
-
d785d86636
feat(email): phase 6 — replace Resend with Brevo transactional email

adminandClaude Sonnet 4.6
2026-07-23 22:20:12 +08:00
-
186c732ac0
fix(storage): add X-Content-Type-Options: nosniff to evidence serve route
admin
2026-07-23 22:16:47 +08:00
-
e5f74c367d
feat(storage): phase 5 — replace Supabase storage with local filesystem + HMAC evidence serving

adminandClaude Sonnet 4.6
2026-07-23 22:14:54 +08:00
-
dacc1a5265
fix(db): phase 4 group 6 — session guard, type safety, SQL filter fixes

adminandClaude Sonnet 4.6
2026-07-23 17:33:48 +08:00
-
f591c0be18
feat(db): phase 4 group 6 — server component pages to Drizzle

adminandClaude Sonnet 4.6
2026-07-23 17:29:22 +08:00
-
c2db693d9f
feat(db): phase 4 group 5 — dashboard/reports/settings/notifications/users routes to Drizzle

adminandClaude Sonnet 4.6
2026-07-23 17:13:51 +08:00
-
853675118d
feat(db): phase 4 group 4 — CAPA routes to Drizzle

adminandClaude Sonnet 4.6
2026-07-23 17:05:58 +08:00
-
98f5c4e421
feat(db): phase 4 group 3 — incident routes to Drizzle

adminandClaude Sonnet 4.6
2026-07-23 16:57:01 +08:00
-
d234ebf916
feat(db): phase 4 group 2 — admin routes to Drizzle

adminandClaude Sonnet 4.6
2026-07-23 16:44:39 +08:00
-
25f923f530
feat(db): phase 4 group 1 — lib/ settings + notifications to Drizzle

adminandClaude Sonnet 4.6
2026-07-23 16:37:51 +08:00
-
d18d29168a
feat(auth): phase 3 — replace Supabase GoTrue with bcryptjs+jose

adminandClaude Sonnet 4.6
2026-07-23 16:20:04 +08:00
-
a95273b182
feat(db): Drizzle DAL with withUser/asAdmin GUC wrapper (Phase 2)

adminandClaude Sonnet 4.6
2026-07-23 15:50:57 +08:00
-
e5fd2436fa
feat(db): consolidated PostgreSQL schema replacing Supabase (Phase 1)

adminandClaude Sonnet 4.6
2026-07-23 15:43:09 +08:00
-
ba3d345531
feat(ops): add new server runbook and update deploy.sh for ims.setia.com.my

adminandClaude Sonnet 4.6
2026-07-23 15:30:51 +08:00
-
509ed90fe7
fix(capa): field-level auth split, status gate, RLS tightening, audit old_value, hide form on pending_verification

adminandClaude Sonnet 4.6
2026-07-23 12:10:53 +08:00
-
938eb7e08d
feat(capa): wire owner notes form into capa-owner page and HSE detail view
admin
2026-07-23 12:00:43 +08:00
-
5f34dbb644
feat(capa): add CapaOwnerNotesForm component
admin
2026-07-23 11:57:43 +08:00
-
96eaeb7aef
feat(api): expose owner_notes in capa GET and PATCH

adminandClaude Sonnet 4.6
2026-07-23 11:56:10 +08:00
-
52171ac3ca
feat(db): add owner_notes column to capa_actions
admin
2026-07-23 11:53:41 +08:00
-
71cf90e1de
feat(capa): add Close CAPA button for HSE after verification

adminandClaude Sonnet 4.6
2026-07-23 11:41:56 +08:00
-
1a813d54f2
fix(middleware): exclude /api/ routes from role-prefix guard

adminandClaude Sonnet 4.6
2026-07-22 20:00:27 +08:00
-
0e479b648f
fix(auth,capa): restore auth callback, fix CAPA status update

adminandClaude Sonnet 4.6
2026-07-22 19:43:38 +08:00
-
4fbab33de4
fix(auth): add forgot/reset to public routes, use Link for basePath, add session guard

adminandClaude Sonnet 4.6
2026-07-21 22:36:53 +08:00
-
fa88d62375
feat(auth): add reset-password page and login success banner
admin
2026-07-21 22:31:20 +08:00
-
211117e61a
feat(auth): add forgot-password page
admin
2026-07-21 22:29:39 +08:00
-
4d7ab5d7da
feat(auth): add forgot password link to login form
admin
2026-07-21 22:28:26 +08:00
-
3a5daaa987
docs: add forgot password implementation plan
admin
2026-07-21 22:27:02 +08:00
-
a4b7761f92
docs: add forgot password flow design spec
admin
2026-07-21 22:25:18 +08:00
-
d5803daa67
fix(admin): delete auth user on profile update failure
admin
2026-07-18 18:00:00 +08:00
-
33d4dd4b27
feat(admin): remove invite-by-email, direct-add only

adminandClaude Sonnet 4.6
2026-07-18 17:48:26 +08:00
-
ac2f0724dd
fix: add urine_test_result to supervisor incident detail select
admin
2026-07-17 19:11:11 +08:00
-
e30d583947
feat: split alcohol and urine test into separate fields

adminandClaude Sonnet 4.6
2026-07-17 19:08:27 +08:00
-
e687510d0b
fix(capa): show all active users in Assigned To dropdown
admin
2026-07-17 19:05:37 +08:00
-
a3ce59f2a8
fix(auth): return 503 when NEXT_PUBLIC_APP_URL unset for invite redirectTo

adminandClaude Sonnet 4.6
2026-07-17 19:03:58 +08:00
-
e682162bbc
fix(auth): redirect to appUrl after invite callback

adminandClaude Sonnet 4.6
2026-07-16 21:44:12 +08:00
-
b08fec385d
fix(capa): filter owner dropdown by capa_owner role

adminandClaude Sonnet 4.6
2026-07-16 21:12:12 +08:00
-
e949016bd4
feat(admin): add users directly with admin-set password + phone field

adminandClaude Sonnet 4.6
2026-07-13 16:36:20 +08:00
-
690485f74e
feat: delete + deactivate for sites, zones, and trucks; harden incident API error handling

adminandClaude Sonnet 4.6
2026-07-13 16:05:36 +08:00
-
370b985375
feat(admin): truck report link + pre-fill form via ?truck_id=

adminandClaude Sonnet 4.6
2026-07-13 11:49:56 +08:00
-
f90bf4ed03
feat: transport incidents with truck number support

adminandClaude Sonnet 4.6
2026-07-13 10:56:07 +08:00
-
6c1ad71643
feat: validate transport incident requires truck_id

adminandClaude Sonnet 4.6
2026-07-13 10:50:13 +08:00
-
ebeab27e5e
feat(db): trucks table, transport enum value, incidents.truck_id FK

adminandClaude Sonnet 4.6
2026-07-13 10:49:06 +08:00
-
5416929cab
feat: show investigation panel on incident detail page

adminandClaude Sonnet 4.6
2026-07-13 10:15:08 +08:00
-
782a9687e2
fix: allow admin role to submit triage and investigation API routes

adminandClaude Sonnet 4.6
2026-07-13 10:04:32 +08:00
-
e9fd29035a
fix: allow admin role to access triage and investigation pages

adminandClaude Sonnet 4.6
2026-07-13 10:00:17 +08:00
-
8a9416abb9
fix: lower sidebar breakpoint from md to sm so desktop sidebar renders

adminandClaude Sonnet 4.6
2026-07-13 09:57:29 +08:00
-
b1730dbeb1
style: darken form-field text and placeholders globally

adminandClaude Sonnet 4.6
2026-07-13 07:19:51 +08:00
-
c00879bf66
fix: recover orphaned DeepSeek key + remove retired settings slots

adminandClaude Sonnet 4.6
2026-07-13 07:11:09 +08:00
-
d10c690c12
feat: switch embeddings from Voyage AI to Google Gemini text-embedding-004

adminandClaude Sonnet 4.6
2026-07-13 06:50:35 +08:00
-
614c792225
fix(security): VULN-009 magic-byte MIME validation + UTC date fix

adminandClaude Sonnet 4.6
2026-07-13 06:37:59 +08:00
-
3776bc20b3
fix: rename Anthropic→DeepSeek label in settings, darken text colors
admin
2026-07-12 22:35:02 +08:00
-
a072ec0a3e
fix: add Settings link to admin sidebar nav
admin
2026-07-12 22:27:00 +08:00
-
8061f804f7
feat: self-service change password for all roles

adminandClaude Sonnet 4.6
2026-07-12 22:17:51 +08:00
-
b2891a433d
feat: switch AI provider from Anthropic to DeepSeek

adminandClaude Sonnet 4.6
2026-07-12 21:51:15 +08:00
-
8fe036bc1a
fix: P2 API hardening — unbounded SELECTs, export audit log, header injection, empty-key guard

adminandClaude Sonnet 4.6
2026-07-12 21:25:35 +08:00
-
16dd62df11
fix: P1 API security hardening — rate limits, auth guards, duplicate prevention

adminandClaude Sonnet 4.6
2026-07-12 20:47:32 +08:00
-
1879def32c
security: P0 fixes — IDOR on incident/CAPA, CAPA non-owner write, timing-safe recheck cron, auth callback open redirect
admin
2026-07-12 20:36:28 +08:00
-
dba79c0f17
fix: drop-if-exists before recreating notifications RLS policies
admin
2026-07-12 17:34:44 +08:00
-
c80091c8d6
security: CAPA privilege escalation, CSV injection, AI rate-limit, prompt injection guard, open redirect, timing-safe cron secret, server-only admin client, notifications RLS
admin
2026-07-12 17:33:58 +08:00
-
c0ec6660ef
feat: sticky incident header with top-positioned action buttons (fix #5)
admin
2026-07-12 16:44:42 +08:00
-
f6064b9580
feat: reporter clickable rows, CAPA owner action buttons, triage segmented severity
admin
2026-07-12 16:42:49 +08:00
-
180b0dc0a3
feat: persistent sidebar nav with role-scoped links, logout, and mobile bottom tab bar
admin
2026-07-12 16:40:57 +08:00
-
ba2cf69a8b
feat: add cross-section nav links on admin page for admin role
admin
2026-07-12 16:24:05 +08:00
-
580a60bbd8
fix: admin role bypasses path prefix guard — can access all protected routes
admin
2026-07-12 15:03:56 +08:00
-
706a075d73
fix: use nextUrl.clone() for middleware redirects to preserve basePath /ims
admin
2026-07-12 14:39:01 +08:00
-
c1c874b3fe
fix: exclude /api/cron from auth middleware so cron jobs run unauthenticated
admin
2026-07-12 13:59:54 +08:00
-
4242af029c
fix: code-review findings — closed-incident embedding 503, hardening, dedup

adminandClaude Fable 5
2026-07-12 12:45:01 +08:00
-
e2559d1f59
docs: real README, current phase status in CLAUDE.md, complete env example

adminandClaude Fable 5
2026-07-12 10:46:44 +08:00
-
81282fbd8a
refactor: make generate-qr testable with injectable deps + entry guard

adminandClaude Fable 5
2026-07-12 10:40:38 +08:00
-
646c94be0c
chore: commit supabase config, phase 2/4 plan docs, extend gitignore

adminandClaude Fable 5
2026-07-12 10:30:06 +08:00
-
f1d426adf1
chore: add idb dependency missed in Phase 4 offline-capture commit

adminandClaude Fable 5
2026-07-12 10:25:21 +08:00
-
576557181a
feat: Phase 5 & 6 — usability, compliance hardening, analytics

adminandClaude Fable 5
2026-07-12 10:25:08 +08:00
-
98c38c3716
fix: use setUTCDate in getNextRecheckDate to avoid local-timezone off-by-one
admin
2026-07-11 21:49:43 +08:00
-
e4d1da033d
fix: prefix all client-side fetch calls with /ims basePath

adminandClaude Sonnet 4.6
2026-07-11 21:26:18 +08:00
-
448ea4857a
fix: offline sync basePath prefix and stable syncNow callback

adminandClaude Sonnet 4.6
2026-07-11 19:11:16 +08:00
-
c048878600
feat: PWA offline capture — IndexedDB queue, service worker cache, auto-sync on reconnect
admin
2026-07-11 19:07:35 +08:00
-
8c88118b15
chore: update progress ledger — Phase 3 v2 review complete
admin
2026-07-11 19:04:20 +08:00