Skip to content

Authority boundaries

The phrase “source of truth” becomes misleading when it suggests one artifact owns every kind of state. A live product has several authorities. The contract is that they do not overlap silently.

Product intent

Evolutionary Model

Behavior, experience, permissions, integration contracts

Translation

Versioned generator

How supported intent becomes implementation

Artifacts

Release ledger

What was built, verified, and promoted

Persistent shape

Migration history

How schema and stored values evolve

Live values

Database

Rows and state created while the product runs

Runtime inputs

Config control plane

Secrets, endpoints, flags, certificates

Execution

Infrastructure

Capacity, routing, health, and active release

Reality

Observability

What is happening now

The Evolutionary Model owns what the product should do: vocabulary, structure, behavior, rules, permissions, experience, and integration contracts.

If a permission rule changes, revise the model. If an endpoint changes but the product contract does not, do not fabricate a model revision merely to move a secret.

The versioned generator owns how supported model constructs become implementation. A correct model that produces incorrect code is a generator defect. Fixing every emitted application independently would preserve the symptom and abandon the shared cause.

The release ledger owns the mapping from model revision and generator version to built artifacts, manifests, checks, and promotion state. It answers what was delivered—not what should conceptually exist.

The live database owns current rows. Migration history owns the ordered evolution of physical schema and stored values.

The model may express semantic intent such as a rename or split. The generator translates that intent into migration artifacts. Infrastructure plans and executes the transition. No single layer can safely do all three jobs.

The control plane owns secret values, environment-specific endpoints, certificates, and operational flags. The model and release declare which values are required and how they are used, never their production contents.

The orchestrator owns desired and active runtime topology: release instances, routing, capacity, service health, and deployment state. It does not decide product behavior.

Telemetry owns what is happening now: errors, latency, saturation, queue depth, external failures, and business signals. Observations can motivate a model or generator change, but they do not mutate intent automatically.

Observation or request Owning authority Permanent response Regenerate?
Wrong permission or rule Model New revision Yes
Correct model, wrong output Generator Shared fix and generator release Yes
Candidate does not start Release/config/infra Keep active release; diagnose Not necessarily
Endpoint, key, or certificate changed Config control plane Audited runtime update Usually no
Provider changed its payload contract Integration model/generator Update contract or adapter Yes
General traffic increased Infrastructure Scale, pool, cache, workers No
Query strategy fails at scale Model workload/generator Capture requirement or improve emitter Yes
Stored values are corrupted Data operations Repair, replay, quarantine, restore No
Field rename or split Model evolution + migration Explicit mapping and migration Yes
Dependency vulnerability Supply chain/generator Update base/dependency and rebuild Often

When an incident or change appears, ask:

Which fact changed, and which authority owns that fact?

Do not begin with “which file should we edit?” That question already assumes implementation is the authority.