Docs: register today's fixes, prune completed roadmap items
CLAUDE.md/docs/library.md updated to match the sell.py/parkcash.py/ scan.py changes in the preceding commits. docs/decisions.md gets the full reasoning trail: the Black-Scholes closed form marked superseded, the actual backtest entry (BHP/AL touch-probability table) that both sell.py and library.md already cited but was never written, the discretization-bias caveat on that backtest, the price-impact-cap and demolition-value decisions. docs/roadmap.md pruned back to open items only - finished work is discoverable from CLAUDE.md/library.md/ decisions.md instead of staying listed as a done backlog entry. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
+28
-3
@@ -39,9 +39,15 @@ EOF
|
||||
per-tier need table), `HAB_CAP`/`HAB_AREA`, `TIERS`. This is what you use for "what if I
|
||||
understaff this building" or "what's the real wage bill for N heads" — the CLI tools only
|
||||
expose fixed slices of this.
|
||||
- **`puga.saturation`** — `tref`, `n_out`, `p_patient`, `effective_supply`, `is_thin`: the
|
||||
depth/persistence primitives behind `scan.py`. Reuse these instead of re-deriving a "how many
|
||||
buildings can the market take" estimate by hand.
|
||||
- **`puga.saturation`** — `tref` (cheap, Poisson-bounded, for stage-1 screening), `tref_precise`
|
||||
(real daily-volume variance, for a bounded candidate set), `n_out` (flow x queue, NO demand
|
||||
term - thin resting-bid books don't disqualify a market sold into via patient asks), `p_patient`,
|
||||
`effective_supply`, `is_thin` (demand still checked here, independently), `max_units_at_impact`
|
||||
(real live bid-book depth cap - how many units before realized price degrades past a threshold;
|
||||
replaced a flat 25%-of-flow guess after a naive price-vs-volume elasticity regression on real
|
||||
data came back near-zero/wrong-signed, see `docs/decisions.md`): the depth/persistence
|
||||
primitives behind `scan.py`. Reuse these instead of re-deriving a "how many buildings can the
|
||||
market take" estimate by hand.
|
||||
- **`puga.simulate`** — `simulate(plan, recipes, buildings, resources, fertility, price, ...)`:
|
||||
the PRUNplanner-simulator replica. Reuse this for anything plan-shaped rather than reimplementing
|
||||
efficiency/workforce/flows again.
|
||||
@@ -63,6 +69,25 @@ EOF
|
||||
(ship+from+to, auto-computes everything via `puga.route`), `tools/shipcost.py` (explicit
|
||||
jumps/sliders/gateway-fees, for when you already know the breakdown). Raw calibration data:
|
||||
`empire/data/shipping_calibration/`.
|
||||
- **`puga.parkcash`** — `scan(cx="AI1", min_spread_pct=20.0, days=30, rate=0.05)`: every ticker
|
||||
with a live quote and a big bid/ask spread, scored on real trading liquidity
|
||||
(`puga.history.trading_days()`/`trade_gaps_days()`) and an EMPIRICAL round-trip estimate
|
||||
(`puga.history.empirical_touch()`, two sequential legs: dip to bid, recover to ask) - no
|
||||
random-walk assumption. CLI: `tools/parkcash.py`. See the module docstring for open gaps (no fee
|
||||
data; the two legs are treated as independent, an approximation).
|
||||
- **`puga.history`** — `daily_prices(tk, cx)`, `trading_days(tk, cx, days)` (real calendar-window
|
||||
trading days, not "last N rows" - a sparse ticker needs this distinction), `trade_gaps_days(dates)`,
|
||||
`full_series(tk, cx)` (all available history, ascending), `empirical_touch(series, y, rate)`
|
||||
(non-parametric first-passage stats for a target log-move `y` - hit_factor/touched_frac/
|
||||
median_days, estimated directly from how often/fast the ticker's own real history has made
|
||||
moves of that size, by default only drawing on historical days in a similar state to today
|
||||
(trailing-60d z-score within +/-0.5, `condition_on_state=True`) since mean reversion's effect
|
||||
depends on where price is now, not just the move size. Optional `horizon` (days, off by
|
||||
default): bounds both eligibility and the search window to a fixed number of days so every
|
||||
start-day sample gets the same fair window, instead of recent start days being biased by
|
||||
running out of data to search. Replaced an earlier driftless-random-walk formula that
|
||||
backtested wrong, see `docs/decisions.md`). Shared by `tools/history.py`, `tools/sell.py`, `tools/undervalued.py`,
|
||||
`puga.parkcash`.
|
||||
- **`puga.contracts`** — `scan(planet, direction, sf_price, ff_price, v0=1.0, v1=1.0)`: live
|
||||
Local Market hauling ads (FIO `/localmarket/shipping/{source,destination}`), each enriched with
|
||||
real one-way fuel cost (`puga.shipping.leg_cost`) and margin. CLI: `tools/lmscan.py`.
|
||||
|
||||
Reference in New Issue
Block a user