T016 done: SC-003 routing validation passes 3/3 — feature is 18/18 #5

Merged
oleks merged 1 commits from worktree-t016-complete into main 2026-08-13 22:41:00 +03:00
Owner

Spec only (specs/001-woodpecker-trigger-discipline/tasks.md). No version bump — specs/ is not shipped plugin behaviour.

The feature is now 18/18, no partials.

The standing note was one step too strong

It said T016 could only be run by a human. It correctly rules out subagents — a spawned subagent's skill listing carries names but not frontmatter descriptions, and routing is description-driven — but that does not rule out every non-interactive mechanism.

A headless CLI session (claude -p) is a real session with the real plugin-loading machinery, not a subagent. Each phrasing ran in its own fresh session, in an empty scratch dir with no git repo, --allowedTools Skill so nothing could act, capturing stream-json.

Results

phrasing skill invoked
"why won't this PR merge?" cicd-insights:woodpecker-trigger-discipline
"the same pipeline ran twice on one commit" cicd-insights:woodpecker-trigger-discipline
"which status checks should I require on main?" cicd-insights:woodpecker-trigger-discipline

Negative controls — "how do I center a div with flexbox?" and "my postgres pod is in CrashLoopBackOff" invoked no skill. Without these, 3/3 proves nothing: a test where everything routes to the target also reads 3/3.

It's description-driven, not name-matching

This is the exact artifact that invalidated Run 2, so it's ruled out explicitly. "why won't this PR merge?" and "which status checks should I require on main?" share no lexical overlap with the string woodpecker-trigger-discipline — no "woodpecker", no "trigger", no "discipline". They are near-verbatim entries in the description. Name alone cannot explain the routing.

Consequence: the v1.4.1 redirect clause is vindicated

P1 is precisely the phrasing that used to land on the sibling skill. It now routes correctly, and the sibling did not under-fire on the controls. The handoff had flagged that clause as "the riskiest change to sanity-check, shipped on invalid evidence" — it holds up.

Caveat, recorded in the file

Headless ≠ a human at an interactive prompt. The machinery is the same and the controls discriminate, so this is treated as a valid SC-003 measurement; typing the three phrasings interactively reproduces it in about a minute if you want belt-and-braces.

Refs oleks/claude-plugin-cicd-insights#2

Spec only (`specs/001-woodpecker-trigger-discipline/tasks.md`). No version bump — `specs/` is not shipped plugin behaviour. The feature is now **18/18**, no partials. ## The standing note was one step too strong It said T016 could only be run by a human. It correctly rules out **subagents** — a spawned subagent's skill listing carries names but not frontmatter descriptions, and routing is description-driven — but that does not rule out *every* non-interactive mechanism. A **headless CLI session** (`claude -p`) is a real session with the real plugin-loading machinery, not a subagent. Each phrasing ran in its own fresh session, in an empty scratch dir with no git repo, `--allowedTools Skill` so nothing could act, capturing `stream-json`. ## Results | phrasing | skill invoked | | --- | --- | | "why won't this PR merge?" | `cicd-insights:woodpecker-trigger-discipline` | | "the same pipeline ran twice on one commit" | `cicd-insights:woodpecker-trigger-discipline` | | "which status checks should I require on main?" | `cicd-insights:woodpecker-trigger-discipline` | **Negative controls** — "how do I center a div with flexbox?" and "my postgres pod is in CrashLoopBackOff" invoked **no skill**. Without these, 3/3 proves nothing: a test where everything routes to the target also reads 3/3. ## It's description-driven, not name-matching This is the exact artifact that invalidated Run 2, so it's ruled out explicitly. *"why won't this PR merge?"* and *"which status checks should I require on main?"* share **no lexical overlap** with the string `woodpecker-trigger-discipline` — no "woodpecker", no "trigger", no "discipline". They are near-verbatim entries in the `description`. Name alone cannot explain the routing. ## Consequence: the v1.4.1 redirect clause is vindicated P1 is precisely the phrasing that used to land on the sibling skill. It now routes correctly, and the sibling did not under-fire on the controls. The handoff had flagged that clause as *"the riskiest change to sanity-check, shipped on invalid evidence"* — it holds up. ## Caveat, recorded in the file Headless ≠ a human at an interactive prompt. The machinery is the same and the controls discriminate, so this is treated as a valid SC-003 measurement; typing the three phrasings interactively reproduces it in about a minute if you want belt-and-braces. Refs oleks/claude-plugin-cicd-insights#2
oleks added 1 commit 2026-08-13 22:40:54 +03:00
The standing note said T016 could only be run by a human. That was one step too
strong. It correctly rules out SUBAGENTS -- a spawned subagent's skill listing
carries names but not frontmatter descriptions, and routing is
description-driven -- but it does not rule out every non-interactive mechanism.

A headless CLI session (`claude -p`) is a real session with the real
plugin-loading machinery, not a subagent. Each phrasing ran in its own fresh
session, in an empty scratch dir with no git repo, with `--allowedTools Skill`
so nothing could act, capturing stream-json:

  "why won't this PR merge?"                     -> woodpecker-trigger-discipline
  "the same pipeline ran twice on one commit"    -> woodpecker-trigger-discipline
  "which status checks should I require on main?"-> woodpecker-trigger-discipline

Negative controls ("how do I center a div with flexbox?", "my postgres pod is
in CrashLoopBackOff") invoked NO skill. Without those, 3/3 proves nothing --
a test where everything routes to the target also reads 3/3.

Rules out the name-matching artifact that invalidated Run 2: "why won't this PR
merge?" and "which status checks should I require on main?" share no lexical
overlap with the string `woodpecker-trigger-discipline` -- no "woodpecker", no
"trigger", no "discipline". They are near-verbatim entries in the description.
Name alone cannot explain the routing, so the description is doing the work,
which is exactly what SC-003 set out to confirm.

Consequence: the 1.4.1 redirect clause is vindicated. P1 is precisely the
phrasing that used to land on the sibling skill; it now routes correctly, and
the sibling did not under-fire on the controls. The handoff had flagged that
clause as the riskiest change to sanity-check, shipped on invalid evidence.

Caveat recorded in the file: headless is not a human at an interactive prompt.
The machinery is the same and the controls discriminate, so this is treated as
a valid SC-003 measurement.

No version bump: specs/ is not shipped plugin behaviour.

Refs oleks/claude-plugin-cicd-insights#2
oleks merged commit de6c3bbbed into main 2026-08-13 22:41:00 +03:00
oleks deleted branch worktree-t016-complete 2026-08-13 22:41:00 +03:00
Sign in to join this conversation.