Governor-review (PR #10, attempt 2) findings, same issue-5 branch:
1. Pacing is additive. action-grammar.md defines anti_ban.delay as sleep
AFTER the action, so a cast takes 1.8s + 1.6-3.4s = 3.4-5.2s (mid
4.3s), ~837 casts/hr, not 1,400 or 1,800. Both entries now pin the
midpoint rate with the formula documented: LA 25,953 / SII 44,372 /
HLA 54,419 xp/hr. low-alch-f2p gp_per_hour bracketed by the delay
endpoints (-119,000 / -78,000).
2. run_control units agree: schema.md 'every' counts iterations and
iteration is one cast, so break.every [8, 14] is casts (comment no
longer claims bank cycles).
3. SII is now a concrete recipe. New top-level recipes: table models all
eight F2P smithable bars (bronze/iron/silver/steel/gold/mithril/
adamantite/runite) with every input and quantity (coal 2/4/6/8,
Smithing gates, bar ids) from the OSRS wiki smelting table. The
cast-superheat action pins params.recipe (steel-bar anchor) plus a
recipe_rule: smithing gate + complete input cost + one nature rune <
bar price; buy/withdraw the exact unnoted inputs; bank the bar.
entry.schema.json gains the optional 'recipes' section. Validator
gains recipe/SII checks and a deterministic steel-bar fixture
(1 iron + 2 coal = 3 inputs; margin 600 - (100 + 2*150 + 145) = 55).
4. Validator no longer crashes on malformed docs: scalar/empty YAML is
rejected with a normal ERROR (document shape check) and
supply_limit_conflicts guards non-mapping rows; regression fixtures
cover (bad.yaml, None), scalar docs, and undeclared recipe ids.
Tests: python3 tools/validate.py -> 2 entries, 0 errors, 0 warnings
(exit 0); --selftest -> 14 PASS; live negatives: scalar + empty docs
error cleanly (exit 1, no traceback), reintroduced 12500 divergence is
caught (supply-fact gate), git diff --check clean.