Skip to content

Mover v3 freeze inputs: LPS 2019 read, ABJK 2022 unavailable, independent Codex review in progress (2026-09-24) #174

Open

Description

@seathatflowsinourveins

Handoff from the Mac coordinator session (2026-09-24) to the Mover v3 owners. No files under blueprints/us-equities/mover-v3/, adaptive-paper/ or catalogs/saturation/ were edited. This issue mirrors a cross-session message so other clients, hosts and later sessions see it.

1. Freeze precondition: direct reads of LPS 2019 and ABJK 2022

LPS 2019 — read in full. Lou, Polk & Skouras, A tug of war: Overnight versus intraday expected returns, JFE 134(1):192-213 (doi:10.1016/j.jfineco.2019.03.011), from the author-posted PDF (personal.lse.ac.uk/polk/research/TugOfWar.pdf, sha256 caa7108c…). Sample facts that bound the claims: 1993-2013 US stocks; excludes stocks priced below $5 and the bottom NYSE size quintile (p.196); value-weighted; monthly sorts, one-month holds; open = 9:30-10:00 volume-weighted price (not the opening auction print); results before costs (p.193); no daily-mover, event-level or multi-session-hold result.

Claim (location at 4911baf) Verdict Minimal change
README.md:49 "overnight and intraday legs behave asymmetrically… evidence comes from large, liquid names" partially supported (opposite-signed legs "typically"; Table 1 overnight-sorted +3.47%/mo overnight vs −3.24%/mo intraday; reversal portfolio +0.93%/mo overnight t=4.28 vs −1.05%/mo intraday t=−3.25, §4.2.7) replace "large, liquid" with the exact filter (≥$5, outside bottom NYSE quintile, value-weighted, 1993-2013, before costs)
README.md:64-65 "monthly, cross-sectional and mostly large-cap" supported add "excludes stocks under $5"
README.md:113 / $.item_set.items[2].why_kept "neither leg has a sourced direction for movers" supported optional: "no mover-specific sign"
README.md:175-177 "H3 rests on LPS 2019 and ABJK 2022 (contested)" partially supported (two-sidedness does not depend on either paper) "LPS 2019 (read 2026-09-24; value-weighted, ≥$5, 1993-2013, before costs)"; drop ABJK or mark unread
$.item_set.items[4].why_kept "(LPS 2019, ABJK 2022) concern large, liquid names and give no sign for movers" partially supported; "no sign" only narrowly (indirect reversal-portfolio hint) exact filter + period; cite +0.93%/−1.05% monthly as an indirect prior at most

ABJK 2022 — not obtained. Akbas, Boehmer, Jiang & Koch, JFE 145(3):850-875 (doi:10.1016/j.jfineco.2021.09.019; SSRN 3324880) is closed access; SSRN and ScienceDirect returned 403 and no block was bypassed. To close freeze_preconditions[1]: remove the ABJK claims (README.md:49, :175; items[4]) or read it with an institutional/SSRN account.

2. Freeze precondition: independent pre-outcome review (different model family)

Running now with Codex CLI (codex exec -s read-only, gpt-6-astra) over protocol-core-draft.json and the README freeze preconditions; it reads no data and computes no outcomes. Its dated review record will be added as a comment here; resolving findings stays with the protocol owners.

