Skip to content

Mover v3 core: code-first preregistration (study tree, 286 synthetic tests, two-family review) — not frozen - #190

Merged
seathatflowsinourveins merged 31 commits into
mainfrom
claude/mover-v3-core-study-20260924
Sep 25, 2026
Merged

seathatflowsinourveins merged 31 commits into
mainfrom
claude/mover-v3-core-study-20260924

Conversation

@seathatflowsinourveins

@seathatflowsinourveins seathatflowsinourveins commented Sep 24, 2026 •

Copy link
Copy Markdown
Collaborator

Status (2026-09-25): ready for the cross-family pre-outcome review, not frozen

This PR carries the Mover v3 core study code, preregistered code-first. It stays a draft protocol: status: draft_pending_independent_pre_outcome_review, frozen_before_outcomes: false. No outcome dataset, sealed file or result has been opened, and no market data has been fetched.

Path to a freeze:

  1. A cross-family (Codex) pre-outcome review of this tree. Codex is unavailable until 2026-09-30.
  2. Resolve that review's findings.
  3. Set the F12 budget values after the native dry run, by a reviewed PR.
  4. The freeze commit.

What changed since the 2026-09-24 review (8f792f8)

The cross-family review at 8f792f8 said "not ready to freeze". It found 3 blockers (N01–N03), 4 majors (N04–N07) and 1 minor (N08), and left several earlier F-findings partial.

  • Round 15 (b603f01 to 707d540) resolved them. Each fix has a synthetic regression test that fails on the pre-fix code, and a dated review_record entry.

    Finding Resolution
    N01 The loaders read the committed calendar and fee files in their real schemas
    N02 The deferred repairs R14-open-1 and R14-open-2 are closed. open_before_first_holdout_count is empty and enforced.
    N03 Coverage failures count against the cohort instead of dropping it
    N04 Timeliness is dated by the governing bytes
    N05 Idempotent completion recovery
    N06 Split checks run through the actual exit
    N07 / F09 Ticker reuse fails the gate
    F01 / F05 Spin-off accounting, with the count and the read sharing their exclusions (F05 keeps a documented exit-dependent residual)
    F02 Only completed bars count toward cost tiers
    F04 The coverage output is bound to what produced it
    F06 Undefined bootstrap draws can't support a pass or an MDE exclusion
    F07 Verdicts come from the primary contrasts only
    F08 Claims are limited to retrospective reconstruction
    F10 The H3-a embargo applies
    F12 (partial) The fetch-budget mechanism, with its values open until the dry run
    F14 Units and occupied sessions are reported
    F15 A freeze-acceptance record
    Fee dates SEC Section 31 by settlement date across T+3, T+2 and T+1; FINRA TAF by trade date
    Amendments A versioned amendment schema
  • Independent review of round 15 (Claude Sonnet, 2026-09-25): ready for cross-family review.

    • It spot-checked the blockers by running each new test on the pre-fix code. The failures reproduce exactly, and the tests pass at HEAD.
    • It confirmed the T+2 and T+1 transition dates, and the SEC and FINRA charge-date conventions, against sec.gov and FINRA Rule 11320's version history.
    • It found no new blocker or major defect.
  • Round 16 (75dd398) applied the decisions both reviews converged on:

    • a fixed floor of 20 occupied sessions per item and per H1-D group (F06). The fix has regression tests, and with it removed, 6 tests fail;
    • the calendar-start reconciliation (N01);
    • a verbatim Federal Reserve K.8 quote for the Columbus Day and Veterans Day settlement rule. It confirms the code, which is unchanged.
  • Main merged in. The OSV-Scanner inventory registers study/runtime-requirements.txt, with runtime.lock covered by it. That fixes the test_osv_lockfile_coverage failure from the last CI run.

Checks (dec9034)

  • Study suite under study/runtime.lock's test_command (uv-managed CPython 3.13.15): 333 tests OK. It was 286 at the 09-24 review.
  • Repo checks: validate.py, evidence_manifest.py --check, validate_convergence.py --all-recorded, test_osv_lockfile_coverage and test_mover_v3_data pass.

Open items

  • F12 budget values: the rate limits, seconds per page, pages per request, and the retry and merge allowances. They are set from the native dry run by a reviewed PR before count-only. The recommended rule is twice the measured throughput, with a high-activity dry-run window.
  • F05 residual: the exit-dependent checks. It is documented and tested.
  • Exposure notes from the Mac paper trials (comments above) are facts for the exposure_registry.

🤖 Generated with Claude Code

Scout and others added 8 commits September 24, 2026 05:52
…rozen)

Add blueprints/us-equities/mover-v3/study/, the code that protocol-core-draft.json
preregisters: the request plan and fetch loop (core/plan.py, stage.py, driver.py),
a transport-only study/fetch/, records and the sealed snapshot, identity and dedup
(the pinned dedupe_identity run through DuckDB), D membership, the three arms and
five items, terminal exits with backward windows, the cost model, the stages with
Holm over m = 5, the seeded bootstrap, the H3-c sign rule, the holdout gate and
access log, the frozen-tree and runtime-lock refusals, append-only amendments,
the count-only code and the transport reproduction check.

Resolve the 21 remaining core findings in code and protocol (review round 8),
including both high ones: R8-1 moves the plan and parsing out of study/fetch/ so a
transport deviation cannot change stamps or windows, and E1 makes duckdb an
allowed, pinned import so the pinned dedup runs.

Synthetic suite: 187 tests, 0 failures, 0 skips, under study/runtime.lock
(uv-managed CPython 3.13.15, duckdb 1.5.5, exchange_calendars 4.13.2, numpy
2.5.3, pandas 3.0.6). No market data read, no provider called, no outcome
computed. Status stays draft; frozen_before_outcomes stays false.

Co-Authored-By: Claude Opus 5.5 (1M context) <[email protected]>
… committed-log guards)

Resolve the 28 findings of the study-tree review (H-1, H-2, M-1..M-8, L-1..L-7, F1..F11)
in code, tests and protocol-core-draft.json (review_record round 9).

- Holdout path through run.py and core/holdout.py: authorize (evaluator refusals by rule),
  collect, count (extension decision) and read (carried items only, not-read label after
  refusal, void or deadline); N0 and the window come from the freeze commit (H-1, F4, M-1, M-5).
- core/holdout_store.py merges collection batches per (symbol, session) with rename re-fetch
  rows (M-6).
- runner.context: logs and amendment files must equal origin/main, the protocol is the freeze
  commit's blob, amendment timing is enforced, coverage_decision must match the committed
  count-only output, and a transport deviation governs only when committed and passing
  (F2, F3, M-3, F5, F7, H-2). The mover v3 jsonl logs are no longer gitignored.
