030-dependency-cycle-refusal

Dependency cycle refusal: the `V-014` corpus-wide check on `depends_on`

Lifecycle approvedImplementation completeVerification unknownQualification unknown

`depends_on` is the one edge whose graph shape spec-spine never checked. A dangling target is a `V-010` warning, but a cycle passes: two specs that depend on each other compile with zero warnings and lint clean at every severity, so a corpus can be green and structurally unexecutable. This spec adds `V-014`, an error-tier, corpus-wide check that reports a cycle in the resolved `depends_on` graph and names the path. It is the sibling of `V-010` and lives beside it in `compile.rs`, the first step of the gate chain and the step `compile --check` verifies, so a cycle fails the build at the earliest point and no new verb is introduced. `V-014` joins `CROSS_SPEC_CODES`, so it is never stored in a registry shard and is recomputed from the assembled records on read; both the fresh-compile and committed-shard paths reach one detector, so the two views cannot disagree. Scheduling semantics stay out: readiness, contract pinning and downstream invalidation depend on merge history and a run journal, which are not a pure function of the corpus and therefore not spec-spine's to compute.

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-core/tests/compile.rs"
      }
    }

Source headings

  1. 030: Dependency cycle refusal
  2. 1. Purpose
  3. 2. Territory
  4. 3. Behavior
  5. 3.1 The check
  6. 3.2 Cross-spec, so never sharded
  7. 3.3 Determinism
  8. 3.4 Placement: compile, not lint
  9. 3.5 Tests (minimum)
  10. 4. Out of scope

Frozen anchors

No frozen anchors declared.