A statement of intent
The declaration expresses an intended condition. It does not perform an action.
Investigation 032 - Platform Evolution Principles
INV-031 let a domain describe a ReplicatedDatabase with replicas = 3. The platform preserves that declaration as desired state. Nothing about storing it creates three database replicas. The Controller contract already explains how observed state moves toward desired state. The unresolved question is who should provide that worker when the platform does not own the domain's invariant.
Prologue
A team creates ReplicatedDatabase orders-production with replicas = 3. The platform accepts it. Nothing is wrong with the resource, and nothing is missing from the declaration. And yet the database does not exist. There is only a statement saying that three replicas should exist.
The platform already knows how to store a domain-specific declaration as authoritative desired state.
For a small system with one team, one release process, and rarely changing behaviour, putting that behaviour inside the platform keeps everything close together.
The platform begins supporting many domains. The database team understands what a healthy database means. The certificate team understands certificate renewal. The platform understands neither.
Should the domain also supply the behaviour, and does owning the source code alone make that behaviour independent?
First Principles
The declaration does not create a database, start a process, allocate storage, or repair an unhealthy instance. Someone must own the knowledge required to make it meaningful, and that ownership question is separate from where the software carrying that knowledge should live.
The declaration expresses an intended condition. It does not perform an action.
Someone must know what observations matter and which corrective actions are appropriate.
Observe, interpret, calculate, act, repeat. INV-032 asks who should provide that loop, not whether it should exist.
The database team may own the source. The platform may still build, load, run, and upgrade it.
One lifecycle, one compatibility boundary, one failure boundary, no additional participant.
Different owners, different release cadences, and different operational risk, combined by the naive architecture anyway.
If the domain owns the invariant, should the platform also own the software that implements it?
Naive Architecture
The database controller, the certificate controller, and the device controller all live inside the platform. It starts them, provides their state and observation, manages their lifecycle, and releases them together with everything else. There is one operational lifecycle, and no ambiguity about compatibility.
The Architecture That Almost Worked
A database team can own the database controller's implementation. The platform no longer needs to understand database semantics merely to execute it, only to host it. The controller is statically bundled and released as part of the host platform, sharing its runtime and process.
No additional runtime, service, or communication boundary. The controller can use the host's existing internal structures directly.
Source-code ownership moved to the domain team. Loading, compatibility, resource sharing, and releaseability are assumed acceptable without yet being tested.
The source boundary moved. We have not yet tested whether the lifecycle, runtime, or failure boundary moved with it.
Breaking Our Design
Each experiment starts from its own clean state and tests one prediction about the architecture that almost worked. Read the pressure and prediction, then run the experiment to find out what actually happens.
Pressure. The database team owns its controller's implementation, but the platform still bundles and releases it.
Prediction. If the domain fixes its own implementation, it should be able to release that fix independently of the platform.
Pressure. The domain owns its controller's responsibility independently, but the controller still shares the platform's process and resources.
Prediction. If the domain's responsibility is independent, a failure inside its controller should stay contained to that responsibility.
Pressure. The controller now runs in its own process, and depends on the platform's private cache, object layout, and queue to keep working.
Prediction. If the controller is physically separate, the platform's internal implementation should be free to change without affecting it.
Pressure. The worker participates through the platform's public resource API. It disappears, and returns with a stale observation while another writer has already acted.
Prediction. If the worker rejoins with its last known observation, it should be able to resume exactly where it left off.
The Turning Point
Four failures point at a boundary, not yet its exact split. Chapter 07 formalizes the contract once all four experiments are complete.
The Domain Automation Participation Contract
The domain owns the meaning, interpretation, and convergence of its invariant. The platform owns authoritative resource state and the participation semantics it promises. Desired state outlives the participant; a returning worker rereads current authoritative state and current reality rather than trusting memory.
Meaning, interpretation, and corrective action for its resource.
Persistence, identity, resourceVersion-checked concurrency, and the participation semantics it promises.
Participation must use promised semantics, never private caches, queues, or object layouts.
resourceVersionWorker absence can pause convergence while authoritative desired state remains protected. It does not guarantee that external domain health or safety remains unchanged. Stale knowledge must not silently destroy newer authoritative state, and this concurrency protection does not make external side effects atomic.
Only Now: Kubernetes
A domain controller operates against resources exposed by the Kubernetes API, using the same resourceVersion-checked updates and bounded watch mechanism available to built-in controllers. When such a controller encodes domain operational knowledge around one or more custom resources, the combination is commonly described as the Operator pattern - a naming convention for the participation boundary derived here, not a new architectural mechanism.
The custom resource the controller reconciles inherits the extensible resource boundary from INV-031: authoritative persistence, structural conformance, resourceVersion-checked concurrency, and bounded, relist-aware watches.
This does not cover how a controller is packaged, deployed, retried, backed off, or how it wins leadership among replicas - those are operational choices layered on top of the participation contract. It also does not cover authentication, authorization, or admission - deciding whether a proposed change may become authoritative desired state remains a separate, later question.
The extension boundary INV-031 derived; the domain controller reconciles it, not defines it.
Uses the same resourceVersion-checked updates and watches as built-in controllers.
Domain operational knowledge packaged around a custom resource, not a new mechanism.
Engineering Reflection
Separate ownership through a stable participation contract around authoritative state, rather than making the domain implementation part of the platform's private machinery.
One team owns the platform and the domain invariant, coordinated releases are intentional, shared process consequences are acceptable, and workloads are predictable.
Owners and release cadences differ, failure consequences deserve isolation, and another independently operated component costs less than the coupling it removes.
The participant must be deployed, observed, upgraded, diagnosed, and recovered.
The worker can be slow, unreachable, or partitioned without the platform immediately knowing why.
Desired state remains while domain progress pauses without a capable participant.
The platform must preserve the public semantics independent participants legitimately depend on.
Host and participant versions still need a defined compatibility relationship.
Participants reason from delayed observation and rely on inherited concurrency guarantees.
Some domains need durable operation identifiers, idempotency, or checkpoints.
Authentication, authorization, admission, packaging, and deployment remain separate concerns.
Investigation Exercise
Choose a platform hosting domain automation. Predict which property survives if the worker disappears, and which progress stops.
Give the domain ownership of the implementation, separate the process, replace private dependencies with public participation semantics, then remove every capable worker and return one with no trusted memory.
Record whether authoritative intent remained, whether convergence progressed or paused, and whether the returning worker recalculated from current state rather than memory.
Identify which coupling was intentional, which guarantees were inherited rather than invented, and which concerns remain outside the participation contract.
Bridge to INV-033
The domain controller can converge accepted state.
Its resource conforms to the structure INV-031 established.
Structural legitimacy is not the same as policy acceptance.
That decision happens before authoritative intent exists.
Who should decide, and where, without changing the platform's core request-processing loop?
This investigation inherits reconciliation, controller decomposition, durable desired state, and bounded observation from earlier investigations. Kubernetes documents controllers as control loops and the Operator pattern as domain-specific operational knowledge encoded in software. Domain controllers are one realization of the broader participation contract derived here; this investigation does not claim that Kubernetes invented independently owned automation or reconciliation.