verification report  ·  closed 31 July 2026out/e3/process_stats.jsonthe date the program closed, carried by both bundles

Verification of a ten-year backtest built from public fund filings

The strategy under test reads the holdings that large investment managers must report every quarter, ranks the managers on past results, and buys the single largest position of each of the best-ranked managers. Run over ten years, it reported a return of 30.07%out/e3/e3_verdict.jsonfield melt_walk_cagr.published of the verdict bundle a year.

It was rebuilt from the same public filings. Four defects were found in the data and corrected. The rebuilt portfolio returns 20.36%out/e3/e3_verdict.jsonfield canonical_cell.cagr_0bps of the verdict bundle a year before trading costs and 18.39%out/e3/e3_verdict.jsonfield canonical_cell.cagr_25bps of the verdict bundle after them, which is what an index fund returned over the same months for the same risk.

This page is the record of the work, not the result. It reports how the work was organised, what was read before it started, what the source data contained, which checks ran before any experiment, what each correction cost, what three unsupervised research loops produced, how the four pre-registered tests came out, and what the program got wrong. Every figure carries the file it was read from.

annual return over the same ten years

reported by the backtest 30.07%out/e3/e3_verdict.jsonfield melt_walk_cagr.published of the verdict bundle
rebuilt, before trading costs 20.36%out/e3/e3_verdict.jsonfield canonical_cell.cagr_0bps of the verdict bundle
rebuilt, after trading costs 18.39%out/e3/e3_verdict.jsonfield canonical_cell.cagr_25bps of the verdict bundle
the S&P 500, same ten years 15.16%out/e3/e3_verdict.jsonfield benchmarks_same_window.SPY.cagr of the verdict bundle

After trading costs the rebuilt portfolio returns 0.9910out/e3/e3_verdict.jsonfield canonical_cell.sharpe_25bps of the verdict bundle for each unit of risk it took. The S&P 500 returned 0.9923out/e3/e3_verdict.jsonfield benchmarks_same_window.SPY.sharpe of the verdict bundle for each unit of risk over the same months.

30,022researchline counts of research/R*/FINDINGS_R*.md — {'R1': 5383, 'R2': 21681, 'R3': 1447, 'R4': 1511} lines of literature read
1,917research/distill'### [R*-P*-nn]' headers across the twelve inventories claims extracted from it
397,833research/e3/PHASE0_FINDINGS.md:215**Spec.** `audit.filing_dates` over 397,833 scanned filings, 286,321 of which filings scanned
24,367,617data/cache/holdings_panel_wide_10b.parquetparquet row count of the duplicate-summed wide panelthe plan's memory said ~30.2 million; that figure is the duplicate extras, below. position rows priced
4,353research/e3/LEDGER.md:325| **final N** | **4,353** |every configuration ever screened, counted whether or not anyone wanted it counted. attempts counted against the result
14research/e3/PHASE0_FINDINGS.md'## <id> <title> — <verdict>' section headings in the findings file audits before any experiment
539.auto/log.jsonlrecords carrying a run number in the loop's own metric log unsupervised loop runs
1,989out/e3/harvest_L2_verdict.jsonfield claims of the acceptance check's verdict loop claims examined

01

Organisation of the work

The work ran on two desks. One model set the questions and the conditions a result had to meet. A second model wrote the code and ran the experiments. Neither did the other's job.

A larger reviewing model wrote the plans, the acceptance condition for each result, and the condition under which a claim would be abandoned. It wrote no pipeline code. An implementing agent wrote all the code, ran every experiment and set none of its own acceptance conditions.

The split exists for one reason. A researcher who can move the acceptance condition after seeing the result is not running an experiment. The separation makes that move impossible rather than discouraged.

It was tested twice in the direction that costs something, when the implementing side refused the reviewing side.

The implementing agent refused an instruction

It was told to seal the forward register on a build that had just been shown to be wrong. It refused, because a standing rule outranks an instruction. The register gained a fourth opening condition instead: no unrepaired defect that changes which stocks are held. That condition found the fourth correction.

The implementing agent found an error in the reviewing model's own headline

The figure the program had been quoting joined the return of one portfolio to the risk-adjusted return of a different one. The rule it broke was the reviewing model's own: no result is quoted without stating which portfolio, which weighting, which dating and which trading cost produced it.

02

Literature review, completed before the experiments

Four briefs went out to find published work on the design under test. The answers were read by machine, split into single claims, and sorted. The claims that contradicted the design were collected first.

Four briefs returned 30,022researchline counts of research/R*/FINDINGS_R*.md — {'R1': 5383, 'R2': 21681, 'R3': 1447, 'R4': 1511} lines of findings, or 2.3researchsummed byte size of the four findings files megabytes. Behind them are 253research/R1/FINDINGS_R1.md:3969**Proxy voting records (Form N-PX) do not appear anywhere in this corpus.** Across 253 fetched PDFs papers that machines could fetch and quote-check, and 186research/R1/FINDINGS_R1.md:3970and 186 human-obtained sources, no R1 note tests voting disclosure as a return signal and there is no more sources that had to be obtained by hand because a publisher refused automated access.

