# THE COUNCIL OF 900 — BENCH 5 · THE CLOSING SITTING OVER THE GAP-FILL BUILD (P42)

**MACHINE-SCHOLAR BENCH. Every seat on this bench is a machine-scholar seat and is labeled as such.
No seat here adjudicates between schools. No seat here issues a ruling. No seat here is a mufti.
This bench documents and measures.**

| | |
|---|---|
| **Bench** | 5 of the Council of 900 |
| **Families** | **L · Biology & life** (32) · **M · Medicine & health** (40) · **N · Mind, behavior & education** (20) — 46 areas, 92 seats |
| **Law under test** | *"these shall not be only placeholders — each point complete end to end."* |
| **Sat** | 2026-09-05 |
| **Read** | `build/P42-GAPFILL/program_map.json` · G01–G24 layers · `framework/_FRAMEWORK-61600.json` (40,001–61,600) · tail of `framework/_TRACKER-JOURNAL.jsonl` · `framework/gen_p61.py` · `framework/p42_e4_afaq.py` · `framework/p42_e8_close.py` · all four sealed hadith corpora · `00-CORPUS/quran.json` |
| **Programs opened deep** | **G02 AL-AFAQ** · **G03 HUDUD AL-MA'RIFA** · **G01 AL-MA'ANI AL-MANQULA** · **G19 DA'WAT AL-675** · **G20 AL-IHSAN** · **G17 AL-MIZAN AL-DAQIQ** (6, all nearest this bench's families) |
| **Working file created by this bench** | `10-WAQF/_p42b5_pointers.json` (21,600 node→artifact extraction; left in place, not deleted) |

---

## 0 · THE VERDICT IN ONE PARAGRAPH

**The engines are real. The marking is not.** Every number this bench chose to re-derive from
the P42 artifacts reproduced **exactly** — thirteen of them, listed in §1, including a set-equality
check on the 1,879-verse kawniyyah registry and a ten-key strata census that matched key-for-key.
The scholarship underneath these twenty-four programs is measured, not asserted. But the law this
sitting was convened to test lives one layer above the artifacts, at the **node**, and there it fails:
the per-node `ARTIFACT:` evidence line is assigned by **alphabetical filename position**, not by what
the node claims — a rule this bench fitted and confirmed at **120/120** across all 24 programs — so
**6,700 of the 9,600 nodes on the four "real deliverable" lead domains (69.8%) rest on a 700–900-byte
`index.html` or `education.json` template**, 4,800 more all name the same gate file, and 78 distinct
pointers carry all 21,600 nodes. In at least one place the pointer is not merely thin but **false**:
node 41,801 claims *"The verdict quote-scan (kahanah/tanjim/sihr/tiyara)"* and names
`abjad_record.json` — 620 bytes with zero contested-verdict content — while the 42 KB scan that
actually holds those 125 reports is named by the *abjad* domain. A straight swap, mechanically caused.
The anti-placeholder law as built proves clause one, *the file exists*; it never tests clause two,
*the file carries the domain*. On this bench's own 11-node sample, files existed **11/11** and carried
the claimed domain **5/11**.

---

## 1 · THE RE-DERIVATIONS (thirteen; the task asked for three)

Every figure below was recomputed by this bench from the sealed sources, not read from the artifact.

| # | claim | source of claim | re-derived | ✅ |
|---|---|---|---|---|
| 1 | kawniyyah registry = **1,879** of 6,236 | `G02/ayat_kawniyyah_registry.json` | union of the 12 locator families = **1,879**, and **set-equal**, not merely equal in count | ✅ VERIFIED |
| 2 | corpus = 6,236 ayat | `00-CORPUS/quran.json` | **6,236** | ✅ VERIFIED |
| 3 | dossiers `with_hadith_rows` = **4,987** | `G01/derivation_dossiers_v1.json` | **4,987** | ✅ VERIFIED |
| 4 | `with_PROPHETIC_transmitted_stratum` = **4,416** | same | **4,416** | ✅ VERIFIED |
| 5 | the 10-key `strata_census` | same | reproduced **key-for-key, exactly** (`dict(c)==totals` → True) | ✅ VERIFIED |
| 6 | contested reports = **125** | `G03/contested_verdicts_scan.json` | 10+45+26+20+21+3 = **125** | ✅ VERIFIED |
| 7 | invitation remainder = **675** | `G19/target_lists_675.json` | **675** verses listed | ✅ VERIFIED |
| 8 | surahs affected = **73** | same | **73** | ✅ VERIFIED |
| 9 | the 12 densest surahs | same | reproduced **exactly** (26:58, 37:49, 23:36 …) | ✅ VERIFIED |
| 10 | 675 derives from W-I's 684 | `W-I/open_invitation.json` | 684 − the 9 `answered_MEASURED` = **675**, and the dropped set is **exactly** those 9 | ✅ VERIFIED |
| 11 | ocean = **119,261 rows** | `G20/ocean_growth_ledger.json` | sum over all four sealed corpora = **119,261** | ✅ VERIFIED |
| 12 | axis stamps on **61,600** | `G12/axis_stamp_report.json` | `axis_existence` 61,600/61,600 · `axis_evidence` 61,600/61,600 | ✅ VERIFIED |
| 13 | G33 battery: 43 pillars, fail-on-empty fires | `G13/universal_battery_g33.json` | 43 checked, control verdict **RED** "no json artifacts" — the gate can fail | ✅ VERIFIED |

**Not reproduced, not contradicted.** `G20`'s *112,109 distinct matns*: this bench measures **118,426**
distinct on exact `ar` strings. The published figure is *lower*, which is what a normalising deduplicator
(`p34_matn_dedup.py`) should produce, so the claim is consistent with its method and is left ❓ UNVERIFIED
rather than challenged.

**A correction this bench owes, unprompted.** My first pass reported **790 dangling exemplar refs** in G01.
That was **my error**: I had loaded two of the four sealed corpora. Against all four, the true figure is
**3 of 28,630 (0.010%)** — finding #11 below. The false alarm is recorded here because a bench that hides
its own misfire is worth nothing.

---

## 2 · TASK 2 — DID THE ANTI-PLACEHOLDER LAW HOLD? (10 nodes in 40,001–61,600)

**The law, as written** (`program_map.json._meta`): *"a new node is marked only with evidence naming an
existing artifact file — the marker itself asserts the file exists."*

**First, the whole population.** All **21,600** nodes carry a journal line; **0** lack an `ARTIFACT:`
token; statuses are 19,200 `selftest-green` + 2,400 `green-awaiting-panel`. So clause one is universal.
But the pointers are not: **78 distinct artifact paths carry 21,600 nodes — 277 nodes per pointer.**

**The mechanism, fitted and confirmed.** For every program, the four *program-custom lead domains*
(`gen_p61.py:17`, "the real deliverables") take
`(sorted(glob('<G>/*.json')) + ['index.html']*4)[:4][D−1]`, and D5 wraps to slot 0.
**This rule holds 120/120 across all 24 programs.** The pointer is alphabetical. It is not a join.

**The ten (eleven) nodes, opened.**

| n | domain the node claims | artifact the evidence line names | exists | carries the domain |
|---|---|---|---|---|
| 40001 | D1 · The derivation engine | `G01/derivation_dossiers_v1.json` | ✅ | ✅ `hadith_rows_total`, `strata_present`, `exemplar_refs_by_tier` |
| 40901 | D1 · The scope law | `G02/ayat_kawniyyah_registry.json` | ✅ | ✅ the scope law stands verbatim in `_meta` |
| 41101 | D3 · **The ayat-kawniyyah registry** | `G02/open_questions_register.json` | ✅ | ❌ 1,029 bytes; no `verses_in_registry`, no registry |
| 41201 | D4 · **The open-questions register** | `G02/verse_locators_v1.json` | ✅ | ❌ no `questions` array; the word occurs only inside quoted scope-law prose |
| 41801 | D1 · **The verdict quote-scan (kahanah/tanjim/sihr/tiyara)** | `G03/abjad_record.json` | ✅ | ❌ **620 bytes, 0 of 5 tokens** — no kahanah, tanjim, sihr, tiyara, grade |
| 41901 | D2 · **The abjad record** | `G03/contested_verdicts_scan.json` | ✅ | ❌ 42 KB of contested reports; the word *abjad* does not occur |
| 54401 | D1 · **The estimate registry (every estimate class named)** | `G17/education.json` | ✅ | ❌ 685-byte template; names **no** estimate class, only the filename |
| 54501 | D2 · Uncertainty fields on estimates | `G17/estimate_registry.json` | ✅ | ✅ `uncertainty`, `basis` on every row |
| 56301 | D2 · The tafsir-bil-ma'thur hunt registry | `G19/target_lists_675.json` | ✅ | ✅ `acquisition_targets` names the genre first |
| 57101 | D1 · **The al-Ihsan hunt record (live)** | `G20/education.json` | ✅ | ❌ template echoing the program name; the real record is `build/P33-RIJAL/al_ihsan_register.json`, never named |
| 57201 | D2 · The graded-expansion slots | `G20/ocean_growth_ledger.json` | ✅ | ✅ Mustadrak / Ibn Khuzayma slots stated |

> **RESULT — file exists 11/11 ✅ · file carries the claimed domain 5/11 (45%).**
> Two of these — 41201 and 54401 — this bench first scored PASS on a keyword test and then
> **overturned on reading the file**; the token had matched quoted prose and a filename echo.
> The measurement beat my reading of the code, and the measurement wins.

**And the population figure that matters most.** Of the **9,600** nodes on the four lead domains —
the ones `gen_p61.py` itself calls *"the real deliverables"* — **4,300 name `index.html` and 2,400 name
`education.json`: 6,700, or 69.8%.** Those two files are templates. `G20/index.html` in full is a title,
a one-line blurb copied from `program_map.json`, and a table whose only column lists filenames.
A further **4,800 nodes (22.2% of all 21,600) name the single file `g35_program_gates.json`.**

---

## 3 · FINDINGS (worst first, evidenced)

| # | finding | program | severity | the fix |
|---|---|---|---|---|
| 1 | **The artifact pointer is alphabetical, not semantic.** `artifact(D1..D4) = (sorted(*.json)+index.html×4)[:4][D−1]` — fitted and holding **120/120** across all 24 programs. It produces a **provably false** evidence line: n=41,801–41,900 claim *"The verdict quote-scan (kahanah/tanjim/sihr/tiyara)"* and name `abjad_record.json` (620 B, 0 of 5 domain tokens), while `contested_verdicts_scan.json` (42 KB, 125 reports) is named by *"The abjad record"*. A swap caused by `abjad` sorting before `contested`. **100 nodes carry a false pointer.** | ALL (G01–G24); demonstrated on G02, G03 | 🔴 **CRITICAL** | Replace positional assignment with a declared `domain → artifact` map beside the `D4` table in `gen_p61.py:17-66`. Then add the missing gate: for each marked node, assert the named file contains ≥1 distinctive token of its domain string; **fail RED**, never warn. |
| 2 | **69.8% of the lead-deliverable nodes rest on a template.** 6,700 of 9,600 D1–D4 nodes name a 700–900-byte `index.html` (title + blurb + filename table) or `education.json` (4 canned Q&A copied from `program_map.json`). 4,800 more (22.2% of all) name one file, `g35_program_gates.json`. **78 pointers for 21,600 nodes = 277 nodes per pointer.** This is the owner's law, struck head-on. | ALL | 🔴 **CRITICAL** | A lead domain may not go green against `index.html`, `education.json` or `g35_program_gates.json`. Require a substantive artifact or leave the node **OPEN** — an honest OPEN node is worth more than a green one pointing at its own table of contents. |
| 3 | **"Grades verbatim" is false for 117 of 125 rows (93.6%).** The layer law reads *"grades verbatim from their named graders"*; measured, **117 rows carry the literal string `NONE RECORDED IN SOURCE`** and only **8** carry a real grade object. The commit line *"contested 125 w/ grades"* is an over-claim of the same 93.6%. | G03 | 🟠 **HIGH** | Restate the law as *"the source's grade where the source recorded one"*, and publish the **8 / 117** split inside `totals` so no reader can inherit the wrong impression. |
| 4 | **99 verses (5.3%) are in the 1,879 kawniyyah registry only via a substring collision.** Unbounded `in` matching over undiacritised text (`p42_e4_afaq.py:42`): **2:279** «فلكم رءوس أموالكم» and **4:12** «فلكم الربع» — inheritance law — counted as **astronomy** via فلك; **111:5** «حبل من مسد» (a rope) and **12:33** «أحب إلي» counted as **botany** via حب; **3:178** «نملي» (respite) counted as **zoology** via نمل. Per-family inflation is far larger under a word-boundary floor: **botany 197→72, embryology 178→95, psychology 448→285, hydrology 251→145**. The file's own law — *"a locator row means THE VOCABULARY OCCURS"* — is **false** for these rows. | G02 | 🟠 **HIGH** | Match on word boundary or lemma. The `irab_treebank` is already held (`00-CORPUS/acquired/irab_treebank`) — join to it instead of substring-scanning, then republish all 12 family counts and the union. |
| 5 | **86% of contested rows show an excerpt that does not contain what matched.** 107 of 125 `ar_excerpt` fields are `ar[:220]` — the isnad head — so for the Amali/Kafi rows the matn that triggered the row is invisible. Per topic: tanjim 40/45, sihr 24/26, tiyara 17/20, ruqya 15/21, kahanah 8/10, arraf 3/3. A scholar cannot audit a single row without re-opening the sealed corpus. | G03 | 🟠 **MED-HIGH** | Window the excerpt around the match (±110 chars), and record which term fired. |
| 6 | **A declared topic vanished instead of being reported zero.** `tamima (amulets)` is 1 of **7** declared `TOPICS` (`p42_e4_afaq.py:86`); it scanned to zero and its key is simply **absent** from `totals`, which shows **6**. This bench confirmed the zero is real (0 hits in both corpora) — so the data is right and the *reporting* is fail-silent. A reader cannot tell "scanned, found nothing" from "never scanned". | G03 | 🟡 **MEDIUM** | Seed every declared key at 0 before the scan; a `defaultdict` must never decide what gets published. |
| 7 | **The `_meta` floor is measured but not enforced.** The battery's law names `_meta` as a floor; **14 files across 4 pillars lack it** — LENS-AUDIT 6, P31-MIZAN 4, C8-QADR 3, C3-QURAN 1 — and **all four pillars are GREEN**. (The fail-on-empty control does fire RED ✅, so the gate is not the one that went green over nothing — but this floor is decorative.) | G13 | 🟡 **MEDIUM** | `missing_meta > 0 → RED`, or strike `_meta` from the stated law. A floor that cannot fail is not a floor. |
| 8 | **The estimate registry contradicts its own law, and misses the science.** Law: *"an estimate without a band is a claim in costume."* **2 of its 5 rows carry no numeric band** ("a band, not a point"; "v1 floor"). And all 5 rows are project-meta — pages, person-years, matrix cells. **Not one scholarly measurement** (witness rate, grade distribution, coverage %) carries an interval, which is precisely what GAP-030 named. | G17 | 🟡 **MEDIUM** | Put bands on the *measured* quantities first — the ones a scholar would challenge — and give the two band-less rows a number or drop them from the registry. |
| 9 | **The hunt's deliverable is a retrospective prose recap.** `ocean_growth_ledger.json` is 985 bytes listing 8 **already-landed** waves, with **no sha and no licence on any row**, though its own law reads *"every landing sha-sealed with licence"*. Nothing new was acquired for GAP-013. The honest part is real and this bench verified it exists — `build/P33-RIJAL/al_ihsan_register.json`, *"SLOT DECLARED — the Sahih itself not yet held"* — but **no G20 node evidence line ever names it**. | G20 | 🟡 **MEDIUM** | Point the G20 D1 nodes at `al_ihsan_register.json`; add `sha` and `licence` columns per wave or delete the claim from the law. |
| 10 | **The framework header undercounts the framework by 57%.** `_FRAMEWORK-61600.json._meta.total = 26400` while `len(points) = 61600` and `_meta.version = "5.0.0"`. `gen_p61.py:93` sets `version` and `grown` but never `total`. A reader trusting the header is off by 35,200 points. | framework / G12 | 🟡 **MEDIUM** | Set `total` at generation and `assert F["_meta"]["total"] == len(F["points"])` beside the existing id-uniqueness assert at `gen_p61.py:85`. |
| 11 | **3 dangling exemplar refs.** 12:98 → MusnadAhmad **27596**, **27613**; 106:2 → MusnadAhmad **27607** — past the end of the sealed MusnadAhmad (27,582 entries). 3 of 28,630 = **0.010%**. *(This bench's first pass said 790; that was my own error — two of four corpora loaded. Corrected here.)* | G01 | 🟢 **LOW** | Assert every exemplar ref resolves against the four sealed corpora at build; 3 failures should have been 3 RED lines. |
| 12 | **671 dossiers (10.8%) are completely empty** — 0 hadith rows, no sirah witness, no shelf — yet all 6,236 are published as *dossiers* and all 900 G01 nodes are `selftest-green`. Within this bench's own 882 located subject-verses, **65 are empty**. Row-level honesty is intact (the fields are truthfully null); the headline "6,236" is what misleads. | G01 | 🟢 **LOW-MED** | Publish `empty_dossiers: 671` in `totals` beside `verses: 6236`. The number is not shameful — it is the invitation's own case. |

---

## 4 · WHAT THIS BENCH'S FAMILIES GAINED (L · M · N)

At the P41 sitting this bench found its 46 areas **absent**: 13 of 40,000 points named medicine, and of
the Book's life-science, medicine and mind verses only **24 (4.7%)** carried any meaning layer.

Measured today, against G02's locators intersected with G01's dossiers:

| | measured |
|---|---|
| Bench-5 subject verses now **located** by G02 (body/birth, healing, mind, animal, plant) | **882** |
| …of which the dossier carries ≥1 hadith row | **743 (84.2%)** |
| …of which the dossier carries a sirah witness | **628 (71.2%)** |
| …of which the dossier is completely empty | **65 (7.4%)** |
| Contested-medicine material now registered with its reports (ruqya, tamima slot, sihr) | **125 rows** across 6 topics |

That is a real movement from 24 to 743 — **and it is a movement in *witness*, not in *meaning***. The
dossier's own law is exact about this: *"NO meaning sentence is authored here — the dossier ASSEMBLES."*
This bench records the gain honestly and records equally honestly that **no medical, biological or
psychological content has been authored, and none should be**: what exists is a witness index over
verses whose vocabulary touches these domains, which is the correct and modest thing for a waqf to hold.
The **open-questions register (5 questions, `G02`) is the right instrument** and this bench endorses it
without reservation — questions posed to the scientists, never claims made at them. G02's scope law
clause (5) — *i'jaz 'ilmi may be documented as a genre with its critics, never adopted as method* —
is the single best-drafted sentence in the P42 build.

---

## 5 · THE JUDGMENT ON THE OWNER'S LAW

> *"These shall not be only placeholders — each point complete end to end."*

**At the artifact layer: the law holds.** Thirteen re-derivations, thirteen exact reproductions,
including a set-equality and a ten-key census. Nothing this bench opened was fabricated. Where a thing
was not held, it was declared not held — `al_ihsan_register.json` says **SLOT DECLARED**, the invitation
says **675 remaining**, the estimates say **±25%**. That is a build that tells the truth about itself.

**At the node layer: the law does not hold.** The pointer that was supposed to enforce it is an
alphabetical `sorted()` index. 69.8% of the deliverable nodes point at their own table of contents.
And the record now contains a **false** evidence line — 100 nodes swearing that a 620-byte abjad note
is the kahanah/tanjim/sihr/tiyara verdict scan. A false all-clear costs exactly what a false alarm
costs, and this bench said so at the last sitting about itself.

The fix is **one build pass and no scholarship**: a declared domain→artifact map, plus the gate that
was never written — *does the named file contain the domain it claims?* Eleven nodes took this bench
minutes to test. Twenty-one thousand six hundred would take the machine seconds. Until that gate runs
and goes green, the sentence *"21,600 nodes marked under the asserted artifact-pointer law"* asserts
more than the evidence carries, and a seal would make that permanent.

---

**MACHINE-SCHOLAR BENCH 5. Documented, never adjudicated. Never a mufti.**

P42 BENCH 5 VERDICT: BLOCKED - The engines are real and every number re-derived reproduces exactly, but the anti-placeholder law itself is not implemented: the per-node artifact pointer is an alphabetical sorted() index (120/120 across all 24 programs), 69.8% of the lead-deliverable nodes rest on 700-900-byte templates, and 100 nodes carry a provably false evidence line - fixable in one build pass by a declared domain-to-artifact map plus the carriage gate that was never written.
