Skip to content

docs(glossary): canonical rows for the eight fabrika skill nouns, and ADR 0242 for the two redefinitions (#4919) - #4973

Merged
usirin merged 3 commits into
mainfrom
usirin/glossary-fabrika-nouns-4919-827A4A95
Aug 9, 2026
Merged

docs(glossary): canonical rows for the eight fabrika skill nouns, and ADR 0242 for the two redefinitions (#4919)#4973
usirin merged 3 commits into
mainfrom
usirin/glossary-fabrika-nouns-4919-827A4A95

Conversation

@usirin

@usirin usirin commented Aug 9, 2026

Copy link
Copy Markdown
Member

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: build used to mean the general act of building, and review used to mean a family of review skills. This adds the eight rows to .glossary/TERMS.md and 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 new fabrika skill nouns section with a row per noun. Each Definition states only the current reading; the build and review rows carry the superseded reading in the Not column, 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 two review-ui readings coexist.

(repair round 2) This PR touches two files. .decisions/0144-depo-internal-asset-cdn.md was edited in repair round 1 and is reverted to origin/main, byte-identical, per the founder ruling below.

Three collisions, resolved rather than papered over

  • review-ui was already coined, for a different scope. .decisions/0144-depo-internal-asset-cdn.md names "a distinct new review-ui skill" — the Playwright step that captures UI screenshots and embeds them via depo put. Resolved (repair round 2, per founder ruling) as two distinct names that coexist — neither supersedes the other. ADR 0144 keeps status: accepted and 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: no review-ui directory exists under any plugin, so 0144's skill was never built; its capture-and-embed function landed as review-design's evidence leg over the @kampus/design-capture seam (ADR 0183); and the partition renames that same gate review-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's review-ui coin 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.
  • The review collapse is six-to-one, not four-to-one. The decision corpus reads it as four (ADRs 0079, 0226) but claude-plugins/kampus-pipeline/skills/ carries six review-* dirs. The ADR records where all six went, because "merged into one" is not what happened: review-code/-doc/-skill are absorbed as rubric files, review-plan leaves the family for check-epic-plan, review-design is renamed review-ui, and review-trivial was killed (Authoring brief: /review-trivial — fabrika skill (wave 3) #4715). Two judgements are carved out separately — governance-corpus integrity to governance, visual to review-ui.
  • build creates a homonym, and the row says so. pnpm build and build lane are live readings that this partition does not rename. The row pins the boundary in its Not column 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 classify returns content-undetermined [content-source-present] (no path match, one .decisions/** file), and guard-content-probe classify on the ADR body returns guard-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

…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.
@github-actions

github-actions Bot commented Aug 9, 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. (8e9acba)
  • web — Stage pr-4973 torn down.

@usirin

usirin commented Aug 9, 2026

Copy link
Copy Markdown
Member Author

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 .glossary/TERMS.md sits under a code root (HAS_CODE_RE in gh-issue-intake-formats.md §CLASS puts .glossary/** in has-code) — pipeline-cli class-probe classify --namespaces over the 2-file diff returns has-code, has-docsreview-code + review-doc. Scope here is the .glossary/TERMS.md half; the .decisions/** half is judged in the review-doc namespace.

§CP derivation (re-run first-party at this head)

  • pipeline-cli cp-classify classifycontent-undetermined [content-source-present] (no path match; 1 .decisions/** file that can be §CP by content, ADR 0164).
  • pipeline-cli guard-content-probe classify on the ADR body at head → guard-touching (§CP, ADR 0164) [guard-vocabulary-match].
  • §CP holds ⇒ this verdict takes the canonical advisory form (ADR 0111/0151): no bindable first-line @ <sha>, head bound in the body's Reviewed-head: line above.

Acceptance criteria (glossary surface)

  • [PASS] A row for each of the eight nouns — .glossary/TERMS.md:394–401, one row per noun in alphabetical order (build, build-epic, build-ui, check-epic-plan, front-door, governance, review, review-ui).
  • [PASS] Rows are genuine first-column table rows, not prose — each of :394–401 begins with | and splits to exactly 3 cells, so parseKnownTerms (packages/pipeline-cli/src/tools/glossary-drift/drift.ts:165, if (!line.startsWith("|")) continue;) reads all eight into the known-term set. No cell carries a stray | that would shift a column; no first cell carries a / or parenthetical that splitAliases would re-split.
  • [PASS] Each Definition states only the current (post-Reconcile the fabrika brief corpus + docs to the locked skill-set partition (wayfinder:map #4891) #4904) reading — the build and review Definitions carry a pointer to ADR 0242 §2/§3 rather than the superseded reading itself; the old readings appear only in Not. build's "renamed from v1's write-code" is provenance in the file's existing idiom (cf. the depo row's "Renamed from imge"), not a competing current reading.
  • [PASS] build and review carry the superseded reading in Not + a pointer — build's Not carries pnpm build and build lane; review's carries the v1 family (four in the corpus, six on disk) with the four-way dispersal. Both point at ADR 0242.
  • [PASS] build survives as a homonym — the Not column states verbatim that pnpm build and build lane "both survive as compounds and are NOT renamed — the bare noun in a fabrika context names the skill".
  • [PASS] The review collapse is recorded as six-to-one dispersing four ways — verified against the directory: claude-plugins/kampus-pipeline/skills/ carries exactly six review-* dirs (review-code, review-design, review-doc, review-plan, review-skill, review-trivial), while .decisions/0079-…:42 reads "all four review-*" and .decisions/0226-…:103 reads "the four review gate templates". The row states both numbers and reconciles them rather than picking the convenient one.
  • [PASS] The review-ui row reconciles ADR 0144's coinage rather than silently forking it — see the ruling below.
  • [PASS] Turkish-product / English-technical convention — all eight are English technical skill names, correct per .glossary/LANGUAGE.md.
  • [PASS] No absolute, home-rooted, machine-local or sibling-repo path — scan of the added lines clean; the head's scan changed files for leaks and sweep pipeline-crew for personal-data leaks checks are both green.
  • [PASS] Cited paths resolve at head — every relative link in the new section (../.decisions/0047, 0079, 0144, 0162, 0183, 0226, 0238, 0242, and ../packages/fabrika-cli/src/wire/verdict-marker.ts) exists in the head tree; the cited namespace regex is real (verdict-marker.ts:59, const NAMESPACE = /^review(-[a-z0-9]+)*$/). No wikilinks, no placeholders.
  • [PASS] No consumer breakage — glossary-drift reads TERMS.md only through parseKnownTerms; its unit tests run off an inline fixture (drift.unit.test.ts:12), not the live file, so added rows couple to no assertion. Adding known terms can only shrink the drift-candidate set. Head CI is fully green (0 failures, 0 in-flight).

Ruling — the review-ui collision

The reconciliation is sound, and the Not column's reading of ADR 0144 is accurate rather than convenient. All three grounding facts re-verified first-party at this head:

  1. A search for a review-ui directory under any plugin returns nothing — 0144's coined skill was never built.
  2. Its function was built inside the gate that now takes the name: claude-plugins/kampus-pipeline/skills/review-design/SKILL.md drives Playwright capture and resolves golden bytes over the @kampus/design-capture seam (:127, :447–448, :492, :500–511) with the bytes in depo per ADR 0183 (:120, :138).
  3. Brief Authoring brief: review-ui — fabrika skill (wave 3) #4718's Amendment 2 (2026-08-08) carries the quoted sentence verbatim: review-design "is not a second skill and not a predecessor to be ported: it is this same skill under its superseded name."

On whether the Not column reads 0144 honestly rather than conveniently — three reasons it does:

  • It concedes 0144's reading before superseding it. The row states that "0144 named review-ui as the standalone Playwright-capture-and-depo put skill", then supersedes that on as-built facts. The convenient move would have been to claim 0144 always meant a leg; the row does the opposite.
  • The displaced clause is not something 0144 actually decided. .decisions/0144-…:37 in full is a scoping statement protecting depo's decoupling — "depo is only the sink… Keeping them separate preserves depo's decoupling: depo does not know its consumers." "A distinct new review-ui skill, filed as its own epic" is 0144 pushing producer work out of its own scope, not ratifying a partition of the review family. 0144 has standing over depo, not over the review family's shape. And the thing 0144 was protecting survives intact under the new reading: the gate is still a consumer depo does not know about.
  • The "never a standalone skill" clause reads forward, not backward. Paired with "supersedes … in part", it states the new disposition rather than re-describing 0144's intent. That is the correct grammar for a partial supersession.

So the Not column's reading is accurate. What the ADR does not do is carry that supersession to the other side of the link — see the review-doc verdict, where that is a failing criterion.

Disclosed deviations — rulings

Advisory (non-blocking) — no criterion fails in this namespace

  • This namespace is clean; the blocker is in review-doc. ADR 0242's Consequences assert "No landed ADR is edited", and .decisions/0144-depo-internal-asset-cdn.md gets no forward pointer. That premise does not hold in this corpus, and it is a failing doc-hygiene criterion — see the review-doc verdict on this PR. It does not touch the glossary surface judged here, which is why this namespace records an all-PASS advisory.
  • Adjacent staleness, out of scope, follow-up material: the depo row at .glossary/TERMS.md:46 still reads "not built" while infra/depo now exists in the tree. Pre-existing; neither caused by nor this PR's obligation.
  • ADR number 0242 is freeorigin/main maxes at 0241; the open-PR sweep (8 open PRs) finds .decisions/ claims only at 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), nothing at 0242; exactly one 0242 path exists at head; pipeline-cli decisions-index validate reports no duplicate or mismatched id.
  • ADR 0144 is untouched by the diff — the PR changes exactly two files.
  • The ADR's date: 2026-08-09 is not a future date: the head commit is authored 2026-08-08T17:33-07:00 = 2026-08-09T00:33Z. UTC-dated, correct.

Read the PR head (§HEAD): every file under review was sourced read-only from 8c05ba49677892085d4958c5a6afa9b2bf51fed6 through a per-run ref materialized from refs/pull/4973/head, asserted equal to the pinned head before any file was read. No working tree was switched at any point.

This verdict authorizes nothing. It is advisory only: the first line carries no bindable @ <sha> by design (ADR 0111), so this PR is never auto-mergeable off it. A @kamp-us/control-plane approval at head is what authorizes the merge (ADR 0135) — and this PR is not ready to merge today regardless, because the review-doc namespace carries a FAIL at this head. review-code does not merge.

Verdict-written: 2026-08-09T00:51:23Z

@usirin

usirin commented Aug 9, 2026

Copy link
Copy Markdown
Member Author

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 .decisions/0242-fabrika-skill-nouns-redefine-build-and-review.md; the .glossary/TERMS.md half is judged in the review-code namespace (.glossary/** is a code root — pipeline-cli class-probe classify --namespaces over the 2-file diff returns has-code, has-docs).

§CP derivation (re-run first-party at this head)

  • pipeline-cli cp-classify classifycontent-undetermined [content-source-present].
  • pipeline-cli guard-content-probe classify on the ADR body at head → guard-touching (§CP, ADR 0164) [guard-vocabulary-match].
  • §CP holds. This is nevertheless the bindable FAIL form, not the §CP advisory form — deliberately, per ADR 0226: the advisory is a PASS path only, and a gate that finds a failing criterion on a §CP PR emits its FAIL marker instead, because an advisory carrying a [FAIL] criterion is a state nothing downstream can act on. This verdict does not authorize a merge; it routes the PR into a repair round.

Acceptance criteria

Doc hygiene

  • [PASS] House-format — frontmatter (id/title/status/date/tags) + # 0242 — … + **What this decides:** + ## Context / ## Decision / ## Consequences.
  • [PASS] Index row — n/a by design: there is no committed .decisions/index.md (ADRs 0126/0129); discovery is the CLAUDE.md contract. The ADR PR is correctly additive.
  • [PASS] Links resolve — every relative target in 0242 (../.glossary/TERMS.md, ../claude-plugins/kampus-pipeline/skills/, ../packages/fabrika-cli/src/wire/verdict-marker.ts, 0079-…, 0144-…, 0183-…, 0226-…) exists in the head tree. No wikilinks, no placeholders. The head's check docs have no dead internal links job is green.
  • [PASS] No leaked local/home paths — added-lines scan clean.
  • [PASS] Status sanity — accepted is a house-vocabulary value and is coherent with the content.
  • [PASS] Single Diátaxis mode — single-mode: explanation throughout; no how-to or reference intrusion.
  • [PASS] Clear, concise prose — active voice, concrete, no AI-tell density. "A register can state a term. It cannot state a diff." earns its place.
  • [PASS] Date is correct — date: 2026-08-09 is not in the future: the head commit is authored 2026-08-08T17:33-07:00 = 2026-08-09T00:33Z. UTC-dated.
  • [FAIL] Supersession noted + cross-linked — the cross-link does not close both ways.

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: .decisions/0144-depo-internal-asset-cdn.md is still status: accepted with no forward pointer, so a reader who lands on :37 — the single most likely path to this collision, and exactly how #4919's triage found it — reads "a distinct new review-ui skill" and resolves the name to the standalone reading with no signal that the reading moved. That is the confident-wrong-answer failure mode this ticket exists to close, left open at one of its two surfaces.

This is a named check, not a preference. review-doc's own checklist item 5 states it verbatim: "the superseding doc names what it supersedes and the superseded doc is updated to point forward (its frontmatter status reflects superseded by [NNNN]) … A new ADR that obsoletes an old one without touching the old one's status is a FAIL — the cross-link must close both ways."

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:

  • The adr skill states the shape of an ADR PR three separate times as "purely additive: it adds one .decisions/NNNN-slug.md file (plus the status-line edit on a file it supersedes or amends-in-part)". The status-line edit is part of the sanctioned additive shape, not a violation of it.
  • The same skill's Rules: "Superseding an older ADR: in the new file write Supersedes [NNNN](…) in ## Context, and edit the old file's front-matter status: superseded by [NNNN](…) plus a body line Superseded by [NNNN](…)." And separately: "Never edit an accepted ADR's decision text after the fact — supersede instead, or amend in part." The prohibition is scoped to decision text.
  • The corpus already carries a first-class status for precisely this partial case, used at least twice: .decisions/0011-drizzle-context-service.md:4status: superseded-in-part by [0014](0014-drizzle-run-batch-as-service-methods.md) (plus an optional superseded-section-by: 0014 field and a one-line body note), and .decisions/0029-worker-runtime-servicemap.md:4status: superseded-in-part by [0041](0041-fate-bridge-worker-managed-runtime.md). Both remain fully readable dated records with every word of their decision text intact.

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; -in-part is exactly what encodes that.

The fix (one file, two lines, matching the 0011/0029 exemplar):

  1. .decisions/0144-depo-internal-asset-cdn.md frontmatter: status: superseded-in-part by [0242](0242-fabrika-skill-nouns-redefine-build-and-review.md).
  2. A one-line note at :37, or immediately under the title in 0011's form, recording that the review-ui clause specifically is superseded by 0242 and that depo's own decision stands.

Optionally mirror 0011's superseded-section-by: 0242 frontmatter field. This keeps the PR within the adr skill's additive shape (the ADR file plus the status-line edit on the file it supersedes-in-part), and it closes the collision at the surface where a reader is most likely to hit it.

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 review-ui directory exists under any plugin; the capture-and-embed function was built inside review-design over the @kampus/design-capture seam with golden bytes in depo per ADR 0183 (review-design/SKILL.md:120, :127, :138, :447–448, :492, :500–511); and #4718's Amendment 2 (2026-08-08) carries the quoted sentence verbatim.

And the Not column's reading of 0144 is accurate rather than convenient: it concedes 0144's original reading in so many words before superseding it (the convenient move would have been to claim 0144 always meant a leg); the clause it displaces is 0144 pushing producer work out of its own scope to protect depo's decoupling, not 0144 ratifying a partition of the review family it has no standing over; and that decoupling survives intact under the new reading, since the gate remains a consumer depo does not know about. "Never a standalone skill" reads forward as the new disposition, which paired with "supersedes … in part" is the correct grammar.

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 8c05ba49677892085d4958c5a6afa9b2bf51fed6 through a per-run ref materialized from refs/pull/4973/head, asserted equal to the pinned head before any file was read. No working tree was switched at any point.

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. review-doc does not merge.

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>
@usirin

usirin commented Aug 9, 2026

Copy link
Copy Markdown
Member Author

HOLD — this PR contradicts a founder ruling recorded on #4951

Posting 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 .decisions/0144-depo-internal-asset-cdn.md: repair round 1 changed the frontmatter from status: accepted to status: superseded-in-part by [0242](...) and added superseded-section-by: 0242, plus a note at the review-ui clause framing that clause as superseded — "review-ui is no longer a standalone skill… the name now denotes the visual half of review."

What the founder ruled, option (a), 2026-08-08, recorded on epic #4904 and transcribed into #4951's body and acceptance criteria:

ADR 0144 is not overturned — status: accepted stays.

and, in #4951's constraints:

Append-style amendment only. Add a dated note; do not rewrite or delete the existing Consequences bullet, and do not change the frontmatter status: accepted. The ruling preserves the ADR.

The ruling resolves the review-ui collision as two distinct names coexisting — fabrika keeps review-ui for its visual gate, ADR 0144 keeps its coin plus a qualifying pointer. This PR resolves the same collision as supersession. Those are opposite answers to one question, and the founder already answered it.

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 0011 / 0029 precedents). That norm is real, but it does not apply here: it governs an ADR that is being superseded, and the founder ruled 0144 is not. I dispatched without reading #4951, the issue that governs this exact file. The lane executed my premise faithfully and disclosed the change honestly in ## Deviations.

Consequences for this PR:

  • It does not bank in its current shape.
  • The .decisions/0144-*.md frontmatter change must be reverted to status: accepted, and the clause note reframed from supersession to coexistence.
  • ADR 0242's text asserting it supersedes 0144 in part needs the same correction — 0242 cannot supersede an ADR the founder preserved.

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 5229101935 and 5229107623, the second putting .glossary/TERMS.md's depo row explicitly in scope for the same PR). This PR touches both .decisions/0144-*.md and .glossary/TERMS.md, so it overlaps #4951's file set directly — no separate lane opens on #4951 until this one resolves, or the two will write the same lines.

@usirin

usirin commented Aug 9, 2026

Copy link
Copy Markdown
Member Author

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 status: accepted untouched, per the founder's ruling (a) of 2026-08-08 (recorded on #4904, transcribed into #4951): the two review-ui names coexist, and the qualifying note (#4951) discharges the collision. The superseded-in-part by 0242 frontmatter change in this PR's repair must be reverted before it banks. Accepted rationale: a supersession stamp re-introduces exactly the confusion the qualifying note exists to prevent.

@usirin

usirin commented Aug 9, 2026

Copy link
Copy Markdown
Member Author

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 CONTROL_PLANE_TOUCHED and a GUARD_TOUCHING naming both .decisions/0144-depo-internal-asset-cdn.md and .decisions/0242-fabrika-skill-nouns-redefine-build-and-review.md (3 files scanned, 2 ADRs content-probed) — a guard-touching .decisions/** ADR, §CP by content per ADR 0164. content-undetermined from cp-classify is not a non-§CP answer; guard-content-probe classify resolves it, and it resolved to guard-touching. My verdict is advisory only: it does not authorize a merge. Under the §CP hard gate (ADR 0135), a @kamp-us/control-plane member approves this at its current head and ship-it then enqueues it (ADR 0048 single merge authority) — there is no human hand-merge in the §CP path.

Reviewed-head: @ 9d0ed5a

Re-gate at a moved head. The prior round's verdicts were bound to 8c05ba49; that head is gone, so every marker at it is staleness-invalidated (ADR 0058). This verdict is a full re-run against 9d0ed5a9, not a carry-forward. I verified the ".glossary/TERMS.md is unchanged since" claim rather than accepting it: the 8c05ba49..9d0ed5a9 diffstat is .decisions/0144-… (+4/-1) and .decisions/0242-… (+20/-6) only — TERMS.md is not in the repair diff. Its criteria are re-verified below against the head file regardless.

Verified PR #4973 against the acceptance criteria of #4919, one at a time — all pass:

  • [PASS] .glossary/TERMS.md carries a row for each of the eight nouns — all eight land as real first-|-column table rows at head (TERMS.md:394–401): build, build-epic, build-ui, check-epic-plan, front-door, governance, review, review-ui. Real rows matter here specifically: glossary-drift's parseKnownTerms skips any line not starting with | (packages/pipeline-cli/src/tools/glossary-drift/drift.ts:165), which the issue's own triage named as why prose would not have counted. They sit in a new ## fabrika skill nouns (the modality partition — epic #4904) section, alphabetized within it — the glossary skill's own ordering rule (glossary/SKILL.md:141).
  • [PASS] Each row's Definition states only the current (post-Reconcile the fabrika brief corpus + docs to the locked skill-set partition (wayfinder:map #4891) #4904) reading — checked cell by cell. The six additions carry only the new reading. The two redefinitions carry the current reading plus a pointer, never the old text: build — "Redefinition — ADR 0242 §2 records what the bare noun meant before"; review — "Redefinition — see ADR 0242 §3". A pointer to where the old reading lives is not a statement of it.
  • [PASS] The build and review rows carry the superseded reading in the Not column, pointing at the dated record — build's Not carries both live senses (pnpm build, build lane) and names the record inline ("ADR 0242 §2 accepts the homonym rather than propagating a rename"). review's Not carries the superseded family reading in full — four in the corpus (ADRs 0079, 0226), six on disk, and the four-way dispersal — with the 0242 §3 pointer in the same row's Definition cell. Noting the placement explicitly rather than burying it: the pointer for review sits one cell left of the superseded reading, not inside the Not cell. Both halves the criterion asks for are present in the row and a reader cannot miss either, so this passes; the letter-vs-placement observation is recorded, not charged.
  • [PASS] The review-ui row explicitly reconciles or supersedes ADR 0144's coinage rather than silently forking it — the row's Not column opens with "a second review-ui beside ADR 0144's coinage" and states the reconciliation on three checkable facts. I re-derived all three: (a) no review-ui directory exists under any plugin (claude-plugins/kampus-pipeline/skills/ → 0 matches; claude-plugins/fabrika/skills/ holds only adr, report, triage), so 0144's skill was never built; (b) the capture-and-embed leg is cited to the @kampus/design-capture seam and ADR 0183, which exists on the base branch; (c) ADR 0242 §4 supersedes 0144's sentence in part. Not a silent fork.
  • [PASS] One dated .decisions/ entry records the build and review redefinitions — what each word meant before, what it means now, and the ruling it came from — .decisions/0242-fabrika-skill-nouns-redefine-build-and-review.md, date: 2026-08-09. §2 gives build an explicit Before: / Now: pair; §3 does the same for review, with the six-to-one dispersal as a table. The ruling is cited to the founder lock on fabrika's skill set — live/die/merge/split over the 16 authoring briefs #4891 (2026-08-08), transcribed by epic Reconcile the fabrika brief corpus + docs to the locked skill-set partition (wayfinder:map #4891) #4904. The ADR number is free at the merge target: the base branch's .decisions/ maxes at 0241, and no 0242- file exists there.
  • [PASS] The work is done through the glossary skill and follows the Turkish-product / English-technical convention — the diff matches the skill's declared shape on every count: sectioned | Term | Definition | Not | tables (glossary/SKILL.md:76), one row per term, alphabetized within the section (:141), and surgical (:148) — no untouched row is reformatted and no existing definition is regenerated. Convention: all eight are technical skill names, so English is correct per .glossary/LANGUAGE.md:337 ("Turkish for product / brand, English for technical"); no Turkish brand noun is anglicized.
  • [PASS] No artifact cites an absolute, home-rooted, machine-local, or sibling-repo path — scanned the full PR diff for user-home, system-temp, agent-worktree and sibling-repo path prefixes: zero matches. Every link in both files is repo-relative and resolves — the eight ADR links (0047, 0079, 0144, 0162, 0183, 0194, 0226, 0238) all exist on the base branch under exactly the filenames cited, and packages/fabrika-cli/src/wire/verdict-marker.ts exists with const NAMESPACE = /^review(-[a-z0-9]+)*$/; at line 59 — the exact regex ADR 0242 §3 and the review row quote.

The repair round itself, verified rather than taken on report. The review-doc FAIL turned on ADR 0144 being left at status: accepted with no forward pointer. The fix mirrors ADR 0011's two-field form, and I checked 0011 on the freshly-fetched base: it carries both status: superseded-in-part by [0014](…) and superseded-section-by: 0014. ADR 0144 at head now carries both, keyed to 0242. ADR 0029 carries the status line alone — so 0011 is indeed the closer exemplar for a single displaced clause, as the author argued. 0144's decision text is untouched word for word: its diff is two frontmatter lines plus one added nested bullet under the review-ui clause; there is not a single deletion in its body.

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 adr skill, which mandates the status-line edit rather than tolerating it (adr/SKILL.md §4 "Resolve every reference, then edit the status lines"; adr/contract.md:404 — "the four-digit id of the older ADR whose status line changes"), and superseded-in-part is an attested corpus status (contract.md:304 counts two live instances). The earlier "do not touch the file" reading was the defect; it is gone from both the ADR and the PR body.

Sub-gates, each emitting what it scanned (§ZS):

  • glossary-freshness: not applicable — no new feature folder / public package / export in this PR (detector expressible here: 50 candidate surfaces on base, so the empty scan is a fact about this PR, not detector blindness).
  • comment-discipline: not applicable — 0 comment lines added or changed (the diff is markdown only).
  • unresolved-threads: not applicable — the review-thread read ran and returned no threads on this PR (the read is asserted, not assumed).
  • session-caching gate: not applicable — the scan returned 1 candidate line, 0242:100 ("…churn two settled vocabularies to protect a third"), which is ADR prose and not a session-caching seam. Nothing in this diff serves an authenticated request without a fresh source-of-truth revalidation.
  • flag-gating (containment): not applicableEight fabrika skill nouns are locked by #4904's plan and none has a glossary row — two of them redefine existing readings #4919 carries no **Containment:** marker (the marker probe returns none).
  • deviation-disclosure: PASS — nothing undisclosed that this gate could see. The body's ## Deviations carries seven entries, and the two departures this repair actually introduced are both disclosed at the right weight: editing a file the PR had previously declared untouched (the ADR-departure class — disclosed with the corrected rule and the 0011/0029 precedents), and the sequencing entry that understated its own bound (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 exceeded, not merely satisfied). The earlier entries were left standing rather than rewritten, which is the correct amend-don't-overwrite shape.

Run-evidence bundle: PRESENT for head 9d0ed5a9 — producer run 31287527487, artifact 9030367297, manifest.commit == head, schemaVersion 1; checks 2/2 pass; tests 2420/2420 passed, 0 failed, 0 skipped.

Read the PR head (§HEAD): every file under review was sourced from 9d0ed5a9284438602c12cec6bd934363501d67f4 via the per-run PR ref and its throwaway worktree — never the launched checkout's working copy. Base-side ground-truth checks (the 0011/0029 precedents, the eight ADR filenames, verdict-marker.ts) were read from the freshly-fetched base ref, never a local branch.

One non-blocking observation, out of scope for this PR — not a criterion, recorded so it is not lost. .glossary/TERMS.md's pre-existing depo row still describes review-ui in ADR 0144's standalone sense. Under this PR's reconciliation that sentence stays true (depo's first consumer is the visual gate's capture leg), and the author disclosed the decision to leave it — the glossary skill's surgical-diff rule is the right call. Worth a follow-up sweep when someone next touches that row, not a change to make in this diff.

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 @kamp-us/control-plane approval at 9d0ed5a9, after which ship-it enqueues it. A head move past that approval invalidates it.

Verdict-written: 2026-08-09T01:16:26Z

@usirin

usirin commented Aug 9, 2026

Copy link
Copy Markdown
Member Author

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

Reviewed-head: @ 9d0ed5a

Re-gate after repair round 1. The head moved 8c05ba49…9d0ed5a9…, so every prior marker on this PR is staleness-invalidated (ADR 0058); this verdict binds the current head only. Scope of this namespace is the two .decisions/** files; .glossary/TERMS.md is a code root and is judged in the review-code namespace, which must also carry a current-head verdict before ship-it can act.

§CP derivation (re-run first-party at this head)

  • pipeline-cli cp-classify classify over the 3-file set → content-undetermined [content-source-present] — no path match, 2 .decisions/** files that can be §CP by content (ADR 0164). Not a non-§CP answer.
  • pipeline-cli guard-content-probe classify on each ADR body read from the head → guard-touching (§CP, ADR 0164) [guard-vocabulary-match] for both 0242 and 0144.
  • §CP holds ⇒ this verdict takes the canonical advisory form (ADR 0111/0151): no bindable first-line @ <sha>, head bound in the Reviewed-head: line above. It does not authorize a merge. A @kamp-us/control-plane member approves at this head and ship-it then enqueues (ADR 0135 approve-then-enqueue; ADR 0048 single merge authority).

Acceptance criteria (#4919)

  • [PASS] Eight rows in .glossary/TERMS.md — the added ## fabrika skill nouns (the modality partition — epic #4904) section carries one genuine table row each for build, build-epic, build-ui, check-epic-plan, front-door, governance, review, review-ui. Judged here for completeness; the glossary surface itself is the review-code namespace.
  • [PASS] Each Definition states only the current (post-Reconcile the fabrika brief corpus + docs to the locked skill-set partition (wayfinder:map #4891) #4904) reading — build and review carry a pointer to ADR 0242 §2/§3, never the superseded reading itself. The build row’s "renamed from v1’s write-code" is provenance in the file’s existing idiom, not a competing current reading.
  • [PASS] build and review carry the superseded reading in Not + a pointer — the build row’s Not holds pnpm build and build lane with the homonym ruling stated; the review row’s holds the v1 family (four in the corpus, six on disk) with the four-way dispersal. Both point at ADR 0242.
  • [PASS] The review-ui row explicitly reconciles ADR 0144’s coinage rather than forking it — its Not opens "a second review-ui beside ADR 0144’s coinage", states that 0144’s skill was never built, that its capture-and-embed function landed as a leg of this gate over the @kampus/design-capture seam (ADR 0183), and points at 0242 §4 as the supersession-in-part.
  • [PASS] One dated .decisions/ entry records both redefinitions — ADR 0242 (date: 2026-08-09), §2 for build and §3 for review, each with a before / now / ruling triple; the ruling is cited (fabrika's skill set — live/die/merge/split over the 16 authoring briefs #4891 wayfinder:map, transcribed by Reconcile the fabrika brief corpus + docs to the locked skill-set partition (wayfinder:map #4891) #4904).
  • [PASS] Done through the glossary skill, TR/EN convention honored — the diff lands in the file’s Term | Definition | Not shape as a section-with-preamble, which is that skill’s output form; all eight nouns are technical skill names and stay English, and no Turkish product/brand copy is touched. The process half is attested in the author’s progress comment; the artifact conformance is what this gate can and does check.
  • [PASS] No absolute, home-rooted, machine-local or sibling-repo path — the added-lines scan through the shared matcher exits 0 (clean) over all 171 added lines.

The repair round’s four items, verified against the diff rather than the claim

  • [PASS] 1 — 0144’s status line, decision text intact. .decisions/0144-… frontmatter now reads status: superseded-in-part by [0242](0242-fabrika-skill-nouns-redefine-build-and-review.md) plus superseded-section-by: 0242. The whole-file diff is +3 / −1: the status line replaced, the section field added, and one nested bullet added. Not one character of 0144’s ## Decision or of any existing ## Consequences bullet changed — the six numbered decisions and the "Dumb by mandate" / "Public-read is forced" paragraphs are byte-identical to base. The form matches .decisions/0011-drizzle-context-service.md exactly (superseded-in-part by […] + superseded-section-by:); .decisions/0029-worker-runtime-servicemap.md carries the status half of the same shape. Both precedents re-read first-party at origin/main.
  • [PASS] 2 — the note sits at the colliding clause. A nested line under the review-ui bullet in ## Consequences records that this clause specifically is superseded in part by 0242, that the name now denotes the visual half of review, and that depo’s own decision — including the decoupling the clause protects — stands unchanged. It is placed where a reader hits the wrong reading, which is how Eight fabrika skill nouns are locked by #4904's plan and none has a glossary row — two of them redefine existing readings #4919’s triage found the collision.
  • [PASS] 3 — 0242’s justification is now accurate and does not re-argue the reconciliation. Both wrong passages are gone from the head (a grep for "No landed ADR is edited" / "0144 itself is untouched" over .decisions/ at the head returns nothing). Consequences now reads "No landed ADR’s decision text is edited — the status line of the one superseded ADR is", and §4 now reads "An ADR’s decision text is inviolate, but its status line is exactly where a moved reading is recorded", citing 0011 and 0029. That is the correct statement of the norm: the prohibition is scoped to decision text, the status-line pointer is mandated. §4’s substance — the three grounding facts and the "leg of the visual gate, never a standalone skill" disposition — is unchanged, so the sound reconciliation was not disturbed and nothing is re-litigated.
  • [PASS] 4 — the ## Deviations disclosures. The section is present (absent is not None., §DEV) and append-only: all five original entries stand verbatim, with two new (repair round 1) entries appended. The first discloses 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 exceeded, not merely satisfied — verified first-party: fabrika corpus: teach the cutover surfaces the final names and re-check #3170 against the one-review shape #4918 closed 2026-08-08T23:17:09Z and fabrika corpus: file the single review authoring brief (born-assigned) #4907 closed 2026-08-08T22:11:13Z, both before this PR opened. The second discloses that the PR now edits a file it had declared untouched, names the conflated rule as the cause, and marks it as the review-doc FAIL’s one failing criterion. Both are the accurate disclosure, not a softened one.

Doc hygiene

  • [PASS] House-format — ADR 0242 carries id/title/status/date/tags, a What this decides: line, and ## Context / ## Decision / ## Consequences. ADR 0144 keeps its house shape; only frontmatter and one additive bullet changed.
  • [PASS] Index row — no .decisions/index.md is committed (ADR 0126, ambient discovery); the diff is 3 files. ADR 0242’s frontmatter status: accepted is the source the ambient map renders. .patterns/index.md is not implicated.
  • [PASS] Links resolve — every relative link the diff adds was checked against a freshly-fetched origin/main: 0011, 0029, 0047, 0079, 0144, 0162, 0183, 0226, 0238, ../.glossary/TERMS.md, ../claude-plugins/kampus-pipeline/skills/ and ../packages/fabrika-cli/src/wire/verdict-marker.ts all exist; 0242 resolves within the PR. Standard markdown relative paths throughout, no wikilinks.
  • [PASS] No leaked local/home paths — the added-lines scan through the shared matcher is clean (exit 0).
  • [PASS] Supersession noted + cross-linked — the prior round’s one FAIL, now closed. The cross-link closes both ways: 0242 §4 names what it supersedes and why; 0144’s frontmatter and its colliding clause both point forward. A reader landing on 0144’s review-ui sentence is now told the reading moved, at the surface they are likeliest to hit.
  • [PASS] Status sanity — 0242: accepted is coherent with an entry recording a founder-locked partition already being built against. 0144: superseded-in-part by [0242](…) is house vocabulary with two live precedents, and -in-part is exactly right: depo’s own decision stays live and only one clause is displaced.
  • [PASS] Single Diátaxis mode — single-mode: explanation for both ADRs (0144’s added line is an explanation note inside an explanation page); the TERMS.md section is single-mode: reference. No type-mixing.
  • [PASS] Clear, concise prose — active, concrete, no AI-tell density. "A register can state a term. It cannot state a diff." earns its place, and the repaired §4 passage is tighter than what it replaced.

Step 4a — ADR contradiction sweep (citation-independent)

Questions ADR 0242 settles, enumerated from its title / What-this-decides / ## Decision before any citation was read: (1) do the eight fabrika skill names become canonical nouns with register rows? (2) what does the bare noun build name now, and do the general senses survive? (3) what does review name now, and where does the v1 family’s judgement go? (4) which reading does review-ui name, and how is ADR 0144’s prior coinage disposed of?

adr-sweep over the head: 238 ADRs scanned, 198 live-accepted + uncited in scope, shortlist of 8 — 0128, 0241, 0238, 0099, 0218, 0239, 0210, 0119. Each opened and judged:

  • 0128 (concept-level glossary triggers, at coinage) — adjacent, not conflicting. It rules on when a glossary row gets written and prescribes exactly the point-of-coining catch this PR performs. 0242 is an instance of 0128, not a re-decision of it.
  • 0099 (.glossary/ is a committed doc surface, the glossary skill joins the suite) — rules on the surface and its owner, not on any word’s meaning. Consistent.
  • 0241 (wire formats owned by typed schema modules, never by skill prose) — the closest call, opened and cleared. Its ban is on restating a wire format’s shape in a skill body, contract or second doc. 0242 quotes one namespace regex as evidence, cited to its owning module (wire/verdict-marker.ts), which is the cite-it half 0241 requires rather than a second home a consumer would parse against; the corpus already treats glossary citation of those modules as fine (the pre-existing wire format / schema module rows do the same). No same-question rule.
  • 0238 (fabrika re-implements v1, never calls it) — rules on call-vs-reimplement. 0242 records vocabulary and explicitly holds v1 frozen-and-on-disk, which is 0238’s premise. Consistent, and the build row cites it.
  • 0218, 0239, 0210, 0119 — lexical/tag adjacency only (governance, clause, superseded, changed); none rules on any of the four questions.

Semantic pass by hand, beyond what the tool can reach: ADRs 0079 and 0226 use "four review-*" descriptively rather than deciding the noun, and 0242’s Consequences addresses them by name — they stay untouched as descriptions of frozen v1, with 0242 as the bridge rather than a retraction. That is the correct disposition, not an omission. No uncited, unamended same-question conflict with a live accepted ADR. Recorded per ADR 0092: a clean sweep is not proof of no contradiction, and both the enumeration and the shortlist reads were done by hand.

Step 4b — specialist fan-out + route (ADR 0079)

  • claim-vs-ground-truth — every load-bearing factual claim re-verified against a freshly-fetched origin/main: no review-ui directory exists under any plugin; packages/fabrika-cli/src/wire/verdict-marker.ts:59 is the namespace class the ADR quotes; claude-plugins/kampus-pipeline/skills/ carries exactly six review-* dirs; 0011 and 0029 both read status: superseded-in-part by […]; the .decisions/ corpus on origin/main maxes at 0241, so 0242 is free. No finding.
  • dangling-reference — none; all added relative links resolve.
  • omitted-case — none. The supersession chain now closes in both directions, which was the one open case.
  • One out-of-scope finding, routed and not blocking this PR: the depo row in .glossary/TERMS.md still reads "not built" while infra/depo exists in the tree. Pre-existing, untouched by this diff, and on the glossary surface rather than this namespace. Filed as glossary drift: the depo row still reads "not built" while infra/depo exists in the tree #4974 per ADR 0079’s out-of-scope route.

Step 4c — deviation disclosure (§DEV)

Read the PR head (§HEAD): every file under review was sourced read-only from 9d0ed5a9284438602c12cec6bd934363501d67f4 — the head fetched into a per-run ref from refs/pull/4973/head and asserted equal to the pinned head before any file was read, plus the canonical PR diff from the REST API. No working tree was switched at any point, and the launched checkout’s working copy was never read as evidence.

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 (.decisions/** content axis, ADR 0164), so this verdict is advisory only and does not authorize a merge. review-doc does not merge. Next step is a @kamp-us/control-plane approval at 9d0ed5a9…, after which ship-it enqueues (ADR 0135 / ADR 0048). A head move past that approval invalidates it. The review-code namespace also needs a current-head verdict before ship-it can act — .glossary/TERMS.md rides the .glossary/** branch of HAS_CODE_RE, so this is not a docs-only diff.

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.
@usirin

usirin commented Aug 9, 2026

Copy link
Copy Markdown
Member Author

Lane state at head 8e9acba1 — repair round 2 landed, ZERO current-head verdicts

Durable note from the conducting engine. The environment is dropping agents (five stalls tonight: two mid-stream API errors, three 600s watchdog timeouts), so this records state on the board rather than in a session.

Head: 8e9acba14ddcf508ddd7b3b730e5901784c418df. Verified first-party.

Repair round 2 is landed and verified, against founder ruling 5229132312:

Verdict coverage — all four existing markers are STALE (ADR 0058):

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.

@usirin

usirin commented Aug 9, 2026

Copy link
Copy Markdown
Member Author

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 (8c05ba49, 9d0ed5a9) and none was treated as evidence — including the two review-code/review-doc advisories that PASSed the supersession framing the founder then struck. This verdict is a full first-party re-run, and it is scoped to the review-code namespace only; review-doc is a separate gate.

Why this namespace is required. pipeline-cli class-probe classify --namespaces over the 2-file diff → has-code, has-docsreview-code + review-doc. .glossary/TERMS.md rides HAS_CODE_RE's .glossary/** branch, so this is not a docs-only PR (#2434). Scope of this namespace is .glossary/TERMS.md.

§CP derivation (re-run first-party at this head)

  • pipeline-cli cp-classify classify over the 2-file set → content-undetermined [content-source-present] — no path match, 1 .decisions/** file that can be §CP by content (ADR 0164). Not a non-§CP answer.
  • pipeline-cli guard-content-probe classify on .decisions/0242-… read from the head → guard-touching (§CP, ADR 0164) [guard-vocabulary-match].
  • §CP holds ⇒ canonical advisory form (ADR 0111/0151): no bindable first-line @ <sha>; head bound in Reviewed-head: above. This verdict does not authorize a merge. A @kamp-us/control-plane member approves at this head and ship-it enqueues (ADR 0135 approve-then-enqueue; ADR 0048 single merge authority). No failing criterion, so the bindable-FAIL path of ADR 0226 does not apply.

Governing rulings honored (read from this thread before gating)

Acceptance criteria (#4919) — glossary surface

  • [PASS] A row for each of the eight nouns. .glossary/TERMS.md gains a ## fabrika skill nouns (the modality partition — epic #4904) section whose table carries exactly eight rows, each noun the literal first cell (so pipeline-cli glossary-drift's parseKnownTerms first-column reader sees them): build, build-epic, build-ui, check-epic-plan, front-door, governance, review, review-ui. Alphabetical.
  • [PASS] Table integrity — independently confirmed. The repair lane self-reported catching a dropped | mid-edit; verified from the head blob rather than the report. All eight rows have exactly 4 pipe separators → 3 cells (Term / Definition / Not), no merged cell, no | leaked into any cell body. Header | Term | Definition | Not | and separator |---|---|---| both present and well-formed.
  • [PASS] Each Definition states only the current reading. The build and review Definitions state the post-Reconcile the fabrika brief corpus + docs to the locked skill-set partition (wayfinder:map #4891) #4904 reading and carry only a pointer to the old one (ADR 0242 §2 / §3); the superseded readings themselves live in Not, per the issue's own prescription.
  • [PASS] build and review carry the superseded reading in Not, pointing at the dated record. build Not: the pnpm build compile step, the build lane WIP unit, and v1's write-code — with the ADR 0242 §2 homonym ruling named in-cell. review Not: the v1 review family, four in the corpus and six on disk, with the four-way dispersal spelled out. (Minor, non-blocking: the review row's ADR pointer sits in Definition rather than in Not — same row, adjacent cell; the criterion is met in substance.)
  • [PASS] AC-4 — the review-ui row reconciles ADR 0144's coinage rather than silently forking it, and does so the way the founder ruled. The row names 0144's coinage, then states: "The two are distinct names that coexist, and neither supersedes the other: 0144 keeps status: accepted (founder ruling (a), 2026-08-08 on epic Reconcile the fabrika brief corpus + docs to the locked skill-set partition (wayfinder:map #4891) #4904), and a qualifying note at its clause (ADR 0144's review-ui coin needs a qualifying reference note — fabrika's visual-review gate now owns the name (founder ruling (a), 2026-08-08) #4951) is what disambiguates a reader landing there." Grepped at head: no supersession assertion over 0144 anywhere in either changed file. This is the ruled resolution, and it discharges AC-4 — the criterion asks the row to reconcile the two readings, which coexistence-plus-ADR 0144's review-ui coin needs a qualifying reference note — fabrika's visual-review gate now owns the name (founder ruling (a), 2026-08-08) #4951's-note does.
  • [PASS] No absolute, home-rooted, machine-local, or sibling-repo path. Grep over all added lines for /Users/, ~/, /home/, $HOME, code/github.com → zero hits.
  • [PASS] Turkish-product / English-technical. All eight are technical skill names; English, correctly.

Checkable facts asserted by the rows — each verified at source, not accepted

ADR 0242 §4 — coexistence-only, confirmed. Though the ADR body is review-doc's scope, the glossary rows lean on it, so §4 was read at head: "this entry claims nothing over ADR 0144", "ADR 0144 is not overturned — it keeps status: accepted and every word of its decision text", and the qualifying note is "#4951's to write, not this entry's". Consequences repeats it: "No landed ADR is edited by this entry — not its decision text, not its status line." Nothing in §4 asserts authority over 0144.

## Deviations (§DEV) — present and non-empty; absent is not None., and it is not absent. Eleven entries: five from round 0, two labelled (repair round 1), four labelled (repair round 2)appended below the earlier ones, which stand in place. The round-2 reversal entry explicitly preserves its predecessor ("round 1's entry stands as written — it is the log of what was done and why; this entry records the reversal"). Two entries are genuinely reviewer-facing and are accepted as disclosed: the deliberate non-following of the adr supersession mandate (correct, per the ruling above) and the repair round run with no current-head gate FAIL behind it (CODE_FAIL=0 DOC_FAIL=0 SKILL_FAIL=0) — legitimate here, since the authority for round 2 is the founder ruling itself, and it is disclosed rather than hidden. (Body-history verbatimness of the earlier entries is not machine-checkable — GitHub keeps no issue-body history — so it is taken on the disclosure's own record, which is internally consistent.)

Verdict: PASS on the review-code namespace at 8e9acba1. Advisory only — no merge authorized by this comment. review-doc must still land its own current-head verdict before ship-it can act.

@usirin

usirin commented Aug 9, 2026

Copy link
Copy Markdown
Member Author

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 @kamp-us/control-plane member approves this at its current head and ship-it then enqueues it (ADR 0048 single merge authority) — there is no human hand-merge in the §CP path.

Reviewed-head: @ 8e9acba

Scope + evidence discipline. This verdict covers the review-doc namespace only — .decisions/0242-fabrika-skill-nouns-redefine-build-and-review.md. .glossary/TERMS.md rides HAS_CODE_RE's .glossary/** branch and is judged in review-code (advisory at this head, comment 5229246748). All four earlier markers on this PR are stale (8c05ba49, 9d0ed5a9) and none was used as evidence — including 5229148782, the previous review-doc advisory, which passed the supersession framing the founder then struck. This is a full first-party re-run. Every file under review was read from the PR head off a per-run fetched ref (§HEAD), never from the launched checkout's working copy.

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)

  • pipeline-cli cp-classify classify over the 2-file set → content-undetermined [content-source-present] — no path match, 1 .decisions/** file that can be §CP by content. Not a non-§CP answer.
  • pipeline-cli guard-content-probe classify on the ADR body read from the head → guard-touching (§CP, ADR 0164) [guard-vocabulary-match].
  • §CP holds ⇒ canonical advisory form (ADR 0111/0151): no bindable first-line @ <sha>; head bound in Reviewed-head: above. Advisory is the pass path only (ADR 0226) — any failing criterion would have landed a bindable review-doc: FAIL @ <sha> instead.

Acceptance criteria (#4919) — doc-namespace scope

Supersession-silence check (the thing this round had to get right)

Grepped the ADR at head for 0144 and for the supersede/superseded/supersedes family; every hit accounted for, none asserts anything over 0144:

  • :16, :100, :102, :108, :112, :116, :133 — coexistence framing throughout; :108 and :133 state the opposite of a supersession (status: accepted kept; "No landed ADR is edited by this entry — not its decision text, not its status line").
  • :121 — the word sits inside a quotation of Authoring brief: review-ui — fabrika skill (wave 3) #4718's brief, about review-design's own superseded name. Not about 0144.
  • :124"not a supersession this entry asserts". An explicit disclaimer.
  • :130 — the "superseded reading" of build / review in the Not column: their own prior readings, not 0144.
  • :136"nothing supersedes" ADRs 0079 / 0226.

No supersession key in frontmatter, no status-line edit anywhere in the diff, and .decisions/0144-…md is not in the changed-file set (2 files: the ADR and TERMS.md). Confirmed against pulls/4973/files.

I did not re-impose the struck mandate. The adr skill's status-line rule binds an ADR that is being superseded; the founder ruled 0144 is not. The absence of a pointer on 0144 is correct here and is not a finding. The 0011 / 0029 precedents are not cited against this PR.

Doc hygiene

  • [PASS] House-format — frontmatter carries id / title / status / date / tags; the house sections ## Context / ## Decision / ## Consequences are all present, plus the **What this decides:** line.
  • [PASS] Index row — no .decisions/index.md committed (discovery is ambient, ADR 0126); frontmatter status: accepted is the ambient map's source and is correct.
  • [PASS] Links resolve — every relative link checked against freshly-fetched origin/main (5f23d08b): 0144-depo-internal-asset-cdn.md, 0079-…, 0226-…, 0183-…, ../.glossary/TERMS.md, ../claude-plugins/kampus-pipeline/skills/, ../packages/fabrika-cli/src/wire/verdict-marker.ts — all exist. Standard markdown relative paths, no wikilinks.
  • [PASS] No leaked local/home paths — added-lines scan through the shared matcher: clean.
  • [PASS] Supersession noted + cross-linked — n/a by ruling. This entry supersedes nothing: it says so in §4 and again in Consequences, and it edits no landed ADR. The check has no subject.
  • [PASS] Status sanity — accepted is house vocabulary and is coherent: the names are founder-fixed on fabrika's skill set — live/die/merge/split over the 16 authoring briefs #4891 and already landed in briefs, so proposed would understate a settled partition.
  • [PASS] Single Diátaxis mode — single-mode: explanation throughout. The §3 dispersal table is evidence inside the explanation, not a reference page; no procedure or tutorial passage intrudes.
  • [PASS] Clear, concise prose — active voice, concrete, no AI-tell density. "A register can state a term. It cannot state a diff" does real work rather than inflating stakes; em-dash use stays inside the house register.

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 build name? where do the six review-* judgements go? which review-ui reading is meant, and does 0242 claim anything over 0144? 238 ADRs scanned, 198 live-accepted and uncited in scope, an 8-entry shortlist opened and judged one by one — 0241 (wire formats owned by schema modules: 0242 reads that module and decides nothing about format ownership), 0128 (glossary maintenance triggers: 0242 is exactly the row-plus-dated-entry pair 0128's point-of-coining prong asks for, not a competing process), 0099 (.glossary/ as a doc surface: no overlap), 0238 (reimplement-never-call: 0242 is consistent with it and the rows cite it), and 0239 / 0218 / 0215 / 0225 (release derivation, §CP scope, claim identity, verdict bodies — lexically adjacent only). No same-question conflict. The one genuine same-question ADR, 0144, is cited and explicitly disclaimed per the founder ruling. The semantic pass was done by hand; a clean lexical sweep is not on its own evidence of no contradiction.

Deviation disclosure (§DEV)

  • [PASS] deviation-disclosure — the section is present, and the round-2 entries are appended below the round-0 and round-1 ones rather than replacing them. Nothing this gate could see is undisclosed. On the specific handling in question: it is right. Round 0's "left a sibling surface untouched" entry gave a reason — "the depo row's sentence stays true" — that ruling 5229107623 has since obsoleted. The lane left that entry word for word and appended a round-2 entry naming the reversal and stating it supersedes round 0's why. That is the correct shape: ## Deviations is an append-only log of what was done and why it was done at the time, so quietly rewriting round 0's reasoning would erase the record of a decision the founder later reversed — the very thing a reviewer needs to see. The round-2 entries also disclose two harder facts unprompted: that a documented adr-skill mandate was deliberately not followed (correctly, per the ruling), and that this repair round ran with no current-head gate FAIL behind it, on founder authority alone. Disclosed, with the awkward parts intact.

Verdict: every acceptance criterion in this namespace and every hygiene check passes. Advisory only — this does not authorize a merge. A @kamp-us/control-plane member approves at 8e9acba1 and ship-it enqueues (ADR 0135 approve-then-enqueue; ADR 0048 single merge authority). review-doc does not merge, and this run touched no file, no label, and no issue state.

Verdict-written: 2026-08-09T01:58:07Z

@usirin usirin added ready-for:human A human picks this up. status:cp-banked Control-plane PR banked on the board, awaiting a control-plane approval labels Aug 9, 2026
@usirin
usirin requested a review from a team August 9, 2026 01:59
@usirin

usirin commented Aug 9, 2026

Copy link
Copy Markdown
Member Author

BANKED — awaiting @kamp-us/control-plane approval at head 8e9acba1

Both required namespaces now carry a current-head verdict. This PR is §CP, so the engine does not merge it: a control-plane approval at this head is what lets ship-it enqueue (ADR 0135 — the human owns the judgement, the pipeline owns the mechanics). No hand-merge.

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 ## Deviations log discloses a documented adr-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 Deviations entries are verbatim is not machine-checkable — GitHub keeps no issue/PR body history. The review-code gate 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.

@usirin
usirin added this pull request to the merge queue Aug 9, 2026
Merged via the queue into main with commit e3f1ce7 Aug 9, 2026
46 checks passed
@usirin
usirin deleted the usirin/glossary-fabrika-nouns-4919-827A4A95 branch August 9, 2026 02:10
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

ready-for:human A human picks this up. 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.

Eight fabrika skill nouns are locked by #4904's plan and none has a glossary row — two of them redefine existing readings

3 participants