Skip to content

S2.6.7 — The live rung, never required #324

Closed

Description

@dev-pmallapp

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:

  1. A required job may never carry an if: — a job skipped by an if: reports success, so a skipped live check would pass the PR.
  2. 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

  1. added
    type:taskOne unit of work within a Story
    domain:devSoftware development pack
    iaiCreated or managed by iAI
    on Sep 7, 2026
  2. dev-pmallapp commented on Sep 15, 2026

    @dev-pmallapp
    OwnerAuthor

    iai-evidence

    Verdict: PASS. Artifact: docs/evidence/324-20260915T131526Z.md, pinned at 40ff90c3237851f1a292b5b03297b8f156f0b96f. PR #338.

    Build target 8. Cases 13, 14, 15, 19 PASS.

    The live conformance run

    A model — amd-anthropic/Claude-Opus-5 on host opencode, routing category plan — read skills/goal-create/SKILL.md and performed it twice against a real forge, every command routed through the recording seam.

    run 1 run 2
    reads 3 3
    forge mutations 1 0

    The same six numbers SCENARIO_ROSTER scores for the transcription of that skill. The audit compared prose to code; this compares code to reality. CLAIM-41.8 is 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 PATCH and --milestone on gh issue edit — so the audit's two dead branches are dead because of the fake, as it claimed.

    pr (12) and sub-issues (14) remain unexecuted. Smaller, not settled.

    Case 15, and #336 underneath it

    classify.ts imports only ./levels and ./recognisers, never ./path — so classifyPath's USER/ 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.10 holds — 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-241 asks 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 by dev-pmallapp at commit 1527dfb, host opencode, category plan. 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.

  3. dev-pmallapp commented on Sep 15, 2026

    @dev-pmallapp
    OwnerAuthor

    Closed by the merge of PR #338 into story/293-s2-6-skill-execution-harness at 60c187b.

    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-evidence sentinel posted, CI 8/8 on the PR head 603b02d.

    Cases 13, 14, 15, 19 all PASS. NEVER-293.10 is met: the live rung is workflow_dispatch-only in its own workflow file, absent from all four hardcoded required lists, and structurally unable to fire on a PR. CLAIM-293.9 is attested by dev-pmallapp at commit 1527dfb, host opencode, routing category plan.

    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_ROSTER scores. CLAIM-41.8 is 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:

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    domain:devSoftware development packiaiCreated or managed by iAIstatus:resolvedWork complete, awaiting closuretype:taskOne unit of work within a Story

    Projects

    No projects

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions