Skip to content

feat: bound review by a frozen failure model and a quantifier rule - #337

Merged
randomparity merged 1 commit into
mainfrom
feat/failure-model-review-scope
Sep 9, 2026
Merged

feat: bound review by a frozen failure model and a quantifier rule#337
randomparity merged 1 commit into
mainfrom
feat/failure-model-review-scope

Conversation

@randomparity

Copy link
Copy Markdown
Owner

What this does

Adversarial review had no stated answer to "what can go wrong here that matters" on a non-security change, so the reviewer supplied the worst case and a single "all" in a spec produced an open series of instance findings. This adds the referent and two bounding rules. Recorded as ADR 0057.

  • $spellcraft requires a Failure model section in every spec on both lanes: actors and deployments, invariants at stake, accepted failure classes with reasons, and classes covered elsewhere. In the light lane it sits under Scope and counts against the caps. The threat model becomes its security extension. The self-review bounds every universal word before review, and the design-review brief challenges each entry once.
  • $gauntlet grades reachability against the model. Accepted classes are disclosed suppressions, a trigger outside the named deployments is at most one medium note, and a wrong entry is one finding against it at the severity the evidence supports. A universal claim with no closure is one finding against the quantifier, never an enumeration of its instances. suppressions entries carry adr or failure_model.
  • $trial-loop gains an optional failure_model input and a failure model: line in the transmitted block. It is not a ninth charter field. Rejection may cite a model entry in one line; a defensible finding against an entry is blocked; adding an accepted class mid-cycle is named as exclusion gaming.
  • $quest passes the reviewed spec's section to branch review, or none on a no-spec run.
  • Version bumped to 4.7.0 (skills gain a capability).

Verification

just verify locally: every gate passes except tests/fixtures/forge/eval-fixtures-test.sh, which fails identically on clean main under a UTF-8 locale and passes under LC_ALL=C. Filed as #336; not touched here. The eight suites ordered after it, actions-check, and the prek dry run were run separately and pass. The pre-push hook's full verify ran green under LC_ALL=C.

Not in this PR

  • No change to $detect-evil: its spec threat-model reconciliation is unchanged, and its suppressions remain ADR-only by its own contract.
  • Existing specs under docs/workflow/specs/ are not backfilled with a failure model; the section is required of specs written from this version on.

Every spec now carries a Failure model section on both lanes: actors and
deployments, invariants at stake, accepted failure classes with reasons,
and classes covered elsewhere. The security threat model becomes its
extension. The design review challenges each entry once; afterwards
$quest names the section to the branch reviewer on a `failure model:`
line of the review block, carried by a new optional $trial-loop input.

$gauntlet grades reachability against the model: accepted classes are
disclosed suppressions, triggers outside the named deployments are at
most a note reported once, and a wrong entry is one finding against it.
A universal claim with no closure is one finding against the quantifier,
never an enumeration of its instances. $trial-loop cites a model entry
to reject a finding in one line and treats a defensible finding against
an entry as blocked.

Records the decision as ADR 0057 and bumps the plugin to 4.7.0.
@randomparity
randomparity merged commit ee13773 into main Sep 9, 2026
5 checks passed
@randomparity
randomparity deleted the feat/failure-model-review-scope branch September 9, 2026 17:22
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant