029-ownership-coverage
Ownership coverage: `spec-spine index coverage` and the `C-002` ratchet
spec-spine refuses drift but has never required coverage. The coupling gate skips a changed path that no spec claims ("not a coupling concern"), and the only coverage-shaped signal, `traceability.untracedCode`, is package-granular and read by nothing, so a crate with one governed file and two hundred ungoverned ones reports as traced. "This application is fully specified" is therefore not a state the tool can assert. This spec adds two additive pieces that share one definition of ownership. `spec-spine index coverage` reports, per source file, whether a spec *specifically* claims it (a resolved unit or a comment header), whether only a package's manifest floor covers it, or whether nothing does; `--fail-on-untraced` turns that into the whole-tree assertion. `[coupling] require_ownership` (default false) makes the gate ask the same question of every changed source file and refuse a floor-only or unowned one as `C-002`, the PR-time ratchet. Coverage is a read verb over the tree and the committed ledger, like `index check`: nothing new is committed, no schema version moves, and the report predicts the gate exactly because both call one classifier over one universe.
Read the full pinned specification ↗Relationships
depended on by
- 036-declared-state-dir
- 048-the-ledger-answers-what-consumers-rebuild
- 050-claimed-but-unwitnessed
- 052-read-verbs-on-a-code-free-corpus
- 063-planned-territory-is-declared-not-inferred
- 070-an-authority-snapshot-says-what-it-read
- 073-a-mode-only-or-binary-change-is-a-change
- 075-a-claim-below-the-header-window-is-not-silent
- 078-governed-scope-is-declared-not-inferred
Claimed units
- establishes
{ "kind": "file", "path": "crates/spec-spine-core/src/coverage.rs" } - establishes
{ "kind": "file", "path": "crates/spec-spine-core/tests/coverage.rs" } - establishes
{ "kind": "file", "path": "crates/spec-spine-types/src/coverage.rs" } - extends
{ "nature": "additive", "spec": "005-coupling-gate", "unit": { "kind": "file", "path": "crates/spec-spine-core/src/couple.rs" } } - extends
{ "nature": "additive", "spec": "005-coupling-gate", "unit": { "kind": "file", "path": "crates/spec-spine-cli/src/cmd_couple.rs" } } - extends
{ "nature": "additive", "spec": "005-coupling-gate", "unit": { "kind": "file", "path": "crates/spec-spine-core/tests/couple.rs" } } - extends
{ "nature": "additive", "spec": "005-coupling-gate", "unit": { "kind": "file", "path": "crates/spec-spine-cli/tests/couple.rs" } } - extends
{ "nature": "additive", "spec": "004-codebase-index", "unit": { "kind": "file", "path": "crates/spec-spine-core/src/index.rs" } } - extends
{ "nature": "additive", "spec": "004-codebase-index", "unit": { "kind": "file", "path": "crates/spec-spine-cli/src/cmd_index.rs" } } - extends
{ "nature": "additive", "spec": "000-spec-spine-bootstrap", "unit": { "kind": "file", "path": "crates/spec-spine-types/src/config.rs" } } - extends
{ "nature": "additive", "spec": "000-spec-spine-bootstrap", "unit": { "kind": "file", "path": "crates/spec-spine-types/src/lib.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" } }
Source headings
- 029: Ownership coverage
- 1. Purpose
- 2. Territory
- 3. Behavior
- 3.1 Ownership tiers
- 3.2 The universe
- 3.3 `spec-spine index coverage`
- 3.4 `C-002`: the ownership ratchet
- 3.5 Why `require_ownership` defaults off
- 3.6 Deletions
- 3.7 Determinism
- 3.8 Measured on this repo
- 3.9 Tests (minimum)
- 4. Out of scope
Frozen anchors
No frozen anchors declared.