DR-0002 — Slice identity lives in the declaration, not the tools
- Status: accepted
- Date: 2026-07-08
Context
Multiple publishers must run the same machinery for different slices (names, manifests, namespaces, profiles), including publishers who vendor the machinery from a tier above. If identity is embedded in tool code, every new publisher forks the tools; if it is scattered across CLI flags, every call site must repeat it consistently.
Decision
All slice identity — name, labels, manifest filename, namespaces, adapters, profiles, retractions — lives in the export declaration. Tools read identity from the declaration they are pointed at and carry none of their own. A second publisher is a second declaration driving byte-identical tools.
Alternatives considered
- Fork per publisher. Every engine fix multiplies by publisher count; provenance of the forks is unmanaged. The exact failure the framework exists to prevent.
- CLI flags / environment for identity. Scatters one fact across N call sites (pipelines, scaffolds, docs); drift between call sites becomes a new failure class.
- Central registry of slices. Introduces a coordination point and breaks the "publisher knows no downstream / framework knows no publishers" locality.
Consequences
- The declaration schema is a public API with the same compatibility obligations as the CLI (MAJOR + migration to change).
- Tools must be tested against multiple declarations (the scenario kit runs every case under at least two slice identities).
- Manifest files deliberately exclude display labels so they stay byte-stable across identity-only changes.