# THE COUNCIL OF 900 — BENCH 1 · THE P42 CLOSING SITTING

**LABEL: MACHINE-SCHOLAR.** Every seat on this bench is a chartered machine-scholar seat. No seat
here adjudicates between schools, issues a ruling, or acts as a mufti. This bench **documents** and
**measures**.

| | |
|---|---|
| **Bench** | 1 of the Council of 900 |
| **Families** | **A · Quranic sciences** (28 areas, 126 seats) · **B · Hadith sciences** (20 areas, 89 seats) — 215 seats |
| **Sat** | 2026-09-05, Riyadh afternoon |
| **Law under test** | the owner's: *"these shall not be only placeholders — each point complete end to end."* |
| **Read** | `build/P42-GAPFILL/program_map.json` · `G01/G04/G05/G06/G13/G15/G19/G20` layers · `framework/_FRAMEWORK-61600.json` (points 40,001–61,600) · `framework/_TRACKER-JOURNAL.jsonl` (all 21,600 new evidence lines) · engines `p42_e5_people.py`, `p42_e8_close.py` · sources `00-CORPUS/hadith*.json`, `build/P32-SHAHADAT/W-A/uncapped_links_per_verse.json`, `build/P34-OCEAN/matn_dedup_layer.json` |
| **Programs judged** | **G01 AL-MAʿANI AL-MANQULA** · **G05 ILAL AL-HADITH** · **G06 AL-QIRAʾAT** · **G04 AL-RIJAL** · **G20 AL-IHSAN** (5, all inside families A/B) |
| **Human verdicts on record** | **0.** This bench is machine; it does not pretend otherwise. |

---

## 0 · WHAT THIS BENCH SEPARATED

Two questions were put, and they must not be blended:

1. **Is the CONTENT real?** — do the counts reproduce from the sources, are the labels correct?
2. **Is the NODE complete end to end?** — does point *n*'s evidence line name a file that actually
   carries point *n*'s domain?

**The answers differ, and that is the whole finding of this sitting.** The content is real: this
bench re-derived **9 independent numbers across 5 programs and every one reproduced exactly, with a
4,987-row join returning zero mismatches.** These are not placeholders. But the **node-pointer law**
— the very law the build asserts — holds only in the letter. Every one of the 21,600 pointers names
a file that exists (0 broken paths, measured). **17,700 of them (81.9%) name a file that does not
carry the node's domain**, and 3 of the 4 files doing that work are generated *from the node's own
map*. That is this bench's P41 Rule 1 — the self-reference exclusion — turned on P42.

---

## 1 · THE RE-DERIVATIONS — 9 numbers, 5 programs, all green ✅

Every row below was recomputed by this bench from the **sources**, not from the artifact's own
`totals` block.

