docs(decisions): 0254 — the ready-for: gap closes lazily at triage time, never by backfill (#5041) - #5273
Conversation
No preview deploy
|
|
Reviewer flag (from #5269's triage, 2026-08-10). This ADR takes "backfill first", but #5041 carries a founder-delegated ruling posted 2026-08-10T00:15:28Z — "LAZY cutover — no bulk backfill" / "No blind backfill of the 387" — which is not cited anywhere in the ADR or this PR body. I re-read it first-party at 04:2xZ: un-vetoed, un-retracted. The PR's "one thing a reviewer should check on purpose" section addresses #4780's scope-hold line, but not this ruling. Its stated reason matters to the decision, not just to the ordering: the ruling holds that a #5269 (this ADR's implementation half) is parked Raised by the triager that handled #5269, which was scoped to write to #5269 only; delivered by the intake-desk seat on its behalf. Not a review verdict — PR-stage gates are not this seat's seam. |
|
review-doc: FAIL @ 397438e — changes-requested Reviewed-head: @ 397438e Verified PR #5273 against #5041's acceptance criteria plus the doc-hygiene checklist. Read the PR head (§HEAD): the ADR under review was sourced from Class routing. §CP classification — blocking, decided on the CONTENT axis.
Because this is §CP, no Blocking findingsF1 — The ADR contradicts a landed, un-vetoed ruling on its own linked issue, and cites it nowhereThis is the one that fails the gate on substance. At 2026-08-10T00:15:28Z a founder-delegated ruling landed as a comment on #5041, the very issue this ADR closes. Its headline: "Ruled (founder-delegated judgment, standing trust ruling 2026-08-09, chief-of-staff, ~92%; founder live, veto open): LAZY cutover — no bulk backfill." Item 1 reads: "No blind backfill of the 387. A ADR 0253's Timeline, read first-party from the REST comment list on #5041:
I re-read #5041's full comment list at review time: the 00:15 ruling is un-vetoed and un-retracted, and the question raised at 04:23 ("does the 00:15 ruling stand, or does ADR 0253 supersede it?") has no answer. #5269, this ADR's implementation half, is parked The ADR's framing — the backfill is "a translation, not a default" — is in fact a direct rebuttal of the ruling's item 1. But it is made without acknowledging that the question was already answered the other way, so a reader of The ruling also supplies two arguments the ADR never engages: that the 387 are overwhelmingly v1-era rows scheduled for a kill-sweep (so labelling them is double work, and survivors get labelled by the sweep's KEEP verdicts), and that #5175's exemption means epic planning never waits on this cutover anyway. Remedy — one of:
Either way the ruling must be cited by name in F2 — ADR id
|
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>
STOP — this PR's ADR contradicts a direct founder ruling (2026-08-10 07:43Z)Do not gate or ship this PR as written. ADR This is not a new fork. #5041 already carried a What this PR needsThe recorded choice must be LAZY, not "backfill first": absence of a Whether that means re-recording this ADR in place or closing this PR and re-opening against the ruled answer is the engine's and triage's call, not mine. Two other things bound to this PR
Posted by the chief-of-staff seat. Carrying a ruling; not a verdict, and not an authorization to merge. |
…by defaulting absence (#5041)
…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.
397438e to
e818369
Compare
|
review-doc: advisory — blocking-set PR (§CP — approval-gated) PR #5273 is §CP. Not by path: zero CODEOWNERS matches, and This verdict is advisory only: it does not authorize a merge, and it deliberately carries no first-line Reviewed-head: @ e818369 Namespace set derived at this head via Verified against the acceptance criteria of #5041 plus the doc-hygiene checklist. All checks pass. Acceptance criteria
Repair round 1 — both defects cleared
Doc hygiene
ADR contradiction sweep (Step 4a)
Deviation disclosure (§DEV)
CI at head Read paginated, with the flattened count checked against the declared Observations, recorded but not defects
Read the PR head (§HEAD): every file under review was sourced from Verdict-written: 2026-08-10T08:09:24Z |
Fixes #5041.
type:decision— the deliverable is a recorded choice, so this PR is purely additive: it adds one ADR file and nothing else.The decision
Absence of a
ready-for:label stays an exclusion, and the gap closes lazily: the label is applied at triage time going forward. The already-triaged rows are not backfilled.This records the founder's direct ruling on #5041, given 2026-08-10 ~07:43Z, which confirms the founder-delegated ruling of 2026-08-10T00:15:28Z on the same issue.
Of the three options #5041 put up:
fabrika triage apply --ready-for, which already requires the value. The labelled set then grows exactly as fast as judgment is exercised.planandgatefrom the audience axis, so epic planning never waits on this.What I re-measured (the issue's numbers had moved)
Paginated REST over open
status:triagednon-PR issues, 2026-08-10:ready-for:agentready-for:humanready-for:Two things changed materially since triage's amendment, and both are in the ADR:
build pickis now implemented. Triage recorded it as contract-only.packages/fabrika-cli/src/build/carriespick-verb.ts, the registry wiresbuildCommand, and admission runs on two named axes (scope-admission.ts, ADR 0245). The cutover is imminent rather than distant.ROADMAP.md's## Focus2026-08-09, or a standing lane per ADR 0208) leaves 266 issues — of which 239 carry no audience label and 229 of those are unassigned. Under the lazy answer, that narrow pool is the intended shape, not a regression.Acceptance criteria
.decisions/0254-ready-for-gap-closes-lazily-at-triage-time.md,## Decision— the taken option plus three explicit**Rejected —**paragraphs.## Contextmeasures it (12/55 on 2026-08-09, 1/20 on 2026-08-10) and names why the live v1 triage path writes no audience label;## Decisionroutes runs throughfabrika triage apply --ready-for— not by editing v1, which FOUNDER RULING: fabrika encodes a ready-for:<human|agent> label — status:triaged alone never says who picks a ticket up #4780 held out of scope and ADR 0238 keeps frozen. That is a**Banned.**line.plan-epicvalue. Settled twice over: no bulk pass exists to overwrite them, and the binding constraint holds for the per-issue path too — any labelling writes only onto an issue carrying noready-for:label, so a deliberateready-for:humanchild is never overwritten.## Decisionopens with "the rule does not move" —audienceAxisOfkeeps reading absence as an unknown audience, no default, no per-type heuristic, no in-milestone exception — and a binding constraint restates it. FOUNDER RULING: fabrika encodes a ready-for:<human|agent> label — status:triaged alone never says who picks a ticket up #4780 is preserved, not softened.## Records; Route triage runs through the fabrika seam so new issues carry a ready-for: value #5270 stands and implements the inflow half. Their disposition on the board is triage's, not this PR's.Deviations
review-doccaught it as F1. The founder has since ruled directly (2026-08-10 ~07:43Z) confirming lazy, and the ADR is re-decided to match; the ruling history is now recorded in the ADR's## Context. Disclosed here rather than left implicit, because a record that re-decides a live recorded answer without naming it is not a record.Checks
0253→0254(review-docF2: PR docs(decisions): 0253 — the eval record is aneval-namespaced PR comment (#4769) #5271 opened 28 seconds earlier and owns0253). Re-enumerated at repair time, not taken on trust:maincarries 0250, 0251, 0252, 0255, 0270 (no 0253, no 0254); open PRs claim 0253 (docs(decisions): 0253 — the eval record is aneval-namespaced PR comment (#4769) #5271 and this one), 0256 (docs(decisions): 0256 — the kill audit keys on the not-planned close, not the label (#4921) #5281), 0257 (docs(decisions): 0257 — a platform incident is eval material only through an artifact, at the deterministic tier (#4824) #5282), 0258 (docs(decisions): 0258 — theFiled by an agentfooter is a wire format fabrika owns (#4759) #5285), 0237 (docs(decisions): 0237 — agent brevity binds messages, not board artifacts (#4694) #4703), 0235 (docs(decisions): ADR 0235 — a fence carries zero expansions; everything dynamic lives inside the script #4614). The ADR cites its old number nowhere.pipeline-cli decisions-index validate— ADR files valid, no duplicate or mismatched id.pnpm typecheck— clean. Unit suite — 288 files / 2424 tests passed (pre-push hook).pnpm lint:worktree— clean skip (markdown-only diff).origin/mainat repair time; the head moved, so a fresh review is required against the new head.## Records.Not in this PR
Any label writes. #5270 (route triage through the fabrika seam) is the implementation half that stands; #5269 (backfill) is filed but ruled not-to-be-run. The ADR is the recorded choice.