docs(decisions): 0253 — the eval record is an eval-namespaced PR comment (#4769) - #5271
Conversation
No preview deploy
|
|
review-doc: advisory — blocking-set PR (§CP — approval-gated) This verdict does not authorize a merge. The PR is in the control-plane set by CONTENT, not by path (ADR 0164): Reviewed-head: @ 5eb9a44 Doc class: Acceptance criteria (#4769)#4769 carries no
Doc hygiene
ADR contradiction sweep (Step 4a)
Non-blocking observations (no action required to merge)
ADR numbering
review-doc · §CP advisory (content axis, ADR 0164) · head Verdict-written: 2026-08-10T04:28:44Z |
|
review-code: advisory — blocking-set PR (§CP — approval-gated) This verdict does not authorize a merge. The PR is control-plane by CONTENT, not by path (ADR 0164): Reviewed-head: @ 5eb9a44 Why this namespace exists on an ADR PR. Code class under review: Acceptance criteria (#4769)#4769 carries no
Code hygiene
Non-blocking observations (no action required to merge)
review-code · §CP advisory (content axis, ADR 0164) · head Verdict-written: 2026-08-10T04:29:24Z |
Three in-flight lanes each derived 0253 off the same origin/main max (0252). Ordered by PR creation time, #5271 (04:18:29Z) keeps 0253, #5273 (04:18:57Z) takes 0254, and this PR (04:25:21Z) takes 0255. Renames the file, updates the frontmatter `id` and the H1 self-reference, and repoints the two fabrika contract links. No decision content changes. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Three in-flight lanes each derived 0253 off the same origin/main max (0252). Ordered by PR creation time, #5271 (04:18:29Z) keeps 0253, #5273 (04:18:57Z) takes 0254, and this PR (04:25:21Z) takes 0255. Renames the file, updates the frontmatter `id` and the H1 self-reference, and repoints the two fabrika contract links. No decision content changes. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
…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.
The fabrika grading chain requires a review run to leave behind an eval result bound to the commit it graded, and then never says where that result lives, what its marker is called, or what "a grader returned no verdict" means. Three downstream children — the gate that reads it, the scorecard that aggregates it, and the axis that writes it — would each have invented an answer. ADR 0253 pins all three: the record is a PR comment under its own
evalnamespace, and a run that returns no verdict is a countedNoVerdictover four named reasons that never passes and never leaves the denominator.Fixes #4769
What changed
.decisions/0253-eval-record-is-an-eval-namespaced-pr-comment.md— the record.packages/fabrika-cli/src/eval/README.md— the#4769open-call bullet now points at the ADR, and a short section states the pins for a builder, mirroring how ADR 0252's section reads.Deviations
type:decisionrouting records the decision in.decisions/, and Propagate ADR 0252 onto the grading-chain issue bodies (#4678, #4680, #4681) #5258 already exists to propagate ADR 0252 onto the same three chain issues (graded axis: the reused grader-agent judgment path at 5 runs and a median #4678, committed scorecards, the trend co-gate, and the model-churn re-run contract #4680, the ruled bar as the merge gate: 100% floor, 90% graded co-gated on trend, cost at or below baseline #4681) — a second propagation lane would split that work. Disposition: named in the ADR's Consequences; Propagate ADR 0252 onto the grading-chain issue bodies (#4678, #4680, #4681) #5258 is the home.missing,staleandbelow-barstay three distinguishable states. Did: added a fourth,unrecordable, for a graded set that produced no measurement at all. Why: the alternatives are a0.0pass rate (a measurement never taken, which ADR 0092 forbids) ormissing(false — the record is right there). Disposition: for the reviewer to judge; the reasoning is §2 of the ADR.PASS | FAILwithRECORDED | UNRECORDABLE. Why: a polarity has to mean "pass against what", and the only candidate is the 90% bar that graded axis: the reused grader-agent judgment path at 5 runs and a median #4678 puts out of its own scope and the ruled bar as the merge gate: 100% floor, 90% graded co-gated on trend, cost at or below baseline #4681 owns. Disposition: no action needed — the binding, which is what the criterion protects, is unchanged..decisions/. Said: the/adrskill calls an ADR PR purely additive. Did: also editedpackages/fabrika-cli/src/eval/README.md. Why: that README carries an explicit open-call bullet naming #4678's eval-result record has no defined shape, namespace, or storage location #4769, which this record closes; leaving it would point a builder at an unsettled question. Disposition: no action needed — same shape as ADR 0252's PR.