12research/distillR1_part*.md and R2_part*.md inventories extraction passes read that material back under one fixed schema and produced 1,917research/distill'### [R*-P*-nn]' headers across the twelve inventories separate claims. Each claim went into one of six bins.

1,917research/distill'### [R*-P*-nn]' headers across the twelve inventories claims, sorted

adopt as practice 503research/distill'- bin: D' lines across the twelve inventories
worth an experiment 376research/distill'- bin: B' lines across the twelve inventories
outside the brief 372research/distill'- bin: F' lines across the twelve inventories
confirms the design 307research/distill'- bin: A' lines across the twelve inventories
contradicts the design 227research/distill'- bin: C' lines across the twelve inventories
out of reach 132research/distill'- bin: E' lines across the twelve inventories

The 227research/distill'- bin: C' lines across the twelve inventories contradicting claims reduced to 28research/distill/MERGED_C.mdnumbered theme headings in the contradiction dossier distinct reasons the design should not work. Nine published funds copied this approach and returned less than the market. The best-ideas effect was measured as absent in hedge funds. A ten-year window is too short to support a search of the size this program was about to run. All 28research/distill/MERGED_C.mdnumbered theme headings in the contradiction dossier were written down before the first experiment ran.

The rest of the sort produced 38research/distill/MERGED_B.mdlettered family headings in the experiment dossierthe plan's memory said 37; the dossier holds A1-A11, B1-B9, C1-C7, D1-D6, E1-E5. families of experiment worth running, 118research/distill/MERGED_D.md'### D<group>.<item>' headings in the adoption dossier practices adopted without a test, and 13research/distill/MERGED_AEF.mdclusters in the out-of-reach register, keyed by the resource that is missing kinds of question that cannot be answered without data the program could not obtain.

03

Source data and its defects

The strategy reads one public source: the holdings that large investment managers must report every quarter. The source has defects of its own, and they were measured before anything was built on top of it.

The panel of record covers 53data/edgar13fForm 13F structured Data Set zips on disk quarterly archives and 397,833research/e3/PHASE0_FINDINGS.md:215**Spec.** `audit.filing_dates` over 397,833 scanned filings, 286,321 of which filings, and holds 24,367,617data/cache/holdings_panel_wide_10b.parquetparquet row count of the duplicate-summed wide panelthe plan's memory said ~30.2 million; that figure is the duplicate extras, below. priced position rows. Those filings come from 12,984research/e3/PHASE0_FINDINGS.md:695filers (distinct CIK): 12,984 registered filing entities, which resolve to 12,432research/e3/PHASE0_FINDINGS.md:696name_families: 12,432 actual managers once the same firm filing under several registrations is joined up.

Four properties of the source change the answer, and none of them is documented on the form itself.

The published file repeats rows

30,621,515out/e3/phase0_verdicts.jsonaudit 0.10 guard (b) rows carry a key that already appears elsewhere in the file, which is 28.61%out/e3/phase0_verdicts.jsonaudit 0.10 guard (b)a pipeline that reads the tape without summing is wrong by about this much. of it. A program that reads the file without adding the repeats together is wrong before it starts, and the direction of the error depends on whether it drops them or counts them twice.

One position is often reported by several filers

47.4%research/e3/PHASE0_FINDINGS.md:702othermanager_row_share: 47.43%undeduplicated, the same position can be handed to several 'independent' managers. of position rows are reported by more than one filer, because the form asks who holds the discretion rather than who owns the security. 3,942research/e3/PHASE0_FINDINGS.md:700notice_filers (13F-NT, excluded): 3,942 filers report no holdings at all.

Options are reported in the same column as stock

4,778,703research/e3/PHASE0_FINDINGS.md:369rather than kept — and now is: 4,778,703 option positions aggregated to rows describe options rather than shares. They were parsed and set aside. Counting them as ordinary holdings would credit a manager with a position they may not hold.

Securities leave the list and stop being priceable

The regulator's own quarterly list of reportable securities was read out of 50research/e3/PHASE0_FINDINGS.md:743rows parsed: 1,010,311 across 50 quarters, 2014q1-2026q2 PDF documents, giving 1,010,311research/e3/PHASE0_FINDINGS.md:743rows parsed: 1,010,311 across 50 quarters, 2014q1-2026q2the free replacement for the paid identifier database the audit was told it needed. rows and 28,233research/e3/PHASE0_FINDINGS.md:745share-line CUSIPs: 28,233 share classes. 15,494research/e3/PHASE0_FINDINGS.md:746of which exit the list: 15,494 (54.9%) of those share classes were gone before the window closed. Measured across 288,435research/e3/PHASE0_FINDINGS.md:782| **all** | **288,435** | **11.49%** | **14.28%** | filings, 11.5%research/e3/PHASE0_FINDINGS.md:782| **all** | **288,435** | **11.49%** | **14.28%** | of the positions this strategy buys are in a security that later left the list.

