docs(decisions): 0257 — a platform incident is eval material only through an artifact, at the deterministic tier (#4824) - #5282
Conversation
…ough an artifact, at the deterministic tier (#4824) Records the two rulings on #4824 — the founder ruling (2026-08-03: the failure is the setup, the response is the case) and the founder-delegated ruling (2026-08-09: option 2, deterministic tier only) — and the composition between them, plus the one seam where they do not overlap. Also appends the consumer-facing rule to the incident corpus README, where a case author reads. Fixes #4824
No preview deploy
|
|
review-doc: FAIL @ 41d317b — changes-requested Reviewed-head: @ 41d317b Class fan ( §CP: BLOCKING — by CONTENT, not by path (ADR 0164). Deciding axis:
So this PR is §CP by the ADR-0164 content clause alone — the same axis that caught siblings #5271 and #5273. This verdict is advisory on the merge question: it does not authorize a merge, and a clean one would not either. Under the §CP hard gate (ADR 0135) a ADR number 0257 is free at this head. The ruling seam — the handling is CORRECT, and no change is requiredI read both rulings first-party in #4824's comments before reading the ADR.
The gap is real and the ADR states it accurately: where a response is genuine judgment but left no run-produced trace, ruling 1 admits it and ruling 2 excludes it. The ADR also correctly identifies the second edge — ruling 2's tier confinement is what a founder veto would move, not ruling 1's "write the case about the response". Verdict on the handling: following the later, narrower delegated ruling while disclosing the gap is the right call here, and it does not need a founder pre-confirmation before an ADR records it. Four reasons, in order of weight:
On the distinction you asked about — this is the opposite of the #5273 failure mode. #5273 FAILED for silently contradicting a live ruling: the contradiction had to be found by the gate. Here the author found the tension himself, named it in a dedicated section of the permanent artifact, said which ruling he followed and why, and recorded that the founder's veto is still open. Disclosure turns a contradiction into a composition with a named open question, which is the handling this repo wants. I would not have this PR do anything differently on the ruling question. Where I would draw the line (for the record, not as a finding here): a delegated ruling that reverses an earlier direct founder ruling — rather than narrowing it on a question the earlier ruling left unsettled — should carry the founder's confirmation before an ADR records it as Status sanity, given the open veto: Acceptance criteria (#4824)
Doc hygiene
ADR contradiction sweep (Step 4a — citation-independent)
The enforcement claim, verified against source at head (not the PR body)
So §3's teeth-without-a-new-gate argument holds as written, and the PR body's claim is not taken on trust. The one finding
CI at this head: 42 success, 4 skipped, 0 failing. Read the PR head (§HEAD): every file under review was sourced from review-doc does not merge. This PR is §CP by content (ADR 0164), so even a clean verdict here would be advisory — a Verdict-written: 2026-08-10T04:56:25Z |
|
review-code: FAIL @ 41d317b — changes-requested Reviewed-head: @ 41d317b Why this namespace exists on an ADR PR. §CP: BLOCKING — by CONTENT, not by path (ADR 0164). Path axis ( Code-class checks
Read the PR head (§HEAD): all files sourced from review-code does not merge. §CP-by-content routes this PR to a Verdict-written: 2026-08-10T04:57:19Z |
|
review-doc: advisory — blocking-set PR (§CP — approval-gated) Reviewed-head: @ 41d317b Re-gate of the FAIL at this same head. This is a new comment, not an edit of the prior verdict (5236042290), which stands intact as the record of what was found and repaired (#5244 — a same-head re-gate must append, never overwrite). A fresh run-id at the bottom forces the append branch. The head did not move. Head is Class fan re-run at head — §CP: BLOCKING — by CONTENT, unchanged (ADR 0164). Re-run at this head, both axes:
So this verdict is advisory and authorizes nothing on its first line (§ADVISORY / ADR 0111/0151): the first-line The one finding is cleared
Acceptance criteria (#4824) — re-verified at head, all four hold
Doc hygiene — all eight hold at head
ADR contradiction sweep — carried forward, spot-re-checked
The enforcement claim, re-verified against source at headNot taken from the PR body — re-read from the head commit:
The ruling seam — settled, not re-litigatedThe prior gate ruled the two-rulings handling correct: following the later, narrower delegated ruling while disclosing the seam and naming the reversal condition, with the founder's veto recorded as open. I read the ADR and the PR body against that finding and agree — the ADR composes the two rulings in one direction (ruling 1 says which half of an incident the case is about; ruling 2 says what admits that half and where it runs) rather than overriding either, and §2 reproduces the founder ruling's operative half intact. It is the opposite of the #5273 failure mode: the tension was found by the author, not by the gate. Nothing here is reopened. CI at this head: 42 success, 4 skipped, 0 failing. Read the PR head (§HEAD): every file under review was sourced from review-doc does not merge. §CP-by-content routes this PR to a Verdict-written: re-gate at unchanged head 41d317b |
|
review-code: advisory — blocking-set PR (§CP — approval-gated) Reviewed-head: @ 41d317b Re-gate of the FAIL at this same head. A new comment, not an edit of the prior verdict (5236048379), which stands intact as the record (#5244 — a same-head re-gate appends, never overwrites). Fresh run-id at the bottom forces the append branch. The head did not move. Why this namespace exists on an ADR PR. §CP: BLOCKING — by CONTENT, unchanged (ADR 0164). Path axis ( The one finding is cleared
Code-class checks — re-verified at head
CI at this head: 42 success, 4 skipped, 0 failing. Read the PR head (§HEAD): all files sourced from review-code does not merge. §CP-by-content routes this PR to a Verdict-written: re-gate at unchanged head 41d317b |
…me, never by backfill (#5041) Repair round 1, addressing review-doc's FAIL on PR #5273. F1 — the ADR recorded the opposite of what was ruled. The founder ruled directly at 2026-08-10 ~07:43Z on #5041: LAZY cutover, no bulk backfill. That confirms the founder-delegated ruling of 2026-08-10T00:15:28Z on the same issue, which the first draft contradicted and cited nowhere. The decision is re-recorded as lazy: absence of a `ready-for:` label stays an exclusion, the label is applied at triage time going forward, and the already-triaged rows are not backfilled. The ruling history is now in `## Context` as its own table, and backfill-first is written up as a rejected option with the false-signal reason. Rewritten rather than amended: this is an unmerged draft, and the landed record must read as one coherent decision. F2 — renumbered 0253 -> 0254. PR #5271 opened 28 seconds earlier and owns 0253. Re-enumerated at repair time: main carries 0250-0252, 0255, 0270 (no 0253/0254); open PRs claim 0253 (#5271 and this one), 0256 (#5281), 0257 (#5282), 0258 (#5285), 0237 (#4703), 0235 (#4614). 0254 is free. The slug changed with the decision.
Fixes #4824
Records the answer to #4634's calibration flag 6 — the question #4642 left silent — as ADR 0257, and appends the consumer-facing rule to the incident corpus README where a case author actually reads.
Both rulings on the issue were read first-party, and both are followed
#4824 carries two rulings in its comments, and this PR is downstream of both rather than a fresh decision:
The rule, as a case author applies it
What this PR adds beyond restating the rulings
The mechanism that makes the rule self-enforcing, grounded in the source at head. A case's tier is derived, not declared:
deriveTierinpackages/fabrika-cli/src/eval/skill-eval-set.tsreturnsdeterministiconly when a case has assertions and every one classifies as mechanical, andgradedotherwise. So if a platform-originated incident cannot be worded with mechanical expectations, the derivedgradedis the signal it is out of scope — not a licence to file it graded. The corpus data test already checks derived tier against declared tier, so a case drifting across that line cannot land quietly.The corpus at this commit already sits where the rule puts it: 16 of 17 provenance entries are
deterministic, and the onegradedcase (id 9) is a skill-judgment case about a retired rule, not a platform one. Verified by readingincident-corpus/provenance.jsonat head, not assumed from the issue body.Deviations
One seam, named rather than papered over. The two rulings do not fully overlap at the edge of the response class: the founder ruling admits an agent's response as in scope, and two of its worked examples read as judgment; the later delegated ruling admits a case only on an artifact-observable test and confines it to the deterministic tier. Where a response is real judgment but left no run-produced trace, the first admits it and the second does not.
The ADR's
## Deviationssection states this explicitly, follows the later, narrower delegated ruling (it is the one that answers this issue's acceptance criteria and the one that keeps the ruled bar's variance argument intact), and records that the founder's veto on the 2026-08-09 delegated ruling remains open. Nothing is silently resolved.Acceptance criteria
packages/fabrika-cli/src/eval/incident-corpus/README.md's "What makes an incident a case", as a fourth test beside the existing three.Notes for the gate
decisions-index validatepasses (no duplicate or mismatched id)..decisions/, so it may classify control-plane by content (ADR 0164) regardless of the CODEOWNERS path axis. Not assuming auto-ship.