* fix(whatsapp): app-side unmute, close silent intake paths, health visibility
- add POST /link/unmute and a Reactivate control on the Pausad state
- company resolution: transient query errors release the row for sweep
retry; genuine zero-options sends M19 instead of parking silently
- media from unlinked senders bypasses the hourly greeting throttle
(10 min burst window, daily cap kept)
- GET /link returns 7-day failed-delivery and parked-inbound counts;
sweep summary logs outboundFailed24h
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
* fix(documents): real HEIC/HEIF magic-byte validation, bilingual upload errors
- detect ISO-BMFF ftyp brands (heic/heix/heim/heis/hevc/hevx/hevm/hevs,
mif1/msf1) instead of exempting image/heic from validation; declared
heic/heif accepts either family member (iOS labels vary)
- new INBOX_UPLOAD_* structured error codes replace raw English strings
on the inbox upload and attach-document routes
- registry doc corrected to the real 10 MB cap
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
* feat(inbox): staged upload with instant ack and deferred AI extraction
- web uploads insert the inbox item as status processing and respond
immediately; Bedrock extraction and supplier match run via after()
with a CAS flip to received (email and WhatsApp channels keep the
synchronous path)
- widen invoice_inbox_items.status CHECK to include processing
(migration 20260813180000, pg-real test included)
- crash-recovery sweep cron (*/2) flips stale processing rows;
bulk-book skips extraction_in_progress items
- workspace: processing chip, in-flight rows disable actions, realtime
flip, retry-extraction button for empty extractions
- picker accept list drops HEIC/HEIF so iOS transcodes library photos
to JPEG; server allowlists unchanged (supersedes 2026-08-01 HEIC
decision, see DECISIONS.md)
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
* fix(migrations): bump inbox processing-status migration past main's latest
Main merged 20260813210000 while this PR was in flight; an inserted
version older than the latest applied aborts the prod db push at merge.
Renamed 20260813180000 to 20260813213000 and updated references.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
* docs(decisions): log preview-tracker orphan repair after migration rename
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
---------
Co-authored-by: Claude Fable 5 <noreply@anthropic.com>