admin and Claude Sonnet 4.6
614c792225
fix(security): VULN-009 magic-byte MIME validation + UTC date fix
...
- uploadEvidenceFile: validate file type via file-type magic bytes, reject
client-supplied MIME, derive extension from detected type, upload ArrayBuffer
- getEscalationThreshold: use setUTCHours instead of setHours so date-only ISO
strings (always UTC midnight) compare consistently in any timezone
- Tests: mock file-type, update upload expectation to ArrayBuffer
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
Claude-Session: https://claude.ai/code/session_01CPf5Rc8QPx6V8KLEEgfKEQ
2026-07-13 06:37:59 +08:00
admin and Claude Fable 5
576557181a
feat: Phase 5 & 6 — usability, compliance hardening, analytics
...
Phase 5 (usability + compliance):
- In-app notification bell/badge: migration 016 adds read state + per-user
RLS + create_in_app_notification SECURITY DEFINER RPC; /api/notifications;
wired into incident creation, CAPA assign/verify, escalation cron
- Incident closure: new POST /api/incidents/[id]/close (requires verification
status + all CAPAs verified); migration 017 locks closed incidents at DB
level (update/delete triggers) with append-only incident_addenda + UI panel
- Server-side pagination on HSE/supervisor incident inboxes (.range, 25/page)
- Investigation form: alcohol/urine test result + witness statement refs
(existing schema columns, now editable)
- Type-specific intake fields: migration 018 adds incidents.type_details
JSONB; whitelist validation; environmental/asset/security/fire field
groups in report form; EN/MS/ZH labels; offline queue support
- JKKP 8 annual register CSV export (/api/reports/jkkp8) + dashboard button
+ January statutory deadline banner
- Admin page: user invite (service-role client), role/site/active management,
site + zone CRUD with QR report links — replaces Phase 0 stub
- Evidence gallery thumbnails via Supabase render transform with fallback
Phase 6 (analytics):
- 12-month stacked trend chart (leading/lagging/other) + top root causes
(lib/dashboard/trends.ts pure helpers)
- AI rising-risk zones: /api/dashboard/ai/risk-flags aggregates 90-day
zone stats, claude-opus-4-8 forced tool_use, panel on HSE + management
dashboards, suggestion audit-logged
Also fixes 9 pre-existing missing /ims basePath prefixes in client fetches
and download links.
132 tests passing, tsc clean, next build clean.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com >
Claude-Session: https://claude.ai/code/session_01CPf5Rc8QPx6V8KLEEgfKEQ
2026-07-12 10:25:08 +08:00
admin
98c38c3716
fix: use setUTCDate in getNextRecheckDate to avoid local-timezone off-by-one
2026-07-11 21:49:43 +08:00
admin
871ef7c53a
fix: rename on-time rate label, hoist getApiKey above escalation loop, remove broken capa-owner incident link
2026-07-11 19:03:23 +08:00
admin and Claude Sonnet 4.6
b9def9c957
feat: CAPA effectiveness re-check cron — 30/60/90-day email + WhatsApp notifications
...
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
Claude-Session: https://claude.ai/code/session_01FFDuBhMKvoWjrWT3ZnGmmr
2026-07-11 18:55:27 +08:00
admin and Claude Sonnet 4.6
a47f3aabc9
feat: WhatsApp notifications — new incident alert and CAPA overdue escalation
...
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
Claude-Session: https://claude.ai/code/session_01FFDuBhMKvoWjrWT3ZnGmmr
2026-07-11 18:50:25 +08:00
admin
121433ddf8
Revert "feat: WhatsApp notification helper + phase 4 migration (recheck_round, WhatsApp settings)"
...
This reverts commit b6845f5bb5 .
2026-07-11 18:47:08 +08:00
admin
b6845f5bb5
feat: WhatsApp notification helper + phase 4 migration (recheck_round, WhatsApp settings)
2026-07-11 18:43:57 +08:00
admin and Claude Opus 4.8
75fa2605bf
feat: CAPA overdue escalation cron — 4 thresholds, once-per-threshold via notifications_log
...
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com >
Claude-Session: https://claude.ai/code/session_01FFDuBhMKvoWjrWT3ZnGmmr
2026-07-11 15:20:15 +08:00
admin and Claude Sonnet 4.6
33875395fb
fix: cast Supabase join types through unknown for TSC compatibility
...
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
Claude-Session: https://claude.ai/code/session_01AWxyMibCuGGtSQSqfajDQ7
2026-07-11 07:57:00 +08:00
admin and Claude Sonnet 4.6
ed14885253
fix: replace any casts with typed casts for Supabase join results
...
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
Claude-Session: https://claude.ai/code/session_01AWxyMibCuGGtSQSqfajDQ7
2026-07-11 07:52:53 +08:00
admin
2239b6e2df
feat: email notifications via Resend on new incident
2026-07-10 13:24:44 +08:00