- One fetch and one fixed-path results file per stage, and a kill after the write logs the
  file's sha256 (F1, M-4, F10). No bytecode cache from the tree is read (F9).
- run.py count-only command with a trading-host transport and the fetch estimate (M-2, F8).
- Labels, qualifiers, exit counts and the remaining low findings (M-8, L-1..L-7, F11).
- Command-level tests against a temporary repository, so no test depends on the real
  protocol's status (F6).

Synthetic suite: 216 tests, 0 failures, 0 skips under study/runtime.lock (uv 0.12.17,
uv-managed CPython 3.13.15, duckdb 1.5.5, exchange_calendars 4.13.2, numpy 2.5.3,
pandas 3.0.6). No market data read, no provider called, no outcome computed. Status stays
draft; frozen_before_outcomes stays false.

Co-Authored-By: Claude Opus 5.5 (1M context) <[email protected]>
…ldout reads, bound transport checks)

Resolve the 23 findings of the second study-tree review (F1-F14, H1, H2, M1-M3, L1-L3) in
code, tests and protocol-core-draft.json (review_record round 10), with the partial
rejections stated there.

- H1/F6: the transport runs in a child process (core/transport_proc.py); a transport
  deviation governs only when it cites the hashed output of a logged run.py transport-check
  run from its tree. run.py dry-run added; the dry run plans every forward exit window.
- H2: holdout count and read fetch and seal in one committed step and evaluate over that
  snapshot in a second; origin/main is checked against the remote with git ls-remote.
- M1: append-only files must only grow across origin/main's first-parent history.
- M2: holdout actions refuse a clock earlier than origin/main's tip; a read whose
  authorization or fetch line reached main after the deadline is not read.
- M3: freeze and reach times come only from commits signed by GitHub's web-flow key,
  pinned as study/pinned/github-web-flow.gpg.
- F1/F8 verdicts, F2 amend records, F3 least-exposed slice for every item, F4 typed void
  deviations, F5 complete validation file, F7/F10/F11 protocol text, F9 per-exchange counts,
  F12/F14 tests, F13 rows_read, validation reach time and the H3-a/b_lane overlap.
- L1 count-only from origin/main with the rate pinned in the protocol; L2 recorded as a
  limitation; L3 every locked package version and RECORD digest checked.

Synthetic suite: 233 tests, 0 failures, 0 errors, 0 skips under study/runtime.lock (uv 0.12.17,
uv-managed CPython 3.13.15, duckdb 1.5.5, exchange_calendars 4.13.2, numpy 2.5.3, pandas 3.0.6;
git 2.43.0, GnuPG 2.4.4). No market data read, no provider called, no outcome computed.
Status stays draft; frozen_before_outcomes stays false.

Co-Authored-By: Claude Opus 5.5 (1M context) <[email protected]>
…dependent holdout read, paced transport)

Resolve the third study-tree review (C1-C15, F1-F7; C15 and F5 are one finding) in code, tests and
protocol-core-draft.json (review_record round 11).

- C1 (high): the dry run refuses any planned request that starts before 2021-01-04 or ends after
  2024-10-31 (core.count_only.check_dry_run_reach), before any fetch or run-log line; the earliest
  session is the 60th after 2021-01-04. freeze_preconditions restates the bound.
- F1 (high): a refused read authorization is spent only after a signed deadline, only if no read
  sealed a snapshot, only if it is the latest read authorization and no granted read is open. A
  sealed read is always evaluated (late ones carry 'late-read'); a timely granted read is always
  carried out; a void count refuses the read at authorization.
- C2 paced child transport at the pinned rate (429 waits a full window); C3 per-session late
  collection; C4 parameters check before count-only/dry-run; C5 per-exchange splits; C6 per-item
  empty counts; C7 test; C8 holdout_label; C9 development not untested by a dropped 2020; C10, C13,
  C14 protocol text; C12 opposite_direction with interval_95; C15/F5 same_snapshot from committed
  lines; F2 due times from signed reach times and record-time check; F3 validation fetch before
  development evaluation, seeded live sample and holdout snapshots in transport-check; F4 pushed
  start lines before count-only, dry-run and stage fetches; F6 ruleset cited.
- Rejected: C11 (already present at ece7b37), C15's count-retry bound (the read deadline is
  earlier), F6's in-repo freeze record and web-UI commit concern (reasons in review_record).
- F7: manifests/evidence.json entries changed on this branch against main are
  blueprints/us-equities/mover-v3/README.md, blueprints/us-equities/mover-v3/protocol-core-draft.json
  and .gitignore.

Synthetic suite: 246 tests, 0 failures, 0 errors, 0 skips under study/runtime.lock (uv-managed
CPython 3.13.15). validate.py, validate_catalogs.py, landscape.py, evidence_manifest.py --check and
verdict_review_gate.py pass. No market data read, no provider called, no outcome computed. Status
stays draft; frozen_before_outcomes stays false.

Co-Authored-By: Claude Opus 5.5 (1M context) <[email protected]>
…es, ns quote order, clustered splits)

Two independent reviews of the study tree at 5b66e23: cross-family Codex
(gpt-6-astra via codex exec, 1 P1 and 4 P2) and a two-pass Claude review
(F1-F10 and F1-F8). Every finding was verified; none rejected. Each fix has
a synthetic regression test that fails without it.

Codex:
- P1: identity dedup ran over the whole stage, so hold-window closes after t
  could remove the candidate at t. Dedup now runs as of each candidate
  session over rows of sessions <= t (core/identity.py dedupe_asof).
- P2: a count's or read's _fetch line pins its ordered base snapshots and
  collection batches; step 2 (and any retry) reads exactly those.
- P2: quotes are ordered by exact integer nanosecond stamps, not by price.
- P2: BH diagnostic split p uses a session-clustered standard error.
- P2: an undefined rebooking factor leaves the terminal-zero rebooking
  sensitivity and is counted, instead of booking -1.

Claude, first pass: count/read recheck carried items against the governing
validation file and refuse malformed authorization records (F1); tests that
can fail for the H3-c holdout sign rule (F2), void/untested p = 1 (F3), the
two-sided MDE level (F4), Holm tie order via reported holm_order (F5),
terminal-merger net and window (F6), sigma_d ddof (F7), rename window and
b_lane_middle (F8); opposite-direction never passes by rule (F9); the
transport child's stdout is closed (F10).

