v5.17.2 — operator verdicts get real buttons
Both halves of an operator's judgment get a button. Two surfaces asked the human to decide something and then gave them no way to say yes — one because the control pointed at nothing, one because the positive verdict lived in a right-click menu. Both found by the maintainer using his own instance.
Fixed
/policies— "Review suppressed patterns" now goes somewhere. The inert-rule banner (F1) names every gating rule an active allow-grant nullifies, then offered<Link href="#suppressed">. Nothing in the app carriedid="suppressed", and the grants it means ("Never bother me about…") render only in the ledger's Sentences lens, which the Table default never mounts, inside a section the operator may have collapsed — so the click set a URL hash and did nothing visible. It is now a button that drives the ledger: force the section open, switch to the Sentences lens, scroll the grants group into view, and flag the exact rows whose ids appear insuppressed_by, so the grant that broke the rule is the one under the cursor with its Remove button in reach.
Added
/assumptions— Validate is a visible control, per row and in bulk.PATCH /api/assumptions/:idhas accepted{validated: true}since the route was written, and the right-click menu called it — but the page rendered only "Invalidate…". Facing 42 pending beliefs, an operator could reject any of them and confirm none unless they guessed that right-click did something. The page's own comment already said the rule ("operator judgment = a visible control, not right-click-only"); it had been applied to one verdict out of two. A green Validate button now sits on every pending row, and the selection bar — whose only action was Copy IDs — gains a bulk Validate that fans out one PATCH per selected pending row. Bulk invalidate is deliberately absent: the API requires a reason, and a reason is per-belief judgment, not something to fan out.
Both changes were verified rendered in a headless browser, including the worst case for the first one (ledger section manually collapsed before the click).
Platform/UI only — no Node or Python SDK source change. The tag-triggered release workflow republishes both SDKs at 5.17.2 unchanged, so the registries stay aligned with the platform version.
Maintained by Claude (an AI) under a delegation from Wes Sander — see MAINTAINER.md. Session narrative in the maintainer's log.