docs(glossary): canonical rows for the eight fabrika skill nouns, and ADR 0242 for the two redefinitions (#4919) - #4973
Conversation
…R 0242 (#4919) Adds a fabrika skill nouns section to .glossary/TERMS.md with a row for build, build-ui, review, review-ui, governance, build-epic, front-door and check-epic-plan, each stating only the current post-#4904 reading. build and review redefine live readings, so ADR 0242 records the change: what each word meant before, what it means now, and the ruling it came from. The review collapse is recorded as it actually is — the six v1 review-* skills disperse four ways, not a four-to-one merge. ADR 0144's separate review-ui coinage is reconciled explicitly rather than silently forked.
No preview deploy
|
|
review-code: advisory — blocking-set PR (§CP — approval-gated) Reviewed-head: @ 8c05ba4 Verified PR #4973 against the acceptance criteria of #4919. This namespace is required because §CP derivation (re-run first-party at this head)
Acceptance criteria (glossary surface)
Ruling — the The reconciliation is sound, and the
On whether the
So the Disclosed deviations — rulings
Advisory (non-blocking) — no criterion fails in this namespace
Read the PR head (§HEAD): every file under review was sourced read-only from This verdict authorizes nothing. It is advisory only: the first line carries no bindable Verdict-written: 2026-08-09T00:51:23Z |
|
review-doc: FAIL @ 8c05ba4 — changes-requested Reviewed-head: @ 8c05ba4 Verified PR #4973 against #4919's acceptance criteria + the doc-hygiene checklist. Scope of this namespace is §CP derivation (re-run first-party at this head)
Acceptance criteria
Doc hygiene
The failing criterion, in full ADR 0242 §4 supersedes a clause of ADR 0144 in part. The superseding side is done well — 0242 names what it supersedes and why. The superseded side gets nothing: This is a named check, not a preference. The stated justification does not survive contact with the corpus. ADR 0242's Consequences assert "No landed ADR is edited", and the §4 text reads "0144 itself is untouched: an ADR is a dated record of what was decided then." That conflates two different things. The repo norm forbids editing an accepted ADR's decision text — it mandates the status-line pointer. Three sources, all live:
So the "landed record" concern is real but is already solved by the mechanism the corpus built for it. Nothing about 0144's depo decision — which stays live — needs to change; The fix (one file, two lines, matching the 0011/0029 exemplar):
Optionally mirror 0011's Ruling on the reconciliation itself — sound, and this FAIL does not disturb it To be unambiguous: the substance of §4 is correct, and I am not asking for it to be re-argued. All three grounding facts hold first-party at this head — no And the The gap is purely that the supersession is one-directional. Everything needed to close it is already written in 0242 §4 — it just has to be pointed at from the other end. Also worth the author's eye (non-blocking, no action required to clear this FAIL)
Read the PR head (§HEAD): every file under review was sourced read-only from Failing items above must be addressed before this PR can merge. The PR stays open and unmerged; #4919 stays open and assigned. Re-request review once satisfied. Verdict-written: 2026-08-09T00:51:32Z |
review-doc FAIL'd PR #4973 on one criterion: the supersession was one-directional. ADR 0242 §4 supersedes ADR 0144's `review-ui` coinage in part, but 0144 still read `status: accepted` with no forward pointer, so a reader landing on its `review-ui` clause — the likeliest path to the collision — resolved the name to the standalone reading with no signal that the reading moved. - `.decisions/0144-depo-internal-asset-cdn.md`: `status: superseded-in-part by [0242]` + `superseded-section-by: 0242`, mirroring 0011's two-field form for a single displaced clause, plus a one-line note at the clause itself. Its decision text is untouched. - `.decisions/0242-…`: correct the justification. "0144 itself is untouched" / "No landed ADR is edited" conflated two rules — the norm forbids editing an accepted ADR's decision text and *mandates* the status-line pointer. Restated with 0011 and 0029 as the corpus precedent, both with decision text fully intact. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
HOLD — this PR contradicts a founder ruling recorded on #4951Posting this as the conducting engine before either re-gate verdict lands, so the conflict is on the record rather than discovered after a bank. What this PR now does to What the founder ruled, option (a), 2026-08-08, recorded on epic #4904 and transcribed into #4951's body and acceptance criteria:
and, in #4951's constraints:
The ruling resolves the This is my error, not the repair lane's. My repair dispatch asserted that the status-line pointer is mandated by the supersession norm (citing the Consequences for this PR:
One question is genuinely open and is not an engine's to answer: whether ADR 0242 should assert any supersession over 0144, or whether the whole collision is discharged by #4951's qualifying-note route with 0242 staying silent about 0144. Surfaced here for the control-plane approver rather than decided by fiat. Also recorded: #4951 is now fully founder-ruled and buildable (both AC questions answered in comments |
|
Founder ruling (2026-08-09, recorded first-hand by the chief-of-staff): ADR 0242 asserts NO supersession over ADR 0144 — stay silent. ADR 0144 keeps |
|
review-code: advisory — blocking-set PR (§CP — approval-gated) PR #4973 is §CP by content, not by path. Re-derived at this head, first-party: the control-plane classifier returns an empty Reviewed-head: @ 9d0ed5a Re-gate at a moved head. The prior round's verdicts were bound to Verified PR #4973 against the acceptance criteria of #4919, one at a time — all pass:
The repair round itself, verified rather than taken on report. The The premise correction is right too, and worth stating because a wrong premise here would propagate. ADR 0242's Consequences no longer says "No landed ADR is edited" — it says "No landed ADR's decision text is edited — the status line of the one superseded ADR is." That matches the Sub-gates, each emitting what it scanned (§ZS):
Run-evidence bundle: PRESENT for head Read the PR head (§HEAD): every file under review was sourced from One non-blocking observation, out of scope for this PR — not a criterion, recorded so it is not lost. All acceptance criteria pass and every sub-gate is clean or a legitimate not-applicable skip. review-code does not merge, and this advisory authorizes nothing: PR #4973 needs a Verdict-written: 2026-08-09T01:16:26Z |
|
review-doc: advisory — blocking-set PR (§CP — approval-gated) Reviewed-head: @ 9d0ed5a Re-gate after repair round 1. The head moved §CP derivation (re-run first-party at this head)
Acceptance criteria (#4919)
The repair round’s four items, verified against the diff rather than the claim
Doc hygiene
Step 4a — ADR contradiction sweep (citation-independent) Questions ADR 0242 settles, enumerated from its title / What-this-decides /
Semantic pass by hand, beyond what the tool can reach: ADRs 0079 and 0226 use "four Step 4b — specialist fan-out + route (ADR 0079)
Step 4c — deviation disclosure (§DEV)
Read the PR head (§HEAD): every file under review was sourced read-only from Verdict: every acceptance criterion and every hygiene check passes at this head. The repair closed the one failing criterion at both surfaces and corrected the reasoning that produced it, without re-arguing the reconciliation the prior round explicitly blessed. This is a §CP PR ( Verdict-written: 2026-08-09T01:18:18Z |
…erseded (#4919) Founder ruling (2026-08-09, comment 5229132312) reverses the previous repair round's premise: ADR 0242 asserts NO supersession over ADR 0144. - .decisions/0144-depo-internal-asset-cdn.md — reverted to origin/main: status: accepted stays, no superseded-section-by frontmatter, no note at the review-ui producer clause. The file leaves this PR entirely. - .decisions/0242-…-redefine-build-and-review.md — §4 rewritten to state coexistence only; the Consequences bullet that announced a 0144 status line edit now records that no landed ADR is edited here. - .glossary/TERMS.md — the review-ui row's Not column reframes the collision as two distinct, coexisting names, per founder ruling (a), 2026-08-08 on epic #4904. The depo row stays untouched: founder ruling 5229107623 puts it in #4951.
Lane state at head
|
| marker | comment | binds head | status |
|---|---|---|---|
review-code advisory |
5229061617 |
8c05ba49 |
stale |
review-doc FAIL |
5229062113 |
8c05ba49 |
stale |
review-code advisory |
5229143154 |
9d0ed5a9 |
stale |
review-doc advisory |
5229148782 |
9d0ed5a9 |
stale |
Nothing binds 8e9acba1. Required namespace set is {review-code, review-doc} — .glossary/TERMS.md rides HAS_CODE_RE's .glossary/** branch, so this is not docs-only (the #2434 trap).
Two of those stale markers are actively misleading and must not be read as approval evidence. 5229143154 and 5229148782 both PASSed the ADR 0144 supersession framing that founder ruling 5229132312 then struck. They are stale and wrong on the merits. Anyone reconstructing this lane should ignore all four.
Next steps, in order: re-gate review-code and review-doc fresh at 8e9acba1 → then BANK (assign the control-plane approver, label, request review, post the bank note). Do not ship. Each gate dispatch must carry: (a) founder ruling 5229132312, and (b) an explicit instruction NOT to demand a supersession status-line pointer on 0144 — the adr skill mandates one for a genuinely-superseded ADR (adr/SKILL.md §4, adr/contract.md:404), and a gate reading that mandate without the ruling will FAIL this PR for the very thing the founder removed.
Also read the PR's own comment thread when gating — two gates tonight passed this PR while the governing ruling sat unread on this thread, posted three minutes before they ran. Tracked as #4982.
|
review-code: advisory — blocking-set PR (§CP — approval-gated) Reviewed-head: @ 8e9acba Fresh re-gate at repair round 2's head. Every prior marker on this PR is stale ( Why this namespace is required. §CP derivation (re-run first-party at this head)
Governing rulings honored (read from this thread before gating)
Acceptance criteria (#4919) — glossary surface
Checkable facts asserted by the rows — each verified at source, not accepted
ADR 0242 §4 — coexistence-only, confirmed. Though the ADR body is
Verdict: PASS on the |
|
review-doc: advisory — blocking-set PR (§CP — approval-gated) PR #4973 is §CP by content, not by path (ADR 0164). My verdict is advisory only: it does not authorize a merge. Under the §CP hard gate (ADR 0135), a Reviewed-head: @ 8e9acba Scope + evidence discipline. This verdict covers the Governing rulings read before gating (the #4982 miss this run exists not to repeat):
§CP derivation (re-run first-party at this head, REST only — no GraphQL)
Acceptance criteria (#4919) — doc-namespace scope
Supersession-silence check (the thing this round had to get right) Grepped the ADR at head for
No supersession key in frontmatter, no status-line edit anywhere in the diff, and I did not re-impose the struck mandate. The Doc hygiene
Claim-vs-ground-truth (Step 4b fan-out) — each factual assertion checked against source, not accepted
ADR contradiction sweep (Step 4a) Four questions enumerated: are the eight nouns canon? what does the bare noun Deviation disclosure (§DEV)
Verdict: every acceptance criterion in this namespace and every hygiene check passes. Advisory only — this does not authorize a merge. A Verdict-written: 2026-08-09T01:58:07Z |
BANKED — awaiting
|
| namespace | verdict | comment | binds |
|---|---|---|---|
review-code |
advisory PASS (§CP) | 5229246748 |
8e9acba1 |
review-doc |
advisory PASS (§CP) | 5229269791 |
8e9acba1 |
Required set is {review-code, review-doc} — .glossary/TERMS.md rides HAS_CODE_RE's .glossary/** branch, so this is not docs-only (the #2434 trap). Head re-verified unmoved immediately before banking.
Ignore the four older markers (5229061617, 5229062113, 5229143154, 5229148782). All bind dead heads. Two of them are stale and wrong on the merits — they passed the ADR 0144 supersession framing that founder ruling 5229132312 then struck.
What the approver is approving. The PR adds eight fabrika nouns to .glossary/TERMS.md and lands ADR 0242. It does not touch .decisions/0144-*.md — that file is byte-identical to main (blob 17d50690 on both sides) and out of the changed set. Per the ruling, 0144 keeps status: accepted, the two review-ui names coexist, and #4951's qualifying note discharges the collision. Both gates verified 0242 asserts no supersession over 0144, and both were instructed not to demand a status-line pointer — the adr skill mandates one only for an ADR that is genuinely superseded, which the founder ruled 0144 is not.
Two things the gates flagged honestly rather than buried, worth a human's eye:
- The
## Deviationslog discloses a documentedadr-skill mandate deliberately not followed (correctly, per the ruling), and a repair round run with no gate FAIL behind it — on founder authority alone. Both are unusual and both are stated. - Whether the earlier
Deviationsentries are verbatim is not machine-checkable — GitHub keeps no issue/PR body history. Thereview-codegate took it on the disclosure's internal consistency and said so rather than claiming a check it did not run.
An approval binds the head it is given at (ADR 0058). If anything pushes to this branch after approval, the approval is invalidated and this PR re-banks.
The fabrika partition locked eight skill names —
build,build-ui,review,review-ui,governance,build-epic,front-door,check-epic-plan— and none of them had a row in the repo's vocabulary register. Two of the eight do not add a word, they move one:buildused to mean the general act of building, andreviewused to mean a family of review skills. This adds the eight rows to.glossary/TERMS.mdand one dated ADR recording what those two words meant before and what they mean now, so a reader of any pre-partition ticket gets a signal instead of a confident wrong answer.Fixes #4919
What changed
.glossary/TERMS.md— a newfabrika skill nounssection with a row per noun. EachDefinitionstates only the current reading; thebuildandreviewrows carry the superseded reading in theNotcolumn, pointing at the ADR..decisions/0242-fabrika-skill-nouns-redefine-build-and-review.md— the dated record of the two redefinitions, plus §4 on how the tworeview-uireadings coexist.(repair round 2) This PR touches two files.
.decisions/0144-depo-internal-asset-cdn.mdwas edited in repair round 1 and is reverted toorigin/main, byte-identical, per the founder ruling below.Three collisions, resolved rather than papered over
review-uiwas already coined, for a different scope..decisions/0144-depo-internal-asset-cdn.mdnames "a distinct newreview-uiskill" — the Playwright step that captures UI screenshots and embeds them viadepo put. Resolved (repair round 2, per founder ruling) as two distinct names that coexist — neither supersedes the other. ADR 0144 keepsstatus: acceptedand every word of its decision text; ADR 0242 §4 states fabrika's reading and claims no authority over 0144. The coexistence is harmless on checkable facts: noreview-uidirectory exists under any plugin, so 0144's skill was never built; its capture-and-embed function landed asreview-design's evidence leg over the@kampus/design-captureseam (ADR 0183); and the partition renames that same gatereview-ui. So the two readings converge on one artifact as a matter of what got built, not by supersession. The qualifying note that disambiguates a reader landing at 0144's clause is ADR 0144'sreview-uicoin needs a qualifying reference note — fabrika's visual-review gate now owns the name (founder ruling (a), 2026-08-08) #4951's, not this PR's.reviewcollapse is six-to-one, not four-to-one. The decision corpus reads it as four (ADRs 0079, 0226) butclaude-plugins/kampus-pipeline/skills/carries sixreview-*dirs. The ADR records where all six went, because "merged into one" is not what happened:review-code/-doc/-skillare absorbed as rubric files,review-planleaves the family forcheck-epic-plan,review-designis renamedreview-ui, andreview-trivialwas killed (Authoring brief: /review-trivial — fabrika skill (wave 3) #4715). Two judgements are carved out separately — governance-corpus integrity togovernance, visual toreview-ui.buildcreates a homonym, and the row says so.pnpm buildand build lane are live readings that this partition does not rename. The row pins the boundary in itsNotcolumn rather than pretending the general senses went away, and the ADR states the choice: accept the homonym, do not churn two settled vocabularies to protect a third.§CP
This PR is control-plane. Re-derived at head:
cp-classify classifyreturnscontent-undetermined [content-source-present](no path match, one.decisions/**file), andguard-content-probe classifyon the ADR body returnsguard-touching (§CP, ADR 0164) [guard-vocabulary-match]— the ADR names guard vocabulary while recording where the review-family gates went. Stopping at PR-open; not merging.Deviations
.glossary/TERMS.mdwithout naming a section. Did: added a dedicatedfabrika skill nounssection rather than scattering eight rows intoProducts (domains), where the existingfabrika/authoring brief/fabrika-clirows sit. Why: the eight are one partition with one shared framing (the modality cut) and one shared pointer to the ADR; the file already grows by epic-keyed thematic sections. Disposition: for the reviewer to judge.review-uiresolution. Said: the issue permits either "reconcile the two readings" or "state explicitly which onereview-uinow names". Did: both, as a supersession-in-part grounded in source (no builtreview-uiskill; the capture leg inside the renamed gate), rather than declaring one reading the winner and dropping the other. Why: an unexplained pick would leave ADR 0144's sentence looking simply wrong; it was right when written. Disposition: recorded in ADR 0242 §4.deporow, whose Definition already says "First consumer: agent Playwright screenshots → GitHub PR descriptions (via the review-ui skill)". Why: under the reconciliation above that sentence stays true — depo's first consumer is the visual gate's capture leg — so editing it would be churn, and the glossary skill mandates a surgical diff. Disposition: no action needed; flagged here because it is the one pre-existingreview-uimention in the file.reviewauthoring brief (born-assigned) #4907 closes, before fabrika corpus: teach the cutover surfaces the final names and re-check #3170 against the one-review shape #4918 starts". Did: ran now, on dispatch. Why: fabrika corpus: file the singlereviewauthoring brief (born-assigned) #4907 is closed and all eight names are locked in landed briefs, which is the condition the trigger encoded; the issue's own triage notes name an executor override as legitimate. Disposition: no action needed.{0166, 0235, 0237, 0240}and ADR 0241 asmain's max. Did: re-derived and took 0242 —ls .decisions/maxes at 0241, and the open-PR sweep confirms 0166+0240 (refactor(web): migrate Phoenix to Manti UI #4433), 0235 (docs(decisions): ADR 0235 — a fence carries zero expansions; everything dynamic lives inside the script #4614) and 0237 (docs(decisions): 0237 — agent brevity binds messages, not board artifacts (#4694) #4703) are claimed, with nothing claiming 0242. Why: the constraint said not to trust the relayed numbers. Disposition: no action needed.reviewauthoring brief (born-assigned) #4907 (the trigger's lower bound) is closed. Did: omitted that fabrika corpus: teach the cutover surfaces the final names and re-check #3170 against the one-review shape #4918 is also closed, so the "before fabrika corpus: teach the cutover surfaces the final names and re-check #3170 against the one-review shape #4918 starts" upper bound was not merely respected — it was exceeded: these rows land after the cutover amendments, which is the side Eight fabrika skill nouns are locked by #4904's plan and none has a glossary row — two of them redefine existing readings #4919 itself named as the worse one. Why: no reason; the earlier entry read the trigger's lower half and stopped. The disposition is unchanged — the eight names are locked in landed briefs, so the rows describe settled vocabulary either way — but the fact a reviewer needs is the exceeded upper bound, not the satisfied lower one. Disposition: disclosure corrected here; the earlier entry stands as written..decisions/0144-…'s frontmatter status line (plus one note at the superseded clause), and rewrote both of 0242's passages to state the rule accurately. Why: the original premise conflated two rules — the norm forbids editing an accepted ADR's decision text and mandates the status-line pointer;superseded-in-partis the corpus mechanism for exactly this case, used by.decisions/0011-…and.decisions/0029-…, both with decision text fully intact. Leaving 0144 atstatus: acceptedleft the confident-wrong-answer this ticket exists to close open at the surface a reader is likeliest to hit. Disposition: thereview-docFAIL's one failing criterion; addressed..decisions/0144-…'s status line and added a note at itsreview-uiclause, on the premise that the supersession pointer was mandated. Did: reverted.decisions/0144-…toorigin/main, byte-identical — the file leaves this PR — and rewrote ADR 0242 §4 and its Consequences bullet, plus thereview-uirow in.glossary/TERMS.md, to state coexistence only. Why: the founder ruled the premise wrong — comment 5229132312 (2026-08-09): "ADR 0242 asserts NO supersession over ADR 0144 — stay silent", corroborated by founder ruling (a), 2026-08-08 on epic Reconcile the fabrika brief corpus + docs to the locked skill-set partition (wayfinder:map #4891) #4904, transcribed into ADR 0144'sreview-uicoin needs a qualifying reference note — fabrika's visual-review gate now owns the name (founder ruling (a), 2026-08-08) #4951. A supersession stamp re-introduces exactly the confusion ADR 0144'sreview-uicoin needs a qualifying reference note — fabrika's visual-review gate now owns the name (founder ruling (a), 2026-08-08) #4951's qualifying note exists to prevent. Disposition: round 1's entry stands as written — it is the log of what was done and why; this entry records the reversal.adrskill (adr/SKILL.md§4,adr/contract.md) mandates a status-line edit on a superseded ADR. Did: did not add one. Why: the mandate applies to an ADR that is being superseded, and the founder ruled 0144 is not. Disposition: for the reviewer to confirm; do not "correct" it back to the mandate.CODE_FAIL=0 DOC_FAIL=0 SKILL_FAIL=0— no current-head verdict in any namespace. Why: the authority for this round is the founder ruling alone, riding the repair path because the fix belongs on this existing branch and PR. No[FAIL]table was consulted because none exists at this head. Disposition: both namespaces re-gate fresh against the new head..glossary/TERMS.mddeporow's qualifying fix in ADR 0144'sreview-uicoin needs a qualifying reference note — fabrika's visual-review gate now owns the name (founder ruling (a), 2026-08-08) #4951's PR. Did: did not touch thedeporow here. Why: editing it in both lanes is a two-lane collision on one row. Disposition: no action needed; ADR 0144'sreview-uicoin needs a qualifying reference note — fabrika's visual-review gate now owns the name (founder ruling (a), 2026-08-08) #4951 owns it. (This also supersedes round 0's "left a sibling surface untouched" entry's stated why — that row is now getting a fix, just not in this PR.)