Prompt & Configuration Registry · View 11 of 21 · Data
The modelling decisions
- version.digest is the primary key, not a surrogate. Identity and content are the same thing, which is what makes "which configuration served this answer?" a lookup rather than a reconstruction.
- environment_pointer is keyed by (key_id, environment) and holds exactly one digest. Promotion is an update to this row; the history lives in promotion and in the audit ledger, never in the pointer.
- experiment hangs off the pointer rather than off the key, because an experiment runs in one environment and a staging experiment must not assign production traffic.
What is deliberately absent
- No assignment table. Variant membership is recomputed from hash(unit, salt) wherever it is needed, including offline (ADR-09), so there is nothing to keep consistent and nothing to lose.
- No rendered-prompt entity. Exposure records a digest and a unit hash, not the text that was sent (ADR-14).
- rationale is a required column on version, not an optional note. A version without one is not promotable.
Risks
- experiment.salt is immutable and load-bearing: changing it silently reassigns every unit, which looks like a result rather than a bug. It is marked immutable in the schema and enforced in the API.
- unit_hash in exposure is a pseudonymised identifier, not an anonymous one. It is re-identifiable by anyone holding the unit identifier, and must be treated as personal data.