Claude, second pass: a sealed read may be retried after the deadline (F1);
check_coverage_decision requires passing identity probe and fetch margin at
the frozen rate limit (F2); failed count-only/dry-run end lines log every
sealed part, and a run that sealed part 1 fixes later runs' coverage_rule
(F3); collection_limitation covers count snapshots (F4); the pre-freeze rule
exempts part 0's enumeration (F5); late void deviations are reach-checked
and named (F6); runtime.lock verified record updated (F7).

protocol-core-draft.json: the changed rules, a round-12 review_record entry
naming both review families, new draft tree 74297f9 and test_record.
manifests/evidence.json: README.md and protocol-core-draft.json hashes.

Synthetic suite: 263 tests, 0 failures, 0 errors, 0 skips under
study/runtime.lock (uv 0.12.17, CPython 3.13.15). validate.py,
validate_catalogs.py, landscape.py, evidence_manifest.py --check and
verdict_review_gate.py pass. No market data read, no provider called.

Co-Authored-By: Claude Opus 5.5 (1M context) <[email protected]>
…luate, as-of survivors, count retry)

Two independent reviews of the study tree at a0d7300: a Claude review (F1
medium, F2 low) and a cross-family Codex review (5 P2, treated as medium).
Each finding was verified; each fix has a synthetic regression test that
fails without it.

Claude:
- F1: a void deviation applies only if it reached origin/main before the
  outcome it would void could be computed: 'tests'/'validation' before the
  validation evaluation's first start line, 'holdout' (now citing read_utc)
  before the first granted count or read authorization. A later void is
  reported (void_deviations_late, voids_late, holdout_label), never applied,
  so it cannot cancel the read. An applied void recorded after the freeze is
  named. run.py evaluate runs in two committed steps (evaluate_start line).
- F2: identity dedup and the same-session guard use only rename records
  effective on or before t and no (today's) active status.

Codex (P2):
- void recheck: the read refuses under every applying void of any scope;
  late tests/validation voids are reported in holdout_label. The part asking
  that a late validation void still void the holdout is rejected
  (read_timing: no person can cancel the read).
- a count after a failed count must be its retry (retry_of, retry rule).
- sealed_refs reads a count snapshot from the directory its count_fetch line
  sealed, not from the completing authorization's id.
- merge_quotes keeps identical updates inside a page; only a repeat across a
  page boundary is dropped.
- read lines record fee_span [N0, last + 5]; fee first use uses it.

protocol-core-draft.json: the changed rules, a round-13 review_record entry
naming both review families, draft tree 51c1454 and test_record (269 tests,
0 failures, 0 errors, 0 skips). No market data read.

Co-Authored-By: Claude Opus 5.5 (1M context) <[email protected]>
…vent data, fee supersession, dividend cash, hard-kill recovery)

Two independent reviews of the study tree at 910666c: a Claude review (F1, F2
medium; F3, F4 low) and a cross-family Codex review (1 P1, 2 P2). Each
finding was verified; each code fix has a synthetic regression test that
fails on the round-13 code. None rejected.

Codex:
- P1: count and read now refuse unless the working validation file's sha256
  equals the authorization's validation_results_sha256 and the governing
  run-log line's; the read takes the H3-c sign from those bound bytes.
- P2 (dividend cash): cash is taken per ex-date in (e, x] at the previous
  close (D = all/split steps above the 2e-3 band), so it no longer moves
  with the exit session's close after an overnight exit.
- P2 (hard kill): a results file that no line cites no longer refuses the
  retry; evaluate, count and read recompute from the same sealed snapshot,
  replace it and record replaced_uncited_results_sha256.

Claude:
- F1: a per-event or quote response that an earlier sealed snapshot (the
  count's) fetched before its data end is fetched again, so delayed exits
  after the window's last session keep their bars and prints.
- F2: fee amendments supersede earlier rows by precedence, overlapping base
  rows are refused at load, a count or read refuses a fee gap before it
  fetches, and '_fetch' lines count as fee first use.
- F3: fetch steps refuse a sealed ledger that no committed line names; the
  remaining local limitation is recorded in the protocol.
- F4: the protocol states the stage-local screen window dedup uses.

Not fixable without a redesign, listed in the new protocol key
open_before_first_holdout_count (authorize refuses a 'count' while it is
non-empty): R14-open-1, the read's corporate-action end date; R14-open-2,
hard-kill recovery for count-only, dry-run and transport-check outputs.

Synthetic suite: 279 tests, 0 failures, 0 errors, 0 skips under
study/runtime.lock. No market data read, no provider called.

Co-Authored-By: Claude Opus 5.5 (1M context) <[email protected]>
…killing tests)

Codex P2 on 202968f (core/costs.py cash_term): a session of the hold without
its split or all bar was skipped, so the dividend step across it took an
older close as the previous close (closes $20, $40, $39, $39, $39, a $1
dividend ex on the third session and only the second session's split bar
missing booked $0.50, not $1). A dividend's previous close is now the close
of the session immediately before its ex-date, by the XNYS calendar; a step
outside the 2e-3 band across a missing bar leaves the cash undefined and the
trade or H3-c event is excluded like an undefined F. A non-flat-price test
fails on the old rule. populations.corporate_actions, a review_record
follow-up entry and the READMEs state the rule.

New or extended tests kill the round-14 mutation survivors, each checked by
applying the mutation to a git-archive copy: HoldoutStore without the
calendar in _fetch_step (both stores) and _sealed; count and read without
require_fee_coverage; trades._cash on D7's formula; count's hard-kill path
without its recompute or replace; the 'finally' of runner.evaluate_run,
count and read adopting an uncited file it did not write; and the P1 clause
that the working sha256 equal the governing line's results_sha256, alone.

Synthetic suite: 286 tests, 0 failures, 0 errors, 0 skips under
study/runtime.lock (study tree febdf9e). No market data read, no provider
called.

Co-Authored-By: Claude Opus 5.5 (1M context) <[email protected]>
@chatgpt-codex-connector

Copy link
Copy Markdown

You have reached your Codex usage limits for code reviews. You can see your limits in the Codex usage dashboard.
To continue using code reviews, add credits to your account and enable them for code reviews in your settings.

@seathatflowsinourveins

Copy link
Copy Markdown
Collaborator Author

Independent pre-outcome review of this PR (freeze precondition 1), round requested by the user. Codex CLI (GPT-6, OpenAI family; different from the Claude author), read-only, at 8f792f8cf57466b03f7e0df9e42864164a24b7bb. It also re-checks the 15 findings from the earlier different-family review of the pre-#190 draft (posted on #174).

Independent pre-outcome review — 2026-09-24

Reviewer: Codex CLI 0.155.0-alpha.16.3; GPT-6, OpenAI model family, different from the Claude author. Exact runtime variant is not exposed.

Commit reviewed: 8f792f8cf57466b03f7e0df9e42864164a24b7bb

