Files
signal-platform/reports
dennisthiessenandClaude Opus 4.8 0e556d8a43 fix(sec): keep the market-cap fallback through an amendment merge
Found in review. _merge_amendments rebuilds a period from _MERGED_FIELDS +
_CARRIED_FIELDS alone, so a column in neither list is absent from the merged
row, not just stale — and callers read it with getattr(..., None), which
silently yields None. weighted_avg_diluted_shares was never added when the
market-cap fallback landed (_SNAPSHOT_COLS in the importer was updated, its
counterpart in the derivation was not).

The failure needed both of this branch's fixes at once: a multi-class issuer
with a partial amendment on its latest period (META with a Part-III-only
10-K/A) would silently lose market cap and FCF yield again.

Adds the field, a regression test for that case, and a guard test asserting
the merge/carry lists cover every SnapshotRow field, so the next column added
fails loudly rather than losing data quietly. Confirmed the guard catches the
original bug.

Also from review:
- Expose pe_caveat in the valuation payload, so a P/E suppressed by split
  contamination says why instead of looking like missing data (the caveat was
  set but never read).
- no_xbrl_filings now names both causes; the old text advised pinning a CIK
  override, which is wrong for a genuine new registrant that simply has not
  filed yet and clears itself.
- Document that fiscalYearEnd is the issuer's current calendar, so a fiscal-
  year-end change degrades old periods (fallback/newest-wins), not current ones.
- Parser-level tests for _select_weighted_avg_shares (shortest-span-wins and
  concept priority), which only had derivation-level coverage.

823 unit tests pass.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-24 10:50:17 +02:00
..
2026-07-18 15:29:10 +02:00
2026-07-13 14:07:42 +02:00
2026-07-13 14:07:42 +02:00
2026-07-17 15:22:58 +02:00
2026-07-17 17:42:13 +02:00
2026-07-18 16:57:19 +02:00
2026-07-18 16:57:19 +02:00
2026-07-19 10:40:19 +02:00
2026-07-18 15:29:10 +02:00
2026-07-18 15:29:10 +02:00
2026-07-13 10:58:40 +02:00
2026-07-13 10:58:40 +02:00
2026-07-13 08:18:40 +02:00
2026-07-13 08:18:40 +02:00

Backtest report index

Reports dated 2026-07-11 or earlier are the historical production research record and remain untouched.

The completed 2026-07-12/13 S/R and Gate Target Ladder research is preserved as compact decision evidence instead of full per-arm replay output:

  • sr-v2-validation-comparison.json and sr-v2-validation-cohorts.csv record the held-out detector comparison.
  • sr-full-production-vs-candidate-comparison.json and its cohort CSV record the full-period clean-structure replacement decision.
  • sr-explicit-target-ladder-comparison.json and its cohort CSV record exact GTL parity: 202,765 candidates, 1,086 qualified setups, 321 book trades, Sharpe 2.03, CAGR 50.0%, and max drawdown 21.4% in both arms.
  • The three backtest-20260713-gtl-*.json/.md pairs record the tuning, confirmation, and strength-sensitivity decisions. No stable improvement was found, so the production GTL stayed frozen.

The large backtest-sr-*.json replay files were removed after consolidation. They duplicated hundreds of thousands of candidate rows while adding no decision information beyond the compact comparisons and the narrative in docs/research/sr-levels-and-exits.md. The original raw files remain available in Git history if a forensic reconstruction is ever necessary.

The initial untracked backtest-20260712-sr-detector-rewrite.json is local-only and is intentionally not part of the repository.

The 2026-07-17 post-stop re-entry decision is preserved in daily_reentry_matrix.json. It is the canonical source for the nine-policy daily replay, production-like full-universe ranking, the disjoint 2025+ book, and the cost/capacity sensitivity matrix. The interpretation and production decision live in docs/research/post-stop-reentry.md.

The earlier post-stop-reentry-20260717.json, post-stop-cooldown-sweep-20260717.json, and gate-protected-stop-20260717.json reports were removed as superseded intermediate experiments. They used weekly/hybrid entry cadence or tested the rejected stop-adjustment path, and add no decision evidence beyond the final daily matrix and narrative. Their matching one-off runners were removed too. All remain recoverable from Git history. Rebuildable candidate pickle caches are intentionally ignored and must not be committed.

Phase B fip breadth IC (2026-07-18/19) — compact evidence

Canonical artifacts:

  • fip-reconcile-20260719-000520.json — single-sourced authoritative ICs (unconditional liquid fip, tiers, prod-subset, mom-conditional, context signals). Membership symbol dumps stripped after the decision; narrative in docs/research/fip-breadth-ic.md.
  • fip-breadth-20260718-211440-fingerprint.json — prod-snapshot fingerprint pass (fip IC 0.045 / t 2.91).

Removed as superseded / dangerous intermediate noise (recoverable from Git):

  • fip-breadth-20260718-211440-breadth.json (+ wrapper) — orphaned +0.0575 / t +5.12 from racing a partial research.sqlite. Kept out of the tree so it cannot be re-mythologized.
  • fip-breadth-20260718-194828*.json — fingerprint-only partial run.
  • fip-breadth-diagnostics-20260718-213705.json and …-213908.json — dual-path diagnostics superseded by the single-sourced reconcile.