From ba3a8af9f97d13d325be3703166798881b6ee68e Mon Sep 17 00:00:00 2001 From: Claude Date: Thu, 27 Aug 2026 17:00:42 -0500 Subject: [PATCH] codex: fix mining-f2p entry per governor review (bounce fix attempt 2) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 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 --- codex/training/mining-f2p.yaml | 118 ++++++++++++++++++--------------- 1 file changed, 66 insertions(+), 52 deletions(-) diff --git a/codex/training/mining-f2p.yaml b/codex/training/mining-f2p.yaml index 8185e61..22240e3 100644 --- a/codex/training/mining-f2p.yaml +++ b/codex/training/mining-f2p.yaml @@ -3,7 +3,7 @@ title: Mining (F2P) domain: training tags: [mining, gathering, f2p, skill-training] status: verified -version: 2 # 2: bounce-fix 2026-08-27 — per-slot drop loop, click-cadence model, Al Kharid survivability gate +version: 3 # 3: bounce-fix 2 2026-08-27 — dynamic inventory/drop model (no hardcoded slot count), conditional equip, wait_rock outcome gate, tier-aware cadence table, Al Kharid hard-gated to combat 29+ (no food in model) updated: "2026-08-27" # ISO dates must stay quoted — YAML 1.1 parses bare dates to datetime.date summary: > @@ -13,33 +13,34 @@ summary: > clay/copper/tin from level 1, iron 15 (the fast-XP ore), silver 20, coal 30, gold 40, mithril 55, adamantite 70, runite 85. Mining is a staple low-risk, low-input method with no respawn mechanics in the loop. The Al - Kharid powermine is gated: its level-14 scorpions attack players at combat - level 28 or below (wiki Aggressiveness), so sub-29 accounts carry food or - use the banked South-east Varrock route instead. + Kharid powermine is hard-gated: its level-14 scorpions attack players at + combat level 28 or below (wiki Aggressiveness), so the mine runs only at + combat 29+; sub-29 accounts use the banked South-east Varrock route, + which has no aggressive NPCs and needs no food. accounts: membership: f2p # whole ore chain verified F2P via the wiki guide min_level: 1 # clay/copper/tin mineable at level 1 requires_quest: [] requires_other: - - "Best-tier F2P pickaxe available (bronze -> rune; equip it to save an inventory slot)" + - "Best-tier F2P pickaxe the account can wield (bronze: no requirement -> rune: 40 Attack). Equip it ONLY when the Attack requirement is met; otherwise carry it in the inventory — mining from the inventory works at any level (equipped pickaxe = 28 ore slots, carried = 27; slot counts derive dynamically, never hardcoded)" - "Bank route from the chosen mine (or an inventory-drop spot for powermining)" - - "Al Kharid powermine route gate: combat level >= 29 (a monster attacks players at <= 2x its level; the scorpion is level 14, so 29+ is safe) OR carry food; below the gate use the banked South-east Varrock route (no aggressive NPCs)" + - "Al Kharid powermine HARD GATE: combat level >= 29 (a monster attacks players at <= 2x its level; the scorpion is level 14, so its aggro ceiling is combat 28 and 29+ is safe). Sub-combat-29 accounts MUST use the banked South-east Varrock route (no aggressive NPCs, no food required)" best_practice: equipment: - - item: highest-tier pickaxe available (bronze -> rune) - why: "each tier is faster — the roll interval drops from 8 ticks (bronze) to 3 ticks (rune), and the guide recommends always using the highest tier available; equipping it frees an inventory slot" + - item: highest-tier pickaxe the account can wield (bronze -> rune) + why: "each tier is faster — the roll interval drops from 8 ticks (bronze) to 3 ticks (rune), and the guide recommends always using the highest tier available; equipping it frees an inventory slot. Equip only when the Attack requirement is met (rune = 40 Attack); below that, mine with the pickaxe in the inventory (legal at every level)" source: "OSRS wiki — Free-to-play Mining training (Pickaxes: tier table with tick intervals)" techniques: - name: start with Doric's Quest for 1,300 xp (level 1 to 10) why: "the quest reward alone takes Mining from 1 to 10; the materials (6 clay, 4 copper, 2 iron) mine at level 1 except iron, which can be bought on the GE" source: "OSRS wiki — Free-to-play Mining training (Level 1-10: Doric's Quest)" - - name: powermine iron at Al Kharid mine for maximum XP - why: "iron (level 15, 35 xp) is the fastest F2P training ore and Al Kharid is the only F2P site with three iron rocks around one tile — zero travel between respawns; ~50,000 xp/hr at 41 Mining with a rune pickaxe, 52,500 at 61+ (3 ores per 12 ticks); drop the ores — banking costs XP" - source: "OSRS wiki — Free-to-play Mining training (Levels 15-99: Iron ore)" - - name: bank iron at the South-east Varrock mine for smithing/money - why: "the guide names this F2P banking location explicitly; the eastern Varrock bank is the closest bank leg, and the ores feed Smithing" + - name: powermine iron at Al Kharid mine for maximum XP (combat 29+ only) + why: "iron (level 15, 35 xp) is the fastest F2P training ore and Al Kharid is the only F2P site with three iron rocks around one tile — zero travel between respawns; ~50,000 xp/hr at 41 Mining with a rune pickaxe, 52,500 at 61+ (3 ores per 12 ticks); drop the ores — banking costs XP. Entry gate: the mine's level-14 scorpions are aggressive to combat 28, so this spot runs at combat 29+" + source: "OSRS wiki — Free-to-play Mining training (Levels 15-99: Iron ore); OSRS wiki — Aggressiveness" + - name: bank iron at the South-east Varrock mine for smithing/money (sub-29 default) + why: "the guide names this F2P banking location explicitly; the eastern Varrock bank is the closest bank leg, and the ores feed Smithing. This is also the sub-combat-29 route (no aggressive NPCs)" source: "OSRS wiki — Free-to-play Mining training (Levels 1/10-15 and 15-99: banking locations)" - name: "coal route: West Lumbridge Swamp mine, or Superheat in place" why: "coal (level 30, 50 xp) banks reasonably from the Lumbridge Swamp mine; with 43 Magic, Superheat Item converts coal into bars without a furnace, cutting bank trips (staff of fire + nature runes, 26 inventory slots)" @@ -53,6 +54,10 @@ economy: # Cycle = one rock mined -> one ore (XP path) or one ore banked (money path). # XP rates sourced from the wiki guide (iron powermine); gp/h model below is # derived and labelled (no wiki gp/hr figure exists for banked iron). + # Cadence consistency: the 52,500 xp/hr figure IS the continuous 61+ rotation + # (rune pickaxe): 52,500 / 35 xp = 1,500 ores/hr = one ore per 2.4s, which is + # the rune roll (1.8s) + wait_rock outcome gate + anti_ban delay [1800, 3600] + # midpoint (2.7s) — the modeled a2 cadence brackets the wiki rate. item: Iron ore # anchor: the F2P training ore item_id: 440 cost_per_cycle: 0 # mining consumes nothing (pickaxe has no fuel; no supply costs) @@ -62,7 +67,7 @@ economy: gp_per_hour_high: 28000 # MODELLED (dated): ~400 banked iron ores/hr (bank legs reduce the 52.5k-xp/hr powermine rate) x 70 gp xp_per_hour: 52500 # iron powermine, 61+ (50,000 at 41+ with rune pickaxe) — wiki guide supplies: - - item: rune pickaxe # highest F2P tier; withdrawn from bank at session start + - item: "pickaxe: highest tier the account can wield (rune needs 40 Attack to equip; below that carried in the inventory)" qty_per_cycle: 1 source: bank profit_drivers: @@ -76,19 +81,22 @@ state_machine: terminal: [complete, failed] states: idle: - goal: be at the chosen mine with pickaxe equipped and inventory clear + goal: "be at the chosen mine with the pickaxe ready (equipped only if the account meets its Attack requirement) and the inventory clear; run mode chosen at session start (powermine: drop ores; banked: bank ores)" next: [mine, complete, failed] mine: - goal: mine the current tier's rock until the inventory fills or the rotation ends - next: [bank_run, drop_run, complete, failed] + goal: "mine the current tier's rock until the inventory is full or the target is reached; every click (a2) is followed by the wait_rock outcome wait — never chain clicks on the same rock" + next: [wait_rock, drop_run, bank_run, complete, failed] + wait_rock: + goal: "after clicking a rock (a2), wait for the mining outcome — ore gained, rock depleted, or roll timeout — before any re-click; never re-click the active rock while its roll is unresolved" + next: [mine, drop_run, bank_run, failed] bank_run: - goal: walk to the bank, deposit ores, walk back to the mine + goal: "walk to the bank, deposit ores, walk back to the mine" next: [mine, idle] drop_run: - goal: "drop EVERY ore slot: one right-click Drop per slot (a6), looping until the inventory is empty (non-stackable ores: 27 slots, 27 Drops)" + goal: "drop every occupied ore slot: one right-click Drop per slot (a6), looping until the inventory holds no ore — slot count is DYNAMIC (inventory capacity minus non-ore items: equipped pickaxe = 28 ore slots, carried = 27, survival/gear load = fewer); drive the loop off count_item ore, never hardcode a slot number" next: [drop_run, mine] survive: - goal: "Al Kharid scorpion aggro: eat when HP < 40%; retreat out of the aggro radius if overwhelmed; return to the 3-rock cluster when safe" + goal: "defensive fallback only (the 29+ gate means scorpions never aggro at Al Kharid): if attacked anyway (gate bypassed/griefed), retreat out of the aggro radius and re-enter the cluster when safe; no food loop is modeled" next: [mine, failed] complete: goal: level or GP target reached @@ -96,25 +104,40 @@ state_machine: goal: hard failure — stop, log ERROR sentinel, alert transitions: - from: mine + when: "a2 rock click issued (the tier roll is now in progress)" + to: wait_rock + - from: wait_rock + when: "ore gained (count_item ore > count at click) or the clicked rock depleted" + to: mine + - from: wait_rock + when: "roll timeout (no outcome within 2x the equipped tier's roll interval)" + to: mine + - from: wait_rock + when: "inventory full (powermine mode)" + to: drop_run + - from: wait_rock when: "inventory full (banked mode)" to: bank_run - from: mine - when: "inventory full (powermine mode: 27 ore slots)" + when: "inventory full (powermine mode)" to: drop_run + - from: mine + when: "inventory full (banked mode)" + to: bank_run - from: drop_run when: "inventory still holds ore (count_item ore > 0)" to: drop_run - from: drop_run - when: "inventory empty (count_item ore == 0)" + when: "inventory empty of ore (count_item ore == 0)" to: mine - from: mine - when: "HP < 40% (scorpion aggro at Al Kharid, sub-combat-29 run)" + when: "HP < 40% (hp_is — defensive only; unexpected aggro despite the gate)" to: survive - from: survive - when: "HP >= 60% and out of combat" + when: "out of combat (HP stable, no attacker in range)" to: mine - from: survive - when: "food exhausted and HP < 40%" + when: "is_dead (gate bypassed/griefed)" to: failed - from: bank_run when: "ores deposited and back at the mine" @@ -134,8 +157,8 @@ actions: params: location: "Al Kharid Mine (powermine) or South-east Varrock mine (banked)" method: [walk, teleport] - note: "arrive with the best-tier pickaxe equipped" - route_gate: "Al Kharid powermine only at combat >= 29 (scorpions attack <= 28) or with food; otherwise South-east Varrock (banked, no aggressive NPCs)" + note: "arrive with the pickaxe equipped ONLY if the account meets its Attack requirement (rune = 40 Attack); otherwise carry it in the inventory" + route_gate: "Al Kharid powermine ONLY at combat level >= 29 (level_is Combat >= 29 — the level-14 scorpion's aggro ceiling is combat 28, wiki Aggressiveness); below combat 29 use the banked South-east Varrock route (no aggressive NPCs, no food required)" on_fail: retry anti_ban: delay: [400, 1600] @@ -143,14 +166,17 @@ actions: - id: a2 step: mine-rock verb: click_object - target: "current tier rock" + target: "fresh rock in the cluster — never the rock whose roll is in progress" params: rock: "iron rock (tier-gated: silver 20, coal 30, gold 40, mithril 55, adamantite 70, runite 85)" gate: "level_is Mining >= rock level" - rotation: "3-rock cluster; face the respawning rock (rune pickaxe, 3 ticks = 1.8s per roll)" + rotation: "3-rock cluster (Al Kharid) or nearest cluster of the selected tier; face the respawning rock and click a fresh rock only after the wait_rock outcome wait" + roll_table: "pickaxe roll interval (ticks x 0.6s, wiki table verified 2026-08-27): bronze 8 = 4.8s, iron 7 = 4.2s, steel 6 = 3.6s, mithril 5 = 3.0s, adamant 4 = 2.4s, rune 3 = 1.8s" + cadence: "mandatory pause per click = equipped pickaxe roll interval from roll_table + [0, 1800]ms humanisation (anchor model below: rune pickaxe @ 61+ -> delay [1800, 3600]; bronze users apply [4800, 6600], iron [4200, 6000], steel [3600, 5400], mithril [3000, 4800], adamant [2400, 4200]). The pause must never be shorter than the equipped tier's FULL roll, and the wait_rock outcome wait must elapse before any re-click — clicking before the roll resolves (or before the rock depletes) cannot speed the ore and is the bot tell" + wait_for: "mining outcome — modeled as the wait_rock state: re-click a fresh rock only when ore was gained, the clicked rock depleted, or the roll timed out (2x roll)" on_fail: retry anti_ban: - delay: [2000, 4200] # re-click cadence vs mining roll: rune pickaxe rolls every 3 ticks (1.8s) — clicking faster than the roll cannot speed the ore and IS the bot tell; 2.0-4.2s ≈ one click per roll/break cycle, humanised. Lower-tier pickaxes roll slower (bronze = 8 ticks = 4.8s): scale the pause above the roll interval. + delay: [1800, 3600] # rune-pickaxe anchor (61+): full 1.8s roll + up to 1.8s humanisation; per-tier floor in params.roll_table — never below the equipped tier's full roll - id: a3 step: bank-ores @@ -190,57 +216,45 @@ actions: target: "ore slot in inventory" params: option: "Drop" - iterate: "one occupied ore slot per execution — non-stackable ores need one Drop per slot; the drop_run -> drop_run transition re-executes a6 until count_item ore == 0" + iterate: "one occupied ore slot per execution — non-stackable ores need one Drop per slot; the drop_run -> drop_run transition re-executes a6 until count_item ore == 0. Slot count is DYNAMIC (inventory capacity minus non-ore items: equipped pickaxe = 28, carried = 27) — never hardcode a slot number" mode: "powermine only" on_fail: skip anti_ban: delay: [200, 800] # drop churn on a full inventory is human-normal - id: a7 - step: eat-food - verb: eat - target: "food in inventory" - params: - threshold: "HP < 40%" - mode: "Al Kharid powermine only (scorpion aggro, sub-combat-29 run)" - supply: "session-level, not per-cycle: withdraw ~20 trout/salmon at the bank before a sub-combat-29 Al Kharid run" - on_fail: alert # no food left at low HP — the survive -> failed transition is the hard failure - anti_ban: - delay: [400, 1200] - - - id: a8 - step: retreat-scorpions + step: retreat-aggro verb: retreat target: "self" params: - from: "scorpion aggro radius (Al Kharid mine)" - method: "walk out of attack range, then re-enter the 3-rock cluster once out of combat" + from: "aggro radius at the mine (defensive fallback — the Al Kharid 29+ gate normally prevents all aggro)" + method: "walk out of attack range, then re-enter the cluster once out of combat" on_fail: retry anti_ban: delay: [600, 1800] run_control: - iteration: "one full mine -> bank (or drop) rotation" + iteration: "one full mine -> bank (or drop) rotation" # per docs/schema.md: break.every counts iterations max_iterations: null break: - every: [8, 14] # rotations + every: [8, 14] # iterations = full mine->bank/drop rotations for: [60, 180] # seconds of idle AFK stop_conditions: - "level or GP target reached" - "3 consecutive failed rock clicks (client issue — do not loop)" - - "death: hard failure — the Al Kharid gate (combat 29+) plus the survive state prevent it; if is_dead anyway (gate bypassed/griefed) log ERROR + alert and stop, no respawn loop" + - "death: hard failure — the Al Kharid hard gate (combat 29+) and the survive (retreat) fallback prevent it in normal operation; if is_dead anyway (gate bypassed/griefed) log ERROR + alert and stop, no respawn loop" risk: ban_level: low notes: - "Mining is a staple low-risk method: long, repetitive, low-input behaviour that matches normal player sessions — the guide itself recommends hours of drop-mining." - - "The 3-tick powermine rotation is the detection vector if executed perfectly for hours — jitter the rotation cadence (a2 delay 2.0-4.2s, above the 1.8s rune roll) and take the break schedule." - - "Al Kharid mine has aggressive level-14 scorpions: they attack players at combat level <= 28 (wiki Aggressiveness). Gate: run Al Kharid at combat 29+, or below that carry food (survive state eats/retreats; food out + low HP = hard failure). The banked South-east Varrock route has no aggressive NPCs." + - "The powermine rotation is the detection vector if executed perfectly for hours — keep the a2 tier-aware cadence (wait_rock outcome wait + roll_table pause; anchor rune 1.8-3.6s, never below the equipped tier's full roll) and take the break schedule." + - "Al Kharid mine has aggressive level-14 scorpions (they attack players at combat level <= 28 — wiki Aggressiveness). The entry HARD-gates Al Kharid to combat 29+; sub-29 accounts run the banked South-east Varrock route (no aggressive NPCs). No food is part of either route; the survive state (retreat) is a defensive fallback only." sources: - "OSRS wiki — Active/passive aggressive monsters: Aggressiveness (a monster attacks players whose combat level is <= 2x its level; a level-14 scorpion is safe from combat level 29) — verified 2026-08-27" - "OSRS wiki — Scorpion (combat level 14, hitpoints 17; Al Kharid mine) — verified 2026-08-27" - - "OSRS wiki — Free-to-play Mining training (ore level/xp table — all rows F2P; pickaxe tier table with tick intervals; Doric's Quest 1,300 xp; iron 50,000 xp/hr at 41+ / 52,500 at 61+; Al Kharid 3-rock spot; SE Varrock banking; Superheat coal; adamantite/runite as F2P money methods; scorpions: 'bring food') — verified 2026-08-27" + - "OSRS wiki — Free-to-play Mining training (ore level/xp table — all rows F2P; pickaxe tier table with tick intervals (bronze 8 -> rune 3); Doric's Quest 1,300 xp; iron 50,000 xp/hr at 41+ / 52,500 at 61+; Al Kharid 3-rock spot; SE Varrock banking; Superheat coal; adamantite/runite as F2P money methods; scorpions noted — the guide says 'bring food', this entry hard-gates the mine to combat 29+ instead, so food is not modeled) — verified 2026-08-27" - "OSRS wiki — Mining (skill overview, members=No)" - "prices.runescape.wiki/api/v1/osrs/mapping (ore ids: iron 440, coal 453, silver 442, gold 444, mithril 447, adamantite 449, runite 451 — all members=false; buy limits)" - "prices.runescape.wiki/api/v1/osrs/latest (ore sell prices, snapshot 2026-08-27)"