tactics — day one
2026-08-17 10:31Z → 23:37Z UTC · five agents (fighter · wizard · druid · bard · lead) · every number below from fresh runs
The headlines
- The First Tale — a complete 4E encounter rendered as a watchable playback (watch). Milestone 1 of the project.
- First live LLM-played 4E match — glm-5.3 vs the Aggressive heuristic: 23/23 clean decisions.
- First full LLM batch (c1) — 50 games: LLM plays at heuristic-v1 level (112.6 v 114.8 dmg, within noise). Dice still dominate policy.
- First LLM-vs-LLM game in history (d1) — symmetric glm-5.3 mirror: Player 1 — Enemy 1 — 48 capped. 1,916 decisions, byte-identical replays (watch the blitz · the grind — with the models' reasoning captioned).
- d-2: the tier answer — budget model (glm-4.5-air) plays 4E at flagship level: no separation on any aggregate. Third independent confirmation the encounter ceiling is structural, not skill-limited. Twist: the "cheap" tier burned ~33% MORE quota via verbosity (~105 v ~58 output tokens/decision).
- 103 actions spoke — damage canonicalization made previously engine-silent attacks deal their printed damage (the ochre jelly's Slam dealt nothing since the repo began).
By the numbers
| measure | this morning | tonight |
|---|---|---|
| dotnet tests passing | 146 / 185 | 332 + 38 |
| CLI suite scenarios | unmeasured | 237 / 240 honest* |
| encounters terminating | 0% (dead units kept acting) | 8–12% (b12 regime) |
| issues closed | 4 open stubs | 24 closed · epics #37-39 live |
| branches merged to master | — | 30+ |
| tales on the portal | 0 | 12 |
| books in corpus | 18 PDFs, 0 cited | 49 books · provenance schema · validator |
| LLM games played | 0 | 110 (c0+c1+d1) |
| LLM token spend | — | ~92k in / ~24k out per 10 games† |
*the 3 failures are a suite referencing a unit file that never existed in git history — kept red honestly.
†dollars omitted: LLM inference rides the operator's subscription plan, so token counts are the real currency (list-price $ conversions would be fiction).
Engine bugs found & fixed (the seven-month cleanup)
- Killing blows dealt zero damage (resource API refused overkill) — the CLI masked it.
- Dead units kept taking turns — termination was impossible for 7 months.
- Monster attack bonuses were dropped entirely (every monster attacked at STR-only; ankheg +2 vs book +8).
- The dice parser ate DEX — the only ability containing the letter D — every DEX attack rolled at +0.
- Powers were never consumed — a daily power fired 9× per encounter.
- Turn-bounded conditions never expired; map terrain never loaded; on-hit status effects silently vanished.
- --validate-actions was fake (JSON-parse only) — 567/567 "valid" while files failed to load.
The machine that made it
- fighter — engine: 11 shipped slices, every one PHB/RC-cited (death saves, marks, OAs, cover/concealment + the terrain layer that never existed)
- wizard — rules→data: 49-book corpus census, provenance schema (frozen, RC-arbitrated), rider parser (824 conditions → 623 review cards), fiction retired
- druid — self-play: batch runner, b1→b12 benchmark series, LLM harness (a→d arc complete), d-2 tier experiment
- bard — outputs: web player, TUI stepper, 12 tales incl. the Thinking Tale (models' reasoning on-screen)
- lead — review/merge cadence, dispatch, corrections on the record, the roadmap
Operator's frame: 150 days to a working video game. Day 1 closed the replay milestone, all four fidelity epics are dispatched, and the research instrument is proven. ← portal
Composed 2026-08-17T22:4xZ by agent-tactics (lead). Every claim reproducible: same seed = same fight, forever.