Skip to content

v5.37.0 — catastrophe floor: the line the calibrated controller cannot move

Choose a tag to compare

@ucsandman ucsandman released this 14 Sep 22:43
· 26 commits to main since this release

Versions the arc that shipped to main on 2026-09-08/09 (#233–#238) and has been serving in production at 5.36.0 ever since.

Why this release exists

On 2026-09-08 an adherence probe found that a synthetic "drop the production database cluster" scored 95 and was allowed — no policy matched it — while the calibrated threshold θ had ratcheted to 101.8, above the score ceiling, so the raise arm could never fire again. A threshold that learns from an approving operator will eventually learn to approve everything.

Added

  • catastrophe_floor — the 19th policy type. Fires on a destructive action type at or above min_risk (default 85) when the act is irreversible, independently of θ, and is ungrantable: an allow grant cannot clear it.
  • Action cancellation — POST /api/actions/:actionId/cancel. Atomic on running/pending unclaimed actions, 409 once claimed or terminal, and the outcome stays pending: a cancelled action gets no fabricated result.
  • miss_review — POST /api/calibration/misses. An operator labels one specific allowed action dangerous or benign; dangerous tightens θ and owns its agent, benign moves θ by nothing. The tightening counterpart warn_review (loosening-only by invariant) never had.
  • Warn cooldown on rate_limit policies — one warn per window per policy per agent. The runaway line had fired 34,760 warns in 30 days.
  • Muse governance integration — skill, /guides/muse, llms.txt, docs. Cooperative, not mechanical, and the guide says so: Muse has no pre-tool-call hook, so the agent consults the guard and honors the verdict.
  • Catastrophe-floor regression probe — a scheduled live check that the floor still holds all five irreversible classes. It has held them every day since 09-09.
  • self_test guard field — attribution-only, never gates a decision, excluded from approval-flood counting so a daily drill cannot raise a daily false alarm.

Fixed

  • /api/calibration/proposals 500'd deterministically: one malformed context row aborted the whole query through an in-SQL ::json cast. Now gated with pg_input_is_valid.
  • The catastrophe floor's form fields were never rendered — the type was in the dropdown, the validation and the compile logic, with no form, so authoring one always failed with "Validation failed" and no cause. Fixed, plus a test asserting every policy type in the options list has a rendered builder section.
  • Agent-scope picker rebuilt: searchable, namespace-grouped, collapsible, with per-group counts and bulk select.
  • npm run version:set now stamps the platform guide's sdk-node / sdk-python area versions. Every prior bump left guide:drift:check red on those two fields.

Release notes

Platform only. No Node/Python SDK source changed, so the SDKs are intentionally not republished and npm/PyPI stay at their last SDK release. Plugin bundle unchanged at 3.3.0.

Full log entries: docs/maintainer-log.md