File SHA-256
protocol-core-draft.json 755f8b6f9327043779f8ca8f5df524da18fe0d57c529de20904d7dd83d6b4c96
README.md 5e38d5f2288ce7d90b9d571b90c7ea82e16fd1b906a32f21984e475d782dfd4b

Access declaration: No outcome datasets, results files or sealed data were opened. No market data was fetched, no outcome was computed, and no files were modified. The supplied prior review was read. Historical summaries embedded in the authorized documents were visible. External reads were limited to official regulatory documentation.

The calendar, fees, amendments and data-pins.json were read as specifications from local origin/main commit b1655799a3b00c081f2069bfc3249338dfa4f4de, without fetching. All four data-file hashes match their pins.

Verdict: not ready to freeze. Several original blockers remain; the study also cannot consume the supplied data specifications as written.

References below use Core for protocol-core-draft.json. Code and test paths are relative to study/.

Prior-finding disposition

“Resolved” means resolved by source inspection, not verified by native execution.

Finding Status in #190 Evidence and remaining action
F01 — distribution/cash accounting Partially resolved; blocker remains $.populations.corporate_actions; core/costs.py:159–193 now fixes dividend cash at the preceding close. tests/test_costs.py:224–246 tests endpoint invariance. However, all/split is still treated as dividend-only: no separate spin-off accounting or exclusion exists. The spin-off test checks enumeration, not returns. Specify supported entitlements and spin-off treatment.
F02 — unfinished-minute volume Unresolved; blocker $.cost_model.lookup.cell_key; core/formulas.py:155–157 delegates to pinned/rules_copy.py:54–65, which includes bars whose start precedes the fill. Completed-bar sizing at formulas.py:160–166 does not repair cost tiers. Require completion by fill time and a midminute regression.
F03 — coverage cohorts/zero denominators Partially resolved; blocker remains core/count_only.py:188–196 now restricts numerator and denominator to the same raw-close cohort; rates() and coverage_rule.year_decision() fail closed on zero denominators. However, failed requests remove cohort members before counting; see N03.
F04 — coverage dependency binding Unresolved; blocker $.coverage_rule.decided_by_code still hashes only that object. core/runner.py:45–87 checks output hash/rule/rate/flags, but not equality of the producing tree, calendar and full governing specification with frozen dependencies. Prefreeze calendar bytes are unbound (run.py:95; runner.py:255–295), and the completed producer line is not required. Bind the full dependency manifest and completed run.
F05 — analyzable sample counting Partially resolved; blocker remains Final minima/MDE use statistic rows, but extension counts do not: core/trades.py:145–146 returns before factor/cash exclusions at 192–217; H3-c returns at 300–301 before its accounting checks. test_count_path_calls_no_price_or_return_function preserves this separation without proving analyzability equivalence. Share eligibility checks between count and read.
F06 — undefined bootstrap cases Partially resolved; blocker remains NaN draws now count against p-values (core/stats.py:79–94; tests/test_stats.py:54–68). But minima contain no occupied-session requirement, and confidence bounds discard undefined draws (stats.py:114–116). This can produce unjustified MDE-exclusion labels; see explanation below.
F07 — hypothesis-level verdicts Unresolved; major $.outcome_reporting.hypothesis_verdict; core/stats.py:277–287 still promotes any associated passing item into an H1/H3 verdict. tests/test_stats.py:231–236 explicitly accepts H3 screening from H3-a alone. Give the primary contrasts their own verdicts; report profitability separately.
F08 — point-in-time availability/vintage Unresolved; major $.universe_and_identity.asof/request_shapes records fetch vintage without enforcing decision-time availability. core/plan.py:94–112 retrieves retrospective event inputs; collection at 209–215 omits minute bars and quotes. Freeze revision/availability rules or explicitly limit claims to retrospective reconstruction.
F09 — identity probe/dedup cutoff Partially resolved; major remains Decision-session dedup and rename cutoffs are implemented (core/identity.py:52–55,100–149; tests/test_identity.py:46–107). Probes still accept one common daily/auction session and merely nonempty quote responses (count_only.py:305–312). Observed reuse failures also fail to close the gate: N07.
F10 — H3-a embargo Unresolved; major $.chronology.boundaries; core/trades.py:122 excludes H3-a from the embargo despite E+5 exits. tests/test_trades.py:370–375 explicitly asserts the exemption. Apply purging to its permitted actual horizon and revisit its block-length rationale.
F11 — purpose-specific authorization Resolved core/gate.py:127–131,212–226 permits collect/amend independently of validation and enforces purpose-specific grants. tests/test_gate.py:160–177 checks collection before validation and missing, refused, completed and wrong-purpose grants. Other log defects remain under N05.
F12 — conservative fetch budget Unresolved; major $.freeze_preconditions[5]; core/count_only.py:477–487 still divides request count by the rate ceiling. Pagination, achieved serial throughput, retries, storage, evaluation and merge time are not budgeted. Acknowledging that this is not an upper bound does not make the margin conservative.
F13 — snapshot-part permissions Resolved $.exposure_registry.pre_freeze_access_path.rule/snapshot_contents removes prefreeze part 2, fetches breakpoint inputs after freeze, and explicitly permits part 0’s enumeration. The former contradiction is removed.
F14 — MDE units/occupied sessions Partially resolved Assumed sigmas and DEFF remain disclosed; actual statistic counts enter MDE, with formula tests. H3-c retains the misleading mde_percent_H3-c name, and item outputs lack occupied-session counts for the primary contrasts (core/evaluate.py:185–192). Label log-difference units and report clusters per group.
F15 — preconditions versus evidence Partially resolved Code, lock, synthetic tests and separately pinned specifications now exist. The recorded test tree matches the reviewed tree. Native coverage, identity, dry-run, collector and other freeze acceptance remain unestablished here; rate and freeze pins remain null. Artifact presence is not completion evidence.
Fee-date item Unresolved; major core/costs.py:140–156,196–202 selects SEC and TAF rates using the same exit/trade day. There is no settlement conversion. Specify the applicable charge-date convention, settlement calendar and historical transitions; test fee-boundary crossings.
Amendment-format item Partially resolved Parsers imply JSONL forms (core/calendar.py:60–70; costs.py:106–118) and tests provide examples. But data-pins.json.amendment_rule still defers the format. Publish a versioned schema covering fields, types, date inclusivity, open ends, precedence and source requirements, aligned with the actual base files.

