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