+ "removalsCoverageNote": "Of the 8 entries in `removals`, ONE needs no waiver: `Voorstellen` is reachable because `CaseDetail`'s `case-voorstellen` widget carries `viewAllRoute: /voorstellen`, which gate-53 follows as a real navigation edge. SIX are waived in `removalsReplacedBy` above. ONE (`BesluitvormingAgenda`) is deliberately NOT waived and stays a live gate-53 finding — see the end of this note. The six waivers rest on two documented architecture changes, and each was re-verified against the ASSEMBLED manifest rather than taken from this note's earlier prose. (1) `case-type-navigation` (commit d6824aa20) replaced the standalone Bezwaar/Beroep/Subsidie nav with case-type children resolved dynamically onto the `Cases` page's `folderSidebar`. Measured: `Bezwaren`, `Beroepen` and `Subsidies` are each `type: index` over register `procest` / schema `case` whose only narrowing is `filter: { caseType: <uuid> }`, and `Cases` is the same register/schema with `folderSidebar.filterField: caseType` sourced from the `caseType` schema — so picking that folder on `Cases` produces the same rows the retired page produced, the same filter field over the same data rather than an approximation. `BezwaarBeroepOverview` is a card grid whose own `_note` already records that objections/appeals are case types under Cases. `CaseMap` is superseded by `Cases`' `viewModes: [table, cards, map]` plus `mapConfig`; the retired page's full-screen split layout is a presentation difference and its case-type filter sidebar is the `folderSidebar`. (2) `consume-decidesk-besluitvorming-leaf` (commit d2df51b8b) moved decision-making to decidesk, surfaced in procest as the `besluitvorming` sidebar tab (`BesluitvormingLeafTab`) and the `case-decidesk-decisions` widget on `CaseDetail`. `Advice` was an index over schema `adviesAanvraag`; per-case advice now reaches the user through that leaf, so `CaseDetail` is its replacement inside procest, while the CROSS-CASE advice queue is decidesk's by design because procest no longer owns that model. NOT WAIVED, ON PURPOSE: `BesluitvormingAgenda` (route `AgendaCompiler`). Its page is a bespoke meeting-agenda compiler — it assembles a meeting agenda from selected proposals with drag-ordering and section grouping — which is a cross-case, meeting-level surface. `CaseDetail` does not carry it: a string walk of the assembled manifest finds `agenda` / `vergadering` / `meeting` on exactly two pages, `AgendaCompiler` and `VergaderingDetail`, both themselves off the menu, and on no widget or sidebar tab of `CaseDetail`. Naming `CaseDetail` here would make `removalsReplacedBy` assert something untrue, and the gate cannot catch that — it verifies the named page exists and is reachable, never that it does the job. The agenda compiler moved to decidesk, which `removalsReplacedBy` cannot name because it only resolves ids within this app's own manifest. So this one stays RED: one true finding, rather than a green gate carrying a false claim. Closing it needs a product decision — either surface decidesk's agenda in procest, or retire the route."
0 commit comments