docs(sec): post-reparse verification and cutover recommendation

Closes the parity investigation: prod reparse runs 6+7 reconciled against the
dry run, the collision check that caught the BEN regression (and its residue --
36 historical 53-week-drift rows, deliberately left), and the 2026-07-24 parity
report diffed against the 2026-07-23 baseline. Candidate coverage 482 -> 504 of
511 with the gap fully explained (PSKY/Q new registrants, FITB guard-tripped
with no revenue), agreement unchanged where both sides exist, and the remaining
deltas are documented definition differences. Includes the after-report and a
correction to the seventh pass (FITB loses its score, not just one input).
Recommends approving the A5 cutover with KLAC as the one carried caveat.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
2026-07-24 12:29:13 +02:00
co-authored by Claude Opus 4.8
parent 3d42ca7241
commit 2e083d3bb9
2 changed files with 20698 additions and 0 deletions
@@ -853,3 +853,73 @@ track the parser's `SnapshotRow`, and only one of them is now enforced by a test
PSKY and Q need nothing — they are new registrants without enough filing history, which is
correct behaviour.
---
# Closing — post-reparse verification (2026-07-24)
## Production reparse
Two apply runs against prod (`scripts/reparse_fundamentals.py --apply`):
- **Run 6** (all fixes through the seventh pass): 262 inserted, 28,664 rewritten —
99.4% of which was backfilling the new `weighted_avg_diluted_shares` column; the
behavioural churn matched the dry run exactly. The five duration facts clustering at
190234 changed rows each is the 4-4-5 Q3 recovery signature. `accepted_at` changed on
only 76 rows (0.25%), confirming the tz-comparison fix works against real Postgres.
- **Run 7** (after the fiscal-year-end fix below): 3 inserted, 322 rewritten — BEN, DELL,
and boundary-year relabels for 53-week filers whose derived MMDD shifted a few days.
`cik_updates: 1` on run 6 was the XOM pin taking effect; XOM now has 68 snapshot rows,
latest period end 2026-03-31.
## Regression caught by the collision check — and its fix
The before/after key-collision query (~130 rows max 6 → 44 rows all 2) surfaced one real
regression: **BEN**. `submissions.fiscalYearEnd` declares `1231` while every Franklin
Resources 10-K ends 09-30, so `_period_identity` — which trusted the declared value — put
BEN's real fiscal Q1 zero days from the claimed year end (no band matched) and labelled its
fiscal Q2 as Q1. The collision discarded a period and BEN lost TTM EPS and revenue growth it
had before the branch. Fixed in `3d42ca7`: `resolve_fiscal_year_end()` prefers the issuer's
own most recent 10-K reportDate (which *is* the fiscal year end by definition) and treats
the declared field as fallback. Full-universe scan: 2 of 506 issuers mis-declare (BEN 91d,
DELL 29d); both now derive correctly (BEN rg 3.8243 vs legacy 3.82; DELL 38.5735 vs 38.57).
Residual collisions after run 7: 36 rows, all count-2, **latest year 2023** — the 53-week
drift class (AVY/CDNS/RVTY/JNJ/TDY/DPZ at 56-year intervals). Newest-wins degrades one
historical FY row; no current period is affected. Left alone deliberately: eliminating them
means modelling each filer's actual 52/53-week calendar per year, for rows feeding no
current metric.
## The verdict: 2026-07-24 parity report vs the 2026-07-23 baseline
| metric | baseline | after | |
|---|---|---|---|
| candidate scored | 482 | **504** | legacy scores 507; gap = PSKY, Q (new registrants) + FITB |
| revenue_growth candidate available | 442 | **489** | banks, REITs, 4-4-5 recovered |
| pe_ratio candidate available | 432 | **452** | net of the split-guard nulls |
| revenue_growth median abs delta | 0.0038 | **0.0038** | 47 names added at unchanged agreement |
| pe_ratio median / p95 abs delta | 0.5883 / 7.73 | **0.5576 / 6.03** | corrupted outliers gone |
Revenue `material_differences` rose 84 → 96: the newly compared names include the cases
where **legacy is the wrong side** (JPM 108.98% vs 3.34%, PPL 58.81% vs 8.34%, FCX 24.23%
vs +5.44%). Material is symmetric; these flag the provider being corrected.
The split guard is visible in the report: BKNG (1.10), COF, TPL, AMCR, WAT all null P/E now.
**KLAC (6.19) is the one known-wrong value left** — the post-filing split documented as
unfixable without a corporate-actions source.
**Correction to the seventh pass:** the claim that guard-tripped issuers "keep their
fundamental score, losing one of three inputs" fails for **FITB**, the one name that also
lacks revenue growth (its recent filings tag only ASC-606 fee-income fragments, then nothing)
— nulling its contaminated P/E (Comerica merger, 661M → 902M shares) drops it to one metric
and no score. Accepted: the composite renormalises, and legacy's 58% "revenue growth" for a
bank was itself junk.
## Recommendation
The A5 gate evidence now supports approving the cutover: coverage within 3 of legacy with
every gap explained, agreement essentially exact where both sides exist, every corrupted
value either fixed or deliberately nulled with a caveat, and the remaining score deltas are
documented definition differences — called out, not averaged away, as the plan requires.
Carry KLAC as the one known caveat in the approval note.