mirror of
https://github.com/jhd3197/ServerKit.git
synced 2026-11-12 15:03:55 +09:00
Generated files the connect work moved and nobody re-ran: - docs/API_SURFACE.md gains GET /connect/status - docs/MIGRATION_INVENTORY.md: the hand-shaped error bodies count is 1145 (ceiling 1150) for the 409 the backups PUT now answers when Cloud owns the destination - en.json gains app.backups.storageManagedByCloud, so the sentence the read-only backup form shows is translatable like every other string Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_018q56AfqpgKjio4n9KYubvZ
2.6 KiB
2.6 KiB
Remaining-migration inventory
Plan 76 closure artifact (milestone H). Each row is a cross-cutting
concern whose door exists and is guarded by an executable ratchet; the
"remaining" column is the measured legacy population that has not yet
walked through it. A row at 0 is a completed migration held as an
invariant. Rows marked REGISTERED EXCEPTION are deliberate policy, not
debt. Regenerate with python scripts/generate-migration-inventory.py.
| Concern | Door | Remaining | Ceiling | Policy |
|---|---|---|---|---|
| Identity lookups outside rbac.get_current_user() | rbac.get_current_user() | 69 | 69 | JWT-only routes; the API-key-capable population is held at 0 by a companion assertion |
| Routes on bare @jwt_required() | auth_required() / role decorators | 608 | 608 | REGISTERED EXCEPTION: JWT-only is the deliberate default; conversion grants API-key access and happens per route, on decision |
| HTTP statuses chosen by sniffing error text | typed errors from app.exceptions | 0 | 0 | INVARIANT at 0 - migration completed 2026-08-19 |
| API crashes swallowed without recording | app.error_reporting | 0 | 0 | INVARIANT at 0 |
| Hand-shaped {'error': ...} bodies in app/api | typed errors + the global handler | 1145 | 1150 | migrate when touched; new endpoints raise |
| Raw subprocess calls outside the runners | app/utils/system.py runners | 24 | 24 | migrate when touched |
| Controller-boundary violations (routes doing service work) | service layer extraction | 511 | 511 | migrate when touched (first-wave ratchet) |
| raw api.* calls in pages/ | E1: useServerQuery/useServerMutation | 405 | 405 | migrate when touched |
| per-page toast.error extractions in pages/ | E1: query-layer error presentation | 218 | 218 | migrate when touched |
| hand-rolled form-group blocks | F2: FormField/useForm | 326 | 343 | migrate when touched |
| unencoded ?k=${v} query interpolations in services/api | C4: buildQuery/encoding template | 87 | 97 | migrate when touched |
| raw setInterval pollers | E2: usePolling/refetchInterval | 9 | 9 | DELIBERATE RESIDUE: clock ticks, socket-fallback hooks, and sibling-repo extension timers - each listed per file |
| direct navigator.clipboard call sites | F3: copyToClipboard | 0 | 0 | INVARIANT at 0 |
| hex colour literals outside token files | G: var(--token) | 150 | 150 | migrate when touched |
| SCSS class names defined in multiple files | single-owner partials | 114 | 114 | needs eyes on pages (no byte-identical proof available) |