ddkc://swarm

2026-07-22 · CONTROL PLANE · DREAM.OS V2 · ~10 MIN READ

The Control Plane
Comes Before Smarter Agents.

Five audits, one diagnosis: the agents can ship work. The runtime around them is not yet a trustworthy control plane.

Ownership
3 classes
Live send
Health gate
Mute
Transport
Inventory
Tier 0–3

Looking across identity, planning, verification, policy, and this latest Agent-4 audit, the picture converges.

Capability is no longer the bottleneck. Trustworthy substrate is.

The newest audit adds a crisp architectural boundary: runtime state is leaking into source control. Bus ledgers show up as worktree debt. Overlay HTML mutates next to tracked policies. Inventories spend cycles deep-inspecting clones when a registry lookup would have been enough. Agents clean generated noise instead of shipping product.

Those are not separate bugs. They are one design failure: runtime-owned and source-owned paths share a namespace.

Every path needs exactly one owner

We formalized a three-class ownership model and put it on disk as runtime/policies/runtime_owned_paths_001.yaml:

ownership
Source-Owned
  git tracked · reviewed · versioned

Runtime-Owned
  ledgers · overlays · queues · caches · leases

Generated
  reports · inventories · temporary artifacts

RULE: every path belongs to exactly one owner

A companion classifier (classify_worktree_debt_001.py) reads porcelain status and subtracts runtime and generated paths from “source debt.” That is how planners stop treating bus churn as a cleanup mission.

Bus health is a hard dependency

Earlier audits already said A2A was “send and hope.” This one makes the corrective shape explicit:

live_dispatch
Bus Health PASS
  → Send
  → Receipt
  → Lease
  → Delivered

If thread_fsm / list_messages unavailable
  → never attempt --live

message_bus_health_001.py is now the preflight. Messaging send and bus dispatch refuse --live when health is FAIL. That is enforcement, not a checklist item agents are supposed to remember.

Mute is theater until transport drops the message

Asking every producer to “stay quiet” is not a mute. A mute is complete only when the transport suppresses the message before it becomes observable:

transport_policy
Producer
  → Transport Policy  (mute / seal / VoicePrint)
  → Message Bus
  → Consumer

HARD_MUTE active → drop at enqueue
  (not “please don’t send again”)

Outbound A2A now evaluates the thread FSM at enqueue. Sealed and hard-muted threads never enter the queue. Dispatch already refused them; enqueue refusal closes the theater gap.

Inventory needs progressive resolution

Deep-inspecting 173 local git directories on every run is how inventory becomes a tax. Progressive tiers keep the default cheap:

inventory_tiers
Tier 0  Canonical clone registry
Tier 1  Health summary (dirty / tip)
Tier 2  Branch metadata
Tier 3  Deep inspection (investigation only)

Most runs stop at Tier 0 or Tier 1.

github_worktree_inventory_001.py --tier 0 is the new default habit for fleet hygiene checks. Tier 3 stays available when a specific repo actually needs forensics — not as the daily path.

Five investments. Six subsystems.

Across all five audits, the same platform bets keep resurfacing:

If I were organizing Dream.OS v2, I would fold those into six subsystems: Identity & Session · State & Storage · Evidence & Verification · Transport & Messaging · Planning & Memory · Mission & Product Closure. Every audit recommendation lands cleanly in one of those boxes.

What shipped in this slice

Not a manifesto — runnable gates:

Highest-leverage work is no longer “make agents smarter.” It is making the execution substrate deterministic, observable, and evidence-driven.

Related: execution architecture · execution contracts · rulings → runtime law