The merged alch_worked_example_regression gate requires the worked example to pin monotonic restock counters at 901/1,802 as well as breaks at 550/1,100/1,650; the 9-cast SII steel-path pins were already monotonic, this adds the alch-tier batch-cadence pins consistently with the entry's declared model.
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.
Governor-review bounce (PR #10) fixes on issue-5:
1. Timing units + rates: one OSRS tick = 0.6s so a 3-tick cast is 1.8s,
not 5.4s as both action comments claimed. The mandatory 1.6-3.4s
post-action delay (mid ~2.5s) allows ~1,440 casts/hr before overhead;
rates are now pinned at 1,400 casts/hr: LA 43,400 / SII 74,200 / HLA
91,000 xp/hr (was 55,800 / 95,400 / 117,000 @ 1,800). The old 1,800
figures were unreachable under the entries' own pacing.
2. Nature rune limit unified to 18000 (mapping 'limit' + Module:Exchange
agree, fetched live 2026-08-27): low-alch-f2p 12500 -> 18000, matching
magic-alch-handoff. tools/validate.py gains a cross-entry supply-fact
consistency check (same item+source must agree on ge_limit; run on
every gate invocation) plus --selftest regression fixtures: diverging
limits must fail, agreeing limits must pass, missing ge_limit is not
gated.
3. SII tier is now phase-aware and translatable: actions split into
cast-alch (LA/HLA -> cheapest alch candidate, noted stack) and
cast-superheat (SII 43-55 -> unnoted ore whose live bar margin is
positive; never a noted stack, never a price-only pick; on_fail skip
when no positive-margin ore). State machine pins each tier path
(LA <43, SII window chosen/skipped 43-55, HLA >=55), bank_supplies
banks smelted bars, buy-supplies restricts ores to positive-margin
recipes.
Tests: python3 tools/validate.py -> 2 entries, 0 errors, 0 warnings;
--selftest -> 3 PASS; negative test (reintroducing 12500) caught by the
new check; git diff --check clean.
- low-alch-f2p.yaml: 'bank at a GE-adjacent bank' source now cites the wiki
Money making guide (noted-item bulk alching, West Varrock Bank F2P hub) and
High Level Alchemy page (GE buying below alch value; noted-item casting).
Researched-flag WARN eliminated.
- Verified handoff levels from the wiki: LA 21 (31xp), SII 43 (53xp), HLA 55
(65xp), all F2P; LA page explicitly recommends HLA at 55. Recorded as a
soft-efficiency-choice note on the golden entry and a new self-contained
entry codex/training/magic-alch-handoff.yaml (id magic-alch-handoff).
- Gate: RESULT 2 entries, 0 errors, 0 warnings; diff --check clean.