Owner guidance 2026-08-29 for governor review 10476 (PR #11), finding by finding:
1. Explicit tier rank/tie-break for equal Mining gates. pickaxe_tiers
declared bronze and iron both at Mining 1 / Attack 1 while the
level-1 worked example called bronze canonical and carried it (27
slots) — internally contradictory under the entry's own
highest-unlocked acquisition policy. pickaxe_tiers now carries an
explicit rank (bronze 1 .. rune 6) and the selection rule resolves
equal Mining gates by rank: Mining 1 deterministically selects IRON
(7-tick roll, rank 2) over bronze (rank 1), and Attack 1 EQUIPS it
(iron attack gate = 1) -> 28 ore slots. Stated at every policy
layer (summary, accounts.requires_other, best_practice.equipment,
prepare state, economy.supplies, a14 equip-tool gate, pickaxe_tiers
head comment). An owned-only bronze run is documented as an operator
choice, never the entry's selection rule.
2. Level-1 lifecycle/rate inputs recomputed. The level-1 worked
example now uses the equipped iron pickaxe: 28 ore slots per drop
load, iron cadence [4200, 6000] ms (midpoint 5.1 s), and the
copper/tin rate re-derived from that cadence: 1.6 rolls x 5.1 + 0.5
drop + 0.39 break = 9.05 s/ore -> 398 ores/hr -> ~6,960 XP/hr (pin
6,900), replacing the bronze-midpoint 360 ores/hr / 6,300 XP/hr.
Updated in mine_sites (se-varrock-copper / se-varrock-tin),
economy comment block, profit_drivers, worktree example, and risk
notes; no other rate changes (fast-xp iron 28,000 and banked rates
untouched).
3. Recomputed 1-Attack/1-Mining fixture + capacity proof. Schema:
pickaxe_tiers gains required rank (1..6); pickaxe_examples gain
required expected_slots (28 equipped / 27 carried). Validator:
select_pickaxe() ties by rank; every pickaxe_examples row is
recomputed including expected_slots, the 1-Attack/41-Mining
rune-carry fixture is preserved, and the 1-Attack/1-Mining row is
now mandatory (selects iron, equipped, 28). Committed negative
fixtures f18-f22: bronze-at-Mining-1, carried-at-Attack-1, wrong
slots, missing 1/1 fixture, and a tier missing rank are all
rejected (22 selftests pass).
Preserved: complete GE tool acquisition loop, structured copper/tin
below-15 fallback, fast-xp/banked-income modes, dynamic 27/28
inventory handling, declared banked targets, respawn/world-hop model,
and all prior rate gates. version 6 -> 7, updated 2026-08-29.
Gate: python3 tools/validate.py -> 2 entries, 0 errors, 1 pre-existing
F2P WARN (low-alch-f2p researched, untouched); --selftest -> 22 PASS;
git diff --check clean.
Governor bounce 5 (2026-08-28) repaired finding by finding:
1. Tool purchase is now executable end to end: new a10 ge_open before any
ge_buy; a12 wait-ge-fill is BOUNDED (one 3-6 min fill window) and on
no-fill/partial-fill TIMEOUT cancels the resting offer -> a13
collects/refunds -> fail closed via recover (3 loops -> failed); a resting
offer is never re-placed indefinitely. Actions renumbered a11..a17.
2. min_level 1 copper/tin below-15 path now has STRUCTURED fallback rows
(mine_sites se-varrock-copper / se-varrock-tin, level 1, 17.5 xp, safe
East Varrock) added to mining_modes.fast-xp.sites; level-1 and level-14
selections are pinned in a new mining_selections block and recomputed by a
new select_fast_site() validator gate (+ 3 committed selftest fixtures).
3. a2 no longer advertises silver/coal/gold/mithril banked targets: it
restricts banked-income to the declared rows (iron @ se-varrock-bank,
adamantite @ al-kharid-south-adamantite); superheat-coal technique is
marked informational-only. New ge_open/ge_offers_done/ge_collect
validator gate (+ 1 fixture). Modeled below-15 rate 6,300 XP/hr (was
the unbacked '~8,800' prose) recomputed from the bronze cadence midpoint.
Validator: 2 entries, 0 errors, 1 pre-existing WARN; --selftest 17 PASS;
git diff --check clean.
Governor bounce 4 + owner guidance 2026-08-28 (structured, provable, full lifecycle):
1. site model is data, not prose: new mine_sites table (ore, gates, rock_count,
respawn_seconds, rolls_per_ore, modeled_ores_per_hour, world_hop, selectable,
inventory_policy, access, safety, route). Adamantite @ Al Kharid south is now
respawn-BOUND (2 rocks, 240 s respawn): modeled 120 ores/hr ONLY with world
hopping (wiki F2P adamantite guide) = 70,080 gp/hr; no-hop ceiling ~30/hr =
17,520; the 839 ores/hr iron-cadence fantasy is gone and a cadence-ceiling
gate rejects it. Runite is selectable:false (Wilderness PK risk, ~12 min
respawn) — refused, not hand-waved. New hop state + hop_world action (a14)
implement the world-hop policy; long-respawn selectable sites REQUIRE
world_hop + a hop_world action (validator).
2. fast-xp success model: rolls_per_ore 1.33 (61+, derived from the wiki 52,500
benchmark: 1,500 ores/hr / 2,000 3-tick rolls/hr); rates recomputed with
success rolls + respawn math (3 rocks x 3.59 s = 10.8 s > 5.4 s respawn ->
zero idle, pinned) + drop/bank + breaks: xp_per_hour 28,000 (was 32,400 with
a flat 0.3 s and 1 ore/click); 52,500 stays a labeled external benchmark.
3. sub-29 fast-xp preserved: South-east Varrock DROP site (safe, same mode) —
the mode never silently switches to banking.
4. tool prep executable end to end: check-tool (has_item) -> withdraw-tool
(owned branch, bank_inventory) or buy-tool + wait-ge-fill (ge_offers_done) +
collect-tool (ge_collect, verify) -> equip-tool via menu_option Wield with
the Attack gate; recovery on purchase/equip failure (3 -> failed).
5. VALIDATOR PROVES THE CONTRACT (no phrase-search): pickaxe_tiers must match
the canonical F2P table exactly (Mining=use gate, Attack=equip gate,
roll_ticks); pickaxe_examples recomputed per row (1-Attack/41-Mining must
select + CARRY rune; 40-Attack/70-Mining equips; 5-Attack/30-Mining carries
mithril); both modes declared with fixed inventory policies; mode refs must
resolve to declared selectable policy-matching sites; Wilderness selectable
-> error; modeled ores/hr <= 3600/(rolls_per_ore x 2.7 s); xp_per_hour
within 2% of the modeled fast-xp rate. 13 committed --selftest fixtures
(negative cases included) wired into every gate run.
Evidence: validate 2 entries 0 errors 1 pre-existing WARN; --selftest 13 PASS;
synthetic 3-way merge main 79cab78 (incl. catalog) + head clean + gate green;
git diff --check clean. version 4 -> 5.
Owner decision 2026-08-28: expose separate fast-xp (powermine, drop) and
banked-income (deterministic target ore + mine, bank) modes; never select
highest-available rocks. Separate pickaxe gates per tier: Mining level
decides usability (rune 41), Attack only equipping (rune 40) — pinned
1-Attack/41-Mining carry-and-use example. Modeled policy rates recomputed
with cadence, respawn idle, drop/bank legs and breaks (fast-xp ~32,400
XP/hr; banked iron ~56,500 gp/hr); 52,500 kept as labeled external
benchmark only. Worked examples per mode covering preparation -> first
full inventory -> first break -> resume. Validator now proves the gate
distinction and both modes for mining entries.
- Dynamic inventory/drop model: no hardcoded 27-slot count; drop loop
driven by count_item ore + inventory full; equip only when Attack
requirement met (rune = 40 Attack), else carry pickaxe in inventory
- Outcome wait: new wait_rock state — re-click only on ore gained, rock
depleted, or roll timeout; never re-click the active rock
- Tier-aware cadence: roll_table per pickaxe tier (bronze 4.8s -> rune
1.8s), mandatory pause >= full roll + [0,1800]ms; anchor rune [1800,3600]
- Al Kharid hard-gated to combat 29+ (scorpion aggro ceiling 28 per wiki
Aggressiveness); sub-29 -> SE Varrock, no food in the model, eat action
removed; survive = retreat-only defensive fallback
- version 2 -> 3
- Powermine drop loop: model per-slot Dropping of non-stackable ores —
drop_run now self-loops (count_item ore > 0 -> drop_run) until the
inventory is empty, then back to mine; a6 drops one occupied slot per
execution and its params state the iteration contract.
- Click cadence: a2 delay was 600-1400ms, below the rune pickaxe 3-tick
(1.8s) mining roll — replaced with 2000-4200ms and comment distinguishing
the roll interval from translator re-click cadence (bronze 8 ticks = 4.8s
note).
- Al Kharid survivability: route gate modeled - scorpion is level 14 and
attacks players at combat <= 28 (wiki Aggressiveness, 2x rule), so Al
Kharid powermine requires combat 29+ or food; new survive state with eat/
retreat actions (a7/a8), hard-failure path (food exhausted + low HP ->
failed; death = hard failure, no respawn claim). Banked South-east Varrock
route preserved for sub-29 accounts. version 1 -> 2. Validator: 0 errors,
1 pre-existing F2P WARN.