Runner-less skips name their exit - #256
Merged
Merged
Conversation
A project whose language cladding cannot drive passed the gate with six of nine stages skipped and zero mention of the way out — measured across every adopter-reachable surface, gate.commands appeared once, in a CHANGELOG line, and the gate.language E2E already proved that exact configuration strands a fully-capable agent. Skips were honest but mute. Command-stage skips now carry a structured reason: 'no-runner' when no runner is registered for the language, 'tool-missing' when the resolved tool is absent — by-design skips (missing oracles, no declared deliverable) stay untagged, because prescribing gate.commands there would be a false cure. When at least one no-runner skip occurred, the check prints one trailing line naming those stages and the inline declaration that turns them on, noting the file is committable so CI runs the same gate. The remedy was proven true before the line was written: declaring gate.commands flips all four stages from skip to run through the shipped binary. JSON carries skipReason additively; every skip message, exit code, and skip semantic is byte-identical. Verified: 16-test impl-blind oracle passing on first contact, 12 unit tests, golden matrix untouched, four-environment guard on the built binary (guidance 1/0/0/0: runner-less shows it, declared / self / known-toolchain do not), JSON purity, full suite 2981/2981. F-c17e1edc · clad done under a GREEN strict pre-push gate Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
2026-08-26 · feature/skip-exit-guidance → developA project whose language cladding cannot drive passed the gate with six of nine stages skipped and zero mention of the way out — the check now names the skipped stages once and shows the one declaration that turns them on.
Added
▸ Runner-less skips carry a reason and name their exit. Command-stage skips are tagged
no-runner(no runner registered for the language) ortool-missing(the resolved tool is absent); by-design skips — missing spec-conformance oracles, no declared deliverable — stay untagged, because prescribinggate.commandsthere would be a false cure. When at least one no-runner skip occurred, the check prints one trailing line listing those stages with the inline declaration (.cladding/config.yaml→gate:→commands:), noting the file is committable so CI runs the same gate. The JSON report carriesskipReasonadditively for MCP and CI consumers.Why now, and why this shape
▸ The exit existed but was invisible. Across every adopter-reachable surface — gate output, both READMEs, the managed AGENTS.md block,
clad doctor, the MCP tool descriptions —gate.commandswas mentioned once, in a CHANGELOG line. The gate.language external E2E already proved that exact configuration strands a fully-capable agent when the one line is missing.▸ The remedy was proven true before the line was written. Declaring
gate.commandsflips all four stages from skip to run through the shipped binary — measured before implementation, so the guidance cannot lie.▸ Discrimination was measured necessary. On a runner-less adopter the six skips split 4/2: four curable by the declaration, two by-design where that advice would be wrong. The guidance attaches only to the four.
Verification
▸ Pre-implementation simulations (skip census, remedy truth, four-environment false-positive guard 4/0/0/0) promoted to regression tests; 16-test impl-blind oracle authored from the contract before landing, passing on first contact; golden gate matrix untouched.
▸ External E2E on the packed tarball in an isolated prefix (dist SHA-256 identical to the repo build): 15/15 criteria — guidance appears exactly once with all four labels, vanishes when commands are declared, never fires on a known-toolchain project, JSON stays pure with the exact 4/2 tag split. Plus two adversarial probes: a deliberately failing declared command turns the stage ✗ (the checkmarks are real executions), and a partial declaration drops exactly that stage from the guidance list (the enumeration is computed, not a fixed string).
▸ Full suite 2981/2981 · strict pre-push gate GREEN · completed through
clad done.🤖 Generated with Claude Code