60out/e3/audit_0_6_provenance.csvrows of the artifact register, each carrying a sha256PHASE0_FINDINGS states 59; the register has since gained one and it wins. inputs were pinned by hash, so a later re-run can prove it read the same bytes. A rewrite of the core matrix was accepted only after it rebuilt 148 × 10,207research/e3/PHASE0_FINDINGS.md:883the published panel — 148 × 10,207 matrices, zero mismatching cells, NaN cells identically to the version it replaced.

04

Data audits completed before any experiment

A standing rule held that no experiment could run on data that had not been checked. Fourteen audits ran first. Two passed.

Each audit asked one question about the data or the method, and each was written with the answer that would count as a failure before it was run. 14research/e3/PHASE0_FINDINGS.md'## <id> <title> — <verdict>' section headings in the findings file were closed before the first experiment. 2research/e3/PHASE0_FINDINGS.mdsection headings whose verdict reads passthe plan remembered 13 audits at 3 pass / 6 fail / 4 partial. The findings file's own headings say 14 at 2 / 7 / 5 — audit 0.15 was opened by a repair, after the count the plan was written from. passed, 7research/e3/PHASE0_FINDINGS.mdsection headings whose verdict reads fail failed, and 5research/e3/PHASE0_FINDINGS.mdsection headings whose verdict reads partial failed in part and are recorded that way rather than rounded up to a pass.

A failed audit did not stop the program. It produced a repair, and the repair was then measured against the result it changed. Four of the repairs changed which stocks the strategy held, and those four are the subject of the next section.

The audits are listed as they were closed. Each entry links to the line of the findings document that states its result.

14research/e3/PHASE0_FINDINGS.md'## <id> <title> — <verdict>' section headings in the findings file audits, and how each came out
0.1 Wardlaw identity, generalisedresearch/e3/PHASE0_FINDINGS.mdaudit 0.1, from its own heading in the findings document failed
0.2 Filing-date integrityresearch/e3/PHASE0_FINDINGS.mdaudit 0.2, from its own heading in the findings document failed in part
0.3 Crosswalkresearch/e3/PHASE0_FINDINGS.mdaudit 0.3, from its own heading in the findings document failed
0.4 Option / PRN rowsresearch/e3/PHASE0_FINDINGS.mdaudit 0.4, from its own heading in the findings document passed
0.5 Units and amendmentsresearch/e3/PHASE0_FINDINGS.mdaudit 0.5, from its own heading in the findings document failed in part
0.6 Provenanceresearch/e3/PHASE0_FINDINGS.mdaudit 0.6, from its own heading in the findings document failed
0.7 Unmatched namesresearch/e3/PHASE0_FINDINGS.mdaudit 0.7, from its own heading in the findings document failed
0.8 Delistingsresearch/e3/PHASE0_FINDINGS.mdaudit 0.8, from its own heading in the findings document failed
0.9 Grid persistenceresearch/e3/PHASE0_FINDINGS.mdaudit 0.9, from its own heading in the findings document failed in part
0.10 The four 13F correctness guardsresearch/e3/PHASE0_FINDINGS.mdaudit 0.10, from its own heading in the findings document failed in part
0.11 Day-45 truncationresearch/e3/PHASE0_FINDINGS.mdaudit 0.11, from its own heading in the findings document passed
0.12 Missing-characteristics contaminationresearch/e3/PHASE0_FINDINGS.mdaudit 0.12, from its own heading in the findings document failed in part
0.13 Manager identityresearch/e3/PHASE0_FINDINGS.mdaudit 0.13, from its own heading in the findings document failed
0.15 Filing stalenessresearch/e3/PHASE0_FINDINGS.mdaudit 0.15, from its own heading in the findings document failed

05

Corrections applied, and their effect on the annual return

Four defects were corrected. None of them changed the rule the strategy follows. All four changed which stocks it held, which is why each one is reported with the share of monthly portfolios it left unchanged.

30.07%out/e3/e3_verdict.jsonfield melt_walk_cagr.published of the verdict bundleas published 25.11%out/e3/e3_verdict.jsonfield melt_walk_cagr.audited of the verdict bundlepricing and missing holdings 24.93%out/e3/e3_verdict.jsonfield melt_walk_cagr.audited_measured_units of the verdict bundlereporting units measured 20.36%out/e3/e3_verdict.jsonfield canonical_cell.cagr_0bps of the verdict bundlemanagers who stopped filing

shaded: what the S&P 500 returned over the same ten years, 15.16%out/e3/e3_verdict.jsonfield benchmarks_same_window.SPY.cagr of the verdict bundle a year

correction 01

Both sides of the division were priced on the wrong day

The largest position of a manager was found by reading the dollar value reported for each holding. A dollar value is a share count multiplied by a price, and the price is the one at the end of the quarter, after the stock has already moved. The measure of what a manager holds most therefore contained what went up last quarter.

