064-compile-warnings-reach-the-gate
Compile warnings reach the gate
`V-010`, a `depends_on` naming a spec that does not exist, is the only warning-tier code the compiler emits, and no verb in the gate chain can be told to refuse it. `lint --fail-on-warn` cannot reach it: lint's codes are disjoint from compile's by design, and `lint()` keeps only the registry from the compile it runs. So a dangling dependency compiles clean, lints clean at every severity, and reaches the default branch unread. This spec adds `--fail-on-warn` to `compile` and forwards it through `check` into the compile half, the shape spec 044's `--fail-on-unresolved` already uses for the index half. The flag gates the CLI's exit code only; `validation.passed` keeps the meaning spec 001 fixed for it, and `V-010` keeps its warning tier, because a corpus that files specs forward must be able to name a dependency it has not written yet. Zero `V-010`s exist today: the gap is structural, and this spec closes it before it costs something.
Read the full pinned specification ↗Relationships
depends on
Claimed units
- extends
{ "nature": "additive", "spec": "001-compile-registry", "unit": { "kind": "file", "path": "crates/spec-spine-core/src/compile.rs" } } - extends
{ "nature": "additive", "spec": "001-compile-registry", "unit": { "kind": "file", "path": "crates/spec-spine-cli/src/main.rs" } } - extends
{ "nature": "additive", "spec": "001-compile-registry", "unit": { "kind": "file", "path": "crates/spec-spine-cli/src/cmd_compile.rs" } } - extends
{ "nature": "additive", "spec": "001-compile-registry", "unit": { "kind": "file", "path": "crates/spec-spine-core/src/lib.rs" } } - extends
{ "nature": "additive", "spec": "001-compile-registry", "unit": { "kind": "file", "path": "crates/spec-spine-cli/tests/cli.rs" } } - extends
{ "nature": "additive", "spec": "001-compile-registry", "unit": { "kind": "file", "path": "crates/spec-spine-core/tests/compile.rs" } } - extends
{ "nature": "additive", "spec": "062-one-name-one-freshness-verb", "unit": { "kind": "file", "path": "crates/spec-spine-cli/src/cmd_check.rs" } } - extends
{ "nature": "additive", "spec": "044-index-diagnostics-reach-a-gate", "unit": { "kind": "file", "path": "crates/spec-spine-core/src/diagnostics.rs" } } - extends
{ "nature": "additive", "spec": "094-one-gate-and-the-boundaries-it-holds", "unit": { "kind": "file", "path": ".github/workflows/ci.yml" } } - extends
{ "nature": "additive", "spec": "094-one-gate-and-the-boundaries-it-holds", "unit": { "kind": "file", "path": "crates/spec-spine-core/tests/gate.rs" } } - extends
{ "nature": "additive", "spec": "093-the-harness-this-repository-runs", "unit": { "kind": "file", "path": "AGENTS.md" } } - extends
{ "nature": "additive", "spec": "093-the-harness-this-repository-runs", "unit": { "kind": "file", "path": ".claude/skills/" } } - extends
{ "nature": "additive", "spec": "093-the-harness-this-repository-runs", "unit": { "kind": "file", "path": "crates/spec-spine-core/tests/harness_skills.rs" } } - extends
{ "nature": "additive", "spec": "057-the-docs-name-what-adopters-derived", "unit": { "kind": "file", "path": "docs/adoption-guide.md" } }
Source headings
- 064: Compile warnings reach the gate
- 1. Purpose
- 2. Territory
- 3. Behavior
- 3.1 `V-010` keeps its warning tier
- 3.2 `compile --fail-on-warn` gates the exit code, not the verdict
- 3.3 `check --fail-on-warn` forwards into the compile half
- 3.4 The composed report says which half refused
- 3.5 Every written form of the gate chain adopts the flag
- 3.6 The refusal is proven on a corpus that trips it
- 4. Out of scope
- 5. Resolved decisions
- Verification
Frozen anchors
No frozen anchors declared.