Skip to content

docs(decisions): 0270 — the calibration record is written at the hand-off, and the criterion asks for the record (#5279) - #5308

Merged
usirin merged 1 commit into
mainfrom
usirin/5279-calibration-record-decision-AD2FAC86
Aug 10, 2026
Merged

docs(decisions): 0270 — the calibration record is written at the hand-off, and the criterion asks for the record (#5279)#5308
usirin merged 1 commit into
mainfrom
usirin/5279-calibration-record-decision-AD2FAC86

Conversation

@usirin

@usirin usirin commented Aug 10, 2026

Copy link
Copy Markdown
Member

Fixes #5279

type:decision, so the deliverable is a recorded choice: ADR 0270, plus the one contract edit the acceptance criteria name by path.

The question, and the answer

How is a fabrika brief's calibration conjunct discharged — "skill-reviewer … was handed skill-conventions.md and a landed sibling skill as calibration"?

Answer: the authoring session writes the hand-off down while it happens (runbook step 5.5), and the criterion is reworded to ask for that record rather than for the act.

The two halves are deliberate. Writing it at the hand-off closes the failure that actually cost a cycle — forgetting. Rewording it stops the row from claiming more than a reader can check.

Why, from first-party evidence

What the ADR is careful about

Acceptance criteria

# Criterion Where
1 Names how the conjunct is discharged, from the stated option set ADR ## Decision 1–2 — write at step 5.5 + reword to the evidence class
2 States which failure mode it closes and which it does not ADR ## What this closes, and what it does not
3 Field 6 and the per-brief criterion wording say the same thing authoring-brief-contract.md field 6 gains the calibration bullet, in the reworded form; ADR ## Decision 4 rules how already-minted briefs read
4 Relationship to #4701's option 3 stated ADR ## Relationship to #4701's option 3 — left open, not subsumed
5 Readable from the brief alone Field 6 is what briefs derive their output contract from; the completeness test's item 6 now names the calibration half beside the filing half

Deviations

  • The contract edit touches two places in the file, not one. The criteria name field 6; I also extended the completeness test's item 6, which enumerates what field 6 owes. Leaving it would have made the completeness test silently disagree with the field it tests. Disposition: for the reviewer to judge.
  • pnpm typecheck replayed FULL TURBO from a different lane's worktree (agent-ad815d15…), the known false-green (review-gate head handle is session-keyed, not per-PR/agent — concurrent reviewers can gate on a foreign worktree and report clean #4881/review-code's in-worktree typecheck reads green off a turbo cache hit produced by a different worktree #4887). Not repaired here, and not load-bearing: the diff is two markdown files and zero TypeScript. Real, uncached signal did run — the pre-push hook executed the changed-scope unit suite in this lane: 288 files, 2424 tests, all passing. Disposition: no action needed; the false-green itself is a separate lane's problem.
  • review-skill's wording is untouched. The row's text lives in brief issue bodies and in the reviewer's reading of them, not in a file this PR can edit. ADR ## Decision 4 is what makes the already-minted briefs read at the new evidence class. Disposition: for the reviewer to judge.
  • Control-plane: claude-plugins/fabrika/** is not §CP by path, but .decisions/** classifies by content under ADR 0164, and this ADR names gates and criteria throughout. Expect a §CP merge-authority hold and a human control-plane approval. Disposition: no action needed — flagged for the shipper.

…-off, and the criterion asks for the record (#5279)

The brief criterion "skill-reviewer was handed skill-conventions.md and a
landed sibling as calibration" failed PR #5261 on correct work and passed
PR #5268 on one sentence — the difference was whether anyone wrote it down.
Nothing in fabrika records what the upstream reviewer was handed (#4701), so
the record is the only available evidence.

0270 rules that the session writes the hand-off down during runbook step 5.5,
and rewords the criterion to the evidence class a reader can check: the PR
records which calibration inputs the reviewer was handed. It closes a
forgotten record, not an untrue one, and says so. #4701's option 3
(verb-mediate the hand-off) is priced and left open, not subsumed.

authoring-brief-contract.md field 6 now carries the obligation, so a session
booting from the brief alone reads it there instead of only in a per-brief
acceptance criterion.

Fixes #5279

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
@github-actions

github-actions Bot commented Aug 10, 2026

Copy link
Copy Markdown

No preview deploy

  • No preview deploy for this PR — its diff touches no deploy-relevant path, so no preview stack was minted and e2e is not applicable. (d70957f)
  • web — Stage pr-5308 torn down.

@usirin

usirin commented Aug 10, 2026

Copy link
Copy Markdown
Member Author

review-doc: advisory — blocking-set PR (§CP — approval-gated)

Reviewed-head: @ d70957f

Verified PR #5308 against the acceptance criteria of #5279 plus the doc-hygiene checklist. Every file under review was read from the head through a per-run ref (git show refs/pr/5308-…), never a working-tree checkout (§RO/§HEAD). The fetched ref was asserted equal to the pinned head before anything was read.

§CP — decided by CONTENT, not by path

Both axes were run, and the deciding one is named:

  • Path axis — no match. pipeline-cli cp-classify classifycontent-undetermined [content-source-present]. claude-plugins/fabrika/** sits outside CONTROL_PLANE_RE, exactly as the PR body predicted. A path-only read here is not a non-§CP answer.
  • Content axis — the deciding one. pipeline-cli guard-content-probe classify on .decisions/0270-calibration-record-is-written-at-the-handoff.md at headguard-touching (§CP, ADR 0164) [guard-vocabulary-match]. The ADR names gates, criteria, evidence classes and a fail-mode analysis throughout.

So this verdict is advisory and binds nothing. No first-line @ <sha> by design; the reviewed head is bound in the Reviewed-head line above (ADR 0111/0151). Merge waits on a @kamp-us/control-plane approval at head (ADR 0135) — not on this comment.

Class fan, re-resolved at this head

pipeline-cli class-probe classify --namespaces piped the live changed-file list, exit 0, named two namespaces:

class-probe: 2 changed file(s) → has-code, has-docs
review-code
review-doc

.decisions/0270-…md is has-docs. claude-plugins/fabrika/docs/authoring-brief-contract.md matches no class regex (it is under claude-plugins/ so the has-docs carve-out excludes it, and docs/ is not skills/), so it rides the §CLASS no-class fail-closed rule into has-code. No review-design: nothing under apps/web/src/. Both markers are posted, one per comment.

Acceptance criteria — #5279

# Criterion Verdict Evidence at head
1 Names how the conjunct is discharged, from the stated option set [PASS] ADR ## Decision 1 picks write the record during step 5.5; ## Decision 2 picks reword to the evidence class. All four listed options are addressed, not just the chosen ones — ## Alternatives considered rejects drop the conjunct (it re-opens #4701's hole), rejects verb-mediate now on price, and rejects leave the wording. The choice is a compound of two of the four, which the criterion's "at minimum" set allows.
2 States which failure mode it closes and which it does not [PASS] Dedicated section ## What this closes, and what it does not: "Closed: a forgotten record" / "Not closed: an untrue record … An earlier timestamp does not make it checkable. A reader of a passing row learns that the session wrote down which inputs it handed over — nothing stronger." Repeated in the ADR's opening paragraph and again in the contract bullet ("closes a forgotten hand-off, not an untrue one"), so a reader hits it wherever they enter. Nothing implies the row becomes verified.
3 Field 6 and the per-brief criterion wording say the same thing [PASS] The named defect — "the calibration obligation appears only in the briefs, not in the contract they derive from" — is closed: field 6 gains a calibration bullet that quotes the reworded criterion verbatim, so the brief emitter has the exact sentence to emit. Byte-level divergence with already-minted briefs is reconciled inside the contract itself ("Briefs already minted carry the older … wording and are read at this same evidence class") rather than left implicit. See the ruling on the second edit below.
4 Relationship to #4701's option 3 stated [PASS] Dedicated section ## Relationship to #4701's option 3 — left open, not subsumed. Option 3 is quoted verbatim and I confirmed the quote at source (#4701 body, option 3: "a fabrika-side gate that reads skill-conventions.md is named and given the conformance job, or skill-reviewer's invocation is required to be handed the doc"). It is priced rather than skipped — the exact thing triage asked for — and the section closes "this ADR is not a ruling against it." The criterion offers subsume-or-pointer; the pointer arm is taken cleanly.
5 Lands in a form the next authoring session reads from the brief alone [PASS], with one recorded residual The issue's own Pointers → Surfaces to edit designates authoring-brief-contract.md (field 6) as the landing surface, and that is where it landed. Field 6 already carries the standing sentence "A session booting from the brief alone reads this here or not at all, so every brief states it", which the new bullet sits under and inherits. Residual, disclosed by the author and judged here: the five still-open briefs (#4710, #4711, #4717, #4719, #4721) carry the old wording and are not rewritten. See The one residual below — it is a transition gap, not a defect in the ruling.

Five of five PASS. No criterion is unmet, so the §CP advisory arm is the correct one (ADR 0226 — an advisory never carries a failing row).

Ruling: a ruling was owed here, not a mechanism

The author delivered a recorded choice plus one contract edit, and built no verb and no gate. That is the right shape, and the criteria say so on their face:

  • Criteria 1, 2 and 4 ask for a recorded choice, a stated pair of failure modes, and a stated relationship. Those are decision content; a verb cannot discharge any of them.
  • Criterion 3 names authoring-brief-contract.md field 6 by path — a doc edit, and the issue's Surfaces to edit names the same file.
  • Criterion 5 asks that the answer be readable, which is a placement requirement, not a mechanism one.
  • Critically, criterion 1 lists verb-mediate the hand-off as one option among four, not as the required answer. Triage's note is explicit: "Triage's read is that the cost likely exceeds the benefit, but the decision should price it rather than skip it." The ADR prices it and declines it. Declining a priced option is a discharge of that criterion, not an evasion of it.

The ticket is type:decision, and its "one question to settle" is "How is the calibration conjunct discharged?" — a naming question. A lane that had shipped a verb here would have answered a question nobody asked and still owed the ruling.

One note on the pricing, since the ruling rests on it: the ADR prices the verb against "roughly a one-in-three chance of one lost review cycle on the remaining briefs." I checked the denominator — #4650 has five open authoring briefs left (#4710, #4711, #4717, #4719, #4721) plus the #4651 ideation quartet, and the observed forget rate is one in four landed PRs (#5261 forgot; #5233, #5242, #5268 recorded). So the exposure is on the order of one to two cycles across the remaining work. The number is fairly calibrated, and the error runs toward building the verb — the ADR quotes the higher rate and still declines. The conclusion is robust to the correction.

Ruling: the second contract edit is IN SCOPE

The author edited field 6 and the completeness test's item 6, and flagged the second as "for the reviewer to judge." It is in scope, for a reason stronger than tidiness:

Item 6 is not an independent assertion — it is the checkable restatement of field 6, and it already enumerated field 6's halves before this PR ("including its filing half: the handoff mints the implementation ticket and names its number"). Adding a half to field 6 and not to item 6 would leave the completeness test asserting that a brief is bootable while silently omitting the very obligation criterion 3 is about. Criterion 3 asks that the contract and the criteria "say the same thing"; an internally self-contradicting contract cannot say the same thing as anything.

The edit is also minimal and additive — it adds a parenthetical half beside the existing one, introduces no obligation field 6 does not state, and changes no count (the test still reads "bootable when all six hold"). In scope. No action needed.

Does the landed corpus stay consistent?

Yes — and more strongly than the ADR claims for itself. I checked all four landed siblings:

Nothing re-grades. No landed row that passed now fails, and no row that failed now passes without the repair it actually got. The reason is that the ADR is not changing the evidence class — it is ratifying the one the gate was already applying. #5268's verdict says so in the gate's own words, and I confirmed the quote at source: "this gate verifies the written record; it cannot re-run the reviewer, because the authoring runbook emits no calibration artifact." The stricter reading the old wording implied was never operable, so declaring it inoperable loosens nothing in practice. The wording now matches what the gate does; that is the whole delta.

Is the #4111 tension preserved?

Yes, and it is preserved by being named out loud rather than dissolved — which is what triage asked for ("Record that as the finding; don't record it as a contradiction").

The ADR calls it an asymmetry, not a contradiction, and separates the levels correctly: the #4111-grounded criterion in #5020 constrains the runtime artifact the authored skill produces, while the calibration row constrains the authoring process one level up. That distinction is real and PR #5261 is the proof — it passed the #4111-grounded row while failing the calibration one.

The sharp sentence survives intact: "What is genuinely wrong is that fabrika applied to its own gate a standard weaker than the one it ships — and never said so out loud." The ADR then says it out loud. And I confirmed the framing is honest about #4111's status: no ADR in .decisions/ asserts "a self-report is not evidence" as standing law (grep over the whole tree returns nothing), and #4111 is an open type:investigation, not a rule. Citing it as a scar rather than a law is accurate.

The tension is left load-bearing, not resolved away: the ## Consequences section keeps the door open — "If a fabrika-side conformance gate is ever built (#4701 option 3), this row is a natural first consumer: the record becomes the gate's input instead of its only evidence." That is the right place for it to sit.

The one residual — disclosed, judged non-blocking

The five open briefs (#4710, #4711, #4717, #4719, #4721) carry the old "was handed … as calibration" wording. A session booting from one of those reads the old row, so the new write-it-during-step-5.5 instruction does not reach it from the brief alone. The author surfaced exactly this as their third deviation and handed it to me.

Non-blocking, because:

  1. Those sessions are not made worse off — their gate reading is unchanged (ADR ## Decision 4), so nothing newly fails.
  2. The repo convention is amend-never-rewrite a filed brief; a board-wide rewrite would violate it, and the ADR correctly declines one.
  3. It is disclosed rather than hidden, which is the §DEV standard.

Non-blocking recommendation for the follow-up lane (not a condition of merge): append a one-line dated amendment to those five briefs pointing at ADR 0270, so the step-5.5-write instruction reaches the in-flight sessions from the brief alone. Cheap, convention-respecting, and it closes the transition gap that this ADR's Decision 4 deliberately leaves open.

Quotation grounding — every quoted claim checked at its source, not recalled

The ADR rests on quotations. All were re-read from the live source:

Quoted in the ADR Checked against Result
The #5020 criterion, verbatim #5020 body line 162 Exact match, word for word
"The calibration conjunct is recorded nowhere — not in the PR body, not in the handoff comment on #5020, not in the diff" #5261 verdict comment 5235813156 Exact match (bold stripped, text identical)
review-skill: FAIL @ 35c1db4c on one row of nineteen same comment Confirmed, first line
"this gate verifies the written record; it cannot re-run the reviewer, because the authoring runbook emits no calibration artifact" #5268 verdict comment 5236278470 Exact match
#4701 option 3, verbatim #4701 body Exact match
#4701's ruling deleted the sizing line band and left option 3 open #4701 closed; commit d5f6f079 "delete the dead line band from the sizing convention (#4701)" on main Confirmed
#5290 is the criterion-10 sibling, neither subsumes the other #5290 body: "#5279 asks how criterion 16 (calibration) is discharged; this asks how criterion 10 … Neither subsumes the other" Confirmed, and #5290 says it in the same words
#4111 is a scar, not standing law #4111 is type:investigation, open; no .decisions/** file mentions "self-report" Confirmed

No unverified decision-driving claim found. This is the standard the repo asks for on falsifiable claims, and this ADR meets it.

ADR number 0270 — uncontested at head

Checked, because three lanes collided on 0253 tonight (#5278) and enumeration cannot see an unopened sibling:

Adjacent observation, not this PR's defect: 0253 is currently double-claimed by two open PRs#5273 (0253-ready-for-gap-closes-in-the-data.md) and #5271 (0253-eval-record-is-an-eval-namespaced-pr-comment.md). Whichever lands second will need a renumber. Flagging it here because I had the enumeration in hand.

Doc hygiene

Check Result
Frontmatter shape PASSid/title/status/date/tags, matching 0248/0249/0252 exactly; status: accepted, date: 2026-08-10, tags: [fabrika, skills, briefs, review]
id matches filename PASS0270 / 0270-calibration-record-is-written-at-the-handoff.md
Title is a claim, not a topic PASS — states the decision, house style
Standard markdown links, no wikilinks, no placeholders PASS
Relative links resolve PASS — ADR → ../claude-plugins/fabrika/docs/authoring-brief-contract.md; contract → ../../../.decisions/0270-…md and skill-conventions.md. Both directions land at the repo root correctly, and CI's "check docs have no dead internal links" is green at head, independently
No ADR index to update PASS — ADR 0126/0129: discovery is the CLAUDE.md contract, no committed index
Contradiction sweep against existing ADRs PASS — closest neighbours are 0248 (the session mints the ticket, review-skill checks it exists) and 0249. 0270 sits beside 0248, not against it: field 6's filing half is 0248's output, and the new calibration half takes the identical "the gate checks the record exists" shape. No ADR is contradicted or silently superseded
No home / absolute / sibling-repo paths PASS — both committed files scanned for home-dir prefixes, absolute filesystem roots, temp-dir roots and worktree paths; all clean. The PR body names one lane identifier (agent-ad815d15…) with no path attached, which is a lane label, not a filesystem location

One optional strengthening, non-blocking: the ADR could cite 0248 as house precedent for the gate verifies the record, not the act. It would make the chosen shape read as the established pattern rather than a fresh call. Not owed by any criterion.

Deviation-disclosure gate (§DEV)

The PR body carries a literal ## Deviations heading with four entries. Each was checked at source, not taken on the author's word:

Disclosed True at source?
The contract edit touches two places, not one TRUE — the diff shows field 6 (+11) and completeness-test item 6 (+3/−2). Ruled in scope above
pnpm typecheck replayed full turbo from another lane's worktree (#4881/#4887) TRUE, and the reasoning holds — verified independently below
review-skill's row wording is untouched TRUE — the row lives in brief issue bodies, not in any file this PR can edit. Judged above under the residual
§CP expected by content under ADR 0164 TRUE, and correct — guard-content-probe confirms it. The author predicted their own gate classification accurately

No undisclosed departure found. Every deviation is real, honestly framed, and none is dressed up as smaller than it is. The typecheck entry in particular discloses a false green the author could have stayed quiet about.

The disclosed false green — verified, and not repeated

The author's reasoning holds on both legs, and I checked both rather than accepting them:

  1. "Zero TypeScript" — confirmed mechanically. The full delta from merge-base to head is exactly two files, both .md. Nothing touches the TS program: no .ts/.tsx, no tsconfig*, no package.json, no turbo.json.
  2. The merge base is my own tree. git merge-base origin/main <head> = origin/main = my worktree HEAD = 5f57fcf3. So the head's TypeScript program is byte-identical to the base's, and a green base is a green head.

I did not repeat the mistake. I ran the real task forced, so nothing could replay:

pnpm turbo run typecheck --force --output-logs=new-only
  Tasks:    31 successful, 31 total
  Cached:    0 cached, 31 total

Every task path resolved into this worktree (…/.claude/worktrees/agent-a02ed95d…/packages/…), not a foreign lane's — which is the exact confirmation #4881/#4887 is about. 0 cached means no replay.

(A first attempt at tsgo -p tsconfig.json from the repo root produced a flood of TS17004/TS5097 errors. That was my error, not the PR's: the root tsconfig.json is a shared base with no include/files and no jsx/lib.dom, not a buildable project. The repo's real typecheck is the per-package tsgo -p fan that turbo drives — the forced run above. Recording it so nobody reads a stray transcript as a failure.)

CI at head

All 24 executed checks green, including ci-required, scan changed files for leaks, sweep pipeline-crew for personal-data leaks, check docs have no dead internal links, and check CLAUDE.md path pointers resolve. The six skipped jobs (lint / format / typecheck, unit + client tests, integration tests, e2e, deploy) are correctly skipped by detect changed areas for a markdown-only diff — a skip here is the change detector working, not a gate evaded, and the forced local run above supplies the real typecheck signal anyway.

What this authorizes

Nothing. This is an advisory on a §CP PR (by content, ADR 0164). ship-it must not auto-merge off it. Merge requires a @kamp-us/control-plane approval at d70957fb (ADR 0135), and the §CP approver should read the ruling-vs-mechanism and corpus consistency sections above — those are the two calls a human ratification is actually for.

Substantively this is a clean decision PR: five of five criteria met, every quotation true at source, the honest limits of the choice stated rather than papered over, and the deviations disclosed including one the author could have hidden.


review-doc · §CP advisory (content axis, ADR 0164) · head d70957fb33b035b262e38f656be5d9a3c56ab484 · all artifacts read from the head via a per-run ref, never a checkout

@usirin

usirin commented Aug 10, 2026

Copy link
Copy Markdown
Member Author

review-code: advisory — blocking-set PR (§CP — approval-gated)

Reviewed-head: @ d70957f

Second of two markers on this PR, in its own comment so each namespace's ^ first-line anchor resolves. The substantive criterion-by-criterion verification lives in the review-doc verdict — this comment covers the has-code namespace, which exists here for a structural reason worth stating plainly.

Why review-code is required on a two-markdown-file PR

pipeline-cli class-probe classify --namespaces at this head, exit 0, named two namespaces:

class-probe: 2 changed file(s) → has-code, has-docs
review-code
review-doc

The has-code namespace comes from claude-plugins/fabrika/docs/authoring-brief-contract.md, which matches no §CLASS regex — HAS_DOCS_EXCLUDE_RE carves out everything under claude-plugins/, and HAS_SKILLS_RE wants skills/ or agents/, not docs/. A file matching no class rides the §CLASS no-class fail-closed rule into has-code (#2765). This is precisely the #2434 trap — the eyeball read is "two markdown files, obviously docs-only", and it leaves review-code empty and deadlocks ship-it on a phantom namespace. Dispatched from the probe, not by eye.

No review-design: nothing under apps/web/src/, and the probe (which folds in the live UI_RE) did not name it.

§CP — advisory, decided by CONTENT

  • Path axis: cp-classify classifycontent-undetermined [content-source-present]. No path matched; claude-plugins/fabrika/** is outside CONTROL_PLANE_RE. Not a non-§CP answer.
  • Content axis (deciding): guard-content-probe classify on the ADR at headguard-touching (§CP, ADR 0164) [guard-vocabulary-match].

So this marker is advisory: no first-line @ <sha>, head bound in Reviewed-head above (ADR 0111/0151). It authorizes nothing and must not be read as an auto-merge PASS.

Code-namespace checks

Check Result
Executable surface changed PASS — none. Full delta from merge-base to head is exactly two files, both .md. No .ts/.tsx, no tsconfig*, no package.json, no turbo.json, no workflow, no script
Typecheck, real and uncached PASSturbo run typecheck --force: 31 successful / 31 total, 0 cached, every task path resolving into this reviewer's own worktree. See below
Dependency / catalog: discipline N/A — no package.json touched
CI at head PASS — 24 executed checks green (ci-required, both leak scans, dead-link check, CLAUDE.md pointer check, secret scan). The six skipped jobs are correctly skipped by detect changed areas for a markdown-only diff
Home / absolute / sibling-repo paths in committed files PASS — both files clean
Deviations disclosed (§DEV) PASS — literal ## Deviations heading, four entries, each verified true at source

The disclosed false green (#4881/#4887) — verified, and not repeated

The author disclosed that pnpm typecheck replayed full turbo from another lane's worktree, and argued it is not load-bearing. The reasoning holds, and both legs were checked rather than accepted:

  1. "Zero TypeScript" is mechanically true. The merge-base→head delta is two .md files and nothing else. Nothing in the diff can enter the TypeScript program.
  2. The merge base is this reviewer's own tree. git merge-base origin/main <head> = origin/main = this worktree's HEAD = 5f57fcf3. The head's TS program is therefore byte-identical to the base's, so a green base is a green head — no inference required.

Not repeated here. The task was run forced so nothing could replay:

pnpm turbo run typecheck --force --output-logs=new-only
  Tasks:    31 successful, 31 total
  Cached:    0 cached, 31 total

0 cached rules out replay, and every emitted task path resolved into this reviewer's worktree (…/.claude/worktrees/agent-a02ed95d…/packages/…), not a foreign lane's — the exact confirmation #4881/#4887 asks for. Green at head on real, uncached signal.

(A first attempt at tsgo -p tsconfig.json from the repo root emitted a flood of TS17004/TS5097. That was reviewer error, not a PR defect: the root tsconfig.json is a shared base with no include/files and no jsx/lib.dom — the repo's real typecheck is the per-package tsgo -p fan turbo drives. Recorded so no one reads a stray transcript as a failure.)

What this authorizes

Nothing. §CP by content — merge requires a @kamp-us/control-plane approval at d70957fb (ADR 0135). Read the review-doc comment on this PR for the acceptance-criteria verification and the two judgment calls (ruling-vs-mechanism; whether the landed corpus stays consistent).


review-code · §CP advisory (content axis, ADR 0164) · head d70957fb33b035b262e38f656be5d9a3c56ab484 · dispatched from class-probe, not by eye · all artifacts read from the head via a per-run ref, never a checkout

@usirin usirin added the status:cp-banked Control-plane PR banked on the board, awaiting a control-plane approval label Aug 10, 2026
@usirin
usirin requested a review from notusirin August 10, 2026 07:25
@usirin usirin added this to the fabrika campaign milestone Aug 10, 2026
@usirin
usirin added this pull request to the merge queue Aug 10, 2026
Merged via the queue into main with commit a479832 Aug 10, 2026
46 checks passed
@usirin
usirin deleted the usirin/5279-calibration-record-decision-AD2FAC86 branch August 10, 2026 07:41
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

status:cp-banked Control-plane PR banked on the board, awaiting a control-plane approval

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Skill-authoring runbook writes no calibration record, so a review criterion rests on memory

2 participants