The reason this survived is worth stating. Averaged over all positions the effect is invisible: the reported weight explains almost none of the return, and any check that pools every position reports the pipeline as clean. The rule reads only the single largest position, and that is where the contamination sits.

−4.77 pointsout/e3/phase0_verdicts.jsonaudit 0.1, repaired minus base CAGRa pooled diagnostic read clean at R-squared 0.0002 while the tail was contaminated.

30.07%out/e3/e3_verdict.jsonfield melt_walk_cagr.published of the verdict bundle 25.30%out/e3/phase0_verdicts.jsonaudit 0.1, repaired CAGR

0.0%out/e3/phase0_verdicts.jsonaudit 0.1, share of rebalances with an identical bookit changed which stocks were held, not merely how they scored. of monthly portfolios came out unchanged. On average 4.40out/e3/phase0_verdicts.jsonaudit 0.1, mean names changed per rebalance names a month were different stocks.

correction 02

Holdings that could not be priced were treated as though they did not exist

Some positions cannot be matched to a price series, because the company was taken over, went private, went bankrupt or simply left the list. Dropping them builds the portfolio only from securities that were still available to look up later, which is a decision about the past made with knowledge of the future.

Carrying them at a flat zero return costs −4.48 pointsout/e3/audit_0_7_unmatched_deltas.csvarm 0.7-0pct, repaired minus base CAGR a year. Writing them off entirely costs more. The honest answer is an interval 10.4out/e3/audit_0_7_unmatched_deltas.csv0pct arm minus minus99pct arm points wide, and the figure quoted here is the end of that interval least favourable to the argument this page is making.

−4.48 pointsout/e3/audit_0_7_unmatched_deltas.csvarm 0.7-0pct, repaired minus base CAGR

30.07%out/e3/e3_verdict.jsonfield melt_walk_cagr.published of the verdict bundle 25.59%out/e3/audit_0_7_unmatched_deltas.csvarm 0.7-0pct, repaired CAGR

