AgentArmies: end states, contracts and plans
1. The six stages and who owns them
One direction, one producer per surface (ARCHITECTURE.md §1). Each box shows the repo and the state of its end state, the document that describes the repo as if it were finished and that every plan is reviewed against.
2. End states, repo by repo
An end state is reviewed like code: tier A, two reviewers from two providers, findings answered by number, the ops agent merges when both approve the current head. The one-line summaries below are lifted from each file's "What it is".
| repo · layer | end state | what it is | lead · first work |
|---|---|---|---|
| contracts · schemas | merged e14c7a2 file · PLAT-8 | Every cross-service schema as machine-checked definitions (Protobuf, JSON Schema), generated SDKs for TypeScript, Rust and Python, fixture packs, consumer-driven contract tests in each producer's CI. A world is (earth generation, variant, instance). | lead-contracts (Fable, xhigh) · PLAT-15 C1 + C2 v0 · PLAT-16 C7 · PLAT-17 C8 · PLAT-20 C5 · the places.v0 fixture (decided today) |
| earth-data · IMPORT, NORMALIZE | merged 5a25c82 file · DATA-1 | Acquisition into immutable raw blobs with provenance and licence; normalisation to the versioned ontology with every field marked by basis; authored enrichment with confidence; live layers. Publishes the Layer Catalog, World Manifest and Tile Data API on R2 for any coordinate on Earth, with honest gaps, refreshed on schedules no agent runs by hand. | lead-earth-data (Fable) · DATA-2 Dagster + first source (approved, building) · DATA-3 coverage of the 17 places (Opus grind) · DATA-4 C2 v0 · DATA-5 one-call tiles for experiments |
| eval · acceptance | merged bc70004 file · EVAL-1 | The reference board (a ladder of fetchable opponents topped by real photographs), the capture harness (every judged image produced by scripts with a sidecar; inadmissible captures marked), the realism critic, scoreboards, the swipe deck for Joel's pairwise votes, proposal cards with kill dates. | lead-eval (Fable) · EVAL-2 harness (draft #4) · EVAL-3 ladder (draft #3) · EVAL-4 judge packs · EVAL-5 judge rail for the forge pilots · EVAL-6 perf gate |
| asset-catalog · assets (C5) | approved, awaiting merge PR #1 · AST-3 | The one place an asset is identified, described, budgeted, licensed and published, and the only writer of assets/ in the store. Forges make things; the catalog says what they are and lets everyone fetch them by digest. Publishes C5; never serves bytes itself. Built on the approved library design (AST-1). | lead-asset-catalog (Fable) · AST-4 the store (plan approved; PR #2 open, 7,097 lines, needs its two reviewers) · PLAT-20 with contracts |
| tile-compiler · COMPILE | in review PR #1 · CMP-1 | The pure function from manifests and a cell to products: reads the cell and its halo through the Tile Data API, solves the tile into one consistent plan (buildings meet the ground, roads meet buildings, water is level, every face has one owner) and projects it to render, sim and plan products. Bodies solved once at their feature id; solvers are plug-ins so a lab's solver can graduate without changing the job. | no lead yet: spawns on Fable when this PR merges (the first wave-2 lead) · MIGRATION.md already lists the quarry's reference solver |
| world-serve · STORE | in review PR #1 · CMP-2 | The product store, the generation index, the one bake queue and the serving policy: a product by address from the CDN, or an honest 404 plus a queued demand. Content-addressed and immutable; a generation is the digest of compiler build, World Manifest and Asset Manifest, so a promotion moves pointers rather than rebaking. TypeScript on Cloudflare Workers, Queues, R2 and D1. | no lead yet: spawns on Opus 5 when this PR merges · requirements draft in STANDARDS §9 |
| world-sim · SIMULATE | in review PR #2 · SIM-1 | Server-side truth for every world, in Rust: tile groups of contiguous level-16 cells simulated at three LODs, merging and splitting as players gather and part; physics in tiers, traffic, NPCs, combat, vehicles; every state change appended to the group's event log, the only truth. Clients send intents and predict with the same core compiled to WASM; a client is never trusted. | no lead yet: spawns on Opus 5 when this PR merges |
| labs · R&D index | in review PR #2 · LAB-5 | The index and templates for prototypes: every lab is its own lab-<slug> repo with a hypothesis, a metric eval judges blind on the same cells as its siblings, a budget and a kill date. A lab answers one question cheaply and is killed or graduated; what it learns reaches a product repo only by a port, one module per PR with evidence. | lead-labs (Fable) · LAB-8 the index (draft labs#3, two tier A reviews running) |
| platform · the standard | from before today | The template every repo is cut from, the gauntlet gate, the sweep, the weekly report, the job runner, the release train, identities and helpers. Owns ~/.aa2/bin on the Mac. | lead-platform (Fable) · PLAT-13 require the gate · PLAT-14 job runner · PLAT-10 merge queue · PLAT-22 kill switch |
| client-web · RENDER | from before today | Clients draw served products and view-dependent effects only; the alpha ships from here once it talks to the new services. The frozen monorepo stays the demo until then. | wave 3 · the wrapper for the gate landed today (#1) |
The five lab repos (lab-earth-compiler, lab-satellite-vision, lab-llm-authored, lab-geometry-solves, lab-forge-props-bakeoff) carry hypothesis cards instead of end states; see section 5.
3. The contracts (C1 to C8)
Additive within a major, consumers pin a major, producers publish fixture packs, consumer-driven tests run in the producer's CI. Every repo pins what it consumes through contracts.lock (grammar decided today: contracts:, fixtures:, assets:), fetched by digest from the store at store.agentarmies.io (prod) and store-dev.agentarmies.io (dev), both live since 13:00 UTC.
| id | contract | producer → consumers | v0 owner | state |
|---|---|---|---|---|
| C1 | Layer Catalog + World Manifest | earth-data → compiler, sim, eval | PLAT-15 (contracts) with earth-data as first producer (DATA-2) | plan rev 1a under review |
| C2 | Tile Data API: static range-readable objects, whole-feature query for bodies, live-layer stream | earth-data → compiler, client map, labs | PLAT-15 · DATA-4 publishes it for the first source | plan rev 1a under review |
| C3 | Tile Products at s2/<level>/<cell>/<kind>@<generation>; generation = hash(compiler, world manifest, asset manifest) | compiler → serve → client, sim, eval | contracts, after C1 and C2; tile-compiler and world-serve leads consume | after wave-2 leads |
| C4 | Demand API | client, sim → serve | contracts with world-serve | after wave-2 leads |
| C5 | Asset Catalog + Asset Manifest | asset-catalog → compiler, client, sim, eval | PLAT-20, thin, driven by pilot A's field list (posted today) | todo, field list posted |
| C6 | Game Protocol + prediction crate compatibility matrix | sim ↔ client | contracts with world-sim | wave 3 |
| C7 | Eval Protocol, including report.v1 | eval ↔ all | PLAT-16 | todo |
| C8 | Release Manifest | platform → all | PLAT-17 | todo |
4. Plans: tier A reviews and where each stands
Every tier A ticket gets a written plan, then an adversarial reviewer with fresh context re-derives it and posts numbered findings; the lead answers by number and revises until approval. Only then does a builder start. The chart shows how much the reviews changed: none passed unchanged.
| plan | state | then |
|---|---|---|
| DATA-2 Dagster skeleton, first source on aa-cpu-1 | approved rev 2 | builder mid-skeleton; two PRs; store decision recorded (dev store in Phase 1, prod at first promotion) |
| EVAL-2 capture harness | approved v2 | draft eval#4 pushed; perf carved out to EVAL-6 |
| EVAL-3 reference ladder | approved | draft eval#3; stacks on EVAL-2 |
| EVAL-5 judge rail for the forge pilots | approved v2 | viewer builder starts when a lane frees; pilot A's judging earliest next week |
| AST-4 the store | approved rev 2 | PR #2 open, reviewers to spawn (Opus + Codex) |
| PLAT-4 the gauntlet | built, live | two green runs on real PRs (platform#16, #17); PLAT-13 makes it required after one in a second repo |
| EVAL-4 judge packs and pairing | rev 2 in re-review | raised to tier A; owns the judge protocol and the one normalisation path |
| PLAT-14 job runner | rev 1 in review | first real job: DATA-2's Overture materialisation |
| PLAT-15 C1 + C2 v0 with SDKs | rev 1a in review | store URLs and lock grammar folded in; earth-data's store decision relayed |
| AST-1 asset library design | approved, merged | became asset-catalog's end state |
5. The labs (the compile step's R&D) and the forge pilots
Joel's four bets on the compile step, each a repo with a hypothesis card, a metric eval judges blind on the same cells, a budget and a kill date (2026-09-30); plus pilot A of the forge bake-off from his AST-2 charter. The labs index (LAB-8) is the ledger.
| lab | bet | state | first result |
|---|---|---|---|
| lab-earth-compiler · LAB-1 | Diffusion post-trained on our data: a conditional generative pass over imperfect Earth sources emits the layers (SDXL + LoRA within 24 GB; rectified-flow fallback if not ahead of the regressor by 2026-09-16) | open | held-out registry of 153 judged cells + 1,024 Travis cells; NAIP, Sentinel-2, DEM, WorldCover pulling; kill rule: LPIPS ≤ 0.85× best baseline and FID below every baseline and eval's swipe 2:1 |
| lab-satellite-vision · LAB-2 | Classic machine vision over NAIP and Sentinel: land cover, roofs and roof material, tree crowns, each with a compiler consumer | open | shared Austin source store on aa-gpu-1 (NAIP 2022, Sentinel-2, DEM, 3DEP lidar, WorldCover, OSM), sixteen more places pulling; per-class IoU on an independently labelled set; its on-node layout is now the fleet's |
| lab-llm-authored · LAB-3 | Existing vision and language models chained, with LLMs authoring semantic data | open | baseline and shuffled control over Austin (164 buildings) and Seattle (96), 0 USD; the API arms wait on keys (INB-9); independent labeller running |
| lab-geometry-solves · LAB-4 | Constraint solves over footprints, heights, roads, terrain and water: one consistent plan per tile | setup | setup agent walled on limits, resumes itself |
| lab-forge-props-bakeoff · LAB-6 | Pilot A: ten street-furniture items, five producer arms (Blender procedural, TRELLIS.2, Hunyuan3D 2.1, free Megascans, Tripo/Meshy controls) behind eval's one blind judge | setup | Blender 5.2 Cycles proven on the card; TRELLIS.2 built for sm_120; refboard of 58 licensed photographs; Megascans exist for 8 of 10 items; draft PR next |
| lab-forge-facade-bakeoff · LAB-7 | Pilot B: twenty Austin buildings, four arms, the same judge | todo | after pilot A's controls exist |
6. Pull requests across the org
| PR | what | state | blocked on |
|---|---|---|---|
| platform#17 | aa-linear, the one reviewed Linear helper (PLAT-25) | gate green | the strict status-check rule wants a rebase after #16 merged, which would stale both approvals; the parent turns strict off (PLAT-10 merge queue is the proper fix) |
| asset-catalog#1 | END-STATE.md (AST-3) | 2 approvals on head | two leftover threads from the bootstrapper's stood-down reviewer need a reply and resolve; then it is the second green gate run |
| platform#15 | sweep: armed-unmerged line (PLAT-12) | changes requested | builder fixing; severity split decided by the lead |
| platform#18 | the aa command line (PLAT-24) | changes requested | manifest validation (Codex); 7 non-blocking (Fable) |
| platform#19 | the weekly report with cost per repo (PLAT-21) | changes requested | eight blocking findings; Opus builder takes the fix |
| platform#20 | template adopts contracts.lock, fixtures by digest (PLAT-26) | changes requested | five findings; gates the contracts lead's template use |
| asset-catalog#2 | the store core, aa-asset publish and verify (AST-4, PR 1) | needs reviewers | tier A on 7,097 lines; Opus + Codex reviewers when lanes allow |
| Drafts: eval#3, eval#4 (harness, ladder) · labs#3 (index) · tile-compiler#1, world-serve#1, world-sim#2, labs#2 (end states) · lab-earth-compiler#1, lab-satellite-vision#1, lab-llm-authored#1 (lab setups). | |||
7. The fleet, the capacity and today's course change
At 13:06 UTC Joel called the pace: too many Fable 5.1 sessions spawned recursively. The policy since: Fable for the parent and the leads only; Opus 5 and Codex below them; three working children per lead; a token budget on every child. At 13:40 the Claude pool walled anyway on the earlier burn, and at 14:4x everything was paused. From here: one Claude child at a time, ramping back to eight Fable lanes over the next hours.
| thread | model | state |
|---|---|---|
| parent (this thread) | Fable 5.1 | running |
| lead-platform, lead-contracts, lead-earth-data, lead-eval, lead-labs, lead-asset-catalog | Fable 5.1 · 80M budget each | paused |
| org-ops-2 (merges, CI, sweep, nodes, the Sunday weekly) | Opus 5 · 40M | paused |
| wave-2-bootstrap-2 (four end-state PRs) | Opus 5 · 25M | paused |
| org-ops, wave-2-bootstrap (originals) | Fable 5.1 | retired: stuck on a seat at its limit, retried instead of rotated |
| tile-compiler lead (next) | Fable 5.1 | when its end state merges |
| world-serve, world-sim leads (next) | Opus 5, xhigh | when their end states merge |
Policy text: MASTER-PLAN §6.1 · budgets: state/allocations.md · every step of the day: state/feed.md
8. The day, in order
9. Where it paused, and the plan from here
Paused mid-flight
- platform#17 gate-green, waiting only for the strict rule to be turned off.
- asset-catalog#1 approved, two threads to resolve, then merge and the second green run, then the gate becomes required in all fifteen rulesets (PLAT-13).
- DATA-2 builder mid-skeleton on Fable (grandfathered); the coverage grind on round 1.
- eval harness and ladder drafts pushed; EVAL-4 in re-review.
- labs: three open, two setups; LAB-1's Travis pull runs as a systemd unit on aa-gpu-1 (65 of 140 quads at 13:40).
- Four end-state PRs (tile-compiler, world-serve, world-sim, labs) with first-round reviews posted; the new bootstrapper takes them.
- The ops agent's queue: eval's store credentials on the rig, the stage bucket's removal, the fleet nodes' T3 Code update in a quiet window.
The ramp (one Claude child at a time)
- Parent alone:
strictoff on the fifteen rulesets. - org-ops-2 (Opus): merge platform#17, the rig credentials, the stage bucket, the node update.
- asset-catalog lead, one turn: resolve its two threads; asset-catalog#1 merges; the gate becomes required everywhere.
- contracts lead, one turn: the PLAT-15 verdict, then Opus builders for C1, C2 and
places.v0. - platform lead alone, then eval and earth-data with their builders as the seat windows reset; reviews on Codex during the ramp.
Joel's cards
- INB-9 accounts and provider keys (ANTHROPIC_API_KEY, OPENAI_API_KEY, admin keys, Mapillary, Maps, Modal, Fab); option B is one action.
- INB-8 asset licences · INB-6 geo conventions (default as written 2026-09-05) · INB-5 sensitive-places policy before the friends-and-family link · INB-4 old instances (2026-09-09).
- Open in the plan: the friends-and-family horizon; whether Opus counts toward the eight lanes.
Documents: MASTER-PLAN.md · ARCHITECTURE.md · STANDARDS.md · state/status.md · state/steers.md · Linear