078-governed-scope-is-declared-not-inferred
Governed scope is declared, not inferred
The ownership ratchet sees a file only if all four conjuncts of `coverage.rs::in_coverage_universe` hold: the extension is in `SOURCE_EXTS`, no path component is a resolver exclusion, the file lies inside a discovered package, and no bypass prefix matches. Measured on 2026-09-15: this repository tracks 572 files and the ratchet can see 89. Nineteen tracked files carry a `SOURCE_EXTS` extension and are invisible on the package conjunct alone, and eleven of those nineteen are files `[index] extra_hashed_inputs` already names, so a change to one restales all 101 shards while `C-002` cannot ask who owns it. Seven of the nineteen already carry a valid `// Spec:` claim header that nothing ever reads. The two lists disagree about what this repository governs. This spec adds an opt-in declared scope: named path patterns that join the coverage universe whatever their extension and wherever they sit, with the tracked-file enumeration done by the CLI and passed in, because the core has no git. Empty by default, so no adopter's verdict changes on upgrade. The claim scanner is untouched: a scoped file is claimed from spec frontmatter, so those seven headers stay inert and this spec says so rather than implying otherwise.
Read the full pinned specification ↗Relationships
depends on
depended on by
amended by
Claimed units
- extends
{ "nature": "additive", "spec": "029-ownership-coverage", "unit": { "kind": "file", "path": "crates/spec-spine-types/src/config.rs" } } - extends
{ "nature": "additive", "spec": "029-ownership-coverage", "unit": { "kind": "file", "path": "crates/spec-spine-core/src/coverage.rs" } } - extends
{ "nature": "additive", "spec": "029-ownership-coverage", "unit": { "kind": "file", "path": "crates/spec-spine-types/src/coverage.rs" } } - extends
{ "nature": "additive", "spec": "029-ownership-coverage", "unit": { "kind": "file", "path": "crates/spec-spine-types/src/lib.rs" } } - extends
{ "nature": "additive", "spec": "005-coupling-gate", "unit": { "kind": "file", "path": "crates/spec-spine-core/src/couple.rs" } } - extends
{ "nature": "additive", "spec": "001-compile-registry", "unit": { "kind": "file", "path": "crates/spec-spine-core/src/lib.rs" } } - extends
{ "nature": "additive", "spec": "029-ownership-coverage", "unit": { "kind": "file", "path": "crates/spec-spine-cli/src/cmd_index.rs" } } - extends
{ "nature": "additive", "spec": "005-coupling-gate", "unit": { "kind": "file", "path": "crates/spec-spine-cli/src/cmd_couple.rs" } } - extends
{ "nature": "additive", "spec": "001-compile-registry", "unit": { "kind": "file", "path": "crates/spec-spine-cli/src/main.rs" } } - extends
{ "nature": "additive", "spec": "047-effective-config-is-a-governed-read", "unit": { "kind": "file", "path": "crates/spec-spine-cli/src/cmd_config.rs" } } - extends
{ "nature": "additive", "spec": "092-the-engine-ships-governance-not-an-environment", "unit": { "kind": "file", "path": "crates/spec-spine-core/src/scaffold.rs" } } - extends
{ "nature": "additive", "spec": "092-the-engine-ships-governance-not-an-environment", "unit": { "kind": "file", "path": "crates/spec-spine-core/tests/scaffold.rs" } } - extends
{ "nature": "additive", "spec": "029-ownership-coverage", "unit": { "kind": "file", "path": "crates/spec-spine-core/tests/coverage.rs" } } - extends
{ "nature": "additive", "spec": "005-coupling-gate", "unit": { "kind": "file", "path": "crates/spec-spine-core/tests/couple.rs" } } - extends
{ "nature": "additive", "spec": "001-compile-registry", "unit": { "kind": "file", "path": "crates/spec-spine-cli/tests/cli.rs" } }
Source headings
- 078: Governed scope is declared, not inferred
- 1. Purpose
- 1.1 Four conjuncts, and only one of them is about code
- 1.2 What the conjuncts exclude here
- 1.3 Why a longer extension list does not fix it
- 2. Territory
- 3. Behavior
- 3.1 Opt-in, and silent when unset
- 3.2 The declaration
- 3.3 What the declaration changes
- 3.4 How a governed-scope file is claimed
- 3.5 The report says which files entered this way
- 3.6 The enumeration is the CLI's, not the core's, and it names itself
- Three cases, not two
- The walk
- Tracked, added, deleted
- A git failure is an error, not a fallback
- 3.7 `config show` prints it
- 3.8 The tests
- 4. Out of scope
- 5. Resolved decisions
- Verification
Frozen anchors
No frozen anchors declared.