CREATURE_FORGE_PLAN: mark all five phases built

It opened "Status: plan only. Nothing below is built" while four of the five
phases had shipped, and its state table described a repo of 76 statblocks
with no simulator and no portraits — 204, six measuring guards and 47 plates
ago. A plan that misreports what exists sends the next reader to build it
again.

The table is kept rather than deleted because the design argues from it, with
a second column saying where each row landed. Part 5 is marked built and NOT
yet run in a world, which is the honest state.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
slaguru666
2026-09-23 00:44:01 +01:00
co-authored by Claude Opus 5
parent 3b65877a94
commit e7a584cc60
+27 -8
View File
@@ -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.