Two backlog trees are complete: `docs/project/backlog/` (75 files, every WP done) and `docs/project/refactor-backlog-setup/` (the arc before it). Move both under `docs/project/archive/` with `git mv`, so history stays intact through `git log --follow`. `SHOWCASE-ROADMAP.md` moves with them, because it points at the now-archived backlog README. Add `docs/project/archive/README.md`. It states that these trees are historical and names the two directories that are still live. Repoint every inbound reference named in RD-30's Files table: CLAUDE.md, the root README, both backend READMEs, `LetterHtml.cs`, `a11y.mdx`, the `document-feature` and `new-ssp` skills, and the readable-codebase PLAN, README, and RD-19 ticket. Fix two upward-relative links inside the moved WP files (WP-68, WP-69) that gained a directory level and would otherwise break. Repoint `.prettierignore`'s two agent-prompt exclusions to their new path, so prettier keeps leaving those files' exact wording alone. Mark RD-30 done and check off its acceptance criteria; flip its README row to done. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
4.9 KiB
ADR-C-001 — rewrite ADR-0001's worked example against the shipped system
Status: implemented · 2026-08-27 · Source finding: 06-adr-conformance.md §ADR-C-001
What was wrong
ADR-0001's §"Worked example in this POC" opened with "This POC has no real backend (static mock JSON + fake submit timers), so the 'BFF output' is a static file". That premise is false and every path the section cited was gone. The decision itself was intact; only the description had drifted.
What changed
| File | Change |
|---|---|
docs/reference/architecture/0001-...md §Worked example |
rewritten against backend/src/BigRegister.Api; all six paths repointed |
| same file, §Out of scope here | 4 bullets → 2, plus a paragraph recording which two were discharged and why |
No code changed. No CLAUDE.md edit was required for this finding.
Paths corrected, each verified
| Claimed | Actual |
|---|---|
| "no real backend … static file" | backend/src/BigRegister.Api, var api = app.MapGroup("/api/v1") at Program.cs:168 |
public/mock/dashboard-view.json |
GET /api/v1/dashboard-view (Program.cs:172) |
public/mock/intake-policy.json |
GET /api/v1/intake/policy (Program.cs:193) |
src/app/registratie/contracts/dashboard-view.dto.ts |
apps/ssp/src/app/registratie/contracts/dashboard-view.dto.ts |
src/app/registratie/infrastructure/dashboard-view.adapter.ts |
apps/ssp/.../infrastructure/dashboard-view.adapter.ts, parseDashboardView at :50 |
src/app/herregistratie/contracts/intake-policy.dto.ts |
deleted — the DTO is now the generated IntakePolicyDto; the adapter is apps/ssp/src/app/herregistratie/infrastructure/intake-policy.adapter.ts |
apps/ssp/public/mock/ does not exist (ls: no such directory).
The finding was wrong about one out-of-scope bullet
ADR-C-001 said to "reduce §Out of scope to the two items still genuinely open (the
BigProfileStore optimistic-update race, and session persistence / multi-tab sync)",
carrying the original bullet's parenthetical "SessionStore is in-memory". That
parenthetical is no longer true, so the bullet could not be kept verbatim.
apps/ssp/src/app/auth/application/session.store.ts:13readsparseStoredPrincipal(localStorage.getItem(STORAGE_KEY)), and:41writes it back. Session persistence has landed (RB-10 extracted the parser, RB-13 renamed itparseStoredPrincipal). The file even carries aponytail:note explaining the choice oflocalStorageoversessionStorage.- Multi-tab sync has not landed:
grepfor astorageevent listener acrossappsandlibsreturns nothing.
The bullet was therefore narrowed to multi-tab sync only, and states that the session itself now persists. Recording this because the finding, taken literally, would have re-asserted a false claim in the same edit that removed two others.
The other two survivors were verified rather than assumed: BigProfileStore still holds
pending as a bare signal(false) with begin/confirm/rollback mutating it
(big-profile.store.ts:61-74), so the concurrent-submit race is real.
Discharged bullets, both verified
- "Runtime DTO validation on every endpoint (only the dashboard view has it)" — 33
distinct
export function parse*boundary functions exist acrossappsandlibs. - "Real OpenAPI/TypeSpec codegen toolchain" —
npm run gen:api(package.json:12) runsdotnet swagger tofilethennswag run, emittinglibs/shared/src/infrastructure/api-client.ts(2329 lines). CI'sapi-client-driftjob regenerates and runsgit diff --exit-code(.github/workflows/ci.yml:319-321).
Scope discipline
Descriptive drift only, as the finding states. The decision, the options table, the two policy shapes and the migration sequence are untouched.