diff --git a/codex/economy/low-alch-members.yaml b/codex/economy/low-alch-members.yaml index 1cf908b..002074f 100644 --- a/codex/economy/low-alch-members.yaml +++ b/codex/economy/low-alch-members.yaml @@ -3,8 +3,8 @@ title: Low-Level Alchemy (Members) domain: economy tags: [alching, magic-training, members, loss-training] status: verified -version: 3 # 3: bounce-fix 2 2026-08-27 — additive cast+delay cycle (1.8s + 1.6-3.4s), iteration = full inventory+bank cycle -updated: "2026-08-27" # ISO dates must stay quoted — YAML 1.1 parses bare dates to datetime.date +version: 4 # 4: bounce-fix 3 2026-08-28 (owner guidance) — iteration = one cast, break.every in CAST counts (independent of bank visits), numeric carried_batch/restock_threshold, realized rates incl. setup+restock+breaks, full-lifecycle actions, pinned worked example +updated: "2026-08-28" # ISO dates must stay quoted — YAML 1.1 parses bare dates to datetime.date summary: > Magic training from level 21 by low-alching members items with the lowest @@ -13,26 +13,32 @@ summary: > (mapping lowalch != null, members=true, live GE prices 2026-08-27). At current prices the method burns a small amount of GP per cast for 31 XP — run it for XP, not GP. Least-loss liquid anchor at last check: rune - javelin tips (-3/cast). Handoff: switch to High Level Alchemy at level 55 - (hard level gate + strictly more coins AND XP per cast; see sources). + javelin tips (-3/cast). Model pin (owner guidance 2026-08-28): one + iteration = one cast; breaks every 400-700 COMPLETED CASTS (cast-count + based, independent of bank visits); restock when candidate or nature + drops below the numeric restock_threshold (100) against a carried_batch + of 1,000/1,000 — pinned worked example below. Handoff: switch to High + Level Alchemy at level 55 (hard level gate + strictly more coins AND XP + per cast; see sources). accounts: membership: members min_level: 21 # Magic 21 to cast Low Level Alchemy (wiki-verified) requires_quest: [] requires_other: - - "Staff of Fire equipped (removes 3 fire runes from the cost; no Attack requirement — the default path)" - - "A bank with GE access within reach" + - "Staff of Fire equipped (removes 3 fire runes from the cost; NO level requirement documented on the OSRS wiki — verified 2026-08-28, see sources — this is the default path)" + - "A bank with GE access within reach (alch spot = GE bank booth; restock trip 60-120s)" + - "Working capital >= 543,000 gp for one carried_batch (1,000 x 403 gp javelin tips + 1,000 x 140 gp natures, live 2026-08-27)" - "30 Attack + 50 Magic ONLY if adopting the optional Bryophyta's staff + Tome of Fire technique — below that the Staff of Fire path applies" best_practice: equipment: - item: staff of fire - why: "unlimited fire runes — LA rune cost drops from 3 fire + 1 nature to 1 nature per cast (~15gp/cycle saved)" - source: "OSRS wiki — Staff of Fire; Low Level Alchemy (Cost)" + why: "unlimited fire runes — LA rune cost drops from 3 fire + 1 nature to 1 nature per cast (~15gp/cycle saved); equip requirement: none documented on the OSRS wiki (verified 2026-08-28)" + source: "OSRS wiki — Staff of Fire (id 1387, F2P item, tradeable, no requirements row in the infobox and none in the prose — compare Battlestaff which states 'requires 30 Attack and 30 Magic'); Low Level Alchemy (Cost)" techniques: - name: cast on noted (stacked) items - why: "one inventory slot, minimal mouse travel between spell icon and item, no item un-noting" + why: "one inventory slot, minimal mouse travel between spell icon and item, no item un-noting; means an inventory does NOT define a batch size — batch sizes are the explicit numeric carried_batch below" source: "OSRS wiki — Low Level Alchemy (Usage: casting alchemy spells on noted items)" - name: Bryophyta's staff + Tome of Fire (members-only, 50 Magic, 30 Attack) why: "charged Bryophyta's staff holds up to 1,000 nature runes (0 rune inventory slots) with a 1/15 chance per cast to not consume a nature rune; charged Tome of Fire supplies infinite fire runes in the shield slot and non-combat spells (alchemy) do not consume charges — the wiki documents this exact pair for alchemy profit; payback takes thousands of casts, so adopt at 50+ Magic when nature prices are high. EQUIP GATE: the staff requires 30 Attack + 30 Magic and the tome requires 50 Magic — accounts below 30 Attack (e.g. 1-Attack mules) cannot equip it and keep the ordinary Staff of Fire path (equipment section above) instead" @@ -45,28 +51,36 @@ economy: # Verified 2026-08-27 against prices.runescape.wiki (live 'latest') + # OSRS wiki (spell infoboxes, Module:Exchange limits, item pages). # Re-verified at bounce fix 2026-08-27 with a fresh live fetch; the - # modeled anchor is now the ACTUAL least-loss liquid candidate. + # modeled anchor is the ACTUAL least-loss liquid candidate. + # Bounce-fix 3 (2026-08-28, owner guidance): all rate fields are REALIZED + # figures — setup/restock/breaks included, not just the cast loop. item: Rune javelin tips # least-loss liquid anchor 2026-08-27 (see profit_drivers) item_id: 19580 cost_per_cycle: 543 # javelin tips buy 403 + nature rune 140 (staff of fire) income_per_cycle: 540 # lowalch of rune javelin tips (40% of value 1350) net_per_cycle: -3 - gp_per_hour_low: -3177 # -3/cast @ fastest cycle (1.8s cast + 1.6s delay = 3.4s) -> 1058.8 casts/hr - gp_per_hour_high: -2077 # -3/cast @ slowest cycle (1.8s cast + 3.4s delay = 5.2s) -> 692.3 casts/hr - xp_per_hour: 25953 # 31 xp/cast (wiki) @ midpoint cycle 837.2 casts/hr — pinned below - # Pacing pin (docs/action-grammar.md:135): actions[].anti_ban.delay is a - # MANDATORY post-action sleep, ADDITIVE to the action itself — it does not - # overlap the cast. LA cast = 3 game ticks x 0.6s = 1.8s; the delay - # [1600, 3400]ms = 1.6-3.4s. Cycle = cast + delay = 3.4s (fast) .. 5.2s - # (slow), midpoint 4.3s. - # casts/hr = 3600 / (1.8 + delay_s): 3.4s -> 1058.8; 5.2s -> 692.3; 4.3s -> 837.2 - # xp_per_hour (midpoint) = 837.2 x 31 = 25,953/hr (range 21,461 .. 32,823 by delay bounds) - # gp_per_hour = casts/hr x -3: midpoint -2,512; low (fast) -3,177; high (slow) -2,077 + gp_per_hour_low: -2960 # realized (incl. restock+breaks), fastest cycle 3.4s -> 986.4 casts/hr x -3 = -2,959 + gp_per_hour_high: -1980 # realized (incl. restock+breaks), slowest cycle 5.2s -> 660.6 casts/hr x -3 = -1,982 + xp_per_hour: 24500 # realized midpoint 791.3 casts/hr x 31 xp = 24,530 (pin 24,500) + # ---- realized-rate derivation (pinned; owner guidance 2026-08-28) ---- + # LOOP: cycle = 1.8s cast (3 ticks x 0.6s) + anti_ban.delay [1.6, 3.4]s ADDITIVE + # (docs/action-grammar.md:135) = 3.4-5.2s, midpoint 4.3s -> loop-only + # casts/hr = 3600/4.3 = 837.2; loop-only xp = 25,953 (837.2 x 31); + # loop-only gp midpoint = -2,512 (837.2 x -3). + # OVERHEAD per 901-cast batch (carried_batch 1000 - restock_threshold 100): + # restock trip [60, 120]s (midpoint 90s, GE-adjacent booth); + # breaks: every [400, 700] casts (midpoint 550) for [45, 120]s (midpoint + # 82.5s) -> 901/550 = 1.64 breaks x 82.5s = 135s. + # Total overhead = 90 + 135 = 225s per 901 casts. + # REALIZED casts/hr = 901 / ((901 x cycle_s + 225) / 3600): + # fast 3.4s -> 986.4; midpoint 4.3s -> 791.3; slow 5.2s -> 660.6. + # xp_per_hour = 791.3 x 31 = 24,530 (pin 24,500; range 20,480..30,580). + # gp_per_hour = realized casts/hr x -3: fast -2,959 (low), slow -1,982 (high), midpoint -2,374. supplies: - item: rune javelin tips qty_per_cycle: 1 source: ge - ge_limit: 10000 # mapping + Module:Exchange/Rune javelin tips agree (re-verified 2026-08-27) + ge_limit: 10000 # mapping + Module:Exchange/Rune javelin tips agree (re-verified 2026-08-27); one carried_batch of 1,000 fits the 4h window - item: nature rune qty_per_cycle: 1 source: ge @@ -87,31 +101,47 @@ economy: - "9. Adamant spear(p) (id 1259, lowalch 832, buy 450, margin +382, GE limit 125)" - "10. Mystic mist staff (id 20733, lowalch 17000, buy 75727, margin -58727, GE limit 8) — buy spiked ABOVE alch value 2026-08-27; a true loss trap, do not buy" - "Caveat: thin items (limits 5-125) cannot sustain a run and their 'low' fills can be stale — a bot cannot reliably buy at those prices. The dependable loss-minimizers are the liquid high-limit pair modeled above: rune javelin tips (-3/cast) and rune arrow (-25/cast)." + - "Batch-scale economics (default staff-of-fire path, worst case 1 nature/cast): carried_batch 1,000/1,000, restock every 901 casts — one batch = -2,703 gp, +27,931 xp, 2 x 540 gp coin deposits." state_machine: initial: idle terminal: [complete, failed] states: idle: - goal: reach the bank + have supplies in inventory - next: [casting, bank_supplies] + goal: "acquire + equip the staff of fire, GE-buy candidate + natures, build the starting inventory to carried_batch (1,000 candidate + 1,000 nature)" + next: [casting, complete, failed] casting: - goal: cast Low Level Alchemy on the current candidate item - next: [bank_supplies, idle, complete, failed] + goal: "cast Low Level Alchemy on the current candidate item — each cast consumes 1 candidate + 1 nature and pays 540 gp (lowalch), +31 xp, net -3 gp; take a break when the completed-cast counter hits run_control.break.every ([400, 700] casts)" + next: [bank_supplies, complete, failed] bank_supplies: - goal: bank the produced coins, withdraw fresh candidate + runes - next: [casting, idle] + goal: "deposit coins + products, withdraw candidate + natures back to carried_batch (1,000/1,000), resume casting" + next: [casting, failed] complete: - goal: reached the run's XP/level target + goal: "reached the run's XP/level target (default 55 -> hand off to HLA)" failed: - goal: hard failure — stop, log ERROR sentinel, alert + goal: "hard failure — stop, log ERROR sentinel, alert" transitions: - - from: casting - when: "candidate item count < buffer OR nature rune count < buffer" - to: bank_supplies - from: idle - when: "magic level >= target (default 55, hand off to HLA at 55)" + when: "staff equipped AND candidate == carried_batch AND nature == carried_batch (1,000 and 1,000)" + to: casting + - from: idle + when: "magic level >= target (55, hand off to HLA)" to: complete + - from: idle + when: "3 consecutive purchase/equip failures with no fallback available (recovery block below)" + to: failed + - from: casting + when: "candidate count < restock_threshold (100) OR nature rune count < restock_threshold (100) — deterministic restock trigger, pinned numbers" + to: bank_supplies + - from: casting + when: "magic level >= target (55, hand off to HLA)" + to: complete + - from: casting + when: "3 consecutive failed casts (client issue — do not loop)" + to: failed + - from: bank_supplies + when: "restocked to carried_batch (1,000 candidate + 1,000 nature)" + to: casting # --- handoff note (wiki-verified 2026-08-27, do not copy from other entries) --- # Low Level Alchemy: level 21, 31 xp/cast, 1 nature + 3 fire (spellbook: Normal). @@ -134,25 +164,69 @@ actions: verb: move_to target: bank params: - location: "nearest bank with GE" + location: "GE-adjacent bank (alch spot = the bank booth, so restock is a single short leg)" method: [teleport, walk] on_fail: retry anti_ban: delay: [400, 1600] - id: a2 + step: buy-staff + verb: ge_buy + target: grand-exchange + params: + item: "staff of fire" + qty: 1 + max_price: "live low + 25% (wiki value 1,500; hard cap 5,000)" + on_fail: retry # retry once; on a second failure use the fire-rune fallback (see a3 note / recovery block) + anti_ban: + delay: [1200, 3000] + + - id: a3 + step: equip-staff + verb: menu_option + target: "staff of fire in inventory" + params: + option: "Wield" + note: "Equip requirement is NONE documented on the OSRS wiki Staff of fire page (no requirements row in the infobox, none in the prose; compare Battlestaff which states 'requires 30 Attack and 30 Magic'; verified 2026-08-28). FAILURE PATH — if Wield is unavailable or the staff cannot be equipped, fall back to buying 3 fire runes per cast (3 fire + 1 nature = 155 gp rune cost vs 140, net -18/cast at the anchor), log WARN and continue; never loop on equip attempts." + on_fail: retry + anti_ban: + delay: [600, 1800] + + - id: a4 step: buy-supplies verb: ge_buy target: grand-exchange params: - item: "current candidate item" - qty: "fill to buffer" + item: "current least-loss live candidate (default: rune javelin tips)" + qty: "carried_batch = 1,000 (fits the 4h GE limit window of 10,000)" + max_price: "live low + 5%" + on_fail: retry # re-place at live low +5% with paced offers; 3 consecutive failures -> failed (recovery block) + anti_ban: + delay: [1200, 3000] + + - id: a5 + step: buy-natures + verb: ge_buy + target: grand-exchange + params: + item: "nature rune" + qty: "carried_batch = 1,000 (4h GE limit 18,000)" max_price: "live low + 5%" on_fail: retry anti_ban: delay: [1200, 3000] - - id: a3 + - id: a6 + step: build-loadout + verb: bank_inventory + target: bank + params: + deposit: [overflow products] + withdraw: "candidate 1,000 + nature runes 1,000 (= carried_batch; both stackable, two inventory slots)" + on_fail: retry + + - id: a7 step: cast-alch verb: use_item_on target: "candidate item in inventory" @@ -160,37 +234,95 @@ actions: spell: "Low Level Alchemy" item: "least-loss live candidate in inventory" on: "itself" + consumption: "1 candidate + 1 nature per cast (staff of fire default); pays 540 gp (lowalch) + 31 xp, net -3 gp" on_fail: retry anti_ban: - delay: [1600, 3400] # MANDATORY post-action sleep, ADDITIVE to the 1.8s cast (3 ticks x 0.6s; action-grammar.md:135): cycle = 1.8s + 1.6-3.4s = 3.4-5.2s, midpoint 4.3s -> ~837 casts/hr (pinned in economy) + delay: [1600, 3400] # MANDATORY post-action sleep, ADDITIVE to the 1.8s cast (3 ticks x 0.6s; action-grammar.md:135): cycle = 1.8s + 1.6-3.4s = 3.4-5.2s, midpoint 4.3s -> realized ~791 casts/hr incl. restock+breaks (pinned in economy) - - id: a4 - step: bank-loop + - id: a8 + step: restock verb: bank_inventory target: bank params: deposit: [all coins, all products] - withdraw: "candidate item + nature runes up to buffer" + withdraw: "candidate + nature runes up to carried_batch (1,000/1,000)" on_fail: alert + - id: a9 + step: take-break + verb: take_break + target: "current location" + params: + duration: "[45, 120] seconds of idle AFK per break (matches run_control.break.for)" + note: "executed by the translator when the completed-cast counter reaches run_control.break.every — this IS run_control.break's executor, fired on CAST COUNTS, not on bank visits; the cast counter is not reset by restocking" + on_fail: skip + run_control: - iteration: "one full inventory + bank cycle" # per docs/schema.md run_control: break.every counts iterations; one cycle = cast the carried candidate supply down to buffer, bank the coins, restock — a cycle ends at the bank visit - max_iterations: null + iteration: "one cast" # = one Low Level Alchemy cast (+31 xp, -3 gp at the anchor). Per docs/schema.md run_control, break.every counts ITERATIONS — so it counts CASTS here, NOT bank trips (owner decision 2026-08-28) + max_iterations: null # null = until complete condition break: - every: [8, 14] # iterations = full inventory+bank cycles (breaks land on bank visits) - for: [45, 120] # seconds of idle AFK + every: [400, 700] # COMPLETED CASTS between AFK breaks (midpoint 550 = ~39 min at the 4.3s midpoint cycle). Cast-count-based and independent of bank visits; a restock trip NEVER counts as a break and does not reset this counter + for: [45, 120] # seconds of idle AFK per break stop_conditions: - "magic level >= target (55 -> hand off to HLA)" - - "gp under floor" + - "gp under floor (working capital below one carried_batch = 543,000 gp)" - "3 consecutive failed casts (client issue — do not loop)" + - "3 consecutive failed GE purchases with no fallback candidate available" + + # ================= WORKED EXAMPLE (pinned, deterministic — owner guidance 2026-08-28) ================= + # Constants: carried_batch = 1,000 candidate + 1,000 nature; restock_threshold = 100; + # break.every = [400, 700] casts (midpoint 550); break.for = [45, 120] s; + # default staff-of-fire path consumes 1 candidate + 1 nature per cast (worst case 1:1 — + # with Bryophyta's staff the nature side drains slower, so the candidate stays binding). + # + # Step 0 — before the first inventory: account holds >= 543,000 gp working capital + # (1,000 x 403 + 1,000 x 140). At the GE bank: GE-buy staff of fire, Wield it + # (no documented requirement), GE-buy 1,000 rune javelin tips + 1,000 nature runes, + # withdraw both -> loadout = carried_batch 1,000/1,000. Cast counter := 0. + # Step 1 — casts #1..#550: each cast consumes 1 candidate + 1 nature (-543 gp) and pays + # 540 gp (lowalch) + 31 xp -> net -3 gp. Cast counter 0 -> 550 (~39 min at midpoint). + # Step 2 — FIRST SCHEDULED BREAK at cast 550 (midpoint of break.every [400, 700]): run + # take-break for 45-120 s. Resume casting at cast 551. The break fired on the CAST + # COUNT, not on any bank visit; the restock counter is untouched. + # Step 3 — casts #551..#901: countdown candidate 1000-901 = 99 < 100 (restock_threshold) + # and nature 1000-901 = 99 < 100 simultaneously (worst case 1:1) -> the transition + # fires at the end of cast #901: FIRST RESTOCK/BANK EVENT at cast 901. + # Coins deposited at this restock: 901 x 540 = 486,540 gp; batch net so far -2,703 gp; + # batch xp so far 901 x 31 = 27,931. + # Step 4 — restock: deposit coins + products, withdraw 901 candidate + 901 nature -> + # carried_batch restored to 1,000/1,000. Resume casting at cast 902 (cast counter + # continues; the break counter also continues — restocking never resets either). + # Step 5 — SECOND BREAK when the cast-count interval since break #1 completes + # ([400, 700], midpoint: cast 902 + 550 = 1,452): take-break, resume at 1,453. + # Step 6 — restock #2 fires at cast 1,802 (901-cast batch cadence), and so on, until a + # stop_condition fires (Magic >= 55 -> HLA handoff; gp under floor; 3 failed casts). + # Bank visits and breaks are INDEPENDENT by construction: restock cadence = 901 casts; + # break cadence = 400-700 casts, and the two counters do not interact. + # ============================================================================================ risk: ban_level: low notes: - - "High cast cadence is the main detection vector; keep the mandatory anti_ban delays (cadence pin: ~837 casts/hr at the 4.3s midpoint cycle = 1.8s cast + 2.5s post-cast sleep)." - - "GE buy bursts: pace offers, respect the 4h limit window; thin items (limit < 100) cannot sustain a long run." + - "High cast cadence is the main detection vector; keep the mandatory anti_ban delays (cadence pin: additive post-cast sleep [1.6, 3.4]s; realized ~791 casts/hr at the 4.3s midpoint cycle incl. restock + breaks; loop-only 837)." + - "Breaks are CAST-COUNT-based (every [400, 700] completed casts, 45-120s AFK) and independent of bank visits — never treat a restock trip as a break." + - "GE buy bursts: pace offers, respect the 4h limit window (10,000 javelin tips / 18,000 natures); thin items (limit < 100) cannot sustain a long run." - "Thin-item 'latest low' fills can be stale — confirm fill price with a live GE offer before committing a run; the liquid high-limit pair (rune javelin tips / rune arrow) is the dependable loss-minimizer." +# --- recovery block (owner guidance 2026-08-28: every activity must cover its complete runnable lifecycle) --- +# - Missing materials / depleted supplies: the restock_threshold transition (casting -> +# bank_supplies at candidate OR nature < 100) catches both mid-run depletions; restock +# action a8 rebuilds to carried_batch and the loop resumes (worked example steps 3-4). +# - Failed GE purchases (offer unfilled): re-place at live low + 5% with paced offers +# (a4/a5); after 3 consecutive failures, alert + stop (failed) unless a fallback +# candidate is switched in — never sit in an unfillable offer loop. +# - Staff of fire cannot be equipped (a3): fall back to buying 3 fire runes per cast +# (3 fire + 1 nature = 155 gp/cast rune cost vs 140; net -18/cast at the anchor), +# log WARN, continue; never loop on equip attempts. +# - Invalid loadout (wrong item in hand / spell unavailable): re-run build-loadout (a6); +# 3 consecutive failed casts -> failed (stop, log ERROR sentinel, alert). +# - Explicit completion/stop: stop_conditions above (Magic 55 HLA handoff, gp floor, +# repeated failures). + sources: - "OSRS wiki — Low Level Alchemy (level 21, 31 xp/cast, 3-tick, 1 nature + 3 fire; spellbook Normal; infobox 2026-08-27)" - "OSRS wiki — High Level Alchemy (level 55, 65 xp/cast, 1 nature + 5 fire; 60% of item value; infobox 2026-08-27)" @@ -204,7 +336,9 @@ sources: - "OSRS wiki — Abyss (access to runic altars without talismans via the Mage of Zamorak)" - "OSRS wiki — Bryophyta's staff (level 30 Attack + Magic; up to 1,000 nature charges; 1/15 chance to not consume a charge on any nature-rune spell; alchemy combo with Tome of Fire)" - "OSRS wiki — Tome of Fire (members, level 50 Magic to wield; charged tome is an infinite fire-rune source and non-combat spells do not consume charges)" -verified: "2026-08-27" # keep quoted (YAML 1.1 date parsing) + - "OSRS wiki — Staff of fire (page verified 2026-08-28 for the equip requirement: id 1387, F2P item, tradeable, options Wield — NO requirements row in the Infobox Item and NO requirement statement in the prose; contrast Battlestaff, whose prose states 'requires 30 Attack and 30 Magic to wield')" + - "docs/schema.md run_control (iteration unit; break.every counts iterations) + docs/action-grammar.md:135 (anti_ban.delay = additive post-action sleep) + verb take_break — the cadence + break + recovery model" +verified: "2026-08-27" # keep quoted (YAML 1.1 date parsing); prices last re-fetched live 2026-08-27 related: - low-alch-f2p