# research/ — the edge factory (SILO)

Standing rules (user directive 2026-07-20: "built in a silo to not affect
anything on the live bot"):

- **Nothing here is imported by, or imports, the bot** (`copybot.py`,
  `copytrade.py`, their configs). The Fly workers run pinned entrypoints;
  this directory is inert to them.
- **Tape access is read-only** (`duckdb.connect(..., read_only=True)`).
- The ONE shared write: `live/cache.duckdb::resolutions` via `live/payouts.py`
  — append-only immutable chain facts, the same store the daily pipeline
  already feeds. Nothing else in `live/` is touched.
- The existing paper bot is the live test's CONTROL — graduated edges get
  their own paper harness here, never that one.
- Studies are pre-registered (GitHub issue per study: hypothesis, params,
  verdict + kill criteria) BEFORE their forward window opens. Exploration
  happens on already-collected tape; **verdicts only come from
  `forward_ledger.jsonl` rows dated after the params freeze commit.**

Layout:
  tape.py     read-only loaders · tape proxy-resolution (terminal-VWAP +
              sibling veto, the 742/742 chain-validated method) · title
              parsers (niche, crypto strike/expiry/sprint)
  sim.py      execution replayer calibrated on OUR live fills ledger
              (lag, FAK no-match, protected band, 3% taker fee)
  study_flow.py    Study A — informed-flow state signal
  study_oracle.py  Study B — crypto oracle fair value vs the book
  requote.py       crater→requote timing measurement (retry tuning)
  forward.py       scores frozen studies on new tape days → forward_ledger.jsonl
  params/          frozen study parameters (committed = frozen)
  nightly.sh       manual/launchd runner (separate from daily.sh)
