RAID Report — 2026-04-25
Date: 25-04-2026 Subject: RAID Report
Source: docs/architecture/RISKS_GAPS_ASSUMPTIONS.md (last updated 2026-04-23/24 per Change Summary)
| Issue Number | Issue Type | Status | Days Open |
|---|---|---|---|
1. Monolithic UI/control plane (src/App.jsx) | Risk | Open | Unknown (predates 2026-04-23) |
2. Oversized hooks acting as service layers (useNoteForm, useSettings) | Risk | Open | Unknown (predates 2026-04-23) |
| 3. Schema probe only runs once after first failure [SUR-61] | Risk | Open | Unknown (predates 2026-04-23) |
| 4. Manual Supabase migration application (out-of-band) [SUR-60] | Dependency | Open | Unknown (predates 2026-04-23) |
5. Managed proxy env fragility — SUPABASE_SERVICE_ROLE_KEY / ANTHROPIC_API_KEY misconfig surfaces as generic 500s | Dependency | Open | Unknown (predates 2026-04-23) |
| 6. Direct Anthropic exposure via BYOK leaks plaintext + key from compromised browsers [SUR-63] | Risk | Open | Unknown (predates 2026-04-23) |
7. No storage cleanup — note-images bucket retains orphans after note delete | Gap | Open | Unknown (predates 2026-04-23) |
8. Full-table sync only — fetchSince helper unused [SUR-62] | Gap | Open | Unknown (predates 2026-04-23) |
| 9. Outbox single queue blocks all entity types on one stuck payload | Risk | Open | Unknown (predates 2026-04-23) |
10. No OCR regression coverage for callTranscribeImage | Gap | Open | Unknown (predates 2026-04-23) |
| 11. Accessibility gaps — long-press only, no keyboard / context-menu alternative | Gap | Open | Unknown (predates 2026-04-23) |
12. Usage opacity — ai_usage_daily data not surfaced; users only see “Monthly limit reached” toast | Gap | Open | Unknown (predates 2026-04-23) |
13. Broken in-app help links — /#faq and /#what-is-surfc resolve to nothing post-SUR-218 [SUR-209] | Risk | Open | 2 |
| 14. How-It-Works placeholders — removed by SUR-215 | Risk | Closed | n/a |
| 15. Dexie and Supabase schemas stay in lockstep via manual updates | Assumption | Open | Unknown (predates 2026-04-23) |
| 16. 30 calls/month managed quota is sufficient for free tier; per-tier pricing deferred [SUR-67] | Assumption | Open | Unknown (predates 2026-04-23) |
| 17. VitePWA service-worker defaults sufficient — no explicit update prompts / cache busting | Assumption | Open | Unknown (predates 2026-04-23) |
| 18. Cascading book + note tombstones acceptable despite orphan image risk | Assumption | Open | Unknown (predates 2026-04-23) |
19. Future ingest adapters (Readwise / Kindle) reuse existing ingest interface without backend changes | Assumption | Open | Unknown (predates 2026-04-23) |
20. CaptureFabMenu speed-dial provides sufficient navigation on capture/note screens [SUR-238] | Assumption | Open | 2 |
| 21. How are Supabase credentials managed in Netlify (env vars, secrets manager, etc.)? | Dependency | Open | Unknown (predates 2026-04-23) |
22. Monitoring/alerting for sync failures and Edge Function errors (only syncStatus shown client-side) | Gap | Open | Unknown (predates 2026-04-23) |
| 23. Should exports include Supabase storage paths / binary blobs for portable backup? | Gap | Open | Unknown (predates 2026-04-23) |
| 24. SLA for clearing orphaned images / fully deleting user data upon account removal | Gap | Open | Unknown (predates 2026-04-23) |
| 25. Multi-device conflict UI beyond last-write-wins not surfaced | Gap | Open | Unknown (predates 2026-04-23) |
26. Background sync (service worker sync events) for queued writes when app is closed | Gap | Open | Unknown (predates 2026-04-23) |
Summary
- 26 items total: 7 Risks, 9 Gaps, 3 Dependencies, 6 Assumptions, 1 Closed (How-It-Works placeholders, resolved by SUR-215 on 2026-04-23).
- 25 Open / 1 Closed.
- Only 2 items have a known “days open” value (SUR-209 and SUR-238, both added 2026-04-23). The remainder predate the 2026-04-23 update; the source document does not record an opened date per item, so precise age cannot be derived without git history of
RISKS_GAPS_ASSUMPTIONS.md.
Notes / autonomous decisions
- Classification choices: items framed as “missing capability or coverage” → Gap; items framed as “external requirement that could break things” (env vars, manual migrations, third-party config) → Dependency; items framed as a future event/condition that could damage the product → Risk; items in the “Key assumptions to validate” section → Assumption.
- “Days open” is reported as
Unknown (predates 2026-04-23)for items whose entry date is not recorded in the source. A future cleanup pass onRISKS_GAPS_ASSUMPTIONS.mdto add aLoggeddate per item would let this column be precise.