079-a-blocking-claim-is-not-a-stale-shard

A blocking claim is not a stale shard

Lifecycle approvedImplementation completeVerification unknownQualification unknown

`check_index_freshness` folds two different refusals into one verdict: a committed shard whose bytes moved, and a spec whose claimed unit does not resolve. Both arrive as `Freshness::Stale`, so `check` prints "codebase-index: STALE (run `spec-spine index`)" and `index check` prints "index is STALE (run `spec-spine index` to refresh)" for a corpus whose shards are byte-exact. The named remedy provably does not work: reproduced at 0.19.0, `index` exits 0, writes the shard, and `check` still exits 2, because re-indexing cannot create a file a spec claims. An adopter documenting exit 2 as staleness follows that advice indefinitely. This spec keeps the refusal and the exit code exactly as they are and changes what the two freshness verbs say: a blocking resolution diagnostic is reported as its own class, names the owning spec and unit, and says regeneration will not clear it. The mixed case reports both and says which half regeneration addresses.

Read the full pinned specification ↗

Relationships

Claimed units

  • extends
    {
      "nature": "corrective",
      "spec": "004-codebase-index",
      "unit": {
        "kind": "file",
        "path": "crates/spec-spine-core/src/index.rs"
      }
    }
  • extends
    {
      "nature": "corrective",
      "spec": "004-codebase-index",
      "unit": {
        "kind": "file",
        "path": "crates/spec-spine-cli/src/cmd_index.rs"
      }
    }
  • extends
    {
      "nature": "corrective",
      "spec": "062-one-name-one-freshness-verb",
      "unit": {
        "kind": "file",
        "path": "crates/spec-spine-cli/src/cmd_check.rs"
      }
    }
  • extends
    {
      "nature": "additive",
      "spec": "069-the-committed-index-is-compared-not-trusted",
      "unit": {
        "kind": "file",
        "path": "crates/spec-spine-core/tests/index_body.rs"
      }
    }
  • extends
    {
      "nature": "additive",
      "spec": "034-machine-readable-verdicts",
      "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/src/lib.rs"
      }
    }

Source headings

  1. 079: A blocking claim is not a stale shard
  2. 1. Purpose
  3. 1.1 One verdict, two refusals, one remedy
  4. 1.2 The remedy does not work, and the tree says so
  5. 1.3 What is wrong is the description, not the decision
  6. 2. Territory
  7. 3. Behavior
  8. 3.1 The exit codes do not move
  9. 3.2 The two refusals are distinguished at the source
  10. 3.3 What the verbs say
  11. 3.4 Naming the contradiction, without naming a way out of it
  12. 3.5 The harness contract this changes, and the one it does not
  13. 3.5.1 The `Stop` hook is not fixed by this spec
  14. 4. Functional requirements
  15. 5. Acceptance criteria
  16. 6. Out of scope
  17. 7. Resolved decisions
  18. Verification

Frozen anchors

No frozen anchors declared.