064-compile-warnings-reach-the-gate

Compile warnings reach the gate

Lifecycle approvedImplementation completeVerification unknownQualification unknown

`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

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

  1. 064: Compile warnings reach the gate
  2. 1. Purpose
  3. 2. Territory
  4. 3. Behavior
  5. 3.1 `V-010` keeps its warning tier
  6. 3.2 `compile --fail-on-warn` gates the exit code, not the verdict
  7. 3.3 `check --fail-on-warn` forwards into the compile half
  8. 3.4 The composed report says which half refused
  9. 3.5 Every written form of the gate chain adopts the flag
  10. 3.6 The refusal is proven on a corpus that trips it
  11. 4. Out of scope
  12. 5. Resolved decisions
  13. Verification

Frozen anchors

No frozen anchors declared.