188-a-repository-pin-selects-the-engine

A repository's pin selects the engine that runs

Lifecycle draftImplementation completeVerification unknownQualification unknown

Adds a launcher: a small executable, separate from the engine, that a user or a consumer invokes as `spec-spine`. It finds the repository, reads the engine pin from `spec-spine.toml` with a tolerant reader, resolves an installed engine of exactly that release, verifies its digest, and executes it with the original arguments, working directory, streams and exit status. Engines are stored once per user, content addressed, and a repository may instead declare a local tool directory. A committed `spec-spine.lock`, which no engine reads, records each target's engine digest. Acquisition of a missing engine happens only when the user or CI enabled it, never because a repository asked. A consumer asks `launcher resolve --json` and executes the absolute path it returns. The launcher never judges a repository.

Read the full pinned specification ↗

Relationships

Claimed units

  • establishes
    {
      "kind": "directory",
      "path": "crates/spec-spine-launcher/"
    }
  • establishes
    {
      "kind": "file",
      "path": "docs/launcher.md"
    }
  • extends
    {
      "nature": "additive",
      "spec": "092-the-engine-ships-governance-not-an-environment",
      "unit": {
        "kind": "file",
        "path": "spec-spine.toml"
      }
    }

Source headings

  1. 188: A repository's pin selects the engine that runs
  2. 1. Purpose
  3. 2. Territory
  4. 3. Behavior
  5. 3.1 Launcher and engine are separate
  6. 3.2 What the launcher reads
  7. 3.3 The lock
  8. 3.4 Resolution
  9. 3.5 Acquisition
  10. 3.6 Execution
  11. 3.7 A consumer asks for the resolution
  12. 3.8 Observable negative cases
  13. 4. Out of scope
  14. 5. Resolved decisions
  15. Verification

Frozen anchors

No frozen anchors declared.