# Popper Engine V2 rung-2 EDH minting run — companion note

**Minted:** 2026-08-05, prod box, read-only against the live scriptome census DB
(`docker exec inferopedia-web-1 python manage.py shell`). No writes, no git, no record
dumps — aggregate queries only, against `CatalogueSource` slug `edh` (id 68) exclusively.
This is the Popper Engine's **first non-manuscript batch**: unit = inscriptions
(`ManuscriptRecord` rows with `source=edh`, `target_unit=physical_object`,
`tradition="other"`, `medium_class="unknown"`), never mixed with any manuscript-tradition
source or count, per `docs/generated/edh_registration_slice_ingest_20260805.md` §3's
firewall.

Read first, binding: `docs/DESIGN_POPPER_V2_RUNG3_REGISTRATION_20260804.md` (record
schema, GOOD/BAD taxonomy, process — reused verbatim for this batch's shape);
`docs/generated/popper_v2_rung3_registration_20260804.md` §7 close-out + amendments (the
six banked method amendments, applied as LAW below); `docs/generated/
edh_registration_slice_ingest_20260805.md` (the substrate: 42,009 inscriptions, 33
registration-slice provinces, source slug `edh`).

## Output

- `popper_r2_edh_minted_1.json` — 9 conjectures (r2-edh-b1-01..09): per-province density
  structure (3), date-coverage/precision (3), text-genre/material-diversity floors (3).
- `popper_r2_edh_minted_2.json` — 8 conjectures (r2-edh-b1-10..17): material/monument-type
  mixes incl. 3 directional (10, 11, 12), the language East/West flagship directional (13),
  and epigraphic-habit temporal-curve shape incl. 2 directional (15, 17).
- `popper_r2_edh_minted_3.json` — 8 conjectures (r2-edh-b1-18..25): fragment/completeness
  (18, 19, 20, 25), text-length directional (21), religion directional (22), a
  single-exemplar-flagged directional (23), and a date-range-width band (24).

**Batch size: 25** (disclosed, per V1/V2's own discipline — survivors are read against 25,
not against a post-hoc count). **9 of 25 (36%) are directional/mechanism-based**
(r2-edh-b1-10, 11, 12, 13, 15, 17, 21, 22, 23) — comfortably past the ≥5 floor set in the
brief. Each predicts a specific, historically-reasoned, NAMED holdout-province pattern
(Mediterranean-vs-continental material trade, northwestern-limes military production
culture — triangulated three independent ways across 11/12/21, the Greek-East/Latin-West
linguistic divide, North Africa's documented longer epigraphic persistence, Mesopotamia's
brief/late Roman tenure, a West-Christian/Greek-East religion-tag reversal of the naive
prior, and a single-exemplar Cisalpine funerary-stele tradition), not a flat
training-ceiling restatement. The remaining 16 are structural/replication-style claims
(density, coverage heterogeneity, precision bands, genre/material diversity floors, curve
shape, completeness bands) — legitimate per the brief, and several are triangulated pairs/
trios measuring the same phenomenon through independent instruments (e.g. 11/12/21 all
target the same Rhine-contiguous frontier mechanism via three different fields).

**Method amendments applied as LAW (per the operator brief, all six banked at the prior
batch's close-out)**, concretely, per record:

1. **Attrition-proof kill wording** — every named-subset kill condition below reads "N% of
   the then-eligible holdout provinces in {set}" (r2-edh-b1-05, 09, 10, 13, 15, 21, 22), not
   a fixed count against a set that could shrink; the only fixed-count conditions
   (r2-edh-b1-03's "12 of 33" / "5 of 33") are against the FULL, code-locked 33-province
   holdout list (`EDH_HOLDOUT_PROVINCES`, hardcoded, not a dynamically-shrinking set the way
   NAMAMI's India walk was), so no attrition risk applies there.
2. **Unit-class/minimum-support scope conditions on every band** — every per-province
   instrument states its own N floor (ranging 20–150 depending on the field's sparsity) and
   an explicit UNDECIDABLE/no-decision fallback below it (r2-edh-b1-17 and 23 state this
   most explicitly, since both target holdout provinces expected to be small).
3. **Empty-string treatment stated in every distinct-count/categorical instrument** — stated
   once as a corpus-wide fact in each file's `corpus_snapshot_note` (0 empty-string values
   verified across `type_of_monument`, `type_of_inscription`, `material`, `religion`,
   `raw.language`; EDH's API omits absent fields rather than emitting `""`) rather than
   repeated as a live risk in each record, since it is a verified non-issue for this source.
4. **Exhaustively-named exception sets / continuous-mechanism forms, no open-textured
   predicates** — every directional conjecture's holdout province groups are named as
   explicit lists (r2-edh-b1-13's three-way partition covers all 33 holdout provinces with
   zero omissions and zero overlaps, verified programmatically); every named exclusion
   carries its stated reason (e.g. r2-edh-b1-22 excludes Syria/Iudaea/Mesopotamia by name,
   in advance, because each has an independently documented major early Jewish/Christian
   history that would confound the mechanism as stated — this is the direct lesson from the
   prior batch's Punjab/r3-b1-38 "known Persian-manuscript center" litigation).
5. **Derivation-phase filters where applicable** — r2-edh-b1-14/15/16/17 all exclude
   `date_end>=1000` (2 training-wide rows carrying an evident find-year/inscription-year
   mixup, disclosed in the ingest doc, not silently corrected there either) before computing
   any century-bucket statistic.
6. **Standing unit-class note** (in both JSON files' `standing_unit_class_note` field) fixes
   `Inc`/`Rom`/`ReB` treatment once, referenced by every record rather than re-litigated
   per-conjecture.

## Queries run

9 substantive aggregate-query rounds against the live corpus, all via Django ORM shell
(`docker exec inferopedia-web-1 python manage.py shell -c "..."`), all completed
successfully, all scoped to `source=edh` only:

1. **Source orientation + raw-key coverage** — confirmed 42,009 rows, then a full pass over
   every row's `raw.keys()` to establish field-population rates corpus-wide (id/country/
   language/last_update/letter_size/work_status/transcription/literature/
   responsible_individual at ~100%, down to religion at 22.5%).
2. **Model-field population + `raw.language` distribution** — confirmed `model.script` is
   blank on all rows (EDH carries no palaeographic field), `model.language` non-blank on
   all rows, `date_precision` breakdown (range 32,453 / unknown 8,025 / exact 1,531,
   matching the ingest doc exactly — cross-check passed), and the inscribed-language code
   distribution (L 40,994 / G 599 / GL 392 / small remainder).
3. **`work_status` / `type_of_monument` / `religion` / `country` global distributions** —
   established the controlled vocabularies and their "None" (absent-key) baselines.
4. **Per-province density, date-coverage, language mix** (33-row GROUP BY) — the
   foundational query for Family A/B/language conjectures.
5. **Per-province religion, monument-type, material mix** (33-row GROUP BY) — foundation for
   Family D and the religion-directional conjecture; this is where the naive "Eastern
   Mediterranean = high Judaism/Christianity" prior was checked and found REVERSED by the
   actual data (Belgica 29.28%, Baetica 9.38%, Africa 5.36% vs. Achaia 0.16%, Asia 0.20%),
   driving r2-edh-b1-22's final shape.
6. **Fragment/completeness proxies + text length** (bracket-density, '?'-suffix rate,
   average transcription length, 33-row GROUP BY, fixed a `LENGTH(jsonb)` type error by
   extracting via `KeyTextTransform` first) — foundation for Family F and the
   frontier-vs-Mediterranean text-length directional conjecture.
7. **Date outlier check + overall century histogram** — found the `date_end>=1000` outliers
   (2 rows total, clearly modern find-dates bleeding into a dating field, not a systemic
   issue — the bulk of `date_end>600` rows are genuine Visigothic-era Baetica material) and
   the corpus-wide century shape (peak 100–199 AD at 15,429 rows, steep 3rd-century
   decline) that grounds Family E.
8. **Per-province century-bucket histograms** for the 12 largest provinces (Dalmatia,
   Germania superior, Britannia, Africa Proconsularis, Dacia, Germania inferior, Baetica,
   Belgica, Achaia, Apulia et Calabria, Etruria, Asia) — grounds r2-edh-b1-14/15/16, and is
   where a **peak-relative post-decline metric was minted, checked, and discarded** in
   favour of a fixed-window one (see below).
9. **Genre-diversity / material-diversity distinct counts** (12-province subset) + **genre
   mix (epitaph/honorific/votive/diploma/building) and work_status/religion-coverage per
   province** (33-row GROUP BY, ran long — backgrounded and its completion notification
   picked up mid-task) + **average date-range-width per province** (33-row GROUP BY on
   `date_precision='range'` rows only) — grounds the remaining Family C/D/B instruments.

**One correction made mid-build, not swept past:** an initial hand-count of "large
(N>=1000) provinces" used to ground r2-edh-b1-03 and r2-edh-b1-05 missed Achaia (1,283),
undercounting 8 where the true figure is 9. Caught by an independent programmatic
re-derivation from the full 33-province count table before finalizing (not after a reader
would have found it) — both conjectures' actual THRESHOLDS were already conservative
enough to remain valid under the corrected figures (Achaia's own range-share, 44.1%, in
fact *strengthens* r2-edh-b1-05's case, since it also clears the 40% floor); only the
`notes` fields' stated observed values and province lists needed fixing, which was done
before this README was written.

**Verification pass (post-build, before finalizing):** every holdout-province name used in
every directional conjecture (r2-edh-b1-10, 11, 12, 13, 15, 17, 21, 22, 23) was checked
programmatically against the true 33-province holdout list from
`docs/generated/edh_registration_slice_ingest_20260805.md` §1 — confirmed zero
misclassifications (no training-slice province named as holdout or vice versa), and
r2-edh-b1-13's three-way partition (Latin-West / Greek-East / Excluded) was confirmed to
cover all 33 holdout provinces exactly once each (no omissions, no double-counting).

## Angles considered and dropped

- **Peak-relative post-peak decline ratio** (bucket[peak+1]/bucket[peak]) for the North
  Africa gentler-decline conjecture — DROPPED once checked against Achaia/Apulia et
  Calabria/Etruria (whose peak bucket is 0, not 1): their peak-to-peak+1 ratios looked
  falsely "gentle" (60.8%, 86.3%, 76.4%) purely because bucket 1 is itself still high for
  them, not because they share Africa Proconsularis's mechanism. Replaced with a FIXED
  century-window ratio (bucket 2 / bucket 1, i.e. always 200-299 AD over 100-199 AD)
  before minting r2-edh-b1-15, which cleanly isolates Africa Proconsularis as the outlier
  (84.7% vs. an 14.5–50.0% range for everyone else checked).
- **Naive "Eastern Mediterranean = elevated Judaism/Christianity" framing** — dropped as
  originally conceived (Achaia/Asia/Cyprus/Cappadocia predicted high) once the actual
  per-province religion-tag data showed the opposite: those provinces are near-zero (Achaia
  0.16%, Asia 0.20%), while Belgica (29.28%), Baetica (9.38%), and Africa Proconsularis
  (5.36%) carry the elevated share. Reframed as r2-edh-b1-22 around the actual pattern
  (Western Late Antique Christian centers), with Syria/Iudaea/Mesopotamia explicitly
  excluded from the low-side prediction by name, not left as an open "unless it's a known
  center" escape clause — the direct lesson from the prior batch's Punjab/r3-b1-38 event.
- **Tabula (public/honorific plaque) share as an urbanization proxy** — considered for
  Family D, dropped: Belgica/Etruria/Epirus/Baetica/Achaia show high tabula share (27–40%)
  while several presumably-urbanized Greek-East provinces (Asia 4.9%, Galatia 1.0%,
  Bithynia et Pontus 2.8%, Cyrene 1.1%) show low tabula share — the pattern does not track
  urbanization cleanly and more likely reflects an EDH cataloguing-convention artifact in
  how Greek-inscribed monuments get classified into `type_of_monument`. Not minted as a
  directional claim; would have required more investigation than this pass's budget
  allowed to disentangle from a real cultural signal.
- **Altar share as a second frontier-military instrument** — computed, dropped: the gap
  between the frontier group and the next-highest non-frontier province (Aquitania, 11.7%)
  and Germania superior's own altar share (12.1%) is only 0.4pp, too tight to be a clean,
  separately-registrable instrument distinct from r2-edh-b1-11's instrumentum domesticum
  metric (which has a genuine 7.1pp gap).
- **Tile-stamp share as a third frontier-military instrument** — computed (Dacia 10.2% is a
  striking outlier, consistent with known legionary tile-stamping), but not minted
  separately to avoid a fourth near-redundant cut of the same underlying mechanism already
  covered by r2-edh-b1-11/12/21; folded into r2-edh-b1-11's notes as supporting context
  instead.
- **"hasreligion%" (religion field populated at all, vs. its content) as a fourth
  coverage-heterogeneity instrument** — computed, dropped as redundant IN TYPE with
  r2-edh-b1-04 (dated-share) and r2-edh-b1-20 (monument-type-documentation rate); three
  heterogeneity-persistence claims of the same shape felt like enough for this batch.
- **Distinct-country-per-province diversity** (a Roman province spanning multiple modern
  nation-states, e.g. Dalmatia's material appearing under Croatia/Bosnia and
  Herzegovina/Montenegro in `raw.country`) — genuinely interesting, not pursued for time;
  flagged here as a decent candidate for a future batch rather than rushed into this one.
- **Height/width/depth physical-dimension population rates and parsed numeric values** —
  the raw strings carry parenthetical estimate markers (e.g. `"(37) cm"`) that would need a
  parsing pass before any numeric aggregate could be trusted; deferred rather than minted
  on an unvalidated regex.

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

- The `not_before`/`not_after` raw-field swap (documented in the ingest doc) is already
  corrected at the `date_start`/`date_end` level by `resolve_edh_date_bounds()`; every
  instrument in this batch reads `date_start`/`date_end`, never the raw swapped keys.
- 2 rows corpus-wide carry a `date_end` in the 1800s/1900s (evident find-year contamination,
  not a genuine ancient date) — excluded via `date_end<1000` in every century-bucket
  instrument (r2-edh-b1-14/15/16/17), disclosed rather than silently trimmed elsewhere.
- EDH's own curatorial history is Latin-epigraphy-centered; even the most Greek-heavy
  training province (Bithynia et Pontus) is still 51.9% Latin by raw record count. Every
  language-based conjecture in this batch (r2-edh-b1-13) is framed as a RELATIVE gap
  between named province groups, not an absolute-majority claim, specifically to stay
  robust to this corpus-wide bias.
- `repository` is `NULL` on all 42,009 rows (disclosed gap from the ingest itself); no
  institution-level conjecture (the previous batch's dominant family) is possible for EDH
  as currently modeled — this batch's density/concentration family (A) operates at the
  PROVINCE grain instead, the coarsest available unit, which is also why it is far less
  exposed to the prior batch's "single-institution monopoly" failure mode (Puducherry) —
  there is no sub-province unit here that could degenerate the same way.
