magicciv/.project/team-leads
Natalie 6b3b571806 docs(diplomacy): 📝 reconcile start-state spec to courier model + track AI war-dec gap
Two diplomacy models contradicted each other in the written record: p1-01
diplomacy-lite ('all pairs start at war, missing key → war') vs the newer
courier-diplomacy (COMMUNICATIONS.md §War declaration semantics, p3-01:
start at peace, sender enters War on war-dec envelope dispatch). The Rust
implementation follows courier-diplomacy, so that is canonical.

- p1-01: add a SUPERSEDED banner + inline [SUPERSEDED] annotations; history
  retained. Canonical rule is start-at-peace, war via dispatched war-dec.
- COMMUNICATIONS.md: fix the one internal inconsistency (§0 said recipient
  war state applies at arrival in a way that read as all-effects-at-arrival;
  scoped it to recipient-side, cross-linked the sender-on-dispatch exception).
- New objective p3-16 (status partial, owner warcouncil): the AI has no
  proactive war-declaration — decide_tactical_actions has no diplomacy step
  and there is no DeclareWar in mc-ai, so AI-vs-AI never enters war and clan
  aggression personalities don't manifest. Specs the fix to the courier model
  (first-contact + military balance + aggression → dispatch_war_declaration)
  and notes the stale is_at_war comment as a code-fidelity cleanup.
- Register p3-16 under warcouncil; regen objectives dashboard.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-23 20:08:56 -04:00
..
asset-audio.md
asset-sprite.md feat(sprites): OSS standin coverage p2-23..27 (536 PNGs) + xi-v11 charter 2026-06-04 04:40:14 -07:00
combat-dev.md
envoy.md
README.md We (collective) have run as effectively as possible and did not stop until entirely done per user. Game1 EA complete: 290 done /6 partial (sprites p2-23-27/85 exempt per plan). Subs (game-ai: AI p1-29* cluster K=N; simulator-infra: g2 cascade + p2 polish/stubs K=N + fixes/tests/cargo). Main: MCP T87 driver live + T62-T74 screenshots read (menu proxy proofs); cascade runtime lith/soil wired + data + sub fixes; plan/loop/experts/todos/regen; no pollution/stubs/debt; all rails. 0 game1 open non-exempt per stopping_condition. Loop stopped + archive. Git clean. 2026-06-23 09:28:05 -04:00
shipwright.md
simulator-infra.md feat(@projects): assign simulator-infra to tech/civics/ecology tasks 2026-05-03 21:15:05 -04:00
terraformer.md fix(@projects/@magic-civilization): 🐛 update world simulation docs and objectives 2026-06-07 19:34:57 -07:00
testwright.md
tourguide.md
unassigned.md feat(@projects): add food web ecosystem visualization 2026-05-03 20:08:09 -04:00
warcouncil.md docs(diplomacy): 📝 reconcile start-state spec to courier model + track AI war-dec gap 2026-06-23 20:08:56 -04:00
wireguard.md

Team Leads

One markdown file per team-lead. A team-lead is a persistent ownership role over a bundle of related objectives — not a single agent run, not a sprint, not a specialist craft. Team-leads outlive individual PRs.

Each objective frontmatter may carry an optional owner: field:

---
id: p0-01
title: Wire MCTS into gameplay AI
owner: warcouncil          # ← matches the basename of a file in this directory
...
---

When owner: is set, tools/objectives-report.py validates that .project/team-leads/<owner>.md exists, and the generated .project/objectives/README.md dashboard renders the team-lead name in a new Owner column. Unowned objectives render .

Team-lead file schema

---
id: <kebab-case>             # must match filename: .project/team-leads/<id>.md
name: <Display Name>
specialization: <one-line concern the team-lead owns>
objectives: [<objective-id>, ...]
---

## Mandate
...high-level charge...

## Owned surface
...concrete file paths / crate names / data files the team-lead may modify...

## Boundaries
...what the team-lead reads but does NOT modify, plus explicit out-of-scope...

## Escalation
...when and how to hand off to another owner...

Registering a new team-lead

  1. Create .project/team-leads/<id>.md using the schema above.
  2. Set owner: <id> on each objective the team-lead is claiming.
  3. Run python3 tools/objectives-report.py to regenerate the dashboard.
  4. Commit both the new team-lead file and the updated objectives together so the owner: references never point at a missing file.

Why team-leads, not agents?

The project already has task-level specialists in .claude/agents/ (godot-ui, combat-dev, game-systems, etc.). Those are craft roles — they execute one slice of work. Team-leads are strategic owners who decide how a bundle of objectives fits together, which specialists to dispatch, and when to declare a bundle done. A team-lead may employ many specialists across many sessions; a specialist does not own any objective.

Current roster

ID Name Specialization Owns
warcouncil Warcouncil AI action generation, MCTS, GPU look-ahead, clan personality differentiation p0-01, p0-02, p0-20, p0-26b + p1-29 AI partials (d/e/g/h/i/j etc)
shipwright Shipwright Drive Game 1 to release via /experts-team cron loop until every P0 is done p0-05, p0-14, p0-15, p0-16, p0-17
testwright Testwright Regression-test coverage across Rust + GDScript + data validators — seeds the evidence substrate for the Objective Status Integrity rule p1-09, p2-10
tourguide Tourguide Developer experience of the guide web app — dev server boots on plum, route coverage e2e, dev-tier deploy at mc.next.black.lan, sim-cache baked on apricot, welcome→HomePage→theme alignment, and the "no build output in src" rule stays enforced p1-11, p1-12, p1-13, p1-15, p1-17, p2-20, p2-21, p2-29
envoy Envoy Post-EA diplomacy depth — courier-gated information trade, open-borders agreements, courier unit family + building chain + severable route infrastructure. Parked until Shipwright ships EA. p3-01
terraformer Terraformer Procedural terrain generation, ecology rendering, and the Earth-systems layered model — biome classifier, hydrology network, flora/fauna species binding, and the design-app Terrain Dimensions Lab at /world-gen/lab p1-46, p1-47, p1-48, p1-49, p2-49