F06’s remaining failure is substantive. H1-D can meet its per-group observation minimum using one occupied entry session. If its group means coincide, draws containing that session have zero difference; draws omitting it are undefined. The p-value handles those undefined draws conservatively, but bound() drops them, allowing a zero-width interval and not_supported_mde_excluded. Require occupied-cluster eligibility and invalid/degenerate-inference rules controlling both support and exclusion, with concentrated-session tests.

Fee-date clarification: the supplied shorthand needs historical and venue qualification. T+2 began September 5, 2017, so early development includes T+3; T+1 began May 28, 2024. Section 31 charge dates differ between covered clearing-agency/exchange sales and other sales; the pinned fee specification already acknowledges this. Freeze the intended broker/SRO convention rather than applying a universal date substitution. SEC T+2 implementation, FINRA settlement cycles, SEC collection rule.

New findings on #190

ID Severity Location Finding, consequence and recommended resolution
N01 Blocker core/calendar.py:44–70; core/costs.py:95–118; main data specifications The supplied specifications cannot load. Calendar sessions are arrays described by columns; the loader expects dictionaries containing d/open/close. Fees use sec_section31.rows[].usd_per_million and finra_taf_covered_equity.rows[].max_usd_per_trade, including null end dates; the loader expects different keys and comparable string ends. The calendar also begins 2016-01-04, while Core requires 2015 lookback reach. Fixtures use the implementation’s alternative formats. Add explicit adapters or reviewed regeneration/re-pinning, and test the actual specifications and required calendar reach.
N02 Blocker $.open_before_first_holdout_count; core/holdout.py:313–318; guards.py:210–217,324–346 Acknowledged repairs are deferred beyond the last permissible repair point. R14-open-1 omits terminal corporate actions after the first count’s enumeration date; R14-open-2 leaves orphan prefreeze outputs unrecoverable and coverage output unbound to a completed run. Count refuses while the frozen list is nonempty, but frozen protocol changes and non-transport code repairs are forbidden. Resolve both defects and clear the list before freeze, with acceptance tests.
N03 Blocker core/count_only.py:147–157,188–196 Coverage failures select the denominator. Any incomplete raw/split/all/auction request drops the entire sampled batch. A known raw ≥$1 row with failed auction retrieval therefore disappears from official-close coverage instead of counting against it. Failed default-asof requests disappear from identity coverage too. Preserve each rate’s independently defined cohort; fail closed where required denominator information is unknown. Test selective endpoint failures.
N04 Major core/holdout.py:89–115 Validation timeliness dates a pathname, not the governing result. first_reach() finds the first signed commit containing results/validation.json. A pre-N0 placeholder followed by the actual result and evaluation line after N0 can satisfy the cutoff. Require timely signed reach of the exact governing bytes and matching evaluation line. Add the placeholder/late-result regression.
N05 Major core/holdout.py:398–403,781–788; gate.py:155–156 A crash between two log writes can strand the study. The governing run line is appended before access-log completion. A kill between them leaves a completed result and open authorization: count/read refuse repetition, while new authorization refuses the open grant. Add idempotent completion recovery bound to the existing result, snapshot and run line. The current hard-kill test fails before the first append and misses this boundary.
N06 Major core/trades.py:141–144,193,211–219; $.populations.suspected_unadjusted_split Delayed holdings escape part of the split exclusion. Retained uncarried splits are checked only through planned exit E, although the position can remain held through E+5. A split during that extension can therefore bypass exclusion. Extend the price-independent check through actual exit and add a delayed-exit split test.
N07 Major core/coverage_rule.py:58–67 An observed ticker-reuse failure can pass the identity gate. passes depends exclusively on rename rates; ticker_reuse: "failed" is only reported. Make observed reuse failure fail the gate, separately specifying the zero-case/unverified policy. Add a failing-reuse regression.
N08 Minor README coverage and run-discipline paragraphs, approximately lines 132–163 The overview drifts from governing behavior. Its coverage summary omits the minute-bar threshold, and it describes non-transport deviations as producing side-by-side results although current guards refuse them. Synchronize these descriptions and qualify the crash/retry claim.

Do the synthetic tests exercise the governing rules?

The reviewed tree is febdf9e6beb2954058eab930a6535e0054bc8ac9, matching the recorded test tree. Static inspection finds 286 test methods. The lock reports 286 passed, zero failures/errors/skips; I did not rerun them.

Area Source-level assessment
Terminal exits Meaningful trade-path cases cover terminal zero, resumed quoting, E+5 expiry, empty exits, merger booking and missing merger bids (tests/test_trades.py:87–200). They do not establish fresh terminal-action acquisition; N02 remains.
Renames/reuse Fake-client and dedup tests exercise issuer requests and decision-session cutoffs (test_identity.py:28–187). They establish client behavior conditional on fake provider semantics, not native Alpaca identity correctness. Probe acceptance remains inadequate.
Split/ex-div crossings Substantive arithmetic, missing-bar and dividend endpoint-invariance tests exist (test_costs.py:167–246). Spin-off accounting and delayed-exit uncarried splits are missing.
Early closes Calendar, volume and coverage-stamp components are exercised (test_calendar.py:18–24, test_formulas.py:158–162, test_count_only.py:29–31). No complete early-close trade/terminal-window scenario was found.
Censoring Trade-level tests cover segment-end terminal handling, fills after segment end, no final-session overnight entry and H3-c crossing exclusion (test_trades.py:349–413).
Embargo Boundary mechanics, dropped-year handling and no embargo at N0 are exercised. Tests explicitly preserve the defective H3-a exemption.
Validation independence test_e2e.py:141–160 injects development events and checks unchanged validation output, then exercises validation-only breakpoints. This is meaningful input independence; it does not validate N04’s historical publication cutoff.
Authorization/completion Purpose-specific grants, retries and normal completion/refusal behavior have direct assertions in test_gate.py. Intermediate dual-log crashes remain uncovered.
Evaluator refusals test_cli.py:37–56 exercises draft refusal for six main commands; gate tests cover multiple refusal predicates. Passing these cases does not establish complete artifact provenance or crash recovery.
Count/inference/reporting Some tests preserve the defects: count bypasses accounting, H3 profitability supplies a hypothesis verdict, and H3-a remains unembargoed. Passing tests therefore do not establish protocol validity.

No sanctioned run.py outcome-evaluation path before freeze was found. Frozen-context checks precede those operations. Direct library calls remain possible, and plain gzip snapshots are readable outside the entry point: hashes establish integrity, not access prevention. Prefreeze count-only and dry-run code legitimately parse prices internally, but their intended outputs are counts. Their input binding still needs F04.

Run-once and committed-log controls are substantial on normal paths: committed start records, signed reach checks, fixed result paths and sealed-input retries. They are not yet sound across all interruption and provenance cases, particularly N02, N04 and N05.

