Owner lifecycle addendum (2026-08-28) + governor bounce 4 (lifecycle contract):
- state machine now covers the ENTIRE buy -> sell -> collect flow with no
stranded state: partial fills tracked per slot (filled_qty ledger), 4h-lapse
buys go to a new cancel_requote state (ge_cancel: units return to inventory,
cash refunds, slot freed) instead of collect, cancelled units still sell at
the high edge, lapse sells re-quote or lower rather than strand
- action grammar + schema extended ONCE with the cancellation mutation
ge_cancel (was missing; ge_clear/ge_offers_done are predicates only) and
used explicitly in the new a8 cancel-requote action
- concrete runtime state: minimum per-slot capital table (buy x 4h limit),
members 8-slot vs F2P 3-slot paths, per-slot offer phase + quantities,
buy-limit window, inventory/collection reconciliation in a9
- breaks connected to an explicit safe/resume path: resting offers persist
server-side + per-slot ledger survive the pause; resume = re-open GE,
re-check offers, continue current phase; never break mid-collect/mid-place
- rates qualified against the full lifecycle: 149,500 gp/h is named the 4h
buy-limit CEILING; realized range = ceiling x fill_factor (~0.5-0.9) x
duty_cycle (~0.90-0.95) ~ 96,300 gp/h midpoint; gp_per_hour_low 74,750
- pinned worked example: capital 22.5M -> 8 slot quotes -> arrowtips partial
fill (4,000/10,000 tracked) -> iron bar full fill sell (90,000 net) ->
cosmic no-fill ge_cancel + requote -> arrowtips partial matures at lapse
(cancel, sell 4,000, 68,000 net) -> first break after 6-10 rotations ->
resume -> stop conditions
- version 2 -> 3; evidence: validate 2 entries 0 errors 1 pre-existing WARN,
selftest 4 PASS (fractional-tax fail, ge non-margin pass, floored pass,
above-cap pass), synthetic merge main 79cab78 + head clean + gate green,
git diff --check clean
Governor-review bounce (PR #7) fixes on issue-1:
1. GE 2% convenience fee rounds DOWN per item: net = sell - floor(0.02*sell) - buy.
Anchor net 16.12 -> 17 (244-4-223); top-8 members table recomputed with
floored tax -> 598,000/4h = 149,500 gp/h (was 138,000); gp_per_hour_low/high
updated. Validator now rejects fractional-tax arithmetic for GE-margin entries.
2. State machine split wait_fill into wait_buy_fill / wait_sell_fill so the full
buy -> buy-fill -> sell -> sell-fill -> collect path is explicit; sell cycle
can no longer loop back into sell without collecting.
3. Economy qualified as the members path (8 slots); F2P path added (3 slots,
F2P-tradeable rows only): Iron bar + Cosmic rune + Silver ore = 227,000/4h
= 56,750 gp/h. Members/F2P flags cross-checked against wiki item pages.
Implements the epic's uncovered P0 economy backlog item (flip candidates).
Verified source chain 2026-08-27: prices.runescape.wiki mapping + latest,
all 15 shortlist limits cross-checked against Module:Exchange (agree);
GE tax verified at 2% since 2025-05-29 (1% at 2021 intro), 5M/item cap,
sub-50gp effectively untaxed; Merchanting + Grand Exchange/Buying limits
pages cited for mechanics. Net model: 0.98*sell - buy at band edges.
Gate: python3 tools/validate.py exit 0 (2 entries, 0 errors, 1 pre-existing
warning on the golden entry's researched flag — none added by this entry).