diff --git a/docs/CREATURE_FORGE_PLAN.md b/docs/CREATURE_FORGE_PLAN.md index abf3cec..b1e131f 100644 --- a/docs/CREATURE_FORGE_PLAN.md +++ b/docs/CREATURE_FORGE_PLAN.md @@ -4,7 +4,26 @@ A tool for making NPCs and monsters that are **correct by construction, measured lethality, and never baseline-human by default**. Plus art that costs nothing and cannot contradict the statblock. -Status: plan only. Nothing below is built. +Status: **all five phases built** (23 September 2026). The table below is the state this +plan was written against in September; it is kept because the reasoning depends on it, and +every row of it has since moved: + +| then | now | +|---|---| +| 76 statblocks | 204, including 100 written in one pass | +| 0 statblocks not `baseline` | non-baseline bodies are reachable and the forge defaults to them by role | +| no combat simulator | `tools/simulate.mjs`, and six guards that measure against it | +| no NPC portraits | 47 Midjourney plates and derived tokens in `art/portraits/` and `art/tokens/` | +| ad-hoc validation | `creature-schema.mjs` plus `check-creatures`, `check-forge`, `check-armed` | + +Part 3 is `forge.mjs` (the derivation, at the root) and `tools/forge.mjs` (the CLI). +Part 5 is `generateCreature` and the **Forge creature** button on the Actors sidebar. The +two share one derivation, and `check-forge` requires them to agree when fed from their two +different catalogues — see R-310 and the commit history for what that caught. + +**The in-Foundry panel has not been exercised in a running world.** The derivation is +covered by 450 guarded combinations; `Actor.create`, the pack reads and the dialog are the +part `check-behaviour` says outright it cannot reach. --- @@ -205,13 +224,13 @@ gets authored properly in the morning. ## Order of work -| Phase | Deliverable | Why here | -|---|---|---| -| 1 | Schema + validator, guards rewired | Pure safety net. No new content, no risk, pays off immediately. | -| 2 | Simulator + `check-lethality`, tables regenerated | Turns published claims into results. Biggest single win. | -| 3 | Forge CLI | Needs 1 to validate against and 2 to tune against. | -| 4 | Procedural portraits | Independent of 1–3; could move earlier if wanted. | -| 5 | Foundry importer | Needs built packs carrying lethality data, so it goes last. | +| Phase | Deliverable | Why here | | +|---|---|---|---| +| 1 | Schema + validator, guards rewired | Pure safety net. No new content, no risk, pays off immediately. | done | +| 2 | Simulator + `check-lethality`, tables regenerated | Turns published claims into results. Biggest single win. | done | +| 3 | Forge CLI | Needs 1 to validate against and 2 to tune against. | done | +| 4 | Procedural portraits | Independent of 1–3; could move earlier if wanted. | done, and since replaced for 47 creatures by drawn plates | +| 5 | Foundry panel | Needs built packs carrying lethality data, so it goes last. | built, **not yet run in a world** | Phases 1 and 2 are worth doing even if 3–5 never happen.