# Popper V2 rung-3 minting run — companion note

**Minted:** 2026-08-04, prod box, read-only against the live scriptome census DB
(`docker exec inferopedia-web-1 python manage.py shell` / `docker exec inferopedia-db-1 psql`).
No writes, no git, no record dumps — aggregate queries only, per the minting-lane brief in
`docs/DESIGN_POPPER_V2_RUNG3_REGISTRATION_20260804.md` §4.

## Output

- `popper_v2_rung3_minted_1.json` — 10 conjectures, **cross-source joins** (r3-b1-01..10).
- `popper_v2_rung3_minted_2.json` — 10 conjectures, cross-state: institutional
  concentration / tail-law / diversity family (r3-b1-11..20).
- `popper_v2_rung3_minted_3.json` — 10 conjectures, cross-state: tradition/routing
  mix-invariant family (r3-b1-21..30).
- `popper_v2_rung3_minted_4.json` — 10 conjectures, cross-state: remaining mix/scale/
  integrity family (r3-b1-31..40).

**Batch size: 40** (disclosed, per V1's own discipline — survivors get read against this
number, not against a post-hoc count). 10 of 40 are cross-source joins (the minimum the
brief required); 30 of 40 are cross-state structural claims over NAMAMI's 11 complete
states, tested against the named India holdout.

Training corpus grounding: every conjecture's `notes` field carries the actual observed
training-side number(s) from a live aggregate query run during this pass, not an assumed
or estimated figure — per the brief's instruction to let triage check plausibility
directly. Two conjectures (r3-b1-22, r3-b1-38-adjacent r3-b1-31/33) explicitly flag a
training-set complication found while minting (Bihar breaking a "unique exception" framing
in r3-b1-22; r3-b1-33 not yet having a frozen mechanical instrument) rather than smoothing
it over.

## Queries run

8 substantive aggregate-query scripts against the live corpus (some containing 2 SQL
statements), all completed successfully:

1. **Source orientation** — `CatalogueSource` listing + per-source `ManuscriptRecord`
   counts (Django shell, <5s). Established the full landed-source roster (56 sources,
   6.60M total records at the start of the run) and confirmed which sources are
   `blocked`/`provisional` (0 rows) vs `active`.
2. **NAMAMI per-state counts** (raw SQL, forced sequential scan via
   `SET enable_indexscan=off`, 52.2s) — the foundational query: established the 11
   COMPLETE states (Bihar, Himachal Pradesh, Karnataka, Kerala, Madhya Pradesh,
   Maharashtra, Odisha, Rajasthan, Tamil Nadu, Uttar Pradesh, West Bengal), confirmed
   Andhra Pradesh as mid-walk (133,745, excluded per design doc), and confirmed the named
   holdout's LANDED counts (Gujarat 1,740; J&K 60; Assam 60; plus a tail of small/page-1
   states each at ~60-11,581 landed). No holdout state was queried beyond this single
   count — no state-scoped breakdown (routing, institutions, language mix, etc.) was ever
   run against Gujarat/J&K/Assam/tail, only against the 11 complete states.
3. **Cross-source batch 1** (Django ORM, 220.5s) — Ktiv/MPO/SfarData/Digital Scriptorium
   target_unit + date_precision + date_start + tradition + language distributions;
   SfarData ScribeAttestation and ManuscriptCorpusMembership counts; repository-join
   coverage for 11 sources; global medium_class × source matrix.
4. **NAMAMI pass 2** (raw SQL, 2 statements, 86.0s + 86.1s) — routing basis /
   script_group / language_group / tradition breakdown, and top-12 institutional
   concentration, both restricted to the 11 complete states via a `MATERIALIZED` CTE.
5. **Global unit/date batch** (Django ORM, 98.6s) — target_unit, date_precision, and
   date_start stats by source for ALL sources; SfarData ScribeAttestation
   ordinal/role/production_circumstance breakdown.
6. **Final cross-source batch** (Django ORM, 118.4s) — NGMCP tradition/language/extent;
   Ktiv fragment-subset vs physical_manuscript-subset date stats; top-10 repository
   shares for SfarData/Digital Scriptorium/Fihrist/HMML/CDLI/Beta maṣāḥǝft; ContainedText
   counts by source.
