docs(decisions): 0249 — trigger coverage lives in the eval set, not a fourth ship-gate part (#4750) - #5238
Conversation
… fourth ship-gate part (#4750)
No preview deploy
|
|
review-doc: advisory — blocking-set PR (§CP — approval-gated) PR #5238 is §CP by CONTENT, not by path. Reviewed-head: @ a1076e1 Re-gate round 2 — the head is UNCHANGED from the round-1 FAIL (comment 5234901884). The repair pushed no commit; it edited the PR body only. I re-derived every row from scratch rather than inheriting round 1's grades: the prior FAIL was neither treated as still standing nor as automatically discharged. Every file under review was sourced from the PR head through a per-run read-only ref (asserted equal to Class routing (re-derived, not inherited). Graded against the 2026-08-10 ruling (comment 5234575962), read first-hand — not the superseded 2026-08-02 split. Acceptance criteria (#4750)
Doc hygiene
ADR contradiction sweep (Step 4a) — re-run, not inherited
ADR number collision (re-enumerated live at review time)
Closing keywords (re-run independently over the live body, each hit classified) A case-insensitive
#5239 is NOT closed by this PR — confirmed. Deviation disclosure (§DEV) — the round-1 blocking row, re-judged on substance
Also re-confirmed against the live body, since the repair claimed them: the §CP-by-content routing note (L47) is present, and its claim matches my own independent re-derivation exactly — no CODEOWNERS row for Read the PR head (§HEAD): all files under review were sourced from Every acceptance criterion and every hygiene check passes, and the round-1 Verdict-written: re-gate round 2 (body-only repair, same head) Verdict-written: 2026-08-10T01:37:21Z |
Fixes #4750
Records the ruling on #4750 as ADR
0249. One added file, no other changes:.decisions/0249-skill-trigger-coverage-lives-in-the-eval-set.mdThe ruling this records
Per the newest comment on the issue (2026-08-10, founder-delegated judgment under the standing trust ruling of 2026-08-09, founder live with veto open):
claude-plugins/fabrika/docs/skill-conventions.mdis not edited by this PR, so §8's own prohibition on restating eval mechanics stays intact.disable-model-invocationthere is no description in model context, so there is nothing to trigger. Precedent set live by thefront-doorsession (Authoring brief:front-door— fabrika skill (the /fabrika operating front door) #4952), whose gate accepted the deviation.What is superseded, and why the ADR says so out loud
An earlier ruling on the same issue (2026-08-02) split the gate and sent a routing-path check into
skill-conventions.mdbeside the sizing band. The newest comment reverses that: nothing lands in §8. The ADR records the reversal explicitly so a reader who scrolls the issue top-down does not act on the 2026-08-02 answer.The evidence behind that earlier split is carried forward, not dropped — the five optimizer iterations (recall 0–11%, precision 100% throughout, no should-fire query ever reaching 2/3) and the baseline arm that behaved correctly with no skill at all by reading
CLAUDE.md. That is what stops someone re-litigating a naive recall floor in a month, so the ADR keeps it as the three constraints #4649's mechanics inherit.Acceptance criteria
mainare addressed: both are model-invoked, so the exemption does not reach them, and the ruling states no grandfather clause. The ADR records that their trigger coverage is owed once the mechanics exist and that retro-measure-vs-grandfather is open, carried on the build ticket rather than decided at this desk. This departs from the criterion as written — disclosed as class 1 under## Deviationsbelow..decisions/.Deviations
Section added in repair round 1, answering the
deviation-disclosureFAIL (review comment 5234901884). The class-1 entry below belongs to the initial build, not to this round; this round touched no file — PR body only, ADR text and number unchanged.main(/reportand/adr) be either retro-measured before the next skill ships or explicitly grandfathered — one of two named outcomes. Did: the ADR settles only the half the governing ruling settles — both skills are model-invoked, so thedisable-model-invocationexemption does not reach them; the ruling states no grandfather clause; their trigger coverage is therefore owed once fabrika eval layer: the execution harness, the incident corpus, and the ruled bar #4649's mechanics exist — and then records retro-measure-vs-grandfather as an open question rather than picking either named outcome. Why: the governing 2026-08-10 ruling does not decide the timing or the mechanism. Answering it at the coder's desk would manufacture founder doctrine inside an ADR, and a stateless later reader obeys an ADR as ruled — a worse artifact than a recorded open item. The residue is also genuinely downstream of eval mechanics that do not exist yet, so there is nothing to retro-measure against today. Disposition: follow-up Record the trigger-coverage convention + the user-only exemption in the eval mechanics docs (ruled on #4750) #5239 (open,status:needs-triage) carries the question against the eval surface; a one-line founder amendment on A fabrika skill can pass every ship gate and never fire — triggering is unmeasured (/report: 100% precision, ~0% recall) #4750 can settle it without editing this ADR.--no-verifypush, no skipped or disabled hook, no suppressed lint or type error, no widened allowlist.pnpm lint:worktreewas a clean skip because the diff changes no biome-handled file — a no-op by scope, not a bypass..decisions/0249-skill-trigger-coverage-lives-in-the-eval-set.md, which is precisely what A fabrika skill can pass every ship gate and never fire — triggering is unmeasured (/report: 100% precision, ~0% recall) #4750 asks for. Nothing underclaude-plugins/**, no CODEOWNERS or control-plane-pattern change.Notes for the gate
pnpm lint:worktreeis a clean skip (no biome-handled files changed).origin/main(holds through0247) and every open PR (0248in docs(decisions): 0248 — the authoring session mints a contract's implementation ticket at handoff (#4749) #5235,0237in docs(decisions): 0237 — agent brevity binds messages, not board artifacts (#4694) #4703,0235in docs(decisions): ADR 0235 — a fence carries zero expansions; everything dynamic lives inside the script #4614) immediately before commit.claude-plugins/fabrika/skills/{wayfinding,prototyping,graduate,handoff}/, none underplan-epic/**, no CODEOWNERS or control-plane-pattern change..decisions/**carries no CODEOWNERS row, butpipeline-cli guard-content-probe classifyreturnsguard-touching [guard-vocabulary-match]on the ADR body, so this PR is in the blocking set by content: it needs a@kamp-us/control-planeapproval at the then-current head beforeship-itenqueues it.Fixes #4750on line 1. No otherfix/close/resolvevariant precedes an issue reference — in particular no closing keyword is attached to Record the trigger-coverage convention + the user-only exemption in the eval mechanics docs (ruled on #4750) #5239 anywhere in this body, so that follow-up stays open to carry the class-1 residue above.