SPB Git

spb/firc0001_uqo

Public

Stage E (writing): main.tex v1.1 / November 2026, abstract rewritten to the audited wording (FIRC0001-THEO-18, ADVE-04, ADVE-05, EDIT-07, ADVE-09), PDF metadata, cleveref; provisional \providecommand macros for Stage D audit numbers (sections/numbers_pending.tex)

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Simon-Pierre Boucher committed (Nov 5, 2026) parent 9aef075 Browse files

2 changed files +408 −3

modified paper/main.tex +18 −3
@@ -52,6 +52,7 @@
52 urlcolor = NavyBlue, 52 urlcolor = NavyBlue,
53 breaklinks = true 53 breaklinks = true
54 ]{hyperref} 54 ]{hyperref}
55+\usepackage[capitalise,noabbrev]{cleveref} % \cref/\Cref in the Stage E prose (loaded after hyperref)
55 56
56 % --- Bibliography --- 57 % --- Bibliography ---
57 \usepackage[authoryear,round,semicolon]{natbib} 58 \usepackage[authoryear,round,semicolon]{natbib}
@@ -93,6 +94,7 @@
93 \usepackage{adjustbox} 94 \usepackage{adjustbox}
94 \usepackage{upquote} % straight quotes in verbatim (extraction contract, gate regex) 95 \usepackage{upquote} % straight quotes in verbatim (extraction contract, gate regex)
95 \input{tables/numbers} % generated inline-number macros (code/make_tables.py); never edit by hand 96 \input{tables/numbers} % generated inline-number macros (code/make_tables.py); never edit by hand
97+\input{sections/numbers_pending} % PROVISIONAL \providecommand macros for Stage D audit numbers not yet emitted by the generator (Agent 10); each line names its results/ source
96 98
97 % ============================================================================ 99 % ============================================================================
98 % METADATA — Edit these fields for each working paper 100 % METADATA — Edit these fields for each working paper
@@ -100,11 +102,16 @@
100 \newcommand{\WPnumber}{0001} 102 \newcommand{\WPnumber}{0001}
101 \newcommand{\WPtitle}{From Corporate Disclosures to a Russell~3000 Strategic Project Database} 103 \newcommand{\WPtitle}{From Corporate Disclosures to a Russell~3000 Strategic Project Database}
102 \newcommand{\WPsubtitle}{Identification, Measurement, Validation, and Research Applications} 104 \newcommand{\WPsubtitle}{Identification, Measurement, Validation, and Research Applications}
103−\newcommand{\WPdate}{October 28, 2026} 105+% Stage E (2026-11-05), FIRC0001-THEO-18 / cluster I: the Chief Editor noted that "Identification" in the
104−\newcommand{\WPversion}{1.0 (working draft under validation)} 106+% subtitle reads as econometric identification to a finance audience and that the estimand is a Russell 3000
107+% proxy (iShares IWV holdings). Proposed alternative, NOT imposed (author decision):
108+% \newcommand{\WPsubtitle}{Construction, Measurement, Validation Status, and Research Applications}
109+% The title is unchanged; the abstract and Section 3 state the proxy explicitly.
110+\newcommand{\WPdate}{November 2026}
111+\newcommand{\WPversion}{1.1 (revised after peer review; research database under validation)}
105 \newcommand{\WPfunding}{Research funded by the FIRC (Fonds institutionnel de recherche et de création), Université du Québec en Outaouais.} 112 \newcommand{\WPfunding}{Research funded by the FIRC (Fonds institutionnel de recherche et de création), Université du Québec en Outaouais.}
106 \newcommand{\WPabstract}{% 113 \newcommand{\WPabstract}{%
107− We document the construction of SPID, a project-level research database that reconstructs the strategic initiatives disclosed by U.S.-listed companies in their SEC filings. Starting from an issuer universe that merges a current S\&P~500 snapshot with the holdings of the iShares Russell~3000 ETF (2{,}564 distinct SEC registrants), the pipeline collects every 10-K, 10-Q and 8-K filed since January 2010 (527{,}548 documents), segments them into 1.34 million sections, and submits 1.12 million eligible sections to a schema-constrained large-language-model extractor. The result is 308{,}065 evidence-linked project mentions, resolved into 121{,}099 candidate projects for 2{,}492 issuers, each tied to its SEC accession number, section and source passage, together with a controlled 21-category taxonomy, status, cited years, locations, technologies, partners and disclosed amounts. We describe the universe definition and its reconciliation, the distributed acquisition and parsing architecture, the extraction contract and its confidence semantics, the mention-to-project resolution rule and its known failure modes, and the point-in-time structure of the timelines. We then set out a validation framework---stratified human annotation, precision/recall on an independent gold standard, linkage audits and coverage gates---and state explicitly which of its components are implemented and which remain to be executed. Descriptive patterns are reported for the full corpus, with the caveat that a disclosed project is neither a verified investment nor a realized expenditure. The database should be read as a research instrument under validation rather than as an exhaustive census of Russell~3000 projects.% 114+ Can strategic projects be identified, classified, dated and linked across the SEC filings of a broad cross-section of U.S.-listed issuers? We document SPID, a project-level research database built for a Russell~3000 proxy (iShares IWV holdings, \SPIDrussellDistinctCiks\ of \SPIDrussellIndexConstituents\ index constituents) merged with the S\&P~500: \SPIDfilingsTotal\ Forms 10-K, 10-Q and 8-K of \SPIDuniverseN\ registrants filed since 2010, segmented into \SPIDsectionsTotal\ sections, of which \SPIDgatePassTotal\ reached a large-language-model extractor in JSON mode. The output is \SPIDmentions\ section-linked candidate mentions and \SPIDprojectCountCurrentKey\ candidate projects under the current resolution key (\SPIDprojectsKeyTypeDropped--\SPIDprojectsKeyStrict\ under alternative keys). Mechanical audits find \SPIDgroundAllPct\% of structured fields verbatim in the source section, a median \SPIDmdnaShownMedianPct\% of a 10-K MD\&A shown to the model, and \SPIDfinMentionsPct\% of mentions describing financing instruments. Precision and recall against human labels are not yet measured; the annotation frame is delivered. SPID is a research instrument under validation, not a census of projects.%
108 } 115 }
109 \newcommand{\WPkeywords}{SEC filings, text as data, corporate investment, strategic projects, information extraction, large language models, entity resolution, Russell 3000, measurement validation} 116 \newcommand{\WPkeywords}{SEC filings, text as data, corporate investment, strategic projects, information extraction, large language models, entity resolution, Russell 3000, measurement validation}
110 \newcommand{\WPjel}{C55, C81, G31, G38, M41, O33} 117 \newcommand{\WPjel}{C55, C81, G31, G38, M41, O33}
@@ -126,6 +133,14 @@
126 Gatineau, Québec, Canada J9A 1L8% 133 Gatineau, Québec, Canada J9A 1L8%
127 } 134 }
128 135
136+% --- PDF metadata (Part X.3) ---
137+\hypersetup{
138+ pdftitle = {\WPtitle: \WPsubtitle},
139+ pdfauthor = {Manel Kammoun; Djerrycharli Tandjambianda; Simon-Pierre Boucher},
140+ pdfsubject = {UQO Working Paper No. \WPnumber, version \WPversion. JEL: \WPjel},
141+ pdfkeywords = {\WPkeywords}
142+}
143+
129 % ============================================================================ 144 % ============================================================================
130 % DOCUMENT 145 % DOCUMENT
131 % ============================================================================ 146 % ============================================================================
added paper/sections/numbers_pending.tex +390 −0
@@ -0,0 +1,390 @@
1+% ----------------------------------------------------------------------------
2+% PROVISIONAL inline-number macros for the Stage E prose (Agent 10, 2026-11-05).
3+% Every value below is copied from a Stage D audit output under results/ (file and
4+% field given on each line) and is defined with \providecommand so that the
5+% generated definition in tables/numbers.tex (code/make_tables.py, Agent 9) wins
6+% as soon as it exists. The same list, with value/source/formula, is filed for the
7+% generator in improvements/FIRC-0001/macro_requests_writing.json. Delete this
8+% file once make_tables.py emits every macro (check: grep providecommand).
9+% ----------------------------------------------------------------------------
10+
11+% ---- ledger, calls, outage (results/ledger/*.json, gate_pass_by_run.csv) ----
12+\providecommand{\SPIDoutageRowsRemoved}{149{,}352} % log_summary.json:october.outage_rows_reconciliation.difference
13+\providecommand{\SPIDoutageLargestGapStart}{01:25} % throughput.json:largest_gaps_seconds[-1] (2026-10-28)
14+\providecommand{\SPIDoutageLargestGapEnd}{06:40} % throughput.json:largest_gaps_seconds[-1]
15+\providecommand{\SPIDoutageZeroBatchRange}{47--60} % log_summary.json:october.anomalous_batches (batch ids with 0 mentions)
16+\providecommand{\SPIDoutageZeroBatchWindow}{01:44--06:05} % log_summary.json:october.anomalous_batches (first/last timestamp)
17+\providecommand{\SPIDoutageSurvivingRows}{504} % backfill_block.json:rows_in_outage_window[0]
18+\providecommand{\SPIDoutageSurvivingMentions}{1{,}011} % backfill_block.json:rows_in_outage_window[1]
19+\providecommand{\SPIDresumeBatchSections}{5{,}198} % log_summary.json:october.resume_batch1.log_sections
20+\providecommand{\SPIDresumeBatchCiks}{20} % log_summary.json:october.resume_batch1.ciks (length)
21+\providecommand{\SPIDresumeBatchCalls}{2{,}686} % log_summary.json:october.resume_batch1.ledger_calls
22+\providecommand{\SPIDresumeBatchProductive}{23} % log_summary.json:october.resume_batch1.ledger_with_mentions
23+\providecommand{\SPIDresumeBatchExpectedProductive}{536} % resume_batch1_vs_expected.csv: sum(expected_with_mentions) = 536.2
24+\providecommand{\SPIDresumeBatchMentions}{34} % log_summary.json:october.resume_batch1.log_mentions
25+\providecommand{\SPIDresumeBatchWindow}{06:38--06:40} % log_summary.json:october.resume_batch1.window (2026-10-28)
26+\providecommand{\SPIDresumeBatchZeroSharePct}{99.2} % flush_zero_groups_after_0622.csv (06:40 minute bin, 99.15)
27+\providecommand{\SPIDjuneCalls}{95{,}286} % gate_pass_by_run.csv:backfilled_june.calls
28+\providecommand{\SPIDjuneProductiveShareCalls}{25.6} % gate_pass_by_run.csv:backfilled_june.productive_pct_calls
29+\providecommand{\SPIDoctoberProductiveShareCalls}{23.6} % gate_pass_by_run.csv:october.productive_pct_calls
30+\providecommand{\SPIDlogExtractionCompleteSum}{1{,}117{,}479} % log_summary.json:october.extraction_complete_sum_sections
31+\providecommand{\SPIDlogPendingSecondStart}{968{,}127} % log_summary.json:october.pending_lines[1]
32+\providecommand{\SPIDconfExactDefault}{3{,}278} % code_vs_data_checks.json:confidence_exact_0600_total
33+\providecommand{\SPIDconfExactDefaultJune}{304} % code_vs_data_checks.json:confidence_exact_0600_by_run
34+\providecommand{\SPIDconfExactDefaultOctober}{2{,}974} % code_vs_data_checks.json:confidence_exact_0600_by_run
35+\providecommand{\SPIDamountRawDeviations}{584} % code_vs_data_checks.json:amount_raw_rule_mismatch
36+\providecommand{\SPIDamountNegative}{24} % results/grounding/amount_tail.json:lt_0
37+\providecommand{\SPIDamountZero}{584} % results/grounding/amount_tail.json:eq_0
38+\providecommand{\SPIDledgerBackendValue}{llm} % code_vs_data_checks.json:distinct_backend_ledger
39+
40+% ---- grounding (results/grounding/grounding_by_group.csv, grounding_all_structured.csv, grounding_element_level.csv, fallback_bounds.json, amount_tail.json) ----
41+\providecommand{\SPIDgroundBootstrapReps}{1{,}000} % a02_grounding.py (bootstrap replicates, clustered by section)
42+\providecommand{\SPIDgroundYearsPct}{99.8} % grounding_by_group.csv all/years 0.9976
43+\providecommand{\SPIDgroundYearsCiLow}{99.7} % ci_low 0.9974
44+\providecommand{\SPIDgroundYearsCiHigh}{99.8} % ci_high 0.9978
45+\providecommand{\SPIDgroundPartnersPct}{99.4} % all/partners 0.9940
46+\providecommand{\SPIDgroundAmountNumberPct}{93.7} % all/amount_number 0.9372
47+\providecommand{\SPIDgroundAmountCurrencyPct}{80.5} % all/amount_with_currency 0.8047
48+\providecommand{\SPIDgroundLocationsPct}{78.3} % all/locations 0.7832
49+\providecommand{\SPIDgroundLocationsTenK}{85.7} % form/locations/10-K 0.8571
50+\providecommand{\SPIDgroundLocationsTenQ}{82.1} % form/locations/10-Q 0.8207
51+\providecommand{\SPIDgroundLocationsEightK}{67.8} % form/locations/8-K 0.6780
52+\providecommand{\SPIDgroundTechPct}{63.6} % all/technologies 0.6358
53+\providecommand{\SPIDgroundElemYears}{99.7} % grounding_element_level.csv years
54+\providecommand{\SPIDgroundElemPartners}{99.6} % partners
55+\providecommand{\SPIDgroundElemLocations}{84.2} % locations
56+\providecommand{\SPIDgroundElemTech}{70.6} % technologies
57+\providecommand{\SPIDgroundAllPct}{88.2} % grounding_all_structured.csv all 88.17
58+\providecommand{\SPIDgroundAllN}{276{,}168} % grounding_all_structured.csv all n_with_fields
59+\providecommand{\SPIDgroundAllTenK}{92.2} % 10-K 92.15
60+\providecommand{\SPIDgroundAllTenQ}{92.4} % 10-Q 92.41
61+\providecommand{\SPIDgroundAllEightK}{76.6} % 8-K 76.57
62+\providecommand{\SPIDgroundAllJune}{84.5} % backfilled_june 84.51
63+\providecommand{\SPIDgroundAllOctober}{88.7} % october 88.74
64+\providecommand{\SPIDgroundAllTopBin}{86.4} % 0.9-1.0 bin 86.40
65+\providecommand{\SPIDgroundAllLowerBinsRange}{90.7--94.2} % bins 0.45-0.6 ... 0.8-0.9
66+\providecommand{\SPIDyearsNonEmptyN}{252{,}469} % fallback_bounds.json:years_nonempty
67+\providecommand{\SPIDyearsRegexEqualN}{98{,}438} % fallback_bounds.json:years_eq_regex_desc
68+\providecommand{\SPIDyearsRegexEqualPct}{39} % 98,438 / 252,469
69+\providecommand{\SPIDtechNonEmptyN}{36{,}740} % fallback_bounds.json:techs_nonempty
70+\providecommand{\SPIDtechRegexEqualN}{16{,}949} % fallback_bounds.json:techs_eq_regex_desc
71+\providecommand{\SPIDtechRegexEqualPct}{46} % 16,949 / 36,740
72+\providecommand{\SPIDyearsAbsentFromText}{604} % fallback_bounds.json:years_not_subset_of_text
73+\providecommand{\SPIDtypeSignalMaPct}{79.8} % fallback_bounds.json:type_signal_in_name_desc_by_type ma_integration
74+\providecommand{\SPIDtypeSignalTechDeployPct}{5.4} % technology_deployment 5.35
75+\providecommand{\SPIDtechDeployMentionedN}{124} % fallback_bounds.json:tech_deploy_total[1]
76+\providecommand{\SPIDtechDeployMentionedNoSignal}{90} % fallback_bounds.json:tech_deploy_mentioned_no_any_signal
77+\providecommand{\SPIDamountMaxSci}{1.0 \times 10^{12}} % amount_tail.json:max_amount (math mode)
78+\providecommand{\SPIDamountGeFiftyBMentions}{161} % amount_tail.json:ge_50e9
79+\providecommand{\SPIDamountGeFiftyBProjects}{104} % amount_tail.json:projects_max_amount_ge_50e9
80+\providecommand{\SPIDamountTopNumberFound}{191} % amount_tail.json:top200_grounded_number[0]
81+\providecommand{\SPIDamountTopCurrencyFound}{178} % amount_tail.json:top200_grounded_number[1]
82+\providecommand{\SPIDamountTopN}{200} % amount_tail.json:top200_grounded_number[2]
83+\providecommand{\SPIDamountNonUsdTokenN}{1{,}837} % amount_tail.json:nonusd_within_40_share[0]
84+\providecommand{\SPIDamountLocatedN}{112{,}692} % amount_tail.json:nonusd_within_40_share[1]
85+\providecommand{\SPIDamountNonUsdTokenPct}{1.6} % 1,837 / 112,692
86+
87+% ---- resolver (results/resolver/composition.json, spec_curve.csv, top_name_tokens.csv, overmerge_by_type.csv, ties_idempotence.json, june_october_reconciliation.json) ----
88+\providecommand{\SPIDmentionsKeyedLocation}{118{,}783} % composition.json:mentions_by_key_branch location
89+\providecommand{\SPIDmentionsKeyedNameToken}{187{,}212} % composition.json:mentions_by_key_branch name_token
90+\providecommand{\SPIDmentionsKeyedNameTokenPct}{60.8} % 187,212 / 308,065
91+\providecommand{\SPIDtopTokenMentions}{40{,}407} % top_name_tokens.csv acquisition
92+\providecommand{\SPIDtopTokenProjects}{2{,}256} % top_name_tokens.csv acquisition
93+\providecommand{\SPIDtopTokenSharePct}{21.4} % pct_of_tokenkeyed_mentions
94+\providecommand{\SPIDlocationKeysCountry}{8{,}126} % composition.json:location_keyed_projects_by_geo_kind country
95+\providecommand{\SPIDlocationKeysUsState}{6{,}110} % us_state
96+\providecommand{\SPIDlocationKeysCountryStatePct}{26} % (8,126 + 6,110) / 54,658
97+\providecommand{\SPIDlocationKeyUnitedStatesProjects}{2{,}551}% top_location_keys.csv 'united states'
98+\providecommand{\SPIDprojectsKeyCikType}{21{,}027} % spec_curve.csv k_cik_type 0.45
99+\providecommand{\SPIDprojectsKeyTypeDropped}{96{,}749} % k_type_dropped 0.45
100+\providecommand{\SPIDprojectsKeyNameOnly}{114{,}244} % k_name_only 0.45
101+\providecommand{\SPIDprojectsKeyCityNorm}{123{,}246} % k_city_normalised 0.45
102+\providecommand{\SPIDprojectsKeyStopwords}{130{,}101} % k_current_stopwords 0.45
103+\providecommand{\SPIDprojectsKeyTwoTokens}{145{,}697} % k_two_tokens 0.45
104+\providecommand{\SPIDprojectsKeyStrict}{198{,}488} % k_strict 0.45
105+\providecommand{\SPIDprojectsKeyMentionLevel}{308{,}065} % k_mention_level 0.45
106+\providecommand{\SPIDprojectsCurrentKeyAtNine}{83{,}483} % k_current 0.9
107+\providecommand{\SPIDsingleMentionShareStrict}{75.8} % k_strict 0.45 single_mention_pct
108+\providecommand{\SPIDsingleMentionShareCikType}{20.7} % k_cik_type 0.45
109+\providecommand{\SPIDchenierClusterCurrent}{8} % example_cluster_size_cheniere k_current
110+\providecommand{\SPIDchenierClusterStrict}{1} % k_strict
111+\providecommand{\SPIDchenierClusterNameOnly}{40} % k_name_only
112+\providecommand{\SPIDchenierClusterCikType}{176} % k_cik_type
113+\providecommand{\SPIDmaGeThreeNamesPct}{14.6} % overmerge_by_type.csv ma_integration pct_ge3_names
114+\providecommand{\SPIDmaGeThreeNamesOverTenPct}{86.6} % overmerge_ma_by_bucket.csv >10 mentions
115+\providecommand{\SPIDmaGeThreePartnersPct}{10.9} % overmerge_by_type.csv ma_integration pct_ge3_partners_among_with_partner
116+\providecommand{\SPIDmaAmountOtherCounterpartyN}{1{,}630} % composition.json:amount_from_other_counterparty_ma[0]
117+\providecommand{\SPIDmaAmountOtherCounterpartyDenom}{12{,}372}% composition.json:amount_from_other_counterparty_ma[1]
118+\providecommand{\SPIDamountOtherCounterpartyN}{2{,}347} % composition.json:amount_from_other_counterparty[0]
119+\providecommand{\SPIDamountOtherCounterpartyDenom}{21{,}908} % composition.json:amount_from_other_counterparty[1]
120+\providecommand{\SPIDprojectsTieDistinctDescriptions}{29{,}954} % ties_idempotence.json
121+\providecommand{\SPIDrebuiltNameDiff}{394} % ties_idempotence.json:rebuilt_vs_stored_diff[0]
122+\providecommand{\SPIDrebuiltDescDiff}{600} % ties_idempotence.json:rebuilt_vs_stored_diff[2]
123+\providecommand{\SPIDtiebreakNameDiff}{11{,}484} % ties_idempotence.json:deterministic_vs_stored_diff[0]
124+\providecommand{\SPIDtiebreakStatusDiff}{503} % [1]
125+\providecommand{\SPIDtiebreakDescDiff}{18{,}256} % [2]
126+\providecommand{\SPIDjuneProjects}{19{,}227} % june_october_reconciliation.json:projects_from_backfilled_block_only
127+\providecommand{\SPIDspMentions}{70{,}367} % sp500_mentions_total
128+\providecommand{\SPIDspProjects}{27{,}766} % sp500_projects_total
129+\providecommand{\SPIDspProjectsJuneOnly}{15{,}910} % sp500_projects_by_run_composition
130+\providecommand{\SPIDspProjectsBothRuns}{3{,}317}
131+\providecommand{\SPIDspProjectsOctoberOnly}{8{,}539}
132+\providecommand{\SPIDoctoberSpTenQSections}{116{,}231} % sp500_october_ledger_by_form 10-Q
133+\providecommand{\SPIDoctoberSpTenQFilings}{19{,}399}
134+\providecommand{\SPIDoctoberSpTenQMentions}{28{,}963} % sp500_mentions_by_run_form october 10-Q
135+\providecommand{\SPIDjuneTenQFilings}{3{,}710} % june_10q_accessions_in_block_ledger
136+\providecommand{\SPIDjuneTenQSections}{23{,}873} % ledger_block_accessions_by_form 10-Q
137+\providecommand{\SPIDjuneTenQMentions}{5{,}817} % sp500_mentions_by_run_form backfilled_june 10-Q
138+\providecommand{\SPIDoctoberSpTenKMentions}{910} % october 10-K
139+\providecommand{\SPIDoctoberSpEightKMentions}{564} % october 8-K
140+
141+% ---- two runs / two segmenters (results/runs/git_evidence.md, segmenters.json, segmenter_item_comparison.csv, funnel_10k.json, within_*.csv, table6_cohort*.json/csv, fiscal_year_audit.json) ----
142+\providecommand{\SPIDrepoCommits}{six} % git_evidence.md: all commits dated 2026-10-27/28
143+\providecommand{\SPIDextractorMtimeDate}{June~17, 2026} % git_evidence.md: llm.py, rules.py, base.py, taxonomy.py, resolve.py, ingest.py mtimes
144+\providecommand{\SPIDdiffStoreLines}{$+3/-1$} % git_diff_df7905d_2324b58.patch (store.py)
145+\providecommand{\SPIDdiffParserLines}{$+13/-7$} % git_diff_0304133_2324b58.patch (filing_parser.py)
146+\providecommand{\SPIDlegacyTenKRows}{27{,}164} % segmenters.json:legacy_rows
147+\providecommand{\SPIDlegacyTenKFilings}{7{,}368} % segmenters.json:legacy_accessions
148+\providecommand{\SPIDlegacyShareTenKLedgerPct}{18.9} % 27,164 / 143,704
149+\providecommand{\SPIDsegPairs}{25{,}673} % segmenters.json:legacy_rows_matched_by_item
150+\providecommand{\SPIDlegacyMdnaDollar}{141} % segmenter_item_comparison.csv md_and_a legacy_mean_dollar
151+\providecommand{\SPIDparsedMdnaDollar}{272} % parsed_mean_dollar
152+\providecommand{\SPIDlegacyMdnaWords}{9{,}921} % legacy_median_words
153+\providecommand{\SPIDparsedMdnaWords}{11{,}661} % parsed_median_words
154+\providecommand{\SPIDlegacyFewerMoneyPct}{92.3} % pct_legacy_fewer_money_tokens
155+\providecommand{\SPIDlegacyMdnaNumeric}{596} % legacy_mean_numeric
156+\providecommand{\SPIDparsedMdnaNumeric}{1{,}177} % parsed_mean_numeric
157+\providecommand{\SPIDpropertiesLtHalfPct}{19.4} % properties pct_legacy_lt_half_words
158+\providecommand{\SPIDfullBodyMedianWords}{44{,}514} % segmenters.json:full_body_rows[2]
159+\providecommand{\SPIDfullBodyYield}{0.67} % full_body_ledger_yield[3]
160+\providecommand{\SPIDfullBodyProductivePct}{25.7} % full_body_ledger_yield[4]
161+\providecommand{\SPIDfullBodyWithParsedItems}{1{,}117} % implemented_changes.md N4 (segmenters.json)
162+\providecommand{\SPIDfullBodyUnsubmittedSections}{5{,}385} % implemented_changes.md N4 (segmenters.json)
163+\providecommand{\SPIDfullDocumentTenK}{86} % segmenters.json / funnel_10k.json
164+\providecommand{\SPIDfullDocumentTenKLegacy}{51} % parsed_section_names_same_accessions full_document
165+\providecommand{\SPIDfullDocumentTenKInvisible}{35} % 86 - 51
166+\providecommand{\SPIDfullDocumentTenQ}{243} % funnel_10k.json:parsed_10q_items full_document
167+\providecommand{\SPIDfullDocumentTenQLedgered}{241} % funnel_10k.json:ledger_10q_items full_document
168+\providecommand{\SPIDtenKparsedRows}{341{,}207} % funnel_10k.json:parsed_10k_rows_total
169+\providecommand{\SPIDtenKoutOfScopeRows}{188{,}518} % parsed_10k_rows_out_of_scope_item
170+\providecommand{\SPIDtenKlegacyAccessionRows}{35{,}037} % parsed_10k_in_scope_rows_of_legacy_accessions
171+\providecommand{\SPIDtenKunderThirtyRows}{1{,}112} % parsed_10k_in_scope_rows_lt30_words_non_legacy
172+\providecommand{\SPIDtenKparsedLedgered}{116{,}540} % parsed_10k_in_scope_rows_ge30_non_legacy
173+\providecommand{\SPIDwithinProductiveJune}{12.4} % within_sp500_by_run_form.csv backfilled_june 10-Q productive_pct
174+\providecommand{\SPIDwithinProductiveOctober}{12.7} % october 10-Q
175+\providecommand{\SPIDwithinMentionsPerRowJune}{0.244} % mentions_per_row
176+\providecommand{\SPIDwithinMentionsPerRowOctober}{0.250}
177+\providecommand{\SPIDwithinConfJune}{0.889} % within_sp500_10q_mentions_by_run.csv mean_conf
178+\providecommand{\SPIDwithinConfOctober}{0.893}
179+\providecommand{\SPIDwithinMaShareJune}{49.9} % within_sp500_10q_type_mix_by_run.csv ma_integration
180+\providecommand{\SPIDwithinMaShareOctober}{45.7}
181+\providecommand{\SPIDpairedIssuers}{81} % within_issuer_paired_10q.json:issuers_paired
182+\providecommand{\SPIDpairedDeltaPp}{0.6} % mean_diff_productive_share_oct_minus_june (pp)
183+\providecommand{\SPIDpairedSePp}{1.3} % se (pp)
184+\providecommand{\SPIDcohortIssuersBoth}{491} % table6_cohort.csv both.issuers
185+\providecommand{\SPIDcohortIssuersRussellOnly}{1{,}992} % russell_only.issuers
186+\providecommand{\SPIDcohortIssuersSpOnly}{9} % sp500_only.issuers
187+\providecommand{\SPIDcohortBothPerIssuerAll}{55.8} % both.per_issuer_all
188+\providecommand{\SPIDcohortRussellOnlyPerIssuer}{46.9} % russell_only.per_issuer_all
189+\providecommand{\SPIDcohortBothPerIssuerOctober}{25.1} % both.per_issuer_october_only
190+\providecommand{\SPIDcohortOlsAll}{8.84} % table6_cohort_regression.json:projects_all_on_sp500.in_sp500.coef
191+\providecommand{\SPIDcohortOlsAllSe}{1.62} % hc1_se
192+\providecommand{\SPIDcohortOlsOctober}{-22.98} % projects_october_only_on_sp500.in_sp500.coef
193+\providecommand{\SPIDcohortOlsOctoberSe}{1.20}
194+\providecommand{\SPIDcohortOlsControlled}{-0.28} % projects_all_on_sp500_log_rows.in_sp500.coef
195+\providecommand{\SPIDcohortOlsControlledSe}{1.52}
196+\providecommand{\SPIDcohortOlsN}{2{,}499} % n
197+\providecommand{\SPIDfiscalYearNullMentions}{68{,}827} % fiscal_year_audit.json
198+\providecommand{\SPIDfiscalYearNullOctTenK}{823}
199+\providecommand{\SPIDfiscalYearNullOctTenQ}{28{,}074}
200+\providecommand{\SPIDfiscalYearNullFilings}{134{,}124} % src_filings_fiscal_year_null_by_form (sum)
201+\providecommand{\SPIDfiscalYearFillAccessions}{31{,}976} % fiscal_year_fill_by_accession.csv rows
202+
203+% ---- focus windows (results/focus/stats_keys.json, focus_coverage_by_form_item.csv, shown_fraction_bins.csv, mdna_10k_short_by_year.csv; results/rules/focus_recall_loss*.csv) ----
204+\providecommand{\SPIDfocusOverBudgetSections}{326{,}095} % stats_keys.json:ledger_sections_over_9000_chars
205+\providecommand{\SPIDfocusOverBudgetSectionsPct}{29} % 326,095 / 1,123,098
206+\providecommand{\SPIDfocusOverBudgetCalls}{324{,}386} % stats_keys.json:calls_over_9000_chars
207+\providecommand{\SPIDfocusOverBudgetCallsPct}{46} % 324,386 / 703,725
208+\providecommand{\SPIDfocusMeanShownOverBudgetPct}{15.9} % stats_keys.json:mean_shown_frac_over_budget
209+\providecommand{\SPIDmdnaN}{28{,}919} % stats_keys.json:ledger_10k_mdna_n
210+\providecommand{\SPIDmdnaMedianWords}{9{,}905} % stats_keys.json:ledger_10k_mdna_median_words
211+\providecommand{\SPIDmdnaMedianChars}{64{,}194} % ledger_10k_mdna_median_chars
212+\providecommand{\SPIDmdnaShownMedianPct}{9.3} % ledger_10k_mdna_shown_p50
213+\providecommand{\SPIDmdnaShownPTenPct}{4.3} % focus_coverage_by_form_item.csv 10-K md_and_a shown_p10
214+\providecommand{\SPIDmdnaShownPNinetyPct}{24} % shown_p90
215+\providecommand{\SPIDmdnaLastShownMedianPct}{16} % ledger_10k_mdna_last_p50
216+\providecommand{\SPIDmdnaShownLtTwentyFivePct}{90.5} % ledger_10k_mdna_pct_shown_lt_25
217+\providecommand{\SPIDmdnaHitsShownMedianPct}{15.6} % hits_shown_p50
218+\providecommand{\SPIDbusinessShownMedianPct}{15.7} % 10-K business shown_p50
219+\providecommand{\SPIDriskShownMedianPct}{10.1} % 10-K risk_factors shown_p50
220+\providecommand{\SPIDtenQmdnaShownMedianPct}{13.2} % 10-Q md_and_a shown_p50
221+\providecommand{\SPIDtenQfinShownMedianPct}{10.6} % 10-Q financial_statements shown_p50
222+\providecommand{\SPIDeightKWholePct}{91} % 100 - 8-K pct_over_9000 (8.82)
223+\providecommand{\SPIDmsgTruncatedN}{0} % stats_keys.json:msg_truncated_14k
224+\providecommand{\SPIDmentionsFromLtTwentyFive}{193{,}416} % stats_keys.json:mentions_from_sections_shown_lt_25
225+\providecommand{\SPIDmentionsFromLtTwentyFivePct}{62.7} % / 308,477
226+\providecommand{\SPIDmentionsFromLtTwentyFiveTenK}{84} % focus_coverage_by_form.csv 10-K pct_mentions_from_lt25
227+\providecommand{\SPIDmentionsFromLtTwentyFiveTenQ}{79} % 10-Q
228+\providecommand{\SPIDmentionsFromLtTwentyFiveEightK}{6} % 8-K (5.74)
229+\providecommand{\SPIDplateauLow}{0.4} % mentions_vs_length_by_item.csv 10-K md_and_a
230+\providecommand{\SPIDplateauHigh}{1.5}
231+\providecommand{\SPIDplateauRange}{1.2--1.6}
232+\providecommand{\SPIDplateauKchars}{20{,}000}
233+\providecommand{\SPIDmentionsPerTenKShownChars}{2.5}
234+\providecommand{\SPIDcapexVocabShownMdnaPct}{5.8} % focus_coverage_by_form_item.csv pct_capex_vocab_shown_over_budget 10-K md_and_a
235+\providecommand{\SPIDcapexVocabShownBusinessPct}{10.0}
236+\providecommand{\SPIDcapexVocabShownTenQmdnaPct}{8.3}
237+\providecommand{\SPIDshortMdnaN}{169} % mdna_10k_short_by_year.csv sum(lt30_words)
238+\providecommand{\SPIDshortMdnaDenom}{29{,}088} % sum(mdna_sections)
239+\providecommand{\SPIDshortMdnaPct}{0.6}
240+\providecommand{\SPIDshortMdnaIncorporatedN}{470} % sum(lt300_incorporated_by_ref)
241+\providecommand{\SPIDrulesFocusRecovered}{84{,}841} % focus_recall_loss_overall.csv rules_focused
242+\providecommand{\SPIDrulesFocusTotal}{324{,}237} % rules_full
243+\providecommand{\SPIDrulesFocusRecoveredPct}{26.2} % 100 - pct_lost
244+\providecommand{\SPIDrulesFocusMdnaPct}{20.8} % focus_recall_loss.csv 10-K md_and_a (100 - 79.18)
245+\providecommand{\SPIDrulesFocusBusinessPct}{36.9} % 10-K business
246+\providecommand{\SPIDrulesFocusTenQmdnaPct}{25.1} % 10-Q md_and_a
247+\providecommand{\SPIDrulesFocusEightKPct}{84.2} % 8-K full_body
248+
249+% ---- rules baseline (results/rules/agreement_overall.csv, agreement_by_form.csv, agreement_by_run.csv, type_agreement.csv) ----
250+\providecommand{\SPIDrulesSampleProductive}{30{,}000} % manifest.json notes.sample
251+\providecommand{\SPIDrulesSampleZero}{30{,}000}
252+\providecommand{\SPIDrulesGivenLlmPct}{85.7} % p_rules_given_llm
253+\providecommand{\SPIDrulesGivenLlmTenK}{97.4}
254+\providecommand{\SPIDrulesGivenLlmTenQ}{94.4}
255+\providecommand{\SPIDrulesGivenLlmEightK}{69.2}
256+\providecommand{\SPIDrulesGivenLlmJune}{79.8}
257+\providecommand{\SPIDrulesGivenLlmOctober}{86.7}
258+\providecommand{\SPIDllmGivenRulesPct}{32.5} % p_llm_given_rules_weighted
259+\providecommand{\SPIDrulesFlagPct}{39.5} % rules_pos_pct_weighted
260+\providecommand{\SPIDrulesAgreementPct}{71.2} % agreement_pct_w
261+\providecommand{\SPIDrulesLlmOnlyPct}{2.1}
262+\providecommand{\SPIDrulesOnlyPct}{26.6}
263+\providecommand{\SPIDrulesTypeOverlapPct}{84.6} % type_overlap_pct_codetected
264+\providecommand{\SPIDrulesTypeMa}{96.8} % type_agreement.csv
265+\providecommand{\SPIDrulesTypeDrug}{92.5}
266+\providecommand{\SPIDrulesTypeCost}{76.9}
267+\providecommand{\SPIDrulesTypeCapex}{55.2}
268+\providecommand{\SPIDrulesTypePlant}{40.7}
269+\providecommand{\SPIDrulesTypeGeo}{36.5}
270+
271+% ---- financing / buy-back false-positive classes (results/fp_classes/summary.json, financing_regex_by_type.csv, _by_item.csv, _terms.csv, table5_restated_excl_financing.csv) ----
272+\providecommand{\SPIDfinMentions}{22{,}412} % summary.json:mentions_matched[0]
273+\providecommand{\SPIDfinMentionsPct}{7.3} % 7.28
274+\providecommand{\SPIDfinAmountB}{17.8} % matched_amount_gusd[0] / 1000
275+\providecommand{\SPIDfinAmountDenomB}{104.2} % matched_amount_gusd[1] / 1000
276+\providecommand{\SPIDfinUnregN}{5{,}179} % unregistered_sales_matched[0]
277+\providecommand{\SPIDfinUnregDenom}{9{,}506}
278+\providecommand{\SPIDfinUnregPct}{54.5}
279+\providecommand{\SPIDfinEightKPct}{19.2} % financing_regex_by_item.csv 8-K full_body
280+\providecommand{\SPIDfinFinStatementsPct}{2.4} % 10-Q financial_statements
281+\providecommand{\SPIDfinControlsPct}{0.2} % 10-Q controls_and_procedures
282+\providecommand{\SPIDfinCapexPct}{52.6} % financing_regex_by_type.csv capex_program
283+\providecommand{\SPIDfinCostPct}{16.4} % cost_reduction
284+\providecommand{\SPIDfinMaPct}{7.0} % ma_integration
285+\providecommand{\SPIDcapexProjectsExcl}{4{,}725} % table5_restated_excl_financing.csv capex_program
286+\providecommand{\SPIDcapexShareExcl}{4.3}
287+\providecommand{\SPIDcostProjectsExcl}{5{,}403}
288+\providecommand{\SPIDmaProjectsExcl}{37{,}527}
289+\providecommand{\SPIDfinProjectsRep}{12{,}027} % summary.json:projects_matched_rep[0]
290+\providecommand{\SPIDfinProjectsRepPct}{9.9}
291+\providecommand{\SPIDfinProjectsAny}{13{,}139} % projects_matched_rep[1]
292+\providecommand{\SPIDitemTwoPairs}{77{,}869} % summary.json:item2_collision pairs
293+\providecommand{\SPIDunregMedianWords}{602}
294+\providecommand{\SPIDtenQmdnaMedianWords}{7{,}573}
295+\providecommand{\SPIDunregGtThreeK}{1{,}001}
296+\providecommand{\SPIDunregGtThreeKPct}{1.3}
297+\providecommand{\SPIDswapCandidates}{296}
298+\providecommand{\SPIDunregGtThreeKMentions}{425}
299+\providecommand{\SPIDfinTermRepurchase}{10{,}886} % financing_regex_terms.csv
300+\providecommand{\SPIDfinTermSeniorNotes}{3{,}375}
301+\providecommand{\SPIDfinTermTermLoan}{2{,}263}
302+
303+% ---- 8-K item-code consistency (results/benchmark_8k/summary.json, item_vs_type.csv scope=all_8k_sections) ----
304+\providecommand{\SPIDeightKItemCodePct}{99.7} % summary.json:coverage_pct 99.74
305+\providecommand{\SPIDbenchMaGivenTwoOhOne}{0.911} % p_type_given_item ma_integration | Item 2.01
306+\providecommand{\SPIDbenchMaGivenTwoOhOneCiLow}{0.903}
307+\providecommand{\SPIDbenchMaGivenTwoOhOneCiHigh}{0.918}
308+\providecommand{\SPIDbenchTwoOhOneN}{5{,}456} % n_item
309+\providecommand{\SPIDbenchMaGivenEightOhOne}{0.199} % Item 8.01 (control)
310+\providecommand{\SPIDbenchMaGivenFiveOhTwo}{0.031} % Item 5.02 (control)
311+\providecommand{\SPIDbenchMaBase}{0.095} % base_rate_type
312+\providecommand{\SPIDbenchItemsGivenMa}{0.467} % p_item_given_type, Item 2.01 or 1.01
313+\providecommand{\SPIDbenchCostGivenTwoOhFive}{0.709} % cost_reduction | Item 2.05
314+\providecommand{\SPIDbenchCostGivenTwoOhFiveCiLow}{0.687}
315+\providecommand{\SPIDbenchCostGivenTwoOhFiveCiHigh}{0.730}
316+\providecommand{\SPIDbenchTwoOhFiveN}{1{,}700}
317+\providecommand{\SPIDbenchCostLift}{92} % lift_type_given_item 92.05
318+\providecommand{\SPIDbenchTwoOhFiveGivenCost}{0.392}
319+\providecommand{\SPIDbenchPartnershipGivenOneOhOne}{0.040}
320+\providecommand{\SPIDbenchPartnershipBase}{0.011}
321+
322+% ---- annotation frame (results/annotation_frame/design.json) ----
323+\providecommand{\SPIDannSeed}{20261105}
324+\providecommand{\SPIDannStrata}{192}
325+\providecommand{\SPIDannNProductive}{1{,}677}
326+\providecommand{\SPIDannNZero}{385}
327+\providecommand{\SPIDannZeroGatePass}{285}
328+\providecommand{\SPIDannZeroGateReject}{100}
329+\providecommand{\SPIDannCore}{510}
330+\providecommand{\SPIDannDev}{1{,}058}
331+\providecommand{\SPIDannHoldout}{1{,}004}
332+\providecommand{\SPIDannDeffProductive}{3.4}
333+\providecommand{\SPIDannDeffZero}{1.2}
334+\providecommand{\SPIDannHalfWidthPrecision}{4.4} % half_width_95_precision_p0.5 (pp)
335+\providecommand{\SPIDannHalfWidthFn}{2.4} % half_width_95_zero_fn_rate 0.05 (pp)
336+\providecommand{\SPIDannMde}{7.8} % mde_gate_recall_diff_at_p0.05 (pp)
337+\providecommand{\SPIDannFloor}{10}
338+\providecommand{\SPIDannOversample}{2}
339+\providecommand{\SPIDannPopProductive}{168{,}230}
340+\providecommand{\SPIDannPopZero}{954{,}868}
341+
342+% ---- time series (results/timeseries/summary.json, first_seen_fixed_cohort.csv) ----
343+\providecommand{\SPIDfirstSeenLastYear}{6{,}694} % all_issuers 2026 first_seen_current_key
344+\providecommand{\SPIDfixedCohortIssuers}{1{,}389} % summary.json:cohort_issuers
345+\providecommand{\SPIDfixedCohortMentionsPerIssuerFirst}{9.6} % 2011
346+\providecommand{\SPIDfixedCohortMentionsPerIssuerLast}{8.8} % 2025 (8.75)
347+\providecommand{\SPIDfixedCohortNewPerIssuerFirst}{4.7} % 2011
348+\providecommand{\SPIDfixedCohortNewPerIssuerLast}{2.8} % 2025 (2.83)
349+\providecommand{\SPIDfixedCohortFirstSeenFirst}{6{,}533} % 2011
350+\providecommand{\SPIDfixedCohortFirstSeenLast}{3{,}926} % 2025
351+\providecommand{\SPIDepisodesKthree}{131{,}823} % summary.json:episodes_k3_total
352+\providecommand{\SPIDepisodesKfive}{126{,}318}
353+
354+% ---- universe and corpus artefacts (results/universe/universe_artefacts.json, results/russell_coverage.json, data/stats.json) ----
355+\providecommand{\SPIDdualClassCiks}{18} % 2,573 - 2,555
356+\providecommand{\SPIDuniverseBoth}{491} % implemented_changes.md N10 (universe.json)
357+\providecommand{\SPIDuniverseSpOnly}{9}
358+\providecommand{\SPIDuniverseRuOnly}{2{,}064}
359+\providecommand{\SPIDparseErrors}{14} % filings_status_missing.csv parse_status = error
360+\providecommand{\SPIDannualPanelFirms}{2{,}499} % stats.json:annual_panel_firms
361+\providecommand{\SPIDrussellGapMax}{441} % 2,996 - 2,555
362+\providecommand{\SPIDrussellGapMaxPct}{14.7}
363+\providecommand{\SPIDfactsheetDate}{September~30, 2026} % russell_coverage.json:index_as_of
364+\providecommand{\SPIDiwvHoldingsDate}{October~23, 2026} % stats.json:universe.russell_holdings_as_of
365+\providecommand{\SPIDiwvFetchDate}{October~27, 2026} % universe_artefacts.json:russell_scalars.fetched_at
366+\providecommand{\SPIDiwvPageDate}{November~4, 2026} % russell_coverage.json:fund_holdings_as_of
367+\providecommand{\SPIDiwvProspectusDate}{July~31, 2026} % russell_coverage.json:replication_source_title
368+\providecommand{\SPIDuniverseJsonSha}{3967b29b} % universe_artefacts.json sha256 prefix
369+\providecommand{\SPIDrussellJsonSha}{758cbebf}
370+\providecommand{\SPIDspJsonSha}{50840752}
371+\providecommand{\SPIDfactsheetSha}{281e9264} % russell_coverage.json:source_sha256 prefix
372+\providecommand{\SPIDmethodologySha}{26d2d051} % methodology_document.sha256 prefix
373+\providecommand{\SPIDissuersWithoutFilings}{65} % stats.json / Table 1
374+\providecommand{\SPIDissuersFilingsNoProject}{7} % 2,499 - 2,492
375+\providecommand{\SPIDspWikipediaRows}{503} % universe_artefacts.json:sp500_scalars.count
376+\providecommand{\SPIDspWikipediaDate}{May~25, 2026} % sp500_scalars.fetched_at
377+\providecommand{\SPIDtickerMapSize}{10{,}430} % cik_mapping_scalars.count
378+
379+% ---- run facts quoted in the text (docs/research_log.md, environment.md, reproducibility) ----
380+\providecommand{\SPIDtotalCostUsd}{775} % research_log.md 2026-10-27/28 (author-reported total)
381+\providecommand{\SPIDworkers}{48} % log_summary.json:october.workers_values
382+\providecommand{\SPIDrequirementsLockPackages}{88} % requirements.lock (N12)
383+\providecommand{\SPIDpythonVersion}{3.12.15} % .python-version (N12)
384+\providecommand{\SPIDduckdbVersion}{2.0.0} % environment.md (N12)
385+\providecommand{\SPIDreferencesN}{42} % references.bib entries (L4)
386+\providecommand{\SPIDdoiVerifiedN}{36} % L4: DOIs re-resolved 2026-11-05
387+\providecommand{\SPIDtestsN}{22} % tests/test_tables.py (L6)
388+\providecommand{\SPIDsnapshotFilesN}{nine} % code/audit/spid_snapshot/SHA256SUMS
389+\providecommand{\SPIDjuneRunDate}{June~18, 2026} % log_summary.json:june.first/last
390+\providecommand{\SPIDbackfillTimestamp}{October~27, 2026, 13:12} % backfill_block.json:min_extracted_at
391
Menu

Theme