Taken separately the first two corrections cost 9.3out/e3audit 0.1 delta plus audit 0.7-0pct delta points. Applied together they cost −4.96 pointsout/e3/gate_A_units_deltas.csvthe combined-repair build (the units audit's base column) minus the published cellthe repairs overlap: they were largely finding the same broken positions. and leave 25.11%out/e3/gate_A_units_deltas.csvthe units audit's base column — the build with both repairs applied, because they were largely finding the same broken positions.

correction 03

The reporting units were guessed instead of measured

Filers report value in dollars or in thousands of dollars, and the form does not always say which. The pipeline picked a threshold and applied it. The correction is to stop picking: divide the reported value by the share count, compare the result to the closing price on the day, and the answer is either about one or about one-thousandth, never in between.

This is the smallest correction on the page and it is here for a reason. The choice of threshold moves the answer by less than a third of a point, which means it could have been chosen to flatter the result without anyone noticing.

−0.18 pointsout/e3/gate_A_units_deltas.csvarm 0.5R-measured, repaired minus base CAGR

25.11%out/e3/e3_verdict.jsonfield melt_walk_cagr.audited of the verdict bundle 24.93%out/e3/e3_verdict.jsonfield melt_walk_cagr.audited_measured_units of the verdict bundle

Measured across 288,435research/e3/PHASE0_FINDINGS.md:782| **all** | **288,435** | **11.49%** | **14.28%** | filings against 16,729out/e3/price_vintage.csvrows of the price vintage register, one per series with its sha256pinning the vintage is the only defence against a data source quietly revising history. price series, each pinned by hash so a later revision cannot change an earlier result.

correction 04

Managers who had stopped filing years earlier were still being selected

Nothing removed a manager from consideration when they stopped reporting. The last filing stayed visible for the rest of the window. A manager who has stopped trading has a portfolio that never disagrees with the score, so the score came to prefer them.

17.1%out/e3/audit_0_15R_selection_lift.csvmean of pool_stale_over_24m_pct across all 124 rebalances of visible managers had not filed in over two years, but 30.2%out/e3/audit_0_15R_selection_lift.csvmean of top25_stale_over_24m_pct across all 124 rebalances of the managers the score selected had not: a preference of 1.76×out/e3/audit_0_15R_selection_lift.csvselected share divided by pool sharea manager who stops filing stops trading, so their book stops disagreeing with the score.. By the final months 66.0%out/e3/audit_0_15R_selection_lift.csvmean of top25_stale_over_24m_pct over rebalances from 2026-01-01 of the managers being bought from were in that state. The median one was 33.2 monthsout/e3/audit_0_15R_selection_lift.csvmean of top25_median_age_months over rebalances from 2026-01-01 out of date, against 2.0 monthsout/e3/audit_0_15R_selection_lift.csvmean of pool_median_age_months over rebalances from 2026-01-01 for the median manager in the source.

The correction is not a tuned cut-off. A manager must file within forty-five days of the quarter being described, so a manager stays visible for one filing cycle plus that period, measured from the quarter described. Measuring from the day the filing arrived would let a late filer buy extra visibility by being late.

−4.57 pointsout/e3/audit_0_15R_staleness_deltas.csvarm 0.15R-regime, repaired minus base CAGR

24.93%out/e3/e3_verdict.jsonfield melt_walk_cagr.audited_measured_units of the verdict bundle 20.36%out/e3/e3_verdict.jsonfield canonical_cell.cagr_0bps of the verdict bundle

7.51out/e3/audit_0_15R_staleness_deltas.csvarm 0.15R-regime, mean names changed per rebalance names changed in the average month's portfolio. The defect was found by a repair looking for something else, on the morning the forward register opened. The register closed the same day.

Two sensitivity results belong with the last correction, because the cut-off is a choice and choices get shopped. A one-year cut-off returns 21.65%out/e3/audit_0_15R_staleness_deltas.csvarm 0.15R-1y, repaired CAGRboth are prettier than the rule adopted, which is why the rule was picked first. a year and a two-year cut-off returns 21.60%out/e3/audit_0_15R_staleness_deltas.csvarm 0.15R-2y, repaired CAGRboth are prettier than the rule adopted, which is why the rule was picked first.. Both are higher than the rule that was adopted. The rule was fixed on principle before the table was computed, so that the table could not select it.

06

Unsupervised research loops, and the check that read their output

An unsupervised research loop is given a written brief, a score to raise and a condition to stop at. It then works without supervision and files a report. Three were run on the dullest and largest part of the job.

The job was to find out what happened to 15,494research/e3/PHASE0_FINDINGS.md:746of which exit the list: 15,494 (54.9%) securities that left the reportable list, and what a holder received when they did. That is a large number of small identical questions, which is the shape of work a loop should be good at.

The three loops ran 539.auto/log.jsonlrecords carrying a run number in the loop's own metric log iterations and made 345.auto/log.jsonldistinct seven-character commit hashes across those records commits to their own working files. Their reported results rose steadily. The classifying loop reached 1,982.auto/log.jsonlmetrics.classified_count at the loop's best run (run 191) exits labelled, covering 95.5%.auto/log.jsonlthe loop's own metric at run 191 of the departing value. The valuing loop finished at 100.0%.auto/log.jsonlmetrics.terminal_coverage_pct at run 440: 695.auto/log.jsonlmetrics.terminal_documented_count at run 440 of 747.auto/log.jsonlmetrics.terminal_eligible_count at run 440 entries, and $4.77 trillion.auto/log.jsonlmetrics.documented_value at run 440 of value documented.

The score was then changed to require the identifier of the filing that proved each answer. Nothing was deleted and nothing was re-run. The same body of work, measured again the same afternoon, scored 1.auto/log.jsonlmetrics.accession_documented_count at the strict metric's baseline (run 451)the same body of work, remeasured. Nothing was deleted; the question changed. out of 735.auto/log.jsonlmetrics.accession_eligible_count at run 451.

the same work, measured three ways

is there an answer?

695.auto/log.jsonlmetrics.terminal_documented_count at run 440 / 747.auto/log.jsonlmetrics.terminal_eligible_count at run 440

is there an answer, with the filing that proves it?

1.auto/log.jsonlmetrics.accession_documented_count at the strict metric's baseline (run 451)the same body of work, remeasured. Nothing was deleted; the question changed. / 735.auto/log.jsonlmetrics.accession_eligible_count at run 451

the same question, after the loop was told to raise that score

139.auto/log.jsonlmetrics.accession_documented_count at the strict metric's last run (484) / 735.auto/log.jsonlmetrics.accession_eligible_count at run 451

The third measurement covers 71.3%.auto/log.jsonlthe strict metric at run 484 of the departing value, with a reference for each entry.

The acceptance check

The rule for taking loop output into the pipeline was written before the loops started: sample the output, check the sample, and if the sample fails, take none of it. The second loop handed over a table of 1,989out/e3/harvest_L2_verdict.jsonfield claims of the acceptance check's verdict claims about what happened to each security.

It was not sampled. The table was small enough to check completely, so every row was checked. 59out/e3/harvest_L2_verdict.jsonfield claims_meeting_the_standard of the acceptance check's verdict rows carried a reference to a filing, which is 2.97%out/e3/harvest_L2_verdict.jsonfield share_meeting_the_standard of the acceptance check's verdict of the table.

1,110out/e3/harvest_L2_verdict.jsonfield continuity_claims of the acceptance check's verdict rows asserted that nothing terminal had happened, which is the cheapest assertion available and covers 71.7%out/e3/harvest_L2_verdict.jsonfield continuity_share_of_roster_value of the acceptance check's verdict of the departing value. Between them those rows carried 2out/e3/harvest_L2_evidence_census.csvwith_accession on the CONTINUITY row of the census references. 113out/e3/harvest_L2_verdict.jsonfield continuity_self_contradicting of the acceptance check's verdict of them, or 10.2%out/e3/harvest_L2_verdict.jsonfield continuity_self_contradicting_share of the acceptance check's verdict, describe a takeover or a bankruptcy in their own text while asserting that nothing had happened.

continuity 2 of 1,110out/e3/harvest_L2_evidence_census.csvthe CONTINUITY row of the per-label census
merger cash 23 of 313out/e3/harvest_L2_evidence_census.csvthe MERGER_CASH row of the per-label census
merger stock 13 of 195out/e3/harvest_L2_evidence_census.csvthe MERGER_STOCK row of the per-label census
going private 12 of 177out/e3/harvest_L2_evidence_census.csvthe GOING_PRIVATE row of the per-label census
fund closure 0 of 141out/e3/harvest_L2_evidence_census.csvthe FUND_CLOSURE row of the per-label census
bankruptcy 9 of 50out/e3/harvest_L2_evidence_census.csvthe BANKRUPTCY row of the per-label census
delisting deficiency 0 of 3out/e3/harvest_L2_evidence_census.csvthe DELISTING_DEFICIENCY row of the per-label census
carries a reference refuted by its own text asserted, with no reference one cell is one row of the table that was handed over

The 59out/e3/harvest_L2_verdict.jsonfield accessions_checked of the acceptance check's verdict references that did exist were then retrieved from the public filing archive and read. 12out/e3/harvest_L2_accession_checks.csvrows of the live EDGAR check whose verdict reads resolved are on the company they name. 27out/e3/harvest_L2_accession_checks.csvrows of the live EDGAR check whose verdict reads wrong filer are not on that company's index at all, and 20out/e3/harvest_L2_accession_checks.csvrows of the live EDGAR check whose verdict reads unreachable could not be resolved.

Of the 12out/e3/harvest_L2_accession_checks.csvrows of the live EDGAR check whose verdict reads resolved that do resolve, 4out/e3/harvest_L2_accession_checks.csvresolved rows whose form is an 8-K, a delisting notice or a merger document; the rest are employee-stock and passive-ownership filings are on a form that can record an exit: a delisting notice, a going-private statement, a material-event report. The others are employee stock plan amendments and passive ownership notices. They are real filings by the right company, and they say nothing about the event being claimed.

  • ACTIVISION BLIZZARD INC — cited form SC 13G/A
  • VMWARE INC — cited form S-8 POS
  • STERICYCLE INC — cited form POS AM

No part of the output was taken in, and the pipeline did not change. The repair it was collected for needed prices for 294out/e3/harvest_L2_verdict.jsonfield substituted_positions_0_7R_prices of the acceptance check's verdict positions, and the output could supply 22out/e3/harvest_L2_verdict.jsonfield positions_L2_gives_a_terminal_value of the acceptance check's verdict of them. The conservative assumption it was meant to replace stayed in place, so every figure after this point is unaffected.

The loops were not careless. On the parts of the job that had a measurable direction they were faster and more persistent than a person. The result is a fact about metrics: a score that does not require evidence will be raised without evidence, so the evidence requirement has to sit inside the score, and an acceptance check has to stand behind it, declared in advance by a party that is not raising the score.

The third loop was given the wrong kind of work. Tracking down 25research/loops/acquisitions/FINDINGS.mdrows of the register table specific documents is a series of separate judgements, not a score to raise, and it should not have gone to a loop. It closed 16research/loops/acquisitions/FINDINGS.mdrows with status ACQUIREDthe file's own totals line says 17/7/3/1, which sums to 28 against 25 rows. The table wins. of them with a documented source, took 6research/loops/acquisitions/FINDINGS.mdrows with status USER_ACTION_READY more as far as a request that someone still has to send, and recorded 2research/loops/acquisitions/FINDINGS.mdrows with status WALL dead ends. Its own summary line claims more than its own table contains, and the table is what is reported here.

07

The four pre-registered tests

Each test was written down before it ran, together with the result that would count as a failure. Two passed, one of them narrowly. One failed. One returned nothing.

Writing the failure condition first is the whole mechanism. Once it is written, the result cannot be reinterpreted into a pass. Each card below shows the question and that condition; the result is on the other side.

08

Performance of the rebuilt portfolio

The ranking of managers carries information. Buying their single largest position does not. After the cost of trading, the portfolio returns what an index fund returned for the same risk.

Ranking managers by past results carries real information. Destroy only the ranking and the return falls from 20.36%out/e3/e3_verdict.jsonfield canonical_cell.cagr_0bps of the verdict bundle to 10.60%out/e3/e3_verdict.jsonfield attribution_cagr.construction_only_permutation_median of the verdict bundle a year.

Buying each of those managers' single largest position does not. Hold the same managers' whole portfolios instead — about 606out/e3/e3_verdict.jsonfield actionable_finding.argmax_is_not.blend_names_held of the verdict bundle names — and the return is 22.21%out/e3/e3_verdict.jsonfield actionable_finding.argmax_is_not.blend_cagr of the verdict bundle a year at 1.1537out/e3/e3_verdict.jsonfield actionable_finding.argmax_is_not.blend_sharpe of the verdict bundle per unit of risk, against 20.36%out/e3/e3_verdict.jsonfield canonical_cell.cagr_0bps of the verdict bundle and 1.0984out/e3/e3_verdict.jsonfield canonical_cell.sharpe_0bps of the verdict bundle for the concentrated portfolio. Measured against that alternative, concentration adds 1.17 pointsout/e3/e3_verdict.jsonfield actionable_finding.argmax_is_not.book_alpha_against_blend_pp_yr of the verdict bundle a year with a t-statistic of 0.46out/e3/e3_verdict.jsonfield actionable_finding.argmax_is_not.book_alpha_against_blend_t of the verdict bundle.

The ranking held information. Concentration is where the result was lost. Concentration is also where every defect in section 05 entered: the largest position is what read the contaminated weight, what disappeared when a company was taken over, and what the managers who had stopped filing were selected into.

Three qualifications travel with that paragraph. The alternative portfolio takes more market risk, at a beta of 1.06out/e3/e3_verdict.jsonfield actionable_finding.argmax_is_not.blend_beta of the verdict bundle against 0.89out/e3/e3_verdict.jsonfield canonical_cell.beta_vs_iwv of the verdict bundle. It had a worse worst stretch, at -32.08%out/e3/e3_verdict.jsonfield actionable_finding.argmax_is_not.blend_max_drawdown of the verdict bundle against -29.68%out/e3/e3_verdict.jsonfield canonical_cell.max_drawdown of the verdict bundle. And it was built as a control rather than registered as a candidate, so it carries none of the pre-registration this page insists on everywhere else.

Against what could have been bought instead

  a year swing per unit risk
the rebuilt portfolio, before costs 20.36%out/e3/e3_verdict.jsonfield canonical_cell.cagr_0bps of the verdict bundle 18.53%out/e3/e3_verdict.jsonfield canonical_cell.vol of the verdict bundle 1.0984out/e3/e3_verdict.jsonfield canonical_cell.sharpe_0bps of the verdict bundle
the rebuilt portfolio, after costs 18.39%out/e3/e3_verdict.jsonfield canonical_cell.cagr_25bps of the verdict bundle 18.53%out/e3/e3_verdict.jsonfield canonical_cell.vol of the verdict bundle 0.9910out/e3/e3_verdict.jsonfield canonical_cell.sharpe_25bps of the verdict bundle
the S&P 500 15.16%out/e3/e3_verdict.jsonfield benchmarks_same_window.SPY.cagr of the verdict bundle 15.28%out/e3/e3_verdict.jsonfield benchmarks_same_window.SPY.vol of the verdict bundle 0.9923out/e3/e3_verdict.jsonfield benchmarks_same_window.SPY.sharpe of the verdict bundle
the whole US market 14.60%out/e3/e3_verdict.jsonfield benchmarks_same_window.IWV.cagr of the verdict bundle 15.71%out/e3/e3_verdict.jsonfield benchmarks_same_window.IWV.vol of the verdict bundle 0.9290out/e3/e3_verdict.jsonfield benchmarks_same_window.IWV.sharpe of the verdict bundle
the Nasdaq 100 21.01%out/e3/e3_verdict.jsonfield benchmarks_same_window.QQQ.cagr of the verdict bundle 18.85%out/e3/e3_verdict.jsonfield benchmarks_same_window.QQQ.vol of the verdict bundle 1.1148out/e3/e3_verdict.jsonfield benchmarks_same_window.QQQ.sharpe of the verdict bundle

return per unit of risk, drawn to scale

the rebuilt portfolio, before costs 1.0984out/e3/e3_verdict.jsonfield canonical_cell.sharpe_0bps of the verdict bundle
the rebuilt portfolio, after costs 0.9910out/e3/e3_verdict.jsonfield canonical_cell.sharpe_25bps of the verdict bundle
the S&P 500 0.9923out/e3/e3_verdict.jsonfield benchmarks_same_window.SPY.sharpe of the verdict bundle
the whole US market 0.9290out/e3/e3_verdict.jsonfield benchmarks_same_window.IWV.sharpe of the verdict bundle
the Nasdaq 100 1.1148out/e3/e3_verdict.jsonfield benchmarks_same_window.QQQ.sharpe of the verdict bundle

The Nasdaq index beat the rebuilt portfolio on both measures before costs. It is listed for completeness and it is not a fair comparison: it was selected after the fact by knowing which index won this particular decade, which is the error this whole program exists to detect.

09

Post-mortem

Six decisions that shaped the program: why each was made, what it produced, and what would be done differently.

01

Audit the data before attributing any result to the method.

why it was decided
An experiment run on faulty inputs attributes a portfolio that never honestly existed, and it looks exactly as rigorous as one that did.
what happened
Four corrections each changed which stocks were held. 0%out/e3/phase0_verdicts.jsonaudit 0.1, share of rebalances with an identical bookit changed which stocks were held, not merely how they scored. of monthly portfolios survived the first correction unchanged. Any experiment run before them would have had to be discarded.
what would change
Nothing. This is the decision the program rests on and it paid for itself four times.

02

Count every attempt, including the ones from earlier work.

why it was decided
The test for luck is only worth running if the number of attempts is honest, and it is honest only if it was fixed before anyone saw which way it cut.
what happened
The final count is 4,353research/e3/LEDGER.md:325| **final N** | **4,353** |every configuration ever screened, counted whether or not anyone wanted it counted., including 4,283research/e3/LEDGER.md:47| **historical total** | **4,283** | configurations from work that predates this program and had every excuse to be left out. That count is what failed the headline result.
what would change
Nothing, except to state that this is the number most likely to be quietly dropped by anyone repeating this work.

03

Separate the model that sets the conditions from the model that runs the work.

why it was decided
Choosing the most favourable specification is not dishonesty. It is the default outcome when the party that wants the answer also picks the specification.
what happened
It caught errors in both directions. Two more favourable specifications were refused on principle: a staleness cut-off worth two and a half points more a year, and a carry assumption worth a fifth of a point of return per unit of risk. The implementing side found the error in the reviewing side’s own headline figure.
what would change
Let the reviewing side see the space of specifications without seeing the results in it. Refusing a favourable specification is easier before you know how favourable it is.

04

Let the rules grow out of the failures.

why it was decided
A rulebook written entirely in advance encodes only the failures its author has already had.
what happened
11research/e3/LEDGER.mdhighest 'standing rule N' referenced across LEDGER.md, PLAN_E3.md and E3_VERDICT.md; rules seen: [1, 3, 5, 6, 7, 9, 10, 11]six were written before Phase 0; the rest were forced by failures. rules: six written in advance and five added afterwards. A test with no control cannot separate "no effect" from "the mechanism was never connected". A result that changes sign between rebuilds means an opinion expires with its data. A check that pools every position misses a rule that reads only the largest one.
what would change
Write the rule on the day the failure happens. All five were obvious afterwards and none was obvious in advance.

05

Give the dense, repetitive work to unsupervised loops.

why it was decided
15,494research/e3/PHASE0_FINDINGS.md:746of which exit the list: 15,494 (54.9%) securities had to be traced through public filings. That is more than a person will do carefully, and it is the shape of work a tireless agent should handle well.
what happened
One loop reported 100%.auto/log.jsonlmetrics.terminal_coverage_pct at run 440 coverage. Asked for the filing behind each answer, the same work scored 1.auto/log.jsonlmetrics.accession_documented_count at the strict metric's baseline (run 451)the same body of work, remeasured. Nothing was deleted; the question changed. of 735.auto/log.jsonlmetrics.accession_eligible_count at run 451. The acceptance check, declared before the loops started, rejected the output, and none of it entered the pipeline.
what would change
Two things. Put the evidence requirement inside the score, so that the only way to raise the score is to cite a source. And route work by shape: loops take dense, uniform work with a measurable direction, and anything needing separate judgements goes to a researcher. The third loop was given a list of specific documents to find and should not have been.

06

State what the result is worth, in the terms the reader cares about.

why it was decided
The alternative is to publish one more impressive backtest, which is the thing this program was built to detect.
what happened
Modest after risk. More modest after the cost of trading. More modest again after tax. With a real chance of being worse than the index rather than equal to it, because the portfolio carries risk the index does not.
what would change
Nothing. This paragraph is the deliverable and everything above it is the working.

10

Open specification and statistical power

One document was written before the results existed and has not been edited since. Anyone can run it forward against public archives.

On the morning the audits closed, the exact specification was frozen: the inputs, the scoring rule, the number of positions, the weighting, the dating and the trading cost. It was hashed and dated. Everything else on this page is a backtest, including the parts that passed their own tests. That specification is the only thing here that can ever be genuinely out of sample.

It has never been used. The program closed on the day it was frozen, so it holds no entries, and the results that followed retired most of what it describes. It has not been revised to match them and must not be. A pre-registration that is edited once its contents are refuted is not a pre-registration.

Anyone can take it up. Rebuild the trades from the specification alone against public archives, evaluate the whole stretch from the freeze date to the date of reading as a single window, and judge it against the same tests, re-run on the new months.

The single-window rule is not pedantry. It is the only thing separating a sealed pre-registration from one more attempt: selecting an interior window rejoins the 4,353research/e3/LEDGER.md:325| **final N** | **4,353** |every configuration ever screened, counted whether or not anyone wanted it counted. attempts this ledger closed with.

The manager ranking carried information. The return per unit of risk did not survive the size of the search that found it. What is worth keeping is the procedure that could tell those two apart.