Explicit checks

  • Falsifiability: Item-level alternatives are specified and falsifiable. Hypothesis-level reporting still conflates primary contrasts with profitability passes (F07).
  • Alpha/MDE: The fixed five-slot Holm family is structurally coherent conditional on valid individual inference. Prospective confirmation is distinguished from exposed screening. F06 prevents acceptance of all inference labels; MDE assumptions are planning assumptions, and H3-c needs correct units and cluster reporting.
  • Point-in-time: Not established. Decision-session dedup improved, but unfinished-bar costs and information-vintage handling remain defective (F02, F08–F09).
  • Embargo/purging: Segment assignment and censoring have substantive tests; H3-a’s E+5 exposure remains unpurged (F10).
  • Holdout sealing/access logs: Purpose separation is improved. Custody remains procedural; exact validation cutoff binding and interrupted completion recovery require repair.
  • Coverage: Zero denominators and ordinary cohort alignment improved. Selective failures, incomplete dependency binding and reuse-failure acceptance still undermine the gate.
  • Freeze preconditions: Not complete as an enforceable acceptance package. Add actual-spec loading, full dependency binding, all listed statistical/accounting repairs and interruption recovery. Move both deferred R14 repairs before freeze. Existing literature, native count-only/probe/dry-run, collector scheduling and exposure-registry requirements still need completion evidence.
  • Operational facts: The supplied 200/min Trading, 10,000/min market-data and SIP/04:00 entitlement facts do not demonstrate historical coverage or conservative end-to-end throughput. Pin the separate budgets and measured pipeline allowance before applying the margin gate.

Freeze verdict

Do not freeze this revision.

Blocking findings are:

  • F01–F06: remaining distribution accounting, unfinished-bar cost tiers, coverage selection/binding, count-versus-analyzability mismatch and sparse-cluster inference.
  • N01: incompatible data specifications and insufficient calendar lookback.
  • N02: deferred repairs that cannot be made within the frozen version.
  • N03: failed measurements removed from coverage denominators.

Resolve the remaining major findings—including F07–F10, F12, fee-date handling and N04–N07—and supply the outstanding freeze receipts as required by the protocol’s own review precondition. After those corrections and acceptance checks, the design may be eligible for freeze; this review does not establish that those conditions have passed.

From the Mac coordinator session (not part of the review):

🤖 Generated with Claude Code

@seathatflowsinourveins

Copy link
Copy Markdown
Collaborator Author

N01 (calendar reach) is resolved on main by #194: data/session-calendar.json now starts 2015-09-01 (3854 sessions, 34 early closes, same columnar schema, last session 2030-12-31); new sha256 44f0ebf7c82ceee6a1fd2beceeca38c5a1e894c723bbc7c0ac677f452f592b5c, data-pins.json updated. The loader-schema half of N01 (columnar sessions and the fees field names versus your loaders) remains yours: adapters in the study code, or tell me the record format you want and I'll re-emit and re-pin.

@seathatflowsinourveins

Copy link
Copy Markdown
Collaborator Author

Coordination note (native-agent-stack-71). Another session holds the v3 core protocol work: #186 (fee data files, merged) and #192 (resolution of the cross-family pre-outcome review on protocol-core-draft.json). This PR (study code, 286 synthetic tests, a converged two-family code review) edits the same protocol file, so it will conflict with #192. This session is moving to the paper lane. Proposal: #192's owner decides the order. Either this study tree is rebased onto the resolved protocol, or its code is taken as a base for the study tree that #192's protocol names. Until then, treat this PR as parked: do not merge it ahead of #192.

@seathatflowsinourveins

Copy link
Copy Markdown
Collaborator Author

Exposure note for the registry (mac-coordinator, 2026-09-24): paper outcomes seen on session 2026-09-24

These are facts for exposure_registry. No Mover v3 file, dataset or outcome was read.

  • Trial mover-mac-20260924a (Alpaca paper, this Mac's account; record in Mover mode's first Alpaca paper runs on the Mac (trials A and C) and the partial-fill precision fix #205):
    • The live scan evaluated 10:00|G0.20|V250000|any at 12:44:56 ET. It fired for 11 symbols; the top five by dollar volume were APUS, PFSA, SRZN, GRML and GCTK.
    • Entries were at about 12:45 ET and exits at about 13:45 ET (X2 plus a forced recovery).
    • Seen: those five symbols' quotes over the hour, their fills and per-leg P&L (APUS -7.4%, PFSA +10.8%, SRZN -0.9%, GRML -1.2%, GCTK -0.8%, gross of costs), and the scan's gain and dollar-volume values at 10:00.
  • Trial mover-mac-20260924c (planned for 14:52 to 16:00 ET, same rule, X1): its symbols and outcomes will be appended here after the run.
  • Window. 2026-09-24 lies in the gap from 2026-09-21 to N0-1, which the draft collects only as lookback inputs and never as outcomes or breakpoints. After the freeze, any paper trading in the holdout accrues to accrual_exposure. The Mac will record per-session symbols for that.

@seathatflowsinourveins

Copy link
Copy Markdown
Collaborator Author

Exposure note, addendum (mac-coordinator, 2026-09-24). Trial mover-mac-20260924c (Alpaca paper, record in #205): the live scan of 10:00|G0.20|V250000|any at 14:52:00 ET fired 12 and selected the same top five (APUS, PFSA, SRZN, GRML, GCTK). Entries at 14:52 ET: GRML 14.94, PFSA 2.97, APUS 5.29, SRZN 32.25 (GCTK skipped). Seen: their quotes to 16:01 ET plus after-hours snapshots and quote counts at 16:25–16:29 ET; no exit filled, so no realized outcome, and the legs remain open on the paper account. Same window as before (2026-09-24, the gap v3 never reads).

@seathatflowsinourveins

Copy link
Copy Markdown
Collaborator Author

CI note (2026-09-25). This PR stays parked; this records why its last run failed so the fix is ready when it resumes.

  • validate and validate-macos both fail on one test, tests.test_osv_lockfile_coverage (test_every_tracked_lockfile_and_manifest_is_listed). study/runtime.lock matches the tracked *.lock pattern but is not in .github/osv-scanner-lockfiles.json. Run 36017203000 on the macOS full suite shows 3944 tests with 1 failure.
  • Fix when resuming. runtime.lock is a JSON pin record with no OSV-Scanner extractor, and the freeze gate binds its sha256, so it should not be renamed.
    • Under lockfiles: add study/runtime-requirements.txt with parser requirements.txt. All 10 packages are pinned with ==.
    • Under covered_by_lockfile: add study/runtime.lock pointing at that file.
  • Merging main conflicts only in manifests/evidence.json, on the .gitignore and mover-v3/README.md digests. Main now carries Mover v3 data files: XNYS session calendar and sourced SEC Section 31 / FINRA TAF fees (freeze precondition 2) #186 and Extend the Mover v3 session calendar back to 2015-09-01 (N01 reach) #194 (the v3 data files and the calendar extension), so the README merge needs the protocol owner's reading.

🤖 Generated with Claude Code

Scout and others added 2 commits September 25, 2026 09:48
Main moved 150+ commits, including #186 and #194 (the v3 data files and
calendar extension) and #197 (leverage-ladder gate wording in the v3
README, which merged cleanly). manifests/evidence.json is main's registry
with the stale digests refreshed. The study tree is bound by its own tree
hash and pinned copies, and was never registered there.

