Should this work exist?
The agent observes assigned intent, compares it with local reality, and decides whether correction is needed.
Investigation 016 · Node Execution Principles
The local execution agent can launch one known program. Then reality asks for artifacts, filesystems, isolation, resources, security, monitoring, cleanup, and mechanisms that do not yet exist.
Begin the investigation ↓Prologue
The agent receives an assignment and decides that execution should exist locally. In the smallest world, it launches one executable already present on the machine.
Launch one known process.
Retrieve an artifact and prepare its filesystem.
Configure isolation, resources, security, monitoring, and cleanup.
Support a different execution technology with different mechanics.
Each request is reasonable. Together they ask whether the execution agent is still coordinating execution or becoming the execution platform itself.
Should the component responsible for execution also know how every execution mechanism works?
First Principles
A second component adds communication, compatibility, failure, and operational cost. The simplest correct design should stay combined while execution truly means one stable operation.
The agent observes assigned intent, compares it with local reality, and decides whether correction is needed.
The answer may begin as one process launch. We have not yet earned a separate owner.
Architecture should separate responsibilities only after their reasons to change diverge.
Naive Architecture
The agent already owns the outcome, so every new execution requirement enters the same component.
No addition is frivolous. The design grows through reasonable local decisions.
The Architecture That Almost Worked
The enlarged agent starts every current workload correctly. Nothing is broken in the demonstration. The warning is in its reasons to change.
This obligation changes slowly and remains owned by the machine-local agent.
Artifact formats, isolation, resource models, security, and future execution technologies evolve independently.
A working architecture can still be resisting its own future.
Breaking Our Design
Each episode removes one assumption. The interface does not appear until the final experiment earns it.
Pressure. Preparing modern execution teaches the agent increasing machine-specific detail while its original responsibility remains unchanged.
Prediction. If execution is mostly process launch, adding realistic preparation should leave the agent's shape nearly unchanged.
Add each required preparation step.
Launch becomes one small step among many mechanics.
The agent becomes tied to changing machine internals.
Responsibility and OS mechanics are separable concerns.
What if mechanisms multiply?
Begin with one executable already on the machine.
Pressure. Each new execution technology enters the orchestration owner as another implementation branch.
Prediction. If the agent genuinely owns these mechanics, supporting additional implementations should be ordinary feature growth.
Add independently implemented execution technologies.
Agent branches and release obligations grow together.
All execution innovation must modify orchestration.
The agent needs capability, not every implementation.
What remains stable over time?
One technology and one direct branch appear manageable.
Pressure. Runtime technology changes over years while the agent's responsibility remains “ensure assigned work runs.”
Prediction. If responsibility and mechanism belong together, every mechanism generation should legitimately require a new agent release.
Advance through mechanism generations.
The responsibility never changes.
Local innovation repeatedly becomes a system-wide agent release.
A stable dependency must isolate changing mechanics.
What does the agent actually need?
Year 1: one known mechanism is embedded in agent revision 1.
Pressure. Three failures point to the same root: the agent depends directly on how execution works.
Prediction. If a real boundary exists, responsibilities should separate without naming a particular technology.
Classify each responsibility by owner.
Decisions and mechanics form two coherent groups.
The agent no longer changes for each implementation.
A stable capability contract can connect the owners.
The runtime owns how.
Classify the responsibility by the evidence and change it owns.
Compact Review
The Turning Point
The execution agent decides that assigned work should exist. A separate runtime owns how the machine produces that execution.
The Runtime Delegation Contract
The execution agent owns desired execution. The runtime owns execution mechanics.
| Responsibility | Execution agent | Runtime |
|---|---|---|
| Observe desired state | Owns | Does not own |
| Decide whether work should run or restart | Owns | Does not own |
| Retrieve artifacts | Does not own | Owns |
| Prepare execution environment | Does not own | Owns |
| Configure machine mechanisms | Does not own | Owns |
| Launch, restart, and stop work | Requests | Executes |
| Monitor execution health | Consumes evidence | Owns mechanism-level observation |
| Report status and execution failures | Consumes and reconciles | Reports through the contract |
| Reconcile until intent matches | Owns | Does not own |
Express that a workload should be created without prescribing implementation details.
Express that execution should cease while the runtime owns the mechanics.
Express that failed execution should be recreated without transferring reconciliation ownership.
Report execution state and failures to the agent without becoming the owner of desired state.
Only Now: Kubernetes
The Kubelet remains the execution agent. The Container Runtime Interface is the stable capability boundary. containerd and CRI-O are independently evolving runtime implementations behind it.
These names realize the contract. They did not produce the need for it.
The Kubelet decides that execution should happen. The runtime knows how to execute it.
Engineering Reflection
A boundary earns its cost when one side's responsibility remains stable while the other side's mechanisms evolve independently.
Separated per-machine coordination from lower-level execution machinery.
Stable capabilities repeatedly allowed implementations beneath them to evolve.
CRI applies the same boundary to node execution.
A small, single-purpose system may be clearer with direct execution when one team owns both sides and change is rare.
A runtime boundary becomes worthwhile when mechanisms multiply, ownership diverges, and orchestration must stay stable.
Another long-lived process must be operated.
Requests and results cross a boundary.
The shared contract must evolve deliberately.
Failures can span agent, boundary, runtime, and machine.
Investigation Exercise
Write an agent that launches one known program.
Add artifact, filesystem, isolation, resource, and monitoring requirements.
Change the execution mechanism and record which orchestration code changes.
Keep create, stop, restart, status, and failure-reporting semantics in the shared boundary.
One Undefined Word Remains
The runtime contract accepts one opaque execution request. We have not established whether an application is one execution unit or several cooperating units with shared identity and fate.
We separated how work runs. We have not defined what one workload contains.