docs(decisions): ADR 0241 — fabrika wire formats are owned by typed schema modules (#4946) - #4957
Conversation
…chema modules (#4946) Records the founder ruling on epic #4925 (option (b), staged): fabrika's inter-skill wire formats live in typed schema modules in fabrika-cli behind emit/read/check, never restated as shape in skill prose, plus one thin index doc carrying protocol narrative only. Grounded in shipped code — the `wire` verb group, the one-row-per-format registry, the acceptance-criteria module, and the verdict-marker module that landed as one row with no verb-leaf change. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
No preview deploy
|
|
review-doc: advisory — blocking-set PR (§CP — approval-gated) — NOT clean: 1 hygiene miss PR #4957 is §CP by content, re-derived at the head rather than taken on trust:
My verdict is therefore advisory only: it does not authorize a merge, and it carries no first-line Reviewed-head: @ 1776d03 Class fan: Verified against #4946 acceptance criteria + the doc-hygiene checklist. Every file under review was sourced from the PR head via a per-run ref, never the launched checkout working copy (§HEAD). Acceptance criteria
Substance — the load-bearing claims, checked against the source now on
Doc hygiene
Overall: advisory FAIL — one hygiene miss, body-only. The ADR file itself is clean; I found nothing in the diff to change for correctness. Please do not approve at this head. The fix touches the PR description only. The fix. Add a On the three disclosed judgement calls.
One forward-looking note, no action needed here. review-doc does not merge, and this verdict authorizes nothing — it is advice for the control-plane approver. Verdict-written: 2026-08-08T22:18:21Z |
…4946) The Context line claimed the mechanics are described from shipped code rather than from intent; the index-doc paragraph is prescription, so the claim over-reached by exactly one paragraph. Narrow it with a half-clause and mark the paragraph itself. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
|
review-doc: advisory — blocking-set PR (§CP — approval-gated) PR #4957 is §CP by content (ADR 0164). Re-derived at this head, not inherited: Reviewed-head: @ be2c5c7 Round 2 (re-gate after repair). The round-1 advisory bound to The round-1 FAIL is discharged. The substantive ADR edit — judged on its own new claim. The Context line's over-reach was narrowed to "…described from shipped code rather than from intent — with one exception, marked where it appears: the index doc is prescription, still owed to a later child." That half-clause creates an obligation, so I enumerated every place the index doc appears in the ADR rather than accepting the marking on the author's word — 4 sites: L44 (the exception statement itself), L92, L103, L121.
Verdict on the edit: the sentence is not false in a new way. The fix for over-claiming did not introduce its own over-claim. One non-blocking observation, offered as taste and not as a finding: L121's "The index doc is a standing temptation" is present-tense about a file that does not exist yet; a tightening to "will be" would remove the last residue. It does not make the Context claim false and is not worth a round. Verified against #4946's acceptance criteria + doc hygiene — all checks pass: Acceptance criteria (7/7)
Doc hygiene
Specialist fan-out (ADR 0079) — 0 blocking findings
The founder ruling on epic #4925 is recorded, not re-litigated — I judged faithful transcription and grounding, not the decision itself. Read the PR head (§HEAD): every file under review was sourced from review-doc does not merge, and this advisory does not authorize a merge. It is the §CP advisory form (ADR 0111/0151): the first-line marker carries no Verdict-written: 2026-08-08T22:35:08Z |
BANKED — §CP, awaiting a control-plane approval at the current headThis PR is reviewed-ready and blocked only on a human approval. The execution engine does not merge it and will not hand-merge it. State, verified first-party:
What is owed: a If the head moves, the approval dies with it (ADR 0058) — a rebase or a new push past This PR was not clean on the first pass. Round 1 returned Worth recording, because it nearly cost this PR its repair: the machine repair-picker read this round as a clean no-op ( |
Closes #4946.
Records the founder ruling on epic #4925 (option (b), staged) as ADR 0241 — fabrika wire formats are owned by typed schema modules, never by skill prose. This is a transcription of a decision already made first-hand, not a re-derivation.
What it records
fabrika-clibehindwire emit/read/check, registered as one row in one registry, never restated as shape in a skill body. One thin index doc carries protocol narrative (the why/when) and never the shape.Found/Absent/Malformed, and no code path may return a plausible empty value on drift.reviewauthoring session fires; every other format lands with its first consumer.claude-plugins/fabrika/skills/triage/contract.mdcontains the stringcriterizero times (re-verified on this base: count is 0).Grounding
The why is written from what actually shipped in the two landed stages rather than from intent, and each claim was verified in source:
--formathelp interpolatesregisteredKeys()inpackages/fabrika-cli/src/wire/command.ts, so help cannot advertise a format the registry lacks; stage 2 added the verdict marker as one registry row with no verb-leaf change.packages/fabrika-cli/src/wire/codes.tskeeps cannot see apart from saw nothing: distinct non-0/1/127codes for proven-absent, malformed, empty stdin, and fd 0 unreadable (UNKNOWN); onlyfoundreaches stdout.WireFound<A>overNonEmptyReadonlyArraymakes "found but empty" fail to typecheck,HeadShais branded with no empty inhabitant, andbindToHeadreturnsCurrent | Stale | Unbindablerather than a boolean — a verdict marker binds a head SHA (ADR 0058) and a stale marker is not a passing one.Authoring checks
0239(decisions-index next→0240against a freshly fetchedorigin/main), in-flight open-ADR-PR claims{0235, 0237, 0240}viagh apiREST (exit 0), somax(union) + 1= 0241.decisions-index validatepasses..decisions/0241-wire-formats-owned-by-schema-modules.md. No index (ADR 0126/0129).## Recordsas routed to.glossary/TERMS.mdvia a follow-upreport— it needs the "not a serialization format, not a skill contract" disambiguation plus cross-links, which is fuller treatment than an inline row.Deviations
Three judgement calls were made while authoring, each disclosed here rather than left implicit. All three were reviewed on merit and accepted by the
review-docgate; they are recorded, not re-argued.claude-plugins/fabrika/docs/wire-formats.mdhas not been written. The ADR states the index-doc law as part of the ruling without claiming the file has landed, leaving the write to a later child of epic fabrika wire formats: verb-owned schema modules + thin index doc (founder-ruled option b, staged) #4925. It is the one Decision paragraph deliberately left as a bare backticked path rather than a markdown link, so it creates no dead link.origin/mainHEAD, not the two stage squash SHAs. The house convention is resolvable repo-relative markdown links; a commit SHA resolves to nothing as a link and ages badly. Every grounded claim was verified againstorigin/mainand is checkable exactly as written.(repair round 1) Applied the verdict's one recommendation while the body was open: the Context claim that the mechanics are described from shipped code rather than from intent over-reached by exactly the index-doc paragraph, which is prescription. Narrowed with a half-clause and marked at the paragraph itself. No other change to the ADR, and the founder-ruled decision is untouched.
§CP
Re-derived, not assumed:
cp-classify classifyreturnscontent-undetermined [content-source-present](no path match,.decisions/**engages the ADR-0164 content axis), andguard-content-probe classifyon the ADR body returnsguard-touching(§CP, ADR 0164) [guard-vocabulary-match]. So this is control-plane — stopping at PR-open for a control-plane approval; not merging.🤖 Generated with Claude Code