# Batch #7 (500 seeds): the TRUE baseline — termination becomes policy-sensitive

First baseline on book-true attack math. Engine `a7aa2be`: includes #18
(weapon proficiency + half-level for PCs; **monsters attack at book values —
ankheg +8, not the +2 placeholder**), #19 cockatrice fix, #16 provenance
validator, and #15 phase (b) (LLM harness). Same spec as the b-series
(seeds 1–500 × 2 pairings, maxTurns 50). 1,000 encounters, 5 m 20 s,
0 errors, determinism guard PASS. Generated 2026-08-17 ~14:30Z.

Companion quick-look: `../2026-08-17-mm2-50seeds-b6/` (same engine, n=50).

## Results — everything moved

| pairing | player wins | enemy wins | capped | player dmg/enc | enemy dmg/enc |
|---|---|---|---|---|---|
| Aggressive vs Defensive | 17 (3.4%) | **25 (5.0%)** | 458 (91.6%) | 197.0 ± 49.8 | 61.6 ± 12.9 |
| Random vs Aggressive | 24 (4.8%) | 4 (0.8%) | 472 (94.4%) | 205.5 ± 46.8 | 57.3 ± 13.5 |

vs b4 (500 seeds, pre-#18): player dmg 169→197 (+17%), enemy dmg 36→62
(+72%, and σ tightened 15→13 — book-true bonuses hit consistently instead
of feast-or-famine). Pooled hit rates jumped ~10–15 pts (ankheg 0.32→0.63,
cleric 0.54→0.64). Enemy damage now burns 76% of the 81-HP player pool per
capped encounter; players 106% of the 186 enemy pool.

## First policy-differentiated result of the program

Pre-#18 (b4), every policy comparison was inside noise. Now:

- **Aggressive enemies beat Defensive players 25 v 17** (enemy-favored;
  two-prop p ≈ 0.19 within pairing, but vs b4's 2 enemy wins — a 12× jump).
- **Aggressive players vs Random enemies: 24 v 4, player-favored** (p <0.001).
- Cross-pairing enemy wins: 25 (Aggressive) v 4 (Random) — **p < 0.0001**.
  The enemy policy is now the dominant factor in who terminates.
- Interpretation (descriptive, not causal): book-true monster attacks
  (+8 vs AC ~16-19 ≈ 60% hit) punish the low-tempo Defensive policy; Random
  wastes the same attacks (ooze hitRate 0.485 v 0.385 across pairings —
  targeting quality differs). Player-side Aggressive vs Defensive is still
  within noise (24 v 17, p ≈ 0.19).

This is the slice the research program was built to produce: policy choice
now measurably changes outcomes, and the instrument can see it.

## Series frame (the "how broken was it" appendix)

| batch | engine state | ended/1000 | headline |
|---|---|---|---|
| b1 6c424e1 | pre-fixes | 0 | friendly-fire grind |
| b2 6b3699d | post #5/#7/#12 | 0 | grind persists (stale-binary caveat) |
| b3 7d6e41e | post #14 + defenses | 5 | first victories |
| b4 ebcc39a | = b3, n×10 | 26 | first CIs; players 5× enemies |
| b5 94a6a10 | post #7 data sweep | 4 | stable, sweep didn't move slice |
| **b7 a7aa2be** | **post #18 book math** | **70** | **policy-sensitive termination** |

(b6 = b7's n=50 companion: 4/100 ended.) Next levers: #21 kill events
(death analytics), then LLM players once the endpoint decision lands.

## Reproduce

```
dotnet src/Tactics.CLI/bin/Release/net8.0/Tactics.CLI.dll --batch docs/research/2026-08-17-mm2-500seeds-b7/spec.json
```
