188-a-repository-pin-selects-the-engine
A repository's pin selects the engine that runs
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
- 188: A repository's pin selects the engine that runs
- 1. Purpose
- 2. Territory
- 3. Behavior
- 3.1 Launcher and engine are separate
- 3.2 What the launcher reads
- 3.3 The lock
- 3.4 Resolution
- 3.5 Acquisition
- 3.6 Execution
- 3.7 A consumer asks for the resolution
- 3.8 Observable negative cases
- 4. Out of scope
- 5. Resolved decisions
- Verification
Frozen anchors
No frozen anchors declared.