3. Facts verified 2026-09-24 (for the data and execution sections)

  • Alpaca Trading API responses carry X-Ratelimit-Limit: 200 (per minute); SIP bars incl. 1-minute bars from 04:00 ET pre-market returned HTTP 200 on an entitled account.
  • FINRA Rule 4210 amendments removing the PDT designation: SEC approved 2026-04-14 (SR-FINRA-2025-017), effective 2026-06-04, broker phase-in until 2027-10-20 (Regulatory Notice 26-10).
  • Alpaca bars adjustment=split applies splits dated after the bar (look-ahead risk for price filters such as sub-$5 screens); official open/close prints come from the auctions endpoint.
  • nautilus_trader 2.0.0rc5 is a pre-release; its Rust IB adapter denies stock orders (Rust IB adapter: execution client venue IB never matches instrument venue SMART, so every stock order is denied locally nautechsystems/nautilus_trader#4983, venue IB vs SMART); 1.231.0 is the latest stable for the IB path. IBC was retired 2026-09-01; ib_insync is archived (ib_async 2.1.0 is the maintained fork).

🤖 Generated with Claude Code

Activity

  1. seathatflowsinourveins commented on Sep 24, 2026

    @seathatflowsinourveins
    CollaboratorAuthor

    Update 2026-09-24: the independent pre-outcome review from a different model family (Codex CLI) could not run today because the Codex client is unavailable until 2026-09-29 (usage limit). The review prompt is ready and read-only; it will run as soon as the client is available, or earlier if more capacity is added. Freeze precondition 1 therefore remains open. Literature reads above (precondition 2) are complete for LPS 2019; ABJK 2022 still needs removal or a direct read.

  2. seathatflowsinourveins commented on Sep 24, 2026

    @seathatflowsinourveins
    CollaboratorAuthor

    Handoff to the trading lane (from the Mac coordinator session, 2026-09-24 ~10:10 ET; the user assigned lanes on agent-ecosystem#28). This session is closing out; the items below are the trading lane's to continue.

    1. Freeze precondition 1 — independent pre-outcome review (different model family): still open. The read-only Codex prompt is ready (review of protocol-core-draft.json + README freeze preconditions; no data, no outcomes). It could not run on 2026-09-24 because the Codex client was at its usage limit; the user is signing in with another account. Run it as codex exec -s read-only -C <native-agent-stack checkout> -o <review.md> "<prompt>" < /dev/null (stdin must be closed or codex exec waits for input), then record and resolve its findings in a dated record.
    2. Freeze precondition 2 — literature: LPS 2019 read (verdicts and minimal wording changes in the first comment above). ABJK 2022: remove the claims or read it with the user's own access.
    3. macOS engine evidence landed: macOS arm64 SYN evidence for the adaptive-paper engine and mover trial mode #176 (NautilusTrader 2.0.0rc5 + alpaca-py 0.44.0 locked runtime on an M5 Pro: 732 adaptive-paper tests, 17 offline fault cases, mover SYN trial flat and reconciled, 180-order capacity run peaking at 179/min; no broker contact). Make tests hermetic against global and system git config #181 made the test suite hermetic against global git config (fixes Scratch-repo tests inherit global git hooks (gitleaks pre-commit) and fail on hosts that adopt them #179).
    4. Paper lane on the Mac (not started here): a dedicated Alpaca paper account for the Mac exists; its keys are in the private 0600 env file ~/.config/native-agent-stack/alpaca-paper.env (outside every checkout; Claude's sandbox denies reads of that directory, so the runner must be launched explicitly outside it). Observed limits: trading 200 requests/min, market data 10,000/min; SIP entitled incl. 04:00 ET pre-market. A first paper plumbing check (liquid names, one-share orders, ledger/reconciliation/kill switch) needs the offline fault cases first, per docs/paper-lane-policy.md. Mover trials wait for the frozen study's rule and exit.
    5. Broker lanes (research 2026-09-24, not a decision record): research data on Alpaca SIP; simulation in NautilusTrader with a pessimistic fill model; IBKR (IB Gateway, Apple Silicon build) for paper and later live once its account and data subscriptions exist, with NautilusTrader 1.231.0 on the IB path while upstream #4983 blocks 2.0.0rc5 stock orders; Alpaca paper first on the Mac by user choice. Live remains gated by the user's live-go decision.

    🤖 Generated with Claude Code

  3. seathatflowsinourveins commented on Sep 24, 2026

    @seathatflowsinourveins
    CollaboratorAuthor

    Claim (2026-09-24 10:20 ET), at the user's direct request to the Mac coordinator session:

    Owners of #169 / Mover v3: reply here if any of this collides with work in progress.

    🤖 Generated with Claude Code

  4. seathatflowsinourveins commented on Sep 24, 2026

    @seathatflowsinourveins
    CollaboratorAuthor

    Independent pre-outcome review record (freeze precondition 1) — produced by Codex CLI (GPT-6, OpenAI family; different from the Claude author), read-only, no data or outcomes. Reviewed native-agent-stack at 6f7a77c.

    Independent pre-outcome review — 2026-09-24

    Reviewer: Codex CLI 0.155.0-alpha.16.3; model: GPT-6, OpenAI family. The exact runtime variant is not exposed in this session. This is a different model family from the Claude author.

    Scope: protocol-core-draft.json (“Core”) and README.md, particularly its freeze preconditions.

    Reviewed SHA-256:

    • Core: 7274c29ed1f902cbf9605e049bfafd1856f2fe7d76d5fbb6962c4ba38a757af4
    • README: 5728609b55cf20969342f7bccbc5dd14bf41af0dbcb6a540eaba9d400891b6d2

    Access declaration: No sealed data or outcome datasets/results files were read. No market data was fetched, no outcome was computed, and no files were modified. Historical aggregate summaries embedded in the authorized documents were visible.

    Verdict: not ready to freeze. The draft specifies a substantially bounded study, but accounting, coverage selection, sample counting and inference still contain material defects.

    Findings

    Locations below refer to the reviewed file hashes; JSON paths identify the governing provisions.

    ID Severity Location Finding Why it matters Recommended resolution
    F01 blocker Core:186, $.populations.corporate_actions; :194, $.arms.c_decomposition The “cash” residual depends on the exit session’s daily close. For an overnight leg ending at open(x), its value can therefore change with the subsequent close(x). It is not generally the fixed dividend entitlement. Additionally, Alpaca’s adjustment=all includes spin-offs, which this formula can misclassify as cash. Validity; look-ahead; execution realism. The central overnight/intraday comparison mixes the legs, and tradable returns can book incorrect distributions. Use corporate-action cash entitlements and explicit split/share accounting. Specify spin-off treatment separately. Require synthetic accounting identities showing that an overnight leg is invariant to prices after its endpoint. Alpaca adjustment documentation.
    F02 blocker Core:352, $.cost_model.lookup.cell_key; compare :169, $.populations.formulas Cost-tier cumulative volume includes every minute bar whose start precedes the fill timestamp. A fill partway through a minute therefore uses that minute’s completed volume before it was available. Look-ahead; cost realism. Future volume can move a fill into a cheaper liquidity tier. The correctly completed-bar entry-sizing rule does not repair this separate calculation. Require bar_start + 60 seconds <= fill_time, or a genuinely contemporaneous cumulative-volume source. Test fills between minute boundaries.
    F03 blocker Core:200, $.coverage_rule.year_rule; README:133 The official-close numerator is all sampled sessions with an accepted close; the denominator is restricted to sessions with a daily bar and raw close ≥$1. The numerator is not explicitly restricted to that same cohort. None of the three coverage rates defines zero-denominator behavior. Coverage rule; implementability. Coverage can be inflated, potentially above 100%, or become undefined while controlling whether the entire study proceeds. Define one denominator cohort and its qualifying numerator subset. Specify deterministic fail-closed treatment of empty or unavailable denominators; add boundary cases.
    F04 blocker Core:204, $.coverage_rule.decided_by_code; :153, $.exposure_registry.pre_freeze_access_path.runs; :475, $.run_discipline.study_code Only the coverage_rule object is hash-bound. Its sampling, population, official-print, quote and identity definitions reside elsewhere. The governing pre-freeze count-run tree is recorded, but equality with the frozen definitions/tree is not required. Coverage selection; preregistration integrity. Definitions can change after coverage rates are seen without triggering the stated hash refusal. Bind the governing count run to its complete specification, code and input manifest. At freeze require equality, permitting only enumerated metadata changes after rates are viewed.
    F05 blocker Core:229, $.chronology.holdout.count_unit; :169 and :186, formulas/accounting Counts omit some later exclusions from undefined split factors. An entry and exit quote can exist while required daily raw/split bars are absent; H3-c can have its official legs but lack the daily-bar factors needed to evaluate them. Power/MDE; stopping rule. Counts can reach the minimum and terminate extensions although fewer observations enter the statistic. Make count eligibility match final analyzability, using timestamps and availability flags without emitting outcome values. Use that same count for extensions, minima and MDE. Define missing terminal-merger bid behavior too.
    F06 blocker Core:400–402, $.statistics; :271, $.minimum_sample Trade/event minima do not require enough occupied entry sessions. Bootstrap draws can omit an entire H1 group or all observations of a cell. Empty/nonfinite replicates and zero-variance bootstrap tests have no complete rule; only the auxiliary normal-tail test specifies zero-variance behavior. Alpha; implementability. Undefined statistics can produce implementation-dependent p-values; naïve comparisons against NaN can make p artificially small. Freeze cluster eligibility and explicit empty-group, nonfinite and degenerate-test behavior. Undefined tests must not pass. Add concentrated-session and degenerate synthetic cases.
    F07 major Core:248, $.outcome_reporting.hypothesis_verdict; :31 and :63, primary estimands Any associated profitable cell can label the whole hypothesis supported. Low-MAX profitability does not establish high-minus-low underperformance; profitable intraday or overnight trading does not establish their difference. Validity; interpretation of multiple tests. A rejected profitability null can be presented as evidence for a different primary hypothesis. Give H1-D and H3-c their own primary-hypothesis verdicts. Report the three profitability verdicts separately, naming exactly which claim each supports.
    F08 major Core:161–162, $.universe_and_identity; :418, $.holdout_gate.prospective_collection asof=t resolves symbol identity, not the historical information vintage. Minute bars and per-event covariates can be acquired much later under count/read authorization; no cutoff for corrections or availability timestamps establishes what was observable at the decision. Point-in-time validity. Session-dated historical data are not automatically the data available then. Specify availability/vintage rules for every decision input. Retain prospective decision-time inputs under sealed collection, or explicitly limit claims to retrospective reconstruction and qualify revision exposure. Alpaca asof documentation.
    F09 major Core:156, $.exposure_registry.pre_freeze_access_path.identity_probe; :163, $.universe_and_identity.dedup Quote “matches” require only two nonempty responses. Bars/auctions require equality on common sessions without a minimum nonempty overlap. Ticker reuse may remain unverified. Separately, deduplication uses series continuity and current active status without a decision-time cutoff. Survivorship/asof identity. The probe can pass without demonstrating issuer identity, and historical membership can depend on later information. Require meaningful nonempty overlap and matching normalized identity/timestamp records. Specify treatment of unresolved reuse. Restrict dedup inputs to information available at the decision, or declare and bound its retrospective reconstruction role.
    F10 major Core:240, $.chronology.boundaries; :179, $.populations.terminal_exits.search_window H3-a receives no embargo because it is called same-session, but its exit may be delayed through E+5. Purging; dependence. Late development exits can overlap early validation entries. This does not itself expose the prospective holdout. Apply the boundary rule to H3-a’s actual permitted horizon, or define an exit convention that truly ends the position that session. Revisit its five-session bootstrap block rationale.
    F11 major Core:418–430, $.holdout_gate; :466–467, access-log purposes Collection must start at freeze, before validation finishes. The single refusal list nevertheless requires validation results and a nonempty validated-item list; no separate collect/amend authorization predicates are specified. Holdout integrity; implementability. Literal application prevents required early collection; a bypass requires an unstated exception. Define a purpose-specific authorization matrix. Permit collect/amend before validation while preserving the validation gate for count/read. Test collection before validation completes.
    F12 major Core:492, $.freeze_preconditions[5]; README:458 A request count divided by the documented rate-limit ceiling gives best-case elapsed time, not an upper bound. Achieved throughput, pagination, retries, storage, evaluation and merge time are not required inputs. The sampled candidate expression is also a planning bound, not a guaranteed maximum. Implementability. The immovable 40-session deadline can be missed despite passing the stated margin check. Require a conservative full-pipeline budget informed by count-only throughput evidence, with explicit uncertainty and overhead. Keep Trading and market-data quotas separate.
    F13 minor Core:149, pre-freeze access rule; :162, request shapes; :208, holdout breakpoints The blanket prohibition on using the pre-freeze snapshot in frozen evaluation conflicts with mandatory use of its part 2 for holdout breakpoint membership. Implementability; access scope. Two governing instructions disagree. State precisely which snapshot parts are forbidden inputs and authorize the part-2 exception explicitly.
    F14 note Core:286–341, $.minimum_detectable_effect; README:129 MDEs are specified, but most sigmas and DEFF=1.5 are assumptions. The stated H1 minimum corresponds to a 19.2-percentage-point planning MDE. H3-c’s units are log-return differences. Power/MDE. These are not demonstrated 80% power or evidence against the smaller literature effect. Preserve the disclosed limitation, label units accurately, and report occupied-session counts alongside observation counts.
    F15 note Core:486–497, $.freeze_preconditions; README:440–469 The requirements are promises, not completion evidence. The scoped file inventory showed four draft/README documents and no study tree, runtime lock, data files or run/access logs. Freeze readiness. This review cannot certify implementation, probes, coverage or collector operation. Supply the required committed artifacts and sanitized acceptance receipts before freeze; private snapshots need not be opened by this reviewer.

    Explicit checks

    • Are H1 and H3 falsifiable? At the item level, yes. H1-D tests high-minus-low <0; the three tradable means test >0; H3-c is two-sided and additionally requires validation-sign replication in holdout. Hypothesis-level reporting needs F07 corrected.

    • Are tests, alpha and MDE specified? Yes, with qualifications. The five-slot Holm family at 0.05, retaining p=1 for uncarried items, is structurally coherent conditional on valid individual p-values. Exposed validation is screening, so its separate Holm run does not itself double-spend prospective confirmatory alpha. F06 prevents fully specified inference. The percentile-bootstrap test is approximate; 100,000 draws improve Monte Carlo resolution, not statistical calibration. MDE is explicitly assumption-based.

    • Is every feature point-in-time at decision time? No such conclusion is justified yet. MAX21 excludes the event session, the price floor uses raw official prices, and entry sizing requires a completed bar. However, F02 is concrete future-volume use; F08–F09 leave availability and identity reconstruction unresolved. Common later split factors cancel in a(u)/a(v), so the supplied adjustment warning does not establish that this ratio itself leaks future splits.

    • Are embargo/purging adequate? Partly. Six sessions separate the specified E+5 terminal searches for the items receiving that embargo. H3-a’s exemption is inconsistent. No embargo at prospective N0 is reasonable given the years separating validation and holdout.

    • Are sealing and access logs sound? Promising design, not verified enforcement. Fixed N0, validation-before-N0, mandatory reading, deterministic retries, and pre-action authorization/post-action completion are useful controls. F04 and F11 need resolution. SHA-256 establishes integrity, not non-access; snapshot custody, permitted readers, and prevention of leakage through errors/logs remain unspecified acceptance evidence.

    • Is the coverage rule unambiguous? No. F03–F04 must be fixed. Its all-or-none consequence when 2020 fails is otherwise clear. Universe-wide quote coverage is explicitly not a mover-specific coverage guarantee.

    • Are freeze preconditions complete and verifiable? Not yet. Existing requirements still need receipts for literature reads/removals, sourced calendar/fees, sealed manifests, count-only coverage, identity probes, runtime/tests, collector scheduling and the updated exposure registry. Add explicit acceptance for F01–F12, particularly full dependency binding, analyzable counts, bootstrap edge cases, availability rules and purpose-specific authorization.

    The coordinator’s factual observations are consistent with the draft’s broad assumptions: 200/min Trading and 10,000/min historical market data are separate budgets; SIP entitlement does not establish historical quote/auction coverage. FINRA’s approval, effective and phase-in dates match the supplied facts; the README does not claim the change remains merely proposed. Alpaca market-data plans, FINRA Notice 26-10.

    Freeze verdict

    Not ready now. Conditionally eligible after correction and acceptance evidence.

    Blocking findings are F01–F06: distribution accounting, unfinished-bar volume, coverage denominator behavior, coverage dependency binding, analyzable sample counting, and undefined bootstrap cases.

    Major findings also require resolution before freeze under the protocol’s own “every finding resolved” precondition. This review supplies findings; it does not establish that the remaining freeze preconditions have passed.

    Next: a resolution PR with one dated review_record entry per finding (F01-F15), then a second Codex round to verify each resolution before any freeze.

    🤖 Generated with Claude Code

  5. seathatflowsinourveins commented on Sep 25, 2026

    @seathatflowsinourveins
    CollaboratorAuthor

    Status (2026-09-25, trading lane): the v3 study code (#190) merged as 269602b. It remains a draft: frozen_before_outcomes: false, and the evaluator refuses any holdout count until the freeze. This issue stays open because it tracks freeze inputs, and the freeze has not happened.

    Freeze preconditions still open, in order:

    1. The cross-family (Codex) pre-outcome review of the merged tree. Codex is unavailable until 2026-09-30.
    2. The F12 fetch-budget values, set from the native dry run by a reviewed PR before count-only.
    3. The freeze commit.

    The round-15 and round-16 resolutions of the 2026-09-24 review are summarized in #190. An independent Claude review found them ready for the cross-family review. The LPS 2019 and ABJK 2022 facts above remain inputs to that review.

    🤖 Generated with Claude Code

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions