Skip to content

Claude/phase 8.1 point in time - #159

Merged
strycker merged 26 commits into
mainfrom
claude/phase-8.1-point-in-time
Sep 30, 2026
Merged

strycker merged 26 commits into
mainfrom
claude/phase-8.1-point-in-time

Conversation

@strycker

Copy link
Copy Markdown
Owner

No description provided.

… stale-warns, simple allocation table

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_018uY2PDfrfhs9KL6vSbBAvB
…grate + D-04

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_018uY2PDfrfhs9KL6vSbBAvB
…, PIT vacuity guard, sidecars); STATE planned

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_018uY2PDfrfhs9KL6vSbBAvB
…spine

- config: top-level publication_lags table for every emittable column
  (m2sl 1, totalsl 2, div_yield 3, fred_gdp fallback 3, research derived,
  agency vintage-aligned) plus report.staleness_grace_days: 7
- publication_lags.py: lag_table (validates, rejects fred_monthly shift),
  apply_publication_lags (timestamp shift, raises on unlisted/derived/vintage),
  lag marker helpers
- build_monthly_spine lags splice_input once; research series and
  monthly_raw are built from the lagged frame
- test_platform_point_in_time.py: truncation-by-poisoning proof through the
  real build, detector self-test (div_yield 0, bypassed lag), floor and
  completeness checks

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_018uY2PDfrfhs9KL6vSbBAvB
…merge guard

- ALFRED: at every month-end 1970-1980 the aligned value is the latest
  reference period released by then, in both eras (red: 40 month-ends,
  Q1 visible at Feb 28 under the shift(1) fallback)
- last_complete_month_end and a last-day-of-month build without that row
- publication_lags.json marker guard: missing/different raises before any
  write, matching merges, empty dir writes the marker
- fred_monthly shift: true makes lag_table raise

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_018uY2PDfrfhs9KL6vSbBAvB
…-marker merge guard

- _shift_fallback_series takes lag; align_agency_monthly passes each series'
  publication_lags fallback_months and raises for an agency name without a
  vintage entry (pre-vintage fred_gdp 1 -> 3, ruling 1)
- remove the fred_monthly shift flag and macro_monthly's shift branch
  (every flag was false: byte-identical output); lag_table rejects shift
- last_complete_month_end: a build never writes the running month
- build_monthly_spine refuses to merge onto a monthly_raw whose
  publication_lags.json marker is missing or different, before any write,
  and writes the marker after a successful save
- docs/vintage_alignment.md: CR-03 gap closed in code; GDP fallback note

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_018uY2PDfrfhs9KL6vSbBAvB
…g of 46

- gate_tiers: DECLARED_TRIAL_CEILING = 46 (DECISIONS G-05) for the live
  count; RECORDED_TRIAL_CEILING = 44 and the historical pins unchanged
- joint_diagnostics_record: 44 <= live <= 46; 08-10's two rows exist in
  order at adjacent positions (not necessarily last); record pins 42/44
  and adr_0002_ceiling == 44 kept

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_018uY2PDfrfhs9KL6vSbBAvB
- CLAUDE.md layout tree + current status, README badge + feature list
  (test_docs_recorded_counts pins them to pytest --collect-only)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_018uY2PDfrfhs9KL6vSbBAvB
…refusal

- stale_series/expected_month_end judge each publication_lags series against the run date
  (report.staleness_grace_days, default 7); the banner warns and the report still writes
- MAX_SCORING_LAG_MONTHS and its refusal are removed (DECISIONS A-12 supersedes A-07)
- tests: nan_tail=4 banner, grace boundary, pure stale_series, banner rendering

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_018uY2PDfrfhs9KL6vSbBAvB
…k's executed book

- class | ticker | target % | last week % | change table under the trades heading,
  printed with or without accounts; cash row FZFXX is the residual
- load_last_executed_weights reads the previous run's executed book before it is overwritten
- the same-month re-run test now compares sections without the table's last-week column

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_018uY2PDfrfhs9KL6vSbBAvB
…3-line account how-to; counts 2550

- a late series puts a STALE DATA banner at the top and the report still runs
- how to add a gitignored config/accounts/<name>.yaml and list it under report.accounts
- recorded test counts updated to the live collection (2550)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_018uY2PDfrfhs9KL6vSbBAvB
…plan summary

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_018uY2PDfrfhs9KL6vSbBAvB
- run_full_backtest_evaluation on HEAD monthly_features/monthly_raw with NO_REGISTRY
- report, KPI table and both equity curves under outputs/reports/platform/pit_08.1/before
- registry 44 before and after, sha256 c957e8fd...088ad unchanged

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_018uY2PDfrfhs9KL6vSbBAvB
- scripts/migrate_publication_lags.py: one-off offline migration (merge=False
  + publication_lags.json marker; refuses a second run)
- div_yield lag 3, fred_m2sl 1, fred_totalsl 2 via apply_publication_lags;
  every lag-0 column byte-equal to HEAD; 2026-08-31 row holds HEAD's
  div_yield@05-31, m2sl@07-31, totalsl@06-30 exactly
- equities_tr rebuilt from lagged div_yield on HEAD's merge-preserved base
  (HEAD = unlagged rebuild x 1790.04, proven constant to rel 1e-9)
- fred_gdp: pre-vintage fallback lag 3 (= HEAD two month-ends earlier);
  post-vintage chain re-anchored (x 0.996526657709); live ALFRED equals the
  HEAD-derived expectation in all 5 agency series, zero revision drift

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_018uY2PDfrfhs9KL6vSbBAvB
…ed raw

- scripts/recompute_monthly_features.py (offline): dev 708 rows <= 2020-12,
  holdout 68 rows 2021-01..2026-08; index, columns and boundary unchanged
- only lag-explained columns move: div_yield, fred_m2sl, fred_totalsl,
  fred_gdp, equities_tr and its 4 derived features (trailing_return_1m/3m,
  realized_vol_1m/3m); recompute on HEAD's raw reproduces HEAD exactly

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_018uY2PDfrfhs9KL6vSbBAvB
- 07-DEPENDENCE 0.2 recipe: label_regimes(dev_features[ref_cols], cfg) on the
  10 frozen columns (_reference_label_columns, first decision 1972-01-31);
  the frozen set is unchanged by the lags
- determinism gate: the same call on HEAD's features reproduces HEAD's labels
  exactly and its confidences at rel 1e-9
- 695 labels 1963-02..2020-12 (unchanged span); 2 months move:
  1974-10 5 -> 0 and 1991-04 1 -> 5; state 4's third profile term
  changes (low cape_shiller -> high div_yield)
- regime_labels_2 (classifier #2, DEFER) untouched and now stale

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_018uY2PDfrfhs9KL6vSbBAvB
- platform_snapshot.py export --names monthly_raw monthly_features: the
  2026-09-08 snapshot was unlagged (20 cols); a restore would have
  reintroduced unlagged data. Now 47 / 55 cols through 2026-08-31, lagged
- the pre-existing 0-row daily_raw snapshot file is left as it was; the
  new manifest lists only the two exported names

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_018uY2PDfrfhs9KL6vSbBAvB
…oves

Rule 1 (verifies a Phase 7/8 record -> pre-8.1 data via git show 06002f9):
- conftest: pre_pit_platform_dir fixture (skips if the commit is unreachable)
- sojourn_lag TestHeadlinePinOnRealDevInputs: pins unchanged (9.5/4.0/2.375)
- subsample_stability_record: module reads pre-8.1 checkpoints; pins unchanged
  (regime_labels_2 is DEFER and stale on the lagged data)

Rule 2 (property of the current data, lag-explained, dated old -> new notes):
- plotting_regime EXPECTED_CHANGE_POINTS 7 -> 9 points, min active 5 -> 4
  (div_yield lag 3; equities_tr's 1m features start 1962-05)
- report_serving CR-01 real-data test: label counts {0:40,1:228} ->
  {0:41,1:227}; belief 0.300/0.293/0.163 -> 0.306/0.290/0.162; old[3]
  0.369 -> 0.370. The CR-01 prior flip survives (argmax 0 new, 3 old)

Full suite: 2550 passed.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_018uY2PDfrfhs9KL6vSbBAvB
…> 46)

- Two append-only registry rows tagged 08.1-pit-tilt-vs-ablation (strategy, ablation)
- Backtest and model-metrics outputs rewritten on the migrated point-in-time data
- Window 1972-01-31..2020-12-31, 588 steps, 10 bps

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_018uY2PDfrfhs9KL6vSbBAvB
…row updates

- E-06: before|after table, DSR at 46 vs hurdle 2.2442, the one yes/no sentence
- E-07 (DEFER to 8.2): monthly-average-price returns caveat
- D-07: pre-vintage fred_gdp fallback lag 3; D-05 open -> built with table summary
- A-07 superseded by A-12; A-11/A-12 built; A-03 deferred to 8.2; E-04 -> E-06
- G-05: budget spent 44 -> 46, tag 08.1-pit-tilt-vs-ablation

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_018uY2PDfrfhs9KL6vSbBAvB
…ter answer

- E-06 answer NO: strategy TLW 3.8909 vs ablation 4.0424 (delta -0.1515), 10 bps, same run
- Registry 44 -> 46, sha256 1d893af3...d02d; suite 2550 passed; no Task 4 re-pins

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_018uY2PDfrfhs9KL6vSbBAvB
…E/ROADMAP executed 3/3

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_018uY2PDfrfhs9KL6vSbBAvB
…tays advisory in 8.2

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_018uY2PDfrfhs9KL6vSbBAvB
@strycker
strycker merged commit c8ed72d into main Sep 30, 2026
7 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants