SPB Git

spb/firc0001_uqo

Public

E (exhibits): make_tables.py rewritten — every table a self-contained float (caption, label, threeparttable notes, generated-by comment), 13 new Stage D exhibits (ledger calls, outage, grounding, spec curve, focus, cohort OLS, financing class, 8-K proxy, universe artefacts, time-series cohort, rules baseline, tokens, over-merge), Tables 1-9/12 rebuilt (ledger vs stored, CI column, 100.1 share, longtable), 8 figures to one design system (Okabe-Ito, markers, zero-based axes, integer ticks, cohort series, CIs); 830 \SPID macros incl. the 365 requested by the writing stage, computed from results/ (numbers_pending.tex retired); half-up rounding; render-and-inspect audit (quality_control/_FIRC-0001_*_audit.csv); README exhibit map (EDIT-21..23, ADVE-16, AI_C-16, AI_C-17, LITE-10, LITE-12, ECON-18, THEO-18, EDIT-05, ADVE-06, DATA-04, ECON-13, EDIT-14, ADVE-13, ECON-14, THEO-15, DATA-15, engine audit)

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

60 changed files +6,212 −1,177

60 changed files
modified README.md +30 −24
@@ -31,28 +31,34 @@ python3 -I -m pytest -q tests # checks only
31 31
32 ## Program-to-exhibit map 32 ## Program-to-exhibit map
33 33
34−| exhibit | generated file | script | inputs | 34+Every table is a self-contained float written by `make_tables.py` to `paper/tables/<name>.tex` (caption, label, `threeparttable` notes, generated-by comment); every figure is a vector PDF plus a float wrapper `paper/figures/<name>.tex`. The prose files only `\input` them. Labels are `tab:<name without tab_>` and `fig:<name without fig_>`.
35+
36+| exhibit (label) | generated file | script | inputs |
35 |---|---|---|---| 37 |---|---|---|---|
36−| Table 1 universe reconciliation | `paper/tables/tab_reconciliation.tex` | `make_tables.py` | `stats.json:universe`, `documented_inputs.json:iwv_equity_lines_reported` | 38+| tab:reconciliation universe reconciliation + Russell coverage | `tab_reconciliation.tex` | `make_tables.py` | `stats.json:universe`, `documented_inputs.json`, `results/russell_coverage.json`, `results/universe/universe_artefacts.json` |
37−| Table 2 filings by form | `tab_filings.tex` | `make_tables.py` | `filings_by_form.csv`, `parse_status.csv`, `stats.json` | 39+| tab:filings filings by form | `tab_filings.tex` | `make_tables.py` | `filings_by_form.csv`, `parse_status.csv`, `results/universe/filings_status_missing.csv` |
38−| Table 3 sections and ledger (+ note) | `tab_sections.tex`, `tab_sections_note.tex` | `make_tables.py` | `sections_by_form.csv`, `ledger_by_form.csv`, `mentions_by_form.csv`, `results/ledger/table3_ledger_vs_stored.csv`, `results/ledger/ledger_collisions.csv` | 40+| tab:sections ledger vs stored, calls | `tab_sections.tex` | `make_tables.py` | `sections_by_form.csv`, `ledger_by_form.csv`, `mentions_by_form.csv`, `results/ledger/table3_ledger_vs_stored.csv`, `ledger_collisions.csv` |
39−| Table 4 items in scope | `tab_items.tex` | `make_tables.py` | `ledger_10k_items.csv`, `ledger_10q_items.csv`, `results/ledger/gate_pass_by_form_item.csv` | 41+| tab:ledger_calls rows / calls / productive by form x run | `tab_ledger_calls.tex` | `make_tables.py` | `results/ledger/gate_pass_by_form_run.csv`, `gate_pass_by_run.csv`, `gate_pass_totals.json` |
40−| Table 5 projects by type (+ note) | `tab_types.tex`, `tab_types_note.tex` | `make_tables.py` | `projects_by_type.csv`, `projects_by_type_ci.csv` (N13), `results/resolver/overmerge_by_type.csv`, `amount_dist.csv` | 42+| tab:outage outage reconciliation | `tab_outage.tex` | `make_tables.py` | `results/ledger/log_summary.json`, `throughput.json`, `backfill_block.json`, `resume_batch1_vs_expected.csv` |
41−| Table 6 by sector | `tab_sectors.tex` | `make_tables.py` | `projects_by_sector.csv`, `companies_by_sector.csv` | 43+| tab:items items in scope (+ calls, shown share, financing share) | `tab_items.tex` | `make_tables.py` | `ledger_10k_items.csv`, `ledger_10q_items.csv`, `results/ledger/gate_pass_by_form_item.csv`, `results/focus/`, `results/fp_classes/` |
42−| Table 7 status / mentions / span | `tab_status.tex` | `make_tables.py` | `projects_by_status.csv`, `mentions_per_project.csv`, `duration.csv` | 44+| tab:fp_classes financing-class mentions | `tab_fp_classes.tex` | `make_tables.py` | `results/fp_classes/*.csv`, `summary.json` |
43−| Table 8 amounts and projects per issuer (+ note) | `tab_amounts.tex`, `tab_amounts_note.tex` | `make_tables.py` | `amount_dist.csv`, `projects_per_issuer.csv`, `stats.json:amount_*` | 45+| tab:focus focus-window coverage | `tab_focus.tex` | `make_tables.py` | `results/focus/focus_coverage_by_form_item.csv`, `_by_form.csv`, `stats_keys.json` |
44−| Table 9 provenance example | `tab_provenance.tex` | `make_tables.py` | `example_provenance.csv`, `documented_inputs.json:snippet_chars` | 46+| tab:types projects by category (+ CI, excl. financing, over-merge) | `tab_types.tex` | `make_tables.py` | `projects_by_type.csv`, `projects_by_type_ci.csv`, `results/fp_classes/table5_restated_excl_financing.csv`, `results/resolver/overmerge_by_type.csv` |
45−| Table 12 data-model audit (longtable) | `tab_datamodel.tex` | `make_tables.py` | `data/datamodel_audit.csv` | 47+| tab:sectors by sector | `tab_sectors.tex` | `make_tables.py` | `projects_by_sector.csv`, `companies_by_sector.csv` |
46−| Tables 14–17 (appendix) | `tab_coverage_year.tex`, `tab_top_issuers.tex`, `tab_confidence.tex`, `tab_graph.tex` | `make_tables.py` | `issuers_by_year.csv`, `filings_by_year_form.csv`, `mentions_by_year.csv`, `projects_by_first_seen_year.csv`, `top_issuers.csv`, `confidence_dist.csv`, `kg.csv` | 48+| tab:cohort cohort x run, issuer-level OLS | `tab_cohort.tex` | `make_tables.py` | `results/runs/table6_cohort.csv`, `table6_cohort_regression.json` |
47−| Appendix A taxonomy | `tab_taxonomy.tex` | `make_tables.py` | `code/audit/spid_snapshot/taxonomy.py` | 49+| tab:status status / mentions / span | `tab_status.tex` | `make_tables.py` | `projects_by_status.csv`, `mentions_per_project.csv`, `duration.csv`, `results/resolver/ties_idempotence.json` |
48−| Appendix B prompt and gate regex | `prompt_verbatim.tex`, `gate_regex.tex` | `make_tables.py` | `code/audit/spid_snapshot/llm.py`, `rules.py` (read with `ast`, never retyped) | 50+| tab:amounts amounts and projects per issuer | `tab_amounts.tex` | `make_tables.py` | `amount_dist.csv`, `projects_per_issuer.csv`, `stats.json:amount_*`, `results/grounding/amount_tail.json` |
49−| Stage D tables (when `results/` is present) | `tab_spec_curve.tex`, `tab_top_name_tokens.tex`, `tab_overmerge.tex`, `tab_june_october.tex`, `tab_table3_calls.tex`, `tab_grounding.tex`, `tab_focus.tex`, `tab_cohort.tex`, `tab_fp_classes.tex`, `tab_timeseries_cohort.tex`, `tab_benchmark_8k.tex`, `tab_rules_agreement.tex` | `make_tables.py` (generic CSV → tabular) | `results/<package>/*.csv` from `code/audit/a*.py` | 51+| tab:provenance provenance example | `tab_provenance.tex` | `make_tables.py` | `example_provenance.csv`, `documented_inputs.json:snippet_chars`, `results/resolver/composition.json` |
50−| Figure 1 coverage (integer year ticks) | `paper/figures/fig_coverage.pdf` | `make_tables.py` | `issuers_by_year.csv` | 52+| tab:spec_curve specification curve of the project count | `tab_spec_curve.tex` | `make_tables.py` | `results/resolver/spec_curve.csv`, `composition.json`, `ties_idempotence.json` |
51−| Figure 3 projects by type | `fig_types.pdf` | `make_tables.py` | `projects_by_type.csv` | 53+| tab:grounding mechanical grounding | `tab_grounding.tex` | `make_tables.py` | `results/grounding/grounding_by_group.csv`, `grounding_element_level.csv`, `grounding_all_structured.csv`, `fallback_bounds.json` |
52−| Figure 4 confidence | `fig_confidence.pdf` | `make_tables.py` | `confidence_dist.csv` | 54+| tab:benchmark_8k 8-K item-code consistency | `tab_benchmark_8k.tex` | `make_tables.py` | `results/benchmark_8k/item_vs_type.csv`, `summary.json` |
53−| Figure 5 mentions and new projects by year (y from 0; second panel per issuer; 2010 / 2026 shaded) | `fig_mentions_year.pdf` | `make_tables.py` | `mentions_by_year.csv`, `projects_by_first_seen_year.csv` | 55+| tab:rules_agreement rules vs LLM, focus recall bound | `tab_rules_agreement.tex` | `make_tables.py` | `results/rules/agreement_by_form.csv`, `agreement_overall.csv`, `focus_recall_loss.csv` |
54−| Figure 2 pipeline diagram | `fig_pipeline.pdf` | hand-drawn (TikZ/PDF, not generated) | — | 56+| tab:datamodel data-model audit (longtable, no float) | `tab_datamodel.tex` | `make_tables.py` | `data/datamodel_audit.csv` |
55−| inline numbers (`\SPID…`) | `paper/tables/numbers.tex`, `results/inline_numbers.json` | `make_tables.py` | all of the above; `results/**.json` (N1, N3, L5) | 57+| tab:taxonomy, Appendix B prompt and gate regex | `tab_taxonomy.tex`, `prompt_verbatim.tex`, `gate_regex.tex` | `make_tables.py` | `code/audit/spid_snapshot/{taxonomy,llm,rules}.py` (read with `ast`, never retyped) |
56−| `data/*.csv`, `data/stats.json` | 29 CSV + 3 new (`ledger_collisions`, `cohort_by_run`, `calls_by_form`) + `projects_by_type_ci.csv` | `export_stats.py` (node, read-only) | `edgar_research.duckdb`, `spid.duckdb`, `data/metadata/*.json`, run logs | 58+| tab:june_october, tab:universe_artefacts, tab:coverage_year, tab:timeseries_cohort, tab:top_issuers, tab:confidence, tab:graph, tab:top_name_tokens, tab:overmerge (appendix) | `tab_<name>.tex` | `make_tables.py` | `results/resolver/`, `results/universe/`, `results/timeseries/`, `data/*.csv` |
57− 59+| fig:coverage, fig:types, fig:confidence, fig:mentions_year, fig:grounding, fig:spec_curve, fig:focus | `fig_<name>.pdf` + `.png` + `.tex` float | `make_tables.py` (Okabe-Ito palette, markers + line styles, 9 pt serif, width = textwidth) | `data/*.csv`, `results/timeseries/`, `results/grounding/`, `results/resolver/`, `results/focus/` |
58−Figure numbers follow the order of `main.tex`; the `.png` copies under `paper/figures/` are not produced by any script and are kept only for the Word export (`code/tex2docx`). 60+| fig:pipeline pipeline diagram | TikZ in `paper/sections/methodology.tex` | hand-drawn (not generated) | counts via `\SPID` macros |
61+| inline numbers (`\SPID…`) | `paper/tables/numbers.tex`, `results/inline_numbers.json` | `make_tables.py` | all of the above; `results/**.json` |
62+| `data/*.csv`, `data/stats.json` | 29 CSV + `ledger_collisions`, `cohort_by_run`, `calls_by_form`, `projects_by_type_ci` | `export_stats.py` (node, read-only; `IS DISTINCT FROM` amount_raw check, October wall-clock from the first October flush, deterministic ORDER BY, spill directory outside the repo) | `edgar_research.duckdb`, `spid.duckdb`, `data/metadata/*.json`, run logs |
63+
64+Exhibit numbers follow the order of `main.tex`. The `.png` copies under `paper/figures/` are written by `make_tables.py` at `documented_inputs.json:png_dpi` for the Word export (`code/tex2docx`). The render-and-inspect audit of every exhibit is recorded in `UQO-WP-REVIEW/quality_control/_FIRC-0001_{table,figure}_audit.csv`.
modified code/make_tables.py +1541 −273
Large diff (2,145 lines) is not loaded by default to keep the page fast.Load diff
modified data/datamodel_audit.csv +1 −1
Large diff (8 lines) is not loaded by default to keep the page fast.Load diff
modified data/documented_inputs.json +95 −0
Large diff (101 lines) is not loaded by default to keep the page fast.Load diff
modified paper/figures/fig_confidence.pdf +0 −0

Binary file not shown.

modified paper/figures/fig_confidence.png +0 −0

Binary file not shown.

added paper/figures/fig_confidence.tex +6 −0
Large diff (6 lines) is not loaded by default to keep the page fast.Load diff
modified paper/figures/fig_coverage.pdf +0 −0

Binary file not shown.

modified paper/figures/fig_coverage.png +0 −0

Binary file not shown.

added paper/figures/fig_coverage.tex +6 −0
Large diff (6 lines) is not loaded by default to keep the page fast.Load diff
added paper/figures/fig_focus.pdf +0 −0

Binary file not shown.

added paper/figures/fig_focus.png +0 −0

Binary file not shown.

added paper/figures/fig_focus.tex +6 −0
Large diff (6 lines) is not loaded by default to keep the page fast.Load diff
added paper/figures/fig_grounding.pdf +0 −0

Binary file not shown.

added paper/figures/fig_grounding.png +0 −0

Binary file not shown.

added paper/figures/fig_grounding.tex +6 −0
Large diff (6 lines) is not loaded by default to keep the page fast.Load diff
modified paper/figures/fig_mentions_year.pdf +0 −0

Binary file not shown.

modified paper/figures/fig_mentions_year.png +0 −0

Binary file not shown.

added paper/figures/fig_mentions_year.tex +6 −0
Large diff (6 lines) is not loaded by default to keep the page fast.Load diff
added paper/figures/fig_spec_curve.pdf +0 −0