7. **NAMAMI pass 3** (raw SQL, 2 statements, 84.8s + 102.0s) — date_precision and
   `holding_is_not_origin` integrity by state, and subject_raw/language_raw distinct-value
   cardinality by state, both restricted to the 11 complete states.
8. **NAMAMI extent_leaves check** (Django ORM, source-wide only, 67.1s).

Plus 2 instant `EXPLAIN`-only diagnostic queries (no data) used to fix a slow-query plan
(see below).

**One incident, corrected, not a dropped angle:** the first attempt at query 2 above (via
plain Django ORM inside a client-side `timeout 150` wrapper) was killed at 150s — this was
my own over-tight wrapper, not the query being too slow. `EXPLAIN` showed Postgres picking
an index-scan plan on a ~66%-selective filter (stale statistics); forcing a sequential scan
(`SET enable_indexscan=off`) and dropping the wrapper let the same query finish in 52.2s.
Every query after that was run with a generous background timeout and no premature
client-side cutoff; the slowest single SQL statement across the whole run was 102.0s, under
the ~2-minute drop threshold in the brief.

## Angles considered and dropped or deferred

- **Full heavy-tail fit (Hill estimator / log-log OLS slope) for the tail-law conjecture
  (r3-b1-17)** — only top-12-per-state institution counts were pulled at minting time; the
  full-distribution fit is explicitly deferred to the pinning pass (frozen query, run once,
  fixture-tested), matching the design doc's own minting/pinning split rather than a time
  cutoff.
- **Repository-FK-based cross-source concentration for Ktiv and MPO** — dropped as
  INVALID, not merely deferred: their Repository FK resolves to only 3 and 5 distinct
  values respectively, a harvester-construction artifact (most records get lumped into a
  few coarse buckets), not a real institutional-concentration signal. Excluded from the
  r3-b1-02/r3-b1-10 comparator sets; noted inline so triage doesn't re-introduce them.
- **Mechanical Unicode-script classification of institute_raw (r3-b1-33)** — only a manual
  eyeball of already-fetched top-12 lists was done at minting time; flagged explicitly as
  NOT a frozen instrument and not registrable as-is.
- **NGMCP-date vs NAMAMI-date comparison** — dropped once NAMAMI's date_precision was
  found to be exactly 100% 'unknown' in all 11 complete states (a vacuous comparison);
  pivoted to extent_leaves-coverage (r3-b1-08/40) and dated-fraction (r3-b1-01/35)
  comparisons instead, which carry real content.
- **Per-state extent_leaves breakdown** — only the NAMAMI-source-wide rate (0.27%,
  11,862/4,386,949) was checked, for time-budget reasons; r3-b1-08 and r3-b1-40 both flag
  this explicitly as needing a per-state re-run before registration.
- **Subject/language cardinality vs abstention-rate correlation-hunting** — noticed a
  suggestive-but-noisy pattern (messier/higher-abstention states also show more raw
  language-string diversity, Uttar Pradesh partly excepted); deliberately NOT minted as a
  conjecture, to avoid registering a metric found by looking at the results first (V2 §8's
  standing rule on exploratory vs pre-specified metrics).
- **juan-vs-title unit-firewall cross-source conjecture** (using bnf-gallica-pelliot /
  cbeta-works / mlgb3-catalogues-local's title/juan split) — considered, dropped in favor
  of stronger picks; a prioritization call, not a data problem.
- **tradition-value diversity count per state** — computed (range ~4-6 distinct traditions
  per state), found too flat/uninformative across all 11 states to register.
- **Same-city flagship-institution clustering** (e.g. Pune's Anandashram/BORI/BISM as one
  cluster) — considered, dropped as not mechanically operationalizable from institute_raw
  strings alone without a name-normalization/clustering step.

## Known data-quality notes carried into the conjecture files (not separately actioned here)

- Several NAMAMI institute_raw top-12 entries look like the same real institution split
  across script/spelling variants (flagged in r3-b1-02's notes) — likely biases measured
  concentration slightly LOW, not high.
- Beta maṣāḥǝft's top-2 "repositories" are placeholder/malformed values, not real
  institutions — excluded as a comparator in r3-b1-06.
- A few MPO/Ktiv/FANKHA date_start max values look like placeholder outliers (e.g. year
  2100, 2400, 10314) — means reported in the conjecture notes are not outlier-trimmed;
  flagged for the pinning pass.
