f' = 0.25 + f/2 on every band (x1.0/1.8/3.2/5.0/7.0): with the origin buy
fixed at x0.5, per-unit profit lands at exactly ~half the original in every
band (30->17, 67->35, 130->66, 218->110, 382->192 cr for the average
product) while distance stays the dominant term and the curve's shape is
preserved. Data-only change (economy.json); docs/ECONOMY.md table + example
updated. All invariants re-verified (anti-loop, monotone distance, far pays
more than buy, 1-hop viable) and the economy/cargo/shop-UI/scout suites
pass. dev/economics-report.mjs gains an ECON_BANDS=... A/B override and
dev/economy-bands-audit.mjs sweeps the band invariants on any band set.
- Replace producer/demand class pricing with strict 1:1 origin assignment;
each settled system sells exactly its signature good at a discounted origin
price, and the catalog remainder becomes a hub pool resold by stations/capitals
- Make banded hop distance the dominant sell-price factor (x1.0 to x7.0),
with planet-type demand as a secondary +10% modifier, and cap every shop's
sell price at its own buy price to eliminate the v1 infinite-credit loop
- Add Stock.js for the time-gated daily batch (6 units per origin per wall-clock
day) — the economy's only stateful piece; wire it through GameScene,
SaveData capture/restore/reset, and the shop UI stepper clamp + SOLD OUT strip
- Update Economy.js with assignOrigins pass, new buyPrice/sellPrice/shopFor
logic, tradePreview stock-cap backstop (buyback exempt), and distanceFactor
- Rework shop UI: BuyList shows "N left"/"SOLD OUT" per batch-limited row and
clamps the stepper; ScoutPanel shows MADE IN (origin system) instead of GROWN ON;
ShopView wires stockRemaining/stockCapsFor/spendStock into preview and confirm
- Update all dev tests (economy, cargo, shop-ui, saves) to assert model v2
invariants including the anti-loop sweep, batch clamp/backstop, and save round-trip
- Ship now starts with cargoHold 0; the bar vignette's DONE press builds
out 4 bays (effects.cargoHold) and then places the special-package,
making the parcel aboard the "cargoUpgraded" step's witness instead of
a build-state check.
- Remove the old capital-landing handoff and SurfaceScene package flag;
onVignetteComplete in GameScene applies effects + handoff in order and
refreshes the quest checklist.
- Persist cargoHold through saves and gate jumps so the upgraded hold and
its goods survive a scene restart or load (old saves fall back to the
carried goods count).
- Add arid-land/takeoff 02 assets, fix landing.json slot 3 mapping, and
extend dev tests (jump-cargo probe, saves round-trip, vignette flow) to
cover the new beat ordering and persistence.
- Introduce CargoHold (pure class) as the ship's trade-goods carrier: fixed bays, one good each, capacity = unlocked bays, save/restore round-trip. Ship.cargo + setCargoHold/cargoRoom wired into stats.
- Add three credit-costed cargo builds (cargo-bay-8/12/16) that expand the hold 4→8→12→16 (MAX wins). BuildWindow affordability now covers both minerals and credits; GameScene.beginBuild debits credit lines and _applyCargoUpgrade expands the hold on completion.
- Add tradePreview/resultingCargo to Economy.js as the shop's pure calculator: sell/buy pricing, net credits, the two caps (can't go negative, end hold fits capacity), and atomic sell-to-free-room-for-buy.
- New ShopView + TradeGrid compose the buy/sell screen over the shop clip: SELL grid of cargo bays (tap to check), BUY grid with quantity steppers, live NET preview, Confirm/Clear, and a session-local Buyback tab (neutral undo at the sale price, locked until a sale). Wired into SurfaceScene's SHOP button.
- data/shopui.json drives the shop layout/animation knobs; economy.json gains cargo.maxSlots (16-slot grid); ship.json base cargoHold drops to 4 unlocked bays.
- Headless tests: dev/cargo.test.mjs (hold rules + trade preview caps), dev/shop-ui.test.mjs (construct, sell, buy, caps, buyback, clear), plus updated builds/ship-behavior suites; phaser-stub gains Geom.Rectangle for the hitArea path.
- New Economy.js price/stock engine: deterministic buy/sell prices based on
producer/demand classes and hop distance (regional availability model)
- Goods catalog (114 goods, 9 categories) with spritesheet mapping and
per-class producer/demand roles
- Credits state on Ship (add/spend/set/canAfford), save/restore support,
and upper-right HUD stacked above the minerals readout
- Quest reward payout now supports credits alongside minerals
- cargoHold reduced to 4 units for initial play balance
- Economy generation pass in Galaxy.js computes classBySystem and
producerHops via multi-source BFS over the jump network
- dev/economy.test.mjs validates determinism, fixed prices, trade loop
profitability, distance scaling, shop floor composition, and icon mapping
- docs/ECONOMY.md: full design doc covering pricing model, gemstone system,
and locked decisions