Binary file not shown.

added paper/figures/fig_spec_curve.png +0 −0

Binary file not shown.

added paper/figures/fig_spec_curve.tex +6 −0
Large diff (6 lines) is not loaded by default to keep the page fast.Load diff
modified paper/figures/fig_types.pdf +0 −0

Binary file not shown.

modified paper/figures/fig_types.png +0 −0

Binary file not shown.

added paper/figures/fig_types.tex +6 −0
Large diff (6 lines) is not loaded by default to keep the page fast.Load diff
modified paper/main.tex +0 −2
Large diff (14 lines) is not loaded by default to keep the page fast.Load diff
deleted paper/sections/numbers_pending.tex +0 −465
Large diff (465 lines) is not loaded by default to keep the page fast.Load diff
modified paper/tables/gate_regex.tex +3 −2
Large diff (8 lines) is not loaded by default to keep the page fast.Load diff
modified paper/tables/numbers.tex +636 −13
Large diff (778 lines) is not loaded by default to keep the page fast.Load diff
modified paper/tables/prompt_verbatim.tex +3 −2
Large diff (11 lines) is not loaded by default to keep the page fast.Load diff
modified paper/tables/tab_amounts.tex +10 −0
Large diff (16 lines) is not loaded by default to keep the page fast.Load diff
added paper/tables/tab_benchmark_8k.tex +30 −0
Large diff (30 lines) is not loaded by default to keep the page fast.Load diff
added paper/tables/tab_cohort.tex +31 −0
Large diff (31 lines) is not loaded by default to keep the page fast.Load diff
modified paper/tables/tab_confidence.tex +20 −8
Large diff (32 lines) is not loaded by default to keep the page fast.Load diff
modified paper/tables/tab_coverage_year.tex +14 −1
Large diff (23 lines) is not loaded by default to keep the page fast.Load diff
modified paper/tables/tab_datamodel.tex +18 −10
Large diff (42 lines) is not loaded by default to keep the page fast.Load diff
modified paper/tables/tab_filings.tex +16 −6
Large diff (27 lines) is not loaded by default to keep the page fast.Load diff
added paper/tables/tab_focus.tex +40 −0
Large diff (40 lines) is not loaded by default to keep the page fast.Load diff
modified paper/tables/tab_fp_classes.tex +33 −63
Large diff (100 lines) is not loaded by default to keep the page fast.Load diff
modified paper/tables/tab_graph.tex +13 −0
Large diff (21 lines) is not loaded by default to keep the page fast.Load diff
modified paper/tables/tab_grounding.tex +40 −63
Large diff (107 lines) is not loaded by default to keep the page fast.Load diff
modified paper/tables/tab_items.tex +31 −16
Large diff (52 lines) is not loaded by default to keep the page fast.Load diff
modified paper/tables/tab_june_october.tex +21 −11
Large diff (36 lines) is not loaded by default to keep the page fast.Load diff
added paper/tables/tab_ledger_calls.tex +29 −0
Large diff (29 lines) is not loaded by default to keep the page fast.Load diff
added paper/tables/tab_outage.tex +37 −0
Large diff (37 lines) is not loaded by default to keep the page fast.Load diff
modified paper/tables/tab_overmerge.tex +36 −23
Large diff (63 lines) is not loaded by default to keep the page fast.Load diff
modified paper/tables/tab_provenance.tex +15 −2
Large diff (24 lines) is not loaded by default to keep the page fast.Load diff
modified paper/tables/tab_reconciliation.tex +14 −1
Large diff (26 lines) is not loaded by default to keep the page fast.Load diff
added paper/tables/tab_rules_agreement.tex +32 −0
Large diff (32 lines) is not loaded by default to keep the page fast.Load diff
modified paper/tables/tab_sections.tex +14 −1
Large diff (23 lines) is not loaded by default to keep the page fast.Load diff
modified paper/tables/tab_sectors.tex +13 −1
Large diff (24 lines) is not loaded by default to keep the page fast.Load diff
modified paper/tables/tab_spec_curve.tex +24 −47
Large diff (75 lines) is not loaded by default to keep the page fast.Load diff
modified paper/tables/tab_status.tex +13 −1
Large diff (22 lines) is not loaded by default to keep the page fast.Load diff
modified paper/tables/tab_taxonomy.tex +10 −0
Large diff (16 lines) is not loaded by default to keep the page fast.Load diff
modified paper/tables/tab_timeseries_cohort.tex +34 −36
Large diff (74 lines) is not loaded by default to keep the page fast.Load diff
modified paper/tables/tab_top_issuers.tex +12 −2
Large diff (25 lines) is not loaded by default to keep the page fast.Load diff
modified paper/tables/tab_top_name_tokens.tex +26 −22
Large diff (53 lines) is not loaded by default to keep the page fast.Load diff
modified paper/tables/tab_types.tex +37 −24
Large diff (66 lines) is not loaded by default to keep the page fast.Load diff
added paper/tables/tab_universe_artefacts.tex +26 −0
Large diff (26 lines) is not loaded by default to keep the page fast.Load diff
modified results/inline_numbers.json +3172 −57
Large diff (3,426 lines) is not loaded by default to keep the page fast.Load diff
Menu

Theme