Repository navigation
S2.6.7 — The live rung, never required #324
Description
Parent: #293
Build target 8. Anchors: CLAIM-293.9, NEVER-293.10. Cases: 19, 13, 14, 15.
Blocked by: #323
Never a required check — this is structural, not a preference
.github/workflows/ci.yml:8-25 implements NEVER-9.8 and forbids exactly the two escapes a live job would need:
- A required job may never carry an
if:— a job skipped by anif:reports success, so a skipped live check would pass the PR. - No
paths:filter anywhere — a filtered workflow leaves required checks pending forever.
Add that fork PRs receive no secrets, and a required live job is illegal, not merely expensive. workflow_dispatch or a local command only.
But M2 cannot exit without it
docs/milestones/M2.md:240-241 is an exit criterion: "Measured token cost of Tier 0 plus one Tier-1 verb is recorded in the evidence artifact." A token cost is a property of a live model call. There is no non-live way to measure it. That is why gate ruling G1a produced two rungs rather than one.
The egress constraint is a security requirement, not a test detail
USER/-derived content is PRIVATE by fail-safe default and reaches no cloud model — no consent, no de-identification, no override. A live run of goal-create against the real goals source on a cloud model is a designed egress violation. It runs against #319's declared-synthetic fixture only.
CLAIM-293.9 is human-attested, and calling it tool-checked would be the failure the taxonomy names
The mutation counts are tool-produced. But "each skill is idempotent under a live model" over n=1 non-deterministic trajectories is not established by one green run — a green run establishes "this happened once". What makes it worth anything is a named person stating the run was a fair exercise: right host, right category, no answer leaked into the prompt, artifact at a path. references/verification.md:37 is that definition verbatim, and the same section says inventing a tool for it "would be worse, not better".
Done when
- The live rung runs a real skill twice against S2.6.2 — The fixture repository, and the synthetic goals fixture #319's fixture, never as a required check
- Its context is absent from the required list and from branch protection, asserted both ways across all four hardcoded sites (case 13)
- 0
if:keys on required jobs (case 14) - A
USER/-derived payload is blocked by the egress guard, class count read from the classifier (case 15) - One artifact per skill-touching Story, carrying mutation counts and measured token cost, attested by a named person (case 19) — closing
docs/milestones/M2.md:240-241
Refs #293
Activity
dev-pmallapp commentedon Sep 15, 2026
iai-evidence
Verdict: PASS. Artifact:
docs/evidence/324-20260915T131526Z.md, pinned at40ff90c3237851f1a292b5b03297b8f156f0b96f. PR #338.Build target 8. Cases 13, 14, 15, 19 PASS.
The live conformance run
A model —
amd-anthropic/Claude-Opus-5on host opencode, routing categoryplan— readskills/goal-create/SKILL.mdand performed it twice against a real forge, every command routed through the recording seam.The same six numbers
SCENARIO_ROSTERscores for the transcription of that skill. The audit compared prose to code; this compares code to reality.CLAIM-41.8is NOT upgraded — n=1 over a non-deterministic trajectory is an existence proof, not a property, and gate ruling G2 forbids it.#330 — paid in part, precedent inverted
13 argvs built by the real exported builders, executed against a real forge. 13 accepted, 0 rejected, against S2.1's precedent of 7 of 9 rejected.
Every mutation verified by reading the forge, never by the exit code (#320's M9/M9b). Both of the fake's unmodelled shapes succeeded live — milestone
PATCHand--milestoneongh issue edit— so the audit's two dead branches are dead because of the fake, as it claimed.pr(12) andsub-issues(14) remain unexecuted. Smaller, not settled.Case 15, and #336 underneath it
classify.tsimports only./levelsand./recognisers, never./path— soclassifyPath'sUSER/rule is consulted by nothing, and{ work_state: "USER/…" }classifies INTERNAL and clears a cloud destination.The old test passed for a reason other than its name: its payload was PRIVATE by the unrecognised-key default and would have passed for
{ zzz: "x" }. Renamed, with a control proving the discrimination and a tripwire on the import. Case 15 passes honestly on its "by fail-safe default" wording;NEVER-293.10holds — the gap is in classification, not the guard.Token cost, and what it does not close
305.2k / $36.14 — a session TOTAL, an upper bound covering the live rung's construction, the audit and the CI work.
M2.md:240-241asks for one verb's cost and should not be ticked on this number — #337, with the cheap fix named.Attestation
Per
references/verification.md:37, attested bydev-pmallappat commit1527dfb, host opencode, categoryplan. The fixture repo was created to be destroyed and has been deleted; the artifact is self-contained for that reason.Chain
1156 tests / 1142 pass / 0 fail / 14 skip / 4218
expect()· lint 0 across 126 files · claim-lint 125 files, 0 errors, 1 warning · both verifiers PASS at six · CI on PR #338 8/8.dev-pmallapp commentedon Sep 15, 2026
Closed by the merge of PR #338 into
story/293-s2-6-skill-execution-harnessat60c187b.A task PR targets the story branch, so GitHub's closing keywords never fire (
CONTRIBUTING.md, Pull requests); this closure is explicit and cites the merge commit.Verified PASS before merge — evidence
docs/evidence/324-20260915T131526Z.md,## iai-evidencesentinel posted, CI 8/8 on the PR head603b02d.Cases 13, 14, 15, 19 all PASS.
NEVER-293.10is met: the live rung isworkflow_dispatch-only in its own workflow file, absent from all four hardcoded required lists, and structurally unable to fire on a PR.CLAIM-293.9is attested bydev-pmallappat commit1527dfb, host opencode, routing categoryplan.The live run agreed with the transcription exactly — run 1 three reads and one mutation, run 2 three reads and zero — the same six numbers
SCENARIO_ROSTERscores.CLAIM-41.8is not upgraded by that; gate ruling G2 forbids it, and n=1 over a non-deterministic trajectory is an existence proof, not a property.Carried forward, deliberately not closed here:
ghargv this repository builds has ever been executed, and no build target owns paying that bill #330 is paid in part, not in full. Thirteen argvs met a real forge and all thirteen were accepted, inverting S2.1's 7-of-9-rejected precedent.pr(12 exports) andsub-issues(14) remain unexecuted.docs/milestones/M2.md:240-241must not be ticked on this task's token figure, which is a session total and an upper bound. S2.6.8 — The M2.md and M4.md corrections, line-neutral #325 owns those lines.classify()never consultsclassifyPath, soUSER/-derived content under a recognised key clears the cloud gate. No caller exploits it today.