| Program | Claim | Re-derived | Verdict |
|---|---|---|---|
| G01 | `with_hadith_rows: 4987` | 4,987 dossiers with `hadith_rows_total>0`; **and** `W-A/uncapped_links_per_verse.json:per_verse` has exactly **4,987 keys** — an independent second instrument | ✅ **EXACT** |
| G01 | `with_PROPHETIC_transmitted_stratum: 4416` | 4,416 | ✅ **EXACT** |
| G01 | `strata_census` — 10 classes | all 10 reproduce (3329 / 3205 / 2136 / 1402 / 1214 / 1179 / 902 / 848 / 360 / 6) | ✅ **EXACT** |
| G01 | per-verse row counts | 4,987 verses cross-checked against the source registry — **0 mismatches**, 0 dossier rows with no source | ✅ **EXACT** |
| G05 | `ilal totals` — 12 classes, sum **6,549** (the commit's own headline) | all 12 reproduce from a fresh 119,261-row ocean load (1138/77/16/45/6/1/223/11/9/1/5002/20) | ✅ **EXACT** |
| G04 | `rows_scanned: 119261` | 119,261 rows loaded from `hadith.json` + `hadith_shia.json` + 2 wave files | ✅ **EXACT** |
| G04 | `distinct_head_name_strings: 4143` | 4,143 | ✅ **EXACT** |
| G06 | Warsh 14 identical / 100 differ / mean 0.8704 · Qaloon 15 / 99 / 0.9133 | recomputed from the carried `per_surah` (114 rows each = 114 surahs) | ✅ **EXACT, both** |
| G20 | `119,261 rows; 112,109 distinct matns` | 119,261 ✅ · 112,109 matches `P34-OCEAN/matn_dedup_layer.json:totals.matn_distinct_signatures` ✅ | ✅ **EXACT** |

**And the held-state claims are true on disk.** G06 `held: 3` — Hafs (base), Warsh, Qaloon — and
`09-MATH/texts/warsh.json` + `09-MATH/texts/qaloon.json` both exist, with 114 measured per-surah
comparison rows each. G20's honest-empty al-Ihsan slot cites
`build/P33-RIJAL/al_ihsan_register.json` — the file exists and says *"SLOT DECLARED — the Sahih
itself (approx 7,500 reports) not yet held."* **The empty slots are declared empty, not faked full.
That is the build's best habit and this bench records it.**

**G13's fail-on-empty is genuinely proven.** `universal_battery_g33.json:totals` carries a control
pillar with `verdict: RED, reason: "FAIL-ON-EMPTY: no json artifacts"`. The gate *can* go red. Credit
where it is owed — and see Finding 11 for the floor beside it that cannot.

---

## 2 · THE ANTI-PLACEHOLDER LAW — 10 nodes opened, and then all 21,600

**The letter of the law holds, exhaustively.** This bench did not sample: it parsed **all 21,600**
evidence lines for nodes 40,001–61,600.

| Check | Result |
|---|---|
| Nodes 40,001–61,600 carrying a `status` evidence line | **21,600 / 21,600** — 0 missing |
| Evidence lines containing an `ARTIFACT:` pointer | **21,600 / 21,600** — 0 without |
| Distinct artifact paths named | **78** |
| Named paths **not present on disk** | **0** ✅ |

**The substance does not.** The ten nodes this bench opened by hand:

| n | domain the node claims | artifact the pointer names | carries the domain? |
|---|---|---|---|
| 40001 | G01 D1 · The derivation engine | `G01/derivation_dossiers_v1.json` (5.1 MB, 6,236 dossiers) | ✅ **YES** |
| 40150 | G01 D2 · **Per-ayah transmitted-meaning dossiers** | `G01/education.json` (751 bytes, 4 auto-generated Q&A) | ❌ **NO** — the per-ayah dossier file sits in the same folder, unpointed |
| 40460 | G01 D5 · The census & graph joins | `G01/derivation_dossiers_v1.json` | ⚠️ partial — census yes, graph joins absent |
| 43601 | G05 D1 · **The grade-string defect parser** | `G05/education.json` | ❌ **NO** — `ilal_census.json`, the parser's own output, sits beside it |
| 44201 | G05 D7 · The education | `G05/education.json` | ✅ **YES** (trivially — the domain *is* the boilerplate) |
| 44510 | G06 D1 · **The riwayah registry (20 canonical)** | `G06/education.json` | ❌ **NO** — `riwayah_registry.json` sits beside it |
| 44905 | G06 D5 · The census & graph joins | `G06/education.json` | ❌ **NO** |
| 45301 | G06 D9 · The panel & seal | `g35_program_gates.json` (shared by all 24 programs) | ⚠️ a 24-line gate table, no G06 panel |
| 52801 | G15 D3 · The batching declaration in ledger meta | `G15/provenance_ledger.json` | ✅ **YES** |
| 58001 | G21 D1 · **The per-language slot machinery (55 languages)** | `G21/education.json` | ❌ **NO** — `languages_machinery.json` sits beside it |
| 61600 | G24 D9 · The panel & seal | `g35_program_gates.json` | ⚠️ shared |

**6 of 11 fail outright; 3 more are shared or partial.** And the failure is not random — it is
**alphabetical**. Mapping every domain in every program to its pointer shows the assignment cycles
the *sorted JSON filename list*, never the domain text. G01's D1 is correct only because
`derivation_dossiers_v1.json` sorts before `education.json`. G05's and G06's D1 are wrong for the
same reason in reverse.

### The population, measured

| Class of file the pointer names | nodes | share |
|---|---|---|
| `index.html` — auto-generated page listing filenames | 6,700 | 31.0% |
| `education.json` — 4 auto-generated Q&A from `program_map.json` | 6,200 | 28.7% |
| `g35_program_gates.json` — one shared 24-row gate table | 4,800 | 22.2% |
| **a substantive domain artifact** | **3,900** | **18.1%** |

By domain, across all 24 programs — **D6, D7, D8 and D9 have zero substantive backing anywhere**:

| domain | substantive | boilerplate |
|---|---|---|
| D1 | 1,000 | 1,400 |
| D2 | 1,600 | 800 |
| D3 | 200 | 2,200 |
| D4 | 100 | 2,300 |
| D5 | 1,000 | 1,400 |
| **D6 · The pages** | **0** | 2,400 |
| **D7 · The education** | **0** | 2,400 |
| **D8 · The gates** | **0** | 2,400 |
| **D9 · The panel & seal** | **0** | 2,400 |

D6 and D7 are honest — those nodes *are* the pages and the education, and the boilerplate is their
object. D3, D4, D8 and D9 are not: **7,300 nodes name work the pointed file does not contain.**

---

## 3 · FINDINGS — worst first, all evidenced

| # | finding | program | severity | the fix |
|---|---|---|---|---|
| 1 | **81.9% of the new nodes are backed by boilerplate, not domain artifacts.** 17,700 of 21,600 pointers name `index.html` (6,700), `education.json` (6,200) or the shared `g35_program_gates.json` (4,800) — and all three are generated *from `program_map.json`*, i.e. from the node's own list. Only **3,900 (18.1%)** name a measured artifact. The owner's law — *each point complete end to end* — is met for fewer than one node in five. | all 24 | 🔴 **CRITICAL** | Re-point every node to the artifact carrying its domain. Where none exists, write the evidence line as `NO ARTIFACT — DOMAIN DECLARED, UNBUILT` and let the node stand honestly empty, as G20 does for al-Ihsan. An honest empty is not a placeholder; a pointer to one's own map is. |
| 2 | **The pointer is assigned alphabetically, not semantically.** Domain→artifact mapping over all 24 programs shows the sorted-JSON cycle: G05 D1 *"The grade-string defect parser"* → `education.json` while `ilal_census.json` — the parser's own output — sits unpointed in the same folder; G06 D1 *"The riwayah registry (20 canonical)"* → `education.json` beside `riwayah_registry.json`; G01 D2 *"Per-ayah transmitted-meaning dossiers"* → `education.json` beside the 6,236-dossier file. G01 D1 is right only by luck of the alphabet. | all 24 | 🔴 **CRITICAL** | Match on domain text, not on `sorted(glob("*.json"))`. Then assert the match: a node whose pointer's filename/`_meta.layer` shares no term with its domain must fail the build, not pass it. |
| 3 | **Domains D6–D9 — 9,600 nodes, 44.4% of the new framework — have zero substantive backing in every one of the 24 programs.** D8 *"The gates"* and D9 *"The panel & seal"* (4,800 nodes) all point at one 24-row file; D3 and D4 add 4,500 more. | all 24 | 🔴 **HIGH** | Either build the gate/panel artifact per program, or collapse D8/D9 from 200 nodes each to the one node each actually stands on. 200 nodes cannot rest on 24 lines. |
| 4 | **The provenance program itself points self-referentially.** `G15/node_pointers_report.json` reports 21,280 pointer rows across 11 classes; **11 of 11 classes name the same file** — `build/P41-COUNCIL/gap_register.json`, with the reason *"(the class is registered there)"* — and one class alone carries **10,000 nodes**. The gap register is the Council's list of gaps, not evidence for any node's content. G15 is the program that *is* the anti-placeholder law. | G15 | 🔴 **HIGH** | Apply this bench's P41 Rule 1 (self-reference exclusion) to G15's own output: a pointer into the register that generated the class is not evidence and must not be counted as one. |
| 5 | **The G35 program gate is structurally incapable of returning RED.** `p42_e8_close.py:83` writes `education.json` into every program directory; `:106` then scores `GREEN if (ok and n_art >= 2)`; `:111` asserts `not reds`. Since the engine has just guaranteed one `_meta`-bearing JSON, any program whose engine wrote anything at all passes. Result: `reds: []`, and **G01's 5.1 MB measured dossier corpus and G20's 985-byte hand-typed ledger both read `GREEN`, indistinguishably.** This is GAP-015 — *"the gate that went GREEN over nothing"* — re-instantiated inside the build that claims to have closed it. | G24 / all | 🔴 **HIGH** | Exclude engine-generated files from the artifact count, and add a floor the gate can fail: measured rows > 0, `sources_true` present, and at least one number reproducible from a named source. |
| 6 | **G05's per-defect registries are silently truncated at 40.** `p42_e5_people.py:83` writes `v[:40]`. `totals` claims **6,549** defect rows; the registries on disk carry **264 (4.0%)** — shadhdh 40 of 223, daʿif 40 of 5,002, mursal 40 of 1,138, mudallas 40 of 45, munqatiʿ 40 of 77. **No cap is declared anywhere in `_meta`.** G01, built the same day by the same hand, declares its cap in so many words — *"uncapped totals with capped exemplars (12) declared."* | G05 | 🔴 **HIGH** | Add `"exemplars_capped_at": 40` to `_meta` and state the uncapped total beside every registry — the G01 pattern, already proven in this build. |
| 7 | **G05's shadhdh class is not shadhdh.** `p42_e5_people.py:73` searches `grades + ar[:80]` — the first 80 characters of the report's own Arabic. Of the 223 shadhdh hits, **222 matched inside the matn text and only 1 in a grade field**; illa/maʿlul is 19 of 20 in-matn; mudraj 1 of 1. The `_meta` law reads *"the terms are the TRADITION'S, located verbatim"* — but for these three classes the located word is the **narrator's**, not the critic's verdict. A report containing the word شاذ is not a shādhdh grading. (mursal 1,124/1,138, munqatiʿ 77/77, mudallas 45/45 and daʿif 4,930/5,002 **are** grade-field hits and stand.) | G05 | 🔴 **HIGH** | Split every class into `graded_by_a_critic` and `term_occurs_in_matn` and publish both. Do not merge them under one count. This is the bench's own P41 Rule 3 — the artifact must carry the discipline's object. |
| 8 | **G01's dossiers strip the source's own risk flag and gate class.** In `W-A/uncapped_links_per_verse.json`, **20,879 of 33,868 rows (61.6%)** carry `flags: ["isnad-shingle-risk-class (CH1-F1, 16.5% population rate)"]` and the weaker gate `"meaning-link (bench-tier; CH1-F2: old gate was a restatement)"` rather than an evidentiary-quote gate. The dossier carries **neither field**. In **2,546 of 4,987 verses (51.1%)**, *every* exemplar shown to the reading bench is a flagged meaning-link row, presented as clean transmitted material. | G01 | 🟠 **MEDIUM-HIGH** | Carry `gate` and `flags` verbatim onto every exemplar. The dossier's own law is *"assembles, never authors"* — dropping a caveat is authoring. |
| 9 | **Two domains in this bench's own families name engines that exist nowhere on disk.** G06 D4 *"The qiraat-to-meaning bridge (documented cases)"* — the string `bridge` appears in **no G06 artifact**; G01 D4 *"Placement seeds (passage-joins → sirah moments)"* — `placement` appears in **no G01 artifact**. 200 nodes assert two unbuilt engines. Adjacent: G06 D3 *"Acquisition slots per riwayah (**lawful sources named**)"* — the registry declares 17 slots but names a lawful source for **none** of them. | G01, G06 | 🟠 **MEDIUM** | Mark all three domains `DECLARED — UNBUILT` in the evidence line. G06 D3 is one edit away from true: name OpenITI/King Fahd Complex per slot, as `G07/creed_corpus_hunt.json` already does for its 12 creed works. |
| 10 | **G20's ocean-growth ledger is hardcoded, not measured.** `p42_e8_close.py:59` carries `68921`, `13,797`, `5,458`, `27,582`, `3,503` and the string `"119,261 rows; 112,109 distinct matns"` as **Python literals**; the artifact's `_meta` has no `sources_true`. The numbers are true — this bench reproduced 119,261 from the corpus and 112,109 from `matn_dedup_layer.json` — but the artifact cannot detect its own drift: land one more wave and the ledger lies silently. Contrast G04, three files away, which computes `len(oceans)` live. | G20 | 🟠 **MEDIUM** | Compute the ledger from the corpus at build time and add `sources_true`. G20's whole content is one 985-byte narrative; it is the thinnest artifact in the 24 and it should at least be self-measuring. |
| 11 | **G13's G33 battery measures a `_meta` floor it does not enforce.** `totals: green 43, red 0`, while `per_pillar` records **14 files missing `_meta`** across 4 pillars — LENS-AUDIT 6, P31-MIZAN 4, C8-QADR 3, C3-QURAN 1 — every one of which is scored `GREEN`. The `_meta` law is stated in the layer's own `law` string: *"parseability + `_meta` + control-char floors on every pillar."* Fail-on-empty is genuinely proven (control pillar RED ✅); the floor beside it is decorative. | G13 | 🟠 **MEDIUM** | Make `missing_meta > 0` red, or delete `_meta` from the stated law. A measured-and-ignored floor is worse than no floor: it reports a number that changes nothing. |
| 12 | **Two label defects.** (a) `G04/name_census_and_candidates.json` states `top_names_censused: 400` while the file carries **60** rows (`p42_e5_people.py:63` writes `top[:60]`); a reader takes 400 as the shelf's content. (b) **G05 silently drops a searched zero:** 13 defect terms are searched, `totals` carries 12 — `maqlub` (مقلوب) returned 0 hits and vanished with the defaultdict. In a layer whose entire claim is *"was absolute zero in the waqf,"* the honest zero is the point. | G04, G05 | 🟠 **MEDIUM** | (a) Rename to `top_names_carried: 60, censused_from: 400`. (b) Seed the census dict with all 13 keys so a zero is published as a zero. |

---

## 4 · WHAT THIS BENCH WILL NOT SAY

- It will **not** say the gap-fill build is placeholders. It is not. Nine numbers re-derived from
  source, nine exact; a 4,987-row join with zero mismatches; two riwayat with 114 measured surah
  comparisons each and their texts on disk; 6,236 dossiers that assemble and do not author. **The
  artifacts are real and the labels on the artifacts are, with the exceptions in Findings 6–8 and
  12, honest.**
- It will **not** say the pointer law was faked. Every one of the 78 named paths exists; nothing was
  invented. The commit's own wording is exact and this bench credits it: *"21,600 nodes marked under
  the **asserted** artifact-pointer law."* **Asserted** is the true word. It was not proven, and the
  gate that should have proven it (Finding 5) cannot fail.
- It will **not** adjudicate a single hadith grade, riwayah, or defect classification. Findings 7 and
  8 name what the *engine* did to the tradition's vocabulary; the tradition's verdicts are the
  tradition's. **Never a mufti.**

---

## 5 · THE ONE THING THAT WOULD CLEAR THIS

Findings 1, 2, 3 and 5 are a single defect wearing four faces: **the pointer was assigned before it
was verified, and nothing downstream could catch it.** One pass fixes all four —

1. Re-point each of the 21,600 nodes to the artifact that carries its domain, by domain text.
2. Where no such artifact exists, write `DECLARED — UNBUILT`. Count them. Publish the count.
3. Make G35 fail on `sources_true` missing, engine-generated-only artifact sets, or a domain/pointer
   term mismatch.
4. Re-run. The number that matters is not 21,600 marked — it is **how many are complete end to end**,
   stated out loud. Today that number is **3,900**, and the build does not say so anywhere.

That is a mechanical pass over a build whose underlying content this bench has just measured and
found sound. It is not a rebuild. But it must happen **before** the seal, because the seal would
otherwise seal the assertion.

---

**P42 BENCH 1 VERDICT: BLOCKED - the artifacts are real and every number this bench re-derived reproduced exactly, but the law under test fails for 17,700 of 21,600 new nodes (81.9%), whose evidence line names a file auto-generated from the node's own program map rather than one carrying its domain, and the G35 gate that should have caught this is structurally incapable of returning RED.**