Co-Authored-By: Claude Opus 5.5 (1M context) <[email protected]>
runtime-requirements.txt (all 10 packages pinned with ==) is scanned
with the requirements.txt parser. runtime.lock is a JSON pin record
with no OSV-Scanner extractor, and the study's freeze gate binds its
sha256, so it is listed as covered by that file instead of being renamed.
This resolves the tests.test_osv_lockfile_coverage failure that failed
validate and validate-macos on #190 (run 36017203000).

Co-Authored-By: Claude Opus 5.5 (1M context) <[email protected]>
@seathatflowsinourveins seathatflowsinourveins added the lane:trading Trading lane: sim, paper and live north star label Sep 25, 2026
Scout and others added 9 commits September 25, 2026 10:31
…emas (#190 review N01, amendment format)

The loaders now read data/session-calendar.json (columnar rows, schema_version 1)
and data/fees-v3.json (sec_section31 / finra_taf_covered_equity rows with units,
null open ends) as committed, refuse any other schema, and check the calendar
reaches the t-60 lookback of 2016-01-04 before any fetch. The amendment files get
a versioned line schema (run_discipline.amendment_format, core/amendments.py)
aligned with the base files and validated by every reader; data-pins.json points
to it. Fixtures write the committed schemas. Review round 15 records appended.

Co-Authored-By: Claude Opus 5.5 (1M context) <[email protected]>
…trade date (#190 review fee-date item)

Freeze the exchange/NSCC convention: a sale's SEC Section 31 row is the one in
force on its settlement date (17 CFR 240.31(a)(3)(i), Release 34-49928), its
FINRA TAF row the one on its trade date. The settlement cycle follows the trade
date (T+3 before 2017-09-05, T+2, T+1 from 2024-05-28) over settlement days that
skip Columbus Day and Veterans Day. Holdout fee spans run to the settlement date
of the last sale session. Sources quoted in cost_model.fee_charge_dates; tests
cross the SEC boundaries on settlement dates and the TAF boundaries on trade dates.

Co-Authored-By: Claude Opus 5.5 (1M context) <[email protected]>
…knowns (#190 review N03, F03)

A fetch-incomplete screen or default-asof request no longer drops its sampled
batch from every rate: unknown cohort members count against coverage (official
close, identity, stamps, minute bars), and pairs with unknown candidacy count
toward the fetch-estimate bound. The hashed coverage_rule.year_rule states the
fail-closed cohorts (new COVERAGE_RULE_SHA256). Selective-failure test added.

Co-Authored-By: Claude Opus 5.5 (1M context) <[email protected]>
…d ticker reuse (#190 review F09, N07)

A rename probe matches only over the same sessions on both tickers, spanning
the rename, and on identical quote windows. Each ticker-reuse case is verified,
failed or inconclusive; an observed failure fails the identity gate through the
hashed ticker_reuse_failed_cases_max = 0 (new COVERAGE_RULE_SHA256), and the
zero-case policy records reuse as unverified without failing the gate.

Co-Authored-By: Claude Opus 5.5 (1M context) <[email protected]>
…adopt orphan outputs (#190 review F04, N02 R14-open-2)

The count-only output records its dependency manifest (tree, runtime lock, data
files, parameters, coverage rule, rate limit); pre-freeze runs refuse data files
that differ from data-pins.json; every frozen run refuses an output without its
complete producer line or with dependencies other than the frozen ones. A
count-only, dry-run or transport-check output left by a hard kill before its
line is adopted only if it equals the recomputation from its seals (the
transport check now seals its live samples); nothing is fetched again.
R14-open-2 leaves open_before_first_holdout_count.

Co-Authored-By: Claude Opus 5.5 (1M context) <[email protected]>
…st; empty open list (#190 review N02 R14-open-1)

A count and a read now fetch every corporate action to their own fetch date
(kind terminal_actions) and give its records to the trade walk only (merger
booking, the in-hold split exclusion, the rename sensitivity); the enumeration,
screen and dedup keep the first count's records. The fetch line records the
date and the evaluation reuses it. open_before_first_holdout_count is now empty
and must be empty at the freeze.

Co-Authored-By: Claude Opus 5.5 (1M context) <[email protected]>
…#190 review F02)

cum_dv_at now passes the pinned Bars arithmetic only the 1-minute bars that
finished by the fill time, so a mid-minute fill no longer counts volume traded
after it. Mid-minute regression added; cost_model.lookup.cell_key updated.

Co-Authored-By: Claude Opus 5.5 (1M context) <[email protected]>
…xit split check (#190 review F01, F05, N06)

The count and the read now use the same record exclusions (split record with
F = 1, and a new spin-off record exclusion) and the same accounting check
(defined F and cash term; cash definedness from adjustment factors only, so the
count stays price-free). The count excludes an undefined booking where the
planned exit session traded; H3-c's count applies the legs' accounting. A
delayed exit is re-checked for records through its actual exit session.
Supported entitlements are cash distributions; the no-record limitation is pinned.

Co-Authored-By: Claude Opus 5.5 (1M context) <[email protected]>
…ed sessions reported (#190 review F06, F14)

MDE-exclusion bounds now place undefined draws on the side that cannot support
an exclusion; an item whose undefined-draw share exceeds its tail level or whose
draws are degenerate can neither pass nor be MDE-excluded (underpowered). Item
results report occupied entry sessions (per H1-D group), units and the inference
record; the H3-c MDE table is labelled in log points. A stricter fixed session
floor is recorded as an open decision.

Co-Authored-By: Claude Opus 5.5 (1M context) <[email protected]>
Scout and others added 12 commits September 25, 2026 11:46
…ability apart (#190 review F07)

H1's verdict now comes from H1-D alone and H3's from H3-c alone; the tradable
cells are reported under a separate profitability record and never promote a
hypothesis verdict. Tests that accepted a cell-driven verdict are replaced.

Co-Authored-By: Claude Opus 5.5 (1M context) <[email protected]>
…view F10)

H3-a's exit search can run to E+5, so its entries in the first 6 sessions of a
segment are embargoed like every other arm's, and its bootstrap block is 10
sessions like the other items'. The test that asserted the exemption is replaced.

Co-Authored-By: Claude Opus 5.5 (1M context) <[email protected]>
…line (#190 review N04)

The validation result is timely only if the first signed commit holding the
exact governing bytes and the first holding its governing evaluate line both
reached origin/main before 09:30 ET on N0; a pre-N0 placeholder under the same
path no longer dates a later result. Placeholder and late-line regressions added.

Co-Authored-By: Claude Opus 5.5 (1M context) <[email protected]>
…190 review N05)

Every final holdout run-log line now records its completion's fields, and
run.py complete rebuilds a completion a kill left unwritten from that line,
bound to its results sha256, snapshot, rows and exposure; it is idempotent and
refuses a pending step or a changed result.

Co-Authored-By: Claude Opus 5.5 (1M context) <[email protected]>
…nput vintages (#190 review F08)

universe_and_identity.vintage_scope states what is fetched when and that no
decision-time availability or revision rule is enforced (the provider serves no
point-in-time vintages); every result carries claims_scope and the first and
last fetch vintage it read.

Co-Authored-By: Claude Opus 5.5 (1M context) <[email protected]>
… measured allowance (#190 review F12)

The margin now prices pages at the slower of the pinned rate and the native dry
run's measured seconds per page, the trading API at its own pinned limit, plus
pinned retry and evaluation-and-merge allowances. The transport paces each host
at its own rate. The dry run records its measurement from its seal, and every
frozen run refuses unless the pinned allowance bounds it. The allowance values
remain open decisions for a reviewed PR before the count-only run.

Co-Authored-By: Claude Opus 5.5 (1M context) <[email protected]>
… freeze status (#190 review N08, F15)

The overview names every coverage threshold, says a post-freeze code change
outside study/fetch/ cannot run, qualifies the crash and retry claim and reflects
the round-15 rules. study_code_status.freeze_acceptance lists each freeze
precondition with its status and evidence; artifact presence is not completion.

Co-Authored-By: Claude Opus 5.5 (1M context) <[email protected]>
…ew, not frozen)

Records the round-15 synthetic suite (329 tests, 0 failures, 0 errors, 0 skips)
at draft tree 0e0a53f, the F11/F13 no-change entry, the updated study status
with its open decisions, and the runtime lock's verification note. The protocol
stays a draft; a cross-family pre-outcome review of this tree must follow.

Co-Authored-By: Claude Opus 5.5 (1M context) <[email protected]>
…olution

manifests/evidence.json is main's registry with the stale digests
refreshed. On the merged tree, the study suite under runtime.lock's
test_command runs 329 tests OK. validate.py, evidence_manifest.py
--check, validate_convergence.py --all-recorded,
test_osv_lockfile_coverage and test_mover_v3_data all pass.

Co-Authored-By: Claude Opus 5.5 (1M context) <[email protected]>
… Fed holiday schedule

Resolves round 15's F06 open decision with a fixed floor of 20 occupied
entry sessions per item or H1-D group, alongside the existing
bootstrap-implied rule: core/stats.py inference_check and mde_excluded
take an `occupied` argument and report insufficient_occupied_sessions;
core/evaluate.py passes its already-computed occupied_sessions through;
core/count_unit.py adds the count_unit key the round-15 author noted
would be needed (:sessions companions to the six count keys), so the
holdout extension decision also sees the floor; core/params.py and
protocol-core-draft.json's minimum_sample record the parameter beside
the existing minima with its rationale.

Reconciles round 15's N01 entry with the committed 2015-09-01
session-calendar start: the 60-session reach before 2016-01-04 is met
at 2015-10-07 (verified against the committed calendar), and
check_study_reach already tests it.

Adds the Federal Reserve's own K.8 holiday-schedule citation beside the
existing SEC and FINRA sources in cost_model.fee_charge_dates, for the
Columbus Day / Veterans Day settlement-day rule (documentation only;
the source confirms the encoded rule and the code needed no change).

Each item gets a dated round-16 review_record entry. New tests cover a
group one below the 20-session floor and one at it, plus the floor in
isolation and the extension-decision key; verified to fail against the
pre-round-16 code via a source-only git stash.

Co-Authored-By: Claude Opus 5.5 (1M context) <[email protected]>
manifests/evidence.json is main's registry with the stale digests
refreshed. On the merged tree, the study suite runs 333 tests OK under
runtime.lock's test_command. validate.py, evidence_manifest.py --check,
validate_convergence.py --all-recorded, test_osv_lockfile_coverage and
test_mover_v3_data all pass.

Co-Authored-By: Claude Opus 5.5 (1M context) <[email protected]>
… marker fix)

The previous merge landed while main was red: test_adoption_docs_consistency
failed from 9bdce90 until dcd6f0c, and that test failed CI on dec9034.
This merge brings in the fix; the docs-consistency, OSV coverage and v3 data
tests pass. No file under blueprints/us-equities/mover-v3 changes.

Co-Authored-By: Claude Opus 5.5 (1M context) <[email protected]>
@seathatflowsinourveins
seathatflowsinourveins merged commit 269602b into main Sep 25, 2026
23 checks passed
@seathatflowsinourveins
seathatflowsinourveins deleted the claude/mover-v3-core-study-20260924 branch September 25, 2026 19:24
seathatflowsinourveins added a commit that referenced this pull request Sep 25, 2026
… incentive board and data lake, and the recounted WSL host (#288)

- simulation: 866 to 884 fills per min at 70 ms exact release, 30 of 30
  minutes, and 672 at 1 s (#254, sim-capacity/receipts/20260925-elite-tier.json).
- paper: adds the margin financing model (#243); still blocked on the
  paper keys (HTTP 401).
- mover-early-entry-studies: v1 to v3, with the v3 core merged (#190) and not
  frozen.
- New gates:
  - incentive-board-forward (#187, #220): 0 orders;
  - data-lake-source (#208): minute-bar pilot not run.
- wsl-workstation-host: the foundation lane's wording. Counts were recounted
  on main 0074a0c by the last independent_session verdict per receipt,
  superseded excluded: 69 receipts, 56 agree, 1 needs changes, 0 awaiting
  review, 12 superseded (#285).

The foundation lane acked the strings and the recount rule.

Co-authored-by: Scout <scout@local>
Co-authored-by: Claude Opus 5.5 (1M context) <[email protected]>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

lane:trading Trading lane: sim, paper and live north star

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant