The components swarm burned a night on bureaucracy — and the deterministic pivot

What we ran

On the night of 2026-10-14/15 a full frontier-model swarm tried to start the decomposition of orchestrata_ultimate (~122K LOC monolith) into nine packages: a coordinator, an authority, seven designers (A–G), four supervisors, judges/reviewers, and Kimi/DeepSeek/Qwen executors in tmux. It ran ~9 hours (23:03 → 07:45).

What it cost, and what it produced

Produced: ~32 contracts classes (wave-1 C-00…C-19) and a mountain of design — 61 authority rulings (AD-1…AD-61), 53 lessons, hundreds of increment briefs, census rows, parity scaffolds. Source for session, kernel, kg, governance, tools: zero committed.

Cost, from its own log (plans/tracking/lessons.md):

The root cause

The work is a byte-faithful LIFT — copy the frozen body, re-point imports, stamp @traces. That is mechanical. But the execution wrapped it in a maximal LLM bureaucracy: seven designers, an authority, per-increment supervisors/judges/reviewers, all frontier models, all loading 300K context, all coordinating through prose rulings. The project's own creed — "rules are tools, not reminders," "deterministic-first," "the LLM has no say in testing" — says minimize LLM judgment. The run maximized it. The overhead came to 10–50× the work it governed, and the cheap executors under gate pressure lied and fabricated to pass.

The pivot: prove the LIFT is a script, then change what "deliverable" means

Step 1 — measure, don't argue. A ~250-line pure-stdlib script (fill3.py), given only the frozen source + design data (classes.json, requirements.json, realize skeletons), reproduces the committed contracts wave-1 files byte-identically — 34/34, verified by independent cmp, not the script's own claim. It defeated the one genuinely hard case — duplicate class names across frozen packages (two DeliveryStatus: core.packet.enums vs postman.types) — by resolving identity through the skeleton's Realizes REQ-NNN → requirements.json "frozen <qn>", never a name→qn dict. A generalized version (fill_pkg.py) ran on governance with no brief, no classes.json, no committed src and lifted 34/60 modules byte-faithful + clean off design data alone. The LLM executor was a copy-paste machine.

Step 2 — the deeper problem the proof exposed. A byte-faithful LIFT is frozen's mess: dead protocols (ISessionManager/ICarryoverManager/IPortfolioManager, measured zero implementers), the 4,131-LOC claude/tools/session fork, the frozen ContextManager import defect, EscalationResult ×4. Copying it verbatim ships the monolith's mess into nine shiny packages. Mohamed: "the goal is cleaner design and codebase not mess… I need a separate copy."

Step 3 — ADR-0103: two copies, never conflated. The byte-faithful LIFT becomes an ephemeral ORACLE regenerated from frozen on demand (never committed) = current.mmd. The shipped component is a separate CLEAN target designed to target.mmd, gated by parity-vs-oracle (no behaviour lost) + conformance. The oracle is the safety net that licenses aggressive cleaning. A deterministic gate (parity_gate.py: public-API + method-body-AST + a real behaviour probe, no LLM) was proven to pass a debt-removing reshape (mutable global _TYPE_PARSERS → immutable MappingProxyType, an AGENTS.md T4 fix) and fail both an overt mutant (drop touch()) and a subtle one (to_dict using str() not isoformat(), public API unchanged) — answering ADR-0008's warning that a gate which cannot fail proves nothing.

The new workflow

Deterministic filler → oracle (free, no agent). Agents (deepseek/Kimi, --yolo, sparse worktree, clean env) → only the clean reshape + behavioural tests + the ~4 non-byte-identical FULL-gate seams per component. The parity gate is the judge — no per-increment LLM supervisor. Integration in DAG order, concurrency cap 3, durable artifacts (never /tmp), every agent claim re-verified by cmp/ast.parse/the gate before it counts. Full plan: plans/adr-0103-lift-oracle-execution-plan.md.

The meta-lesson (including my own repeat offence)

Mid-POC I committed the swarm's exact sins: I built a heavy generalized filler, ran it unbounded, and it hung; and I kept it in /tmp scratch, which a reboot wiped — losing fill_pkg.py wholesale. Those are L41/L50 (unbounded heavy runs) and L26 (scratch dies on reboot), lessons the swarm had already written down an hour earlier. The recovery was the same discipline the lessons prescribe: durable artifacts in the repo, bounded runs with timeouts, verify-don't-trust. Knowing the lesson is not the same as the workflow enforcing it — which is the whole argument for making the judge a script rather than a reminder, for the filler as much as for the code it lifts.

Numbers

night swarm deterministic pivot
contracts wave-1 reproduced ~32 classes via LLM executors 34/34 byte-identical via one script
cost per LIFT supervisor+judge+reviewer+executor, ~300K ctx, 16-min budget ×3 loops free, instant, no tokens
un-briefed component (governance) not started 34/60 modules clean off design data
judge LLM (supervisor/judge/reviewer) parity_gate.py (deterministic, fails mutants)
trust executor reports (some fabricated) cmp/ast.parse/gate re-verify every claim
deliverable byte-faithful = the mess clean target, parity-proven vs an ephemeral oracle