# PANEL P40 — SEAT PX3 · THE GRAPH & FRAME BENCH

**Seat**: PX3 (GRAPH-FRAME) · **Panel**: P40, the seal-gating review of the 40,000 build
**Reviewer**: MACHINE-SCHOLAR, labeled. Human review invited, never waited (law 14).
**Mode**: REVIEW ONLY — no build file was written, mutated or deleted by this seat.
**Laws applied**: `10-WAQF/skills/deep-audit/SKILL.md` (22 laws)
**Date**: 2026-09-04
**Scope**: P37-GRAPH · framework v4.0.0 (`gen_p40.py`) · P28-X14/X15 · REPAIR-2 PW3-F1 re-stamps

---

## VERDICT

**The arithmetic of this build is sound. Its provenance and its self-tests are not.**

Every count I could re-derive, re-derived **exactly** — P37's seven totals reproduce to the digit
from the sealed morphology source *independently of the index module that produced them*, the
40,000-node allocation is contiguous and gapless across all eight pillars, and 15 of 15 sampled
content rows (5 rare-root edges, 5 entity edges, 5 passage-joins) survived a content gate against
an independent witness file on rasm skeletons. That is a real result and it should be said first.

Against that, five defects are of a kind the seal cannot absorb, because each one causes a
**published number to be wrong, unreachable, or unfalsifiable**:

1. The framework's advertised **negative control cannot fail** — its failure branch is unreachable
   code. "Negative control holds" is, mechanically, evidence of nothing.
2. P37 publishes a **stale witness-edge count**, understated by 3,214, contradicted by the repo's
   own head-commit message.
3. X15's header claims **5,333 rows and ships 5,000** — an undisclosed truncation.
4. X15 **forces 197 tied resolutions onto a single verse**, the exact act law 8 forbids; 101 of
   its shipped rows do not reproduce.
5. The PW3-F1 re-stamp — the instrument built to *repair* false provenance — is hand-written
   prose that is **not gated against the builder**, and one of five sampled stamps names two
   sources its builder never opens.

None of these is a fabrication. All five are the same failure in different clothes: **a claim
whose checker cannot fail it.** That is precisely what the deep-audit doctrine exists to catch,
so the finding is that the doctrine worked and the build has not yet caught up to it.

**The seal is blocked** — on five items, all mechanically repairable, none requiring a rebuild
of the corpus.

---

## PART 1 — WHAT VERIFIED CLEAN

Stated first and in full, because an audit that reports only failures measures a build by half
the evidence (I-3, law P).

| # | Claim | Method | Result |
|---|---|---|---|
| V1 | `rare_root_edges: 6761` | re-derived from `00-CORPUS/_morphology_raw.txt` directly, bypassing `sighah_index.py` | **6,761** ✅ exact |
| V2 | `roots_in_rare_band: 686` | same | **686** (of 1,651 total roots) ✅ exact |
| V3 | `entity_cooccurrence_edges: 313` | same | **313** ✅ exact |
| V4 | `entities: 106` | same | **106** ✅ exact |
| V5 | `mathal_similitude_verses: 70` | same | **70** ✅ exact |
| V6 | `top_rare_degree` (8 rows) | same | identical, all 8 ✅ |
| V7 | `entity_edges_top` ranks 1–14 | same | identical ✅ (rank 15 = tie, see F11) |
| V8 | 5 rare-root edges truly share the named root | content gate vs `00-CORPUS/quran.json` `uthmani`, rasm skeleton (law 4) | **5/5 honest** |
| V9 | 5 entity edges truly co-occur | same | **5/5 honest** |
| V10 | amthal negative control | `مِثْل` (74 verses) must not leak into the 70 | **0 leakage**; 42:11 `laysa ka-mithlihi` correctly excluded ✅ |
| V11 | amthal probe 3 | 2:26 (mosquito), 29:41 (spider), 62:5 (donkey) | **3/3 genuine** ✅ |
| V12 | 40,000 allocation integrity | read the **written** `_FRAMEWORK-40000.json` | 40,000 points, contiguous 1..40,000, **0 gaps, 0 duplicates** ✅ |
| V13 | allocations sum | all 8 pillar ranges vs the docstring ledger | **8/8 ranges exact, sum = 10,000** ✅ |
| V14 | written-ledger verify | `gen_p40.py:149-150` re-reads from disk and re-verifies | genuine PW1-F5 re-read ✅ (the *omission* half; see F1 for the control half) |
| V15 | X15 offsets land in the named work | all 5,000 shipped joins probed at `text[offset:offset+4]` | **5,000/5,000 land a real `@QB@` delimiter** ✅ |
| V16 | 5 passage-joins land the right quote | span re-extracted at the offset and re-resolved | **5/5 unanimous**, e.g. 20:21 `ibn_kathir@572829` votes `[('20:21',14)]` |
| V17 | W-A rows vs edges | dedupe on `(verse, hadith-id)` | rows == distinct, **0 duplicates** — "edges" labelling honest ✅ |
| V18 | P34 re-stamp accuracy | vs `p34_matn_dedup.py:33-34` | "four ocean corpus files" — **exactly four**, confirmed ✅ |

**The allocation table, verified row by row against the `gen_p40.py` docstring ledger:**

| Pillar | Docstring range | Claimed | Measured | Range match |
|---|---|---|---|---|
| P33 THE RIJAL UNIVERSE | 30,001–32,000 | 2,000 | 2,000 | ✅ |
| P34 THE MERGED OCEAN | 32,001–33,500 | 1,500 | 1,500 | ✅ |
| P35 THE EDITIONS CENSUS | 33,501–36,000 | 2,500 | 2,500 | ✅ |
| P36 THE READING BENCH ENGINE | 36,001–37,000 | 1,000 | 1,000 | ✅ |
| P37 THE QUR'ĀN GRAPH | 37,001–38,500 | 1,500 | 1,500 | ✅ |
| P28 COMPLETION (to 1,800) | 38,501–38,700 | 200 | 200 | ✅ |
| REPAIR-2 | 38,701–39,500 | 800 | 800 | ✅ |
| RESERVE (earned-only) | 39,501–40,000 | 500 | 500 | ✅ |
| **SUM** | | **10,000** | **10,000** | ✅ |

---

## PART 2 — FINDINGS

### F1 · The v4.0.0 "negative control" is a tautology; its failure branch is unreachable
**Severity: HIGH — SEAL-BLOCKING**
**File**: `10-WAQF/framework/gen_p40.py:139-143`

```python
if "ZZZ-FAKE" in txt: raise AssertionError("negative-control corrupted")   # 139
try:
    if "ZZZ-FAKE" not in txt: raise KeyError("control-ok")                  # 141
    raise AssertionError("NEGATIVE CONTROL FAILED")                         # 142  <- unreachable
except KeyError: pass                                                       # 143
```

**Evidence.** Line 139 guarantees `"ZZZ-FAKE" not in txt` for any execution that reaches line 141.
The condition at 141 is therefore **always True**, the `KeyError` is **always** raised, and it is
**always** caught at 143. Line 142 has no reachable input. I tried to reach it adversarially by
injecting a `ZZZ-FAKE` row into the point list: control raised `negative-control corrupted`
(line 139), never `NEGATIVE CONTROL FAILED` (line 142).

The build's headline — `"written-ledger verified, negative control holds"` (`gen_p40.py:151`) —
therefore carries no information about the control. A control that cannot fail has not passed;
it has not run. Law 5 (KNOWN-POSITIVE: "a floor alone passes false zeroes" — here even the floor
is fabricated) and law 6 (MEASURED-FLOOR).

**Repair.** A real control asserts the *verifier* fails on a known-bad input:
`try: _verify(new, {**OPEN_PROGRAMS, "control": "ZZZ-FAKE"}); raise AssertionError("control did not fire")
except AssertionError as e: assert "OMISSION: control" in str(e)`.

---

### F2 · P37 published a stale witness-edge count — understated by 3,214 (9.5%)
**Severity: HIGH — SEAL-BLOCKING**
**Files**: `10-WAQF/build/P37-GRAPH/graph_layers.json` · `10-WAQF/framework/p37_graph.py:47-48`

| Quantity | Value | Built |
|---|---|---|
| P37 `totals.witness_edges_from_WA` | **30,654** | `_meta.built` 09:02:16 (file mtime 09:04:00) |
| `build/P32-SHAHADAT/W-A/uncapped_links_per_verse.json`, summed on disk **now** | **33,868** | `_meta.built` **09:05:39** |
| **Delta** | **3,214** | |

**Evidence.** P37 read W-A **three minutes before W-A v2 was written** and was never rebuilt.
The delta is not approximate — it is **exactly** the `wave-quote` origin class:

```
origins: {'verified-only': 20879, 'both': 1309, 'quote-new': 8466, 'wave-quote': 3214}
30,654 + 3,214 (wave-quote) = 33,868   ✅ exact
```

The head commit message states *"W-A v2 (33,868 rows, max 413)"*. The sealed build therefore
carries **two different numbers for one quantity**, and the graph layer holds the wrong one.
Law 10 (CHAIN LAW — quiescence before reading a file another process writes), law 11
(SINGLE-SOURCE LAW), I-1.

**Repair.** Re-run `p37_graph.py` after W-A v2 and re-seal. No other layer is implicated:
W-A's own rows are correct.

---

### F3 · X15 claims 5,333 rows and ships 5,000 — undisclosed truncation
**Severity: HIGH — SEAL-BLOCKING**
**Files**: `10-WAQF/build/P28-SIRAH-X/X15/passage_joins_seed.json` · `10-WAQF/framework/p36_p28c.py:103-107`

```python
"law": "... the per-passage spine's first %d real rows; ..." % len(x15),   # renders "5333"
"totals": {"joins": len(x15)},                                            # 5333
"joins": x15[:5000]                                                       # 5000  <- capped
```

**Evidence.** Measured `len(joins) == 5000`; header `totals.joins == 5333`. **333 rows (6.2%)
are asserted present and are absent.** The `law` string does not say "capped" or "first 5,000 of
5,333" — it says *"the ... first 5333 real rows"*, which the payload does not contain. I-2
(MEASURE THE ARTIFACT — the header and the artifact are two numbers; only one was reported).

**Repair.** Either ship all 5,333 or state the cap in both `totals` and `law`
(`{"joins_total": 5333, "joins_shipped": 5000, "cap": 5000}`).

---

### F4 · X15 forces 197 tied resolutions onto one verse — law 8 violated; 101 rows do not reproduce
**Severity: HIGH — SEAL-BLOCKING**
**File**: `10-WAQF/framework/p36_p28c.py:74-90`

```python
best = votes.most_common(1)[0][0]        # line 89 — ties broken by insertion order
x15.append({"verse": best, "work": name, "offset": m.start()})
```

**Evidence.** Recomputed the resolver over all 5,000 shipped joins:

| Measure | Value |
|---|---|
| joins whose top vote is **tied** and was forced to one verse | **197 (3.94%)** |
| joins that re-resolve to their **published** verse | 4,899 of 5,000 = **97.98%** |
| joins that **do not** reproduce (tie-break-order artifacts) | **101 (2.02%)** |

Worked examples:

| Verse published | Work / offset | Actual votes |
|---|---|---|
| **1:1** | `ibn_hisham` @279841 | `[('27:30', 4), ('1:1', 4)]` — **the basmalah** |
| 17:9 | `ibn_hisham` @266625 | `[('17:9', 12), ('18:2', 12)]` |
| 93:9 | `ibn_hisham` @214071 | `[('93:9', 2), ('93:10', 2)]` |
| 17:98 | `ibn_hisham` @282730 | `[('17:49', 4), ('17:98', 4)]` |

The first row is the named prior incident walking again: law 7 records that *"the basmalah alone
forges thousands of links"*. Here a basmalah span is published as `1:1` while the engine's own
top vote on re-run is `27:30` (Sulaymān's letter) — the two are tied, and which one is published
depends on `Counter` insertion order, not on evidence.

Law 8 is explicit: *"a quote shared by N verses (refrains) is an ambiguous link, reported in its
own class, **never forced to one verse**."* X14 *does* carry an `ambiguous-short (refrain-class)`
bucket (1,334 spans) — but it only catches spans that fail to resolve. Spans that resolve **into
a tie** bypass it entirely.

**Repair.** Route ties to a `joins_ambiguous` class carrying all tied candidates; keep
`joins` for strict single-winner resolutions only.

---

### F5 · X15 admits joins with no gram unique to any verse — law 16 violated
**Severity: MEDIUM**
**File**: `10-WAQF/framework/p36_p28c.py:78`

```python
if vs and len(vs) <= 3:      # a gram shared by up to 3 verses votes; uniqueness never required
```

**Evidence.** Measured across the 5,000 shipped joins: **174 (3.48%) carry zero gram unique to a
single verse.** Law 16 (THE UNIQUENESS RULE) requires *"at least one gram UNIQUE to its verse;
matches built only of grams shared with sister verses are shared-head candidates"* — the rule
that was written after the oath-family forged 3,580 false pairs. These 174 are shared-head
candidates published as resolved joins. Overlaps heavily with F4 (all four F4 examples are also
zero-unique-gram rows).

**Repair.** Require `uniq >= 1`, or emit a `unique_grams` field per join so a reader can filter.

---

### F6 · The PW3-F1 re-stamp is ungated prose; 1 of 5 sampled names sources its builder never opens
**Severity: MEDIUM-HIGH — SEAL-BLOCKING**
**File**: `10-WAQF/build/P28-SIRAH-X/X15/passage_joins_seed.json` `_meta.sources_note` (and X14, same stamp)

> *"PW3-F1 re-stamp 2026-09-04: this layer's true sources = derived from seerah corpora +
> **LENS-AUDIT E3/E8**; source_sha remains the corpus-era stamp"*

**Evidence.** `grep -c "E3_\|E8_" framework/p36_p28c.py` → **0**. The builder never opens E3 or
E8. What it actually opens (`p36_p28c.py`): `E7_pair_registry.json` (line 18), `quran.json`
(line 19 and again via `verse_norm.verse_skels`, line 65), `hadith.json` / `hadith_shia.json`
(26-27), `seerah.json` / `seerah_shia.json` (71-72).

So the stamp **names two sources that were never read** and **omits `00-CORPUS/quran.json`**,
which via `verse_norm.verse_skels()` + `gram_index()` is the load-bearing source of *every verse
identification in the layer*. A provenance note that invents sources and omits the decisive one
is worse than the boilerplate it replaced, because it reads as specific.

Full 5-row sample:

| Layer | Claimed true sources | Verdict |
|---|---|---|
| `P37-GRAPH/graph_layers.json` | sighah index + LENS-AUDIT + W-A | ✅ accurate (`p37_graph.py:14,44,47`) |
| `P34-OCEAN/matn_dedup_layer.json` | the four ocean corpus files | ✅ accurate — exactly four (`p34_matn_dedup.py:33-34`) |
| `P35-EDITIONS/editions_inventory.json` | `00-CORPUS/translations/*` | ⚠️ accurate (`p35_editions.py:14,25`) but omits `P31-MIZAN/W8-V5/tvf_v1.json` (line 20) |
| `P32-SHAHADAT/W-C/quote_registry.json` | LENS-AUDIT layers + the ocean corpora | ⚠️ vague-but-true; omits `quran.json` (`p32_witnesses.py:55`) |
| `P28-SIRAH-X/X15/passage_joins_seed.json` | seerah corpora + **LENS-AUDIT E3/E8** | ❌ **wrong** — E3/E8 never opened; `quran.json` omitted |

The root cause is structural: **nothing gates the stamp against the builder's actual `io.open`
calls.** The stamps are written by hand.

**Repair.** Derive `sources_note` mechanically — have each builder append every path it opens to
a list and seal that list. This is the erratum's own "seal-what-you-read", applied to the note.

---

### F7 · The erratum's own "seal-what-you-read" policy is unimplemented in every new builder
**Severity: MEDIUM**
**File**: `10-WAQF/build/P32-SHAHADAT/W-Q/ERRATUM-source-sha.json` (built 07:24:45)

The erratum is itself honest and well-drafted — it names the defect, dates the policy change, and
refuses to silently redefine the old field. Credit where due. But its policy is not in force:

> *"THE POLICY FROM THIS HOUR: every NEW layer seals the sha of what it actually read"*

**Evidence.** Of 200 layers carrying a `source_sha`:

| Class | Count |
|---|---|
| Still sealing the morphology boilerplate `fbc8744a…` | **195** |
| Sealing a different sha (policy-compliant) | **5** |
| Of the 195: re-stamped with a `sources_note` | 48 |
| Of the 195: bare, no note at all | **147** |

Layers built **after** 07:24:45 that still seal the boilerplate: `W-A/uncapped_links_per_verse.json`
(09:05, no note), `W-F/four_witness_v4.json` (09:05, no note), `W9-GATES/gate_battery.json`
(09:06, no note), `X8/X9` (08:50, no note), and P37 itself (09:02, `p37_graph.py:55` calls
`SI._sha(SI.RAW)`). Every new builder in this run reproduced the defect.

Re-stamp coverage against the erratum's own denominator: **48 / 164 = 29.3% · 116 layers remain.**

---

### F8 · `mathal_similitude_verses: 70` names a phenomenon the detector does not measure
**Severity: MEDIUM**
**File**: `10-WAQF/framework/p37_graph.py:24`

**Evidence.** The count is *correct for what it measures* — 70 exact, with a clean negative
control (F-V10/V11 above). But the detector is a **lexeme** filter (lemma `مَثَل`, POS `N`), while
the field name and the docstring (*"the amthal located by the formula (mathal/ka-mathal)"*,
*"G15 similitudes"*) claim the **similitude phenomenon**. Measured gap:

| Measure | Value |
|---|---|
| verses carrying the `ka-` similitude particle | 273 |
| of those, **outside** the 70 | **245** |

Canonical similitudes with no mathal-lexeme, all absent from the 70:

| Verse | Similitude | In the 70? |
|---|---|---|
| 24:39 | `ka-sarāb` — the mirage | ❌ |
| 2:19 | `ka-ṣayyib` — the rainstorm | ❌ |
| 101:5 | `ka-l-ʿihn` — carded wool | ❌ |
| 54:20 | `ka-aʿjāz nakhl` — palm trunks | ❌ |

This is law 21 (STRUCTURE-BEFORE-LABEL) inverted: the layer labelled by lexeme and named by
phenomenon. A scholar reading "70 similitude verses" would conclude the Qur'ān has 70 similitudes.

**Repair.** Rename to `mathal_lexeme_verses` (a true and useful census), and open the `ka-`
structural class as a separate, honestly-sized candidate layer.

---

### F9 · `entities: 106` is a PN-lemma string count with no referent resolution
**Severity: MEDIUM**
**File**: `10-WAQF/build/P37-GRAPH/graph_layers.json` · `p37_graph.py:22,36-42`

**Evidence.** Both numbers re-derive exactly (106 lemmas, 313 edges) — this is a labelling
finding, not a count error. The 106 "entities" are the corpus's PN-lemma inventory, which mixes
persons with **places** (مَكَّة, بَدْر, يَثْرِب, سَيْناء, بابِل), **scriptures** (تَوْراة, إِنجِيل, زَبُور, قُرْءان),
**abstractions** (إِسْلام, جاهِلِيَّة, مُسْلِم, نَصْرانِيّ, يَهُود, سِلْم) and **afterlife loci**
(جَهَنَّم, جَنَّة, فِرْدَوْس, سَقَر, لَظَى, سَلْسَبِيل).

It also carries **referent-duplicate nodes** — two graph nodes for one referent:

| Node A | Node B | Nature |
|---|---|---|
| اللَّه | **اللَّهُمَّ** | segmentation split of the same word — the sampled edge `اللَّهُمَّ+عِيسَى` at 5:114 is the same fact as `اللَّه+عِيسَى` |
| عِيسَى | مَسِيح | same referent |
| مُحَمَّد | أَحْمَد | same referent (61:6) |
| مَكَّة | بَكَّة | same place (3:96) |

And fixed collocations that generate guaranteed, zero-information edges: يَأْجُوج/مَأْجُوج,
هارُوت/مارُوت, صَفا/مَرْوَة.

**Mitigated** — and this matters — by the layer's own `law` field, which states an edge *"asserts
co-presence, NEVER meaning"*. The doctrine is correct; only the field **name** over-reaches.
Rename to `pn_lemmas` / `pn_cooccurrence_edges`.

---

### F10 · Two ledger numbers in `gen_p40.py` contradict the artifacts
**Severity: LOW-MEDIUM**

| Where | Claim | Measured | Delta |
|---|---|---|---|
| `gen_p40.py:133` vs `:61` vs `SKILL.md:78` | "the **677** invitation tracking" vs "the **684**" vs "the **684**" | same file states both | internal contradiction |
| `gen_p40.py:101` | "E8's **1,688** unresolved spans classed" | X14 totals sum = **1,870** (1334+492+43+1) | **182** |

I-1/I-3: a number stated twice differently in one file is not a rounding difference; one of them
is wrong and the ledger does not say which.

---

### F11 · `entity_edges_top` publishes an arbitrary tie cut
**Severity: LOW**

The artifact's 15th row is `اللَّه / يُوسُف → 10`. Independent re-derivation from the sealed source
places `اللَّه / نَصْرانِيّ → 10` there. Both are correct — `most_common(15)` cuts a tie at the
boundary by insertion order. A reader concludes membership in a "top 15" that is not well-defined
at its own edge. Publish all ties at the cut, or extend to the natural break.

---

### F12 · Dead code that encodes laws not in force
**Severity: LOW**

| File | Item | Measured effect |
|---|---|---|
| `gen_p40.py:20` | `dom()` defined, never called (slicing is inline) | none — but it is the only named allocation helper, and it is dead |
| `p36_p28c.py:67` | `RXQ` defined, never used; its `ornate` pattern differs from the live `RX2` (optional `٭?` prefix) | the unused variant encodes a **different delimiter policy** than the one that ran |
| `p37_graph.py:24` | lemma tuple includes unvocalized `u"مثل"` | **0 hits** — census: all 88 segment hits are `مَثَل`. A bare probe compared with `==` against vocalized lemmas can never match (law 3 in form; harmless in effect) |

Also `p37_graph.py:24`'s `s["pos"] == "N"` guard is redundant: the census shows **88/88** `مَثَل`
lemma hits are already `N`.

---

### F13 · The omission proof is weak for 3 of its 10 programs
**Severity: LOW**
**File**: `gen_p40.py:130-138`

Measured carrier-breadth per token (deleting a single carrier domain would not trip `_verify`):

| Token | Distinct carrier domains | Mutation-resistant? |
|---|---|---|
| `Rijal` | **5** | ✗ weak |
| `invitation` | **4** | ✗ weak |
| `thematic` | **2** | ✗ weak |
| `MATN-DEDUP`, `W-A v2`, `Packs`, `delimiter`, `re-stamps`, `castability`, `al-Ihsan` | 1 each | ✅ genuine |

7 of 10 are genuinely mutation-resistant. Note separately that the check proves the ledger
*mentions* a program, never that the program *landed* — correctly implied by the word "mapped"
in the print line, but worth stating so no one reads it as a landing proof.

---

## PART 3 — MECHANICAL TABLE

| # | Finding | File | Evidence (measured) | Severity | Blocks seal |
|---|---|---|---|---|---|
| F1 | Negative control is a tautology; failure branch unreachable | `framework/gen_p40.py:139-143` | line 139 guarantees the 141 condition; line 142 has no reachable input; adversarial injection raised 139, never 142 | **HIGH** | **YES** |
| F2 | Stale witness-edge count | `build/P37-GRAPH/graph_layers.json`; `framework/p37_graph.py:47` | 30,654 published (built 09:02:16) vs 33,868 on disk (built 09:05:39); delta 3,214 = exactly the `wave-quote` class | **HIGH** | **YES** |
| F3 | Header claims 5,333 rows, payload holds 5,000 | `build/P28-SIRAH-X/X15/…json`; `framework/p36_p28c.py:107` | `"joins": x15[:5000]` vs `totals.joins = 5333`; measured `len(joins)==5000`; 333 missing, cap undisclosed | **HIGH** | **YES** |
| F4 | 197 tied resolutions forced to one verse (law 8) | `framework/p36_p28c.py:89` | 197/5,000 tied (3.94%); only 97.98% reproduce; `1:1` @ibn_hisham 279841 votes `[('27:30',4),('1:1',4)]` | **HIGH** | **YES** |
| F6 | Re-stamp names sources the builder never opens | `build/P28-SIRAH-X/X15/…json` `_meta.sources_note` | claims "LENS-AUDIT E3/E8"; `grep -c "E3_\|E8_" p36_p28c.py` = **0**; omits `quran.json` (the load-bearing source) | **MED-HIGH** | **YES** |
| F5 | 174 joins with no unique gram (law 16) | `framework/p36_p28c.py:78` | `len(vs)<=3` admits shared grams; 174/5,000 = 3.48% zero-unique | MEDIUM | no |
| F7 | "Seal-what-you-read" unimplemented in new builders | `build/P32-SHAHADAT/W-Q/ERRATUM-source-sha.json` | 195/200 layers still seal `fbc8744a…`; only 5 compliant; 147 bare; coverage 48/164 = 29.3% | MEDIUM | no |
| F8 | "similitude" names a phenomenon the lexeme filter can't measure | `framework/p37_graph.py:24` | 245 `ka-` similitude verses outside the 70; 24:39, 2:19, 101:5, 54:20 all absent | MEDIUM | no |
| F9 | "entities: 106" = PN-lemma strings, no referent resolution | `build/P37-GRAPH/graph_layers.json` | 4 referent-duplicate node pairs (اللَّه/اللَّهُمَّ, عِيسَى/مَسِيح, مُحَمَّد/أَحْمَد, مَكَّة/بَكَّة); mixes persons/places/books/abstractions | MEDIUM | no |
| F10 | Ledger numbers contradict artifacts | `framework/gen_p40.py:61,101,133` | 677 vs 684 in one file; "1,688 unresolved" vs X14 sum **1,870** (Δ182) | LOW-MED | no |
| F11 | Arbitrary tie cut in published top-15 | `build/P37-GRAPH/graph_layers.json` | rank 15 is a 10–10 tie; اللَّه/يُوسُف vs اللَّه/نَصْرانِيّ interchangeable | LOW | no |
| F12 | Dead code encoding out-of-force policy | `gen_p40.py:20`; `p36_p28c.py:67`; `p37_graph.py:24` | `dom()` uncalled; `RXQ` uncalled and differs from live `RX2`; `u"مثل"` = 0 hits (88/88 are `مَثَل`) | LOW | no |
| F13 | Omission proof weak for 3/10 tokens | `framework/gen_p40.py:130-138` | `Rijal` 5 carriers, `invitation` 4, `thematic` 2 — single-domain deletion undetected | LOW | no |

---

## PART 4 — GAP-HIGHLIGHT: WHAT THIS BENCH ITSELF MISSED

Law 13 — the standing order: *"if I am missing something the audit must highlight this."*

1. **`echo_edges_promoted: 6069` was NOT re-derived — the largest unaudited number in my scope.**
   `p37_graph.py:45` takes `E4s.get("pairs_all", E4s["pairs_24plus"])` from
   `build/LENS-AUDIT/E4_crossverse_seed.json`. I did not open that file, did not confirm which key
   was taken, and — critically — **did not test whether those 6,069 pairs are the post-law-16
   honest set or a pre-rule set**. Law 16 was born when the oath-family forged **3,580 false
   pairs** in exactly this class. If `pairs_all` predates the uniqueness rule, 6,069 silently
   inherits that defect and is promoted into the graph as weighted edges. **This should be the
   first item the next seat measures.**

2. **P37 ships no edge list — only counts.** `graph_layers.json` is 2,725 bytes: totals, a top-15
   table, and 70 verse keys. The 6,761 rare-root edges, 313 entity edges, 6,069 echoes and 30,654
   witness edges **exist nowhere on disk**. Every P37 claim is auditable only by re-running the
   builder. Law 12 (CONTENT-GATE SAMPLING) is *impossible* for any downstream reader — I could
   only sample because I re-derived the edges myself. A graph layer that publishes no graph
   cannot be independently checked, and F2 (the stale count) is exactly the failure mode this
   invites.

3. **The 5 policy-compliant "seal-what-you-read" layers were not verified** — I counted them, I
   did not confirm they seal the *correct* sha.

4. **The 116 un-re-stamped layers were counted, not audited individually.**

5. **I did not test the X14 classifier's boundaries.** Its class thresholds (`len(span)>2000`,
   `len(ss)<12`, `len(ss)>=40`) are unmeasured floors — law 6 requires floors be set *after*
   measuring, and I did not check whether these were.

6. **`witness_edges_from_WA` counts rows summed per verse, then labels them "edges".** I verified
   0 duplicates *within* a verse (V17), so the label holds on that axis — but I did **not** check
   whether one hadith links to many verses, which is legitimate for a bipartite graph yet means
   the number is not an edge count of a *simple* graph. Unresolved.

7. **Single-seat limitation.** One machine-scholar bench, no second reader on my own arithmetic.
   Every count in this report is reproducible from the commands recorded in it; none has been
   independently re-run by another seat.

---

## PART 5 — COUNSEL

**On the seal.** Five items block. All five are repairable without touching the corpus: one
re-run (F2), one un-capping or one honest header (F3), one real control (F1), one ambiguity class
(F4), one mechanically-derived provenance note (F6). This is perhaps an hour of work, not a
rebuild. Nothing I found suggests fabricated data anywhere in scope — the failures are of
*checking*, not of *building*, and the building is good.

**On the pattern.** F1, F3, F6 and F7 are one defect wearing four costumes: **a claim written by
hand where a measurement was available.** The negative control asserts a sentinel it planted
itself; the header reports a length it did not re-read; the provenance note names sources nobody
grepped; the erratum states a policy no builder implements. The build's arithmetic is measured
and excellent. Its *self-description* is still narrated. The single highest-leverage repair in
this whole scope is to make every `_meta` field a **derived** value — sources from the actual
`io.open` calls, totals from `len()` of what was written, controls from an input that genuinely
fails.

**On what deserves credit.** The W-Q erratum (F7) names its own systemic defect across 164 layers,
dates the policy, refuses to silently redefine a field, and says the old value "remains meaningful
as the corpus-era stamp." That is I-3 executed properly on the build's own record. The P37 `law`
field — *"an edge asserts co-presence, NEVER meaning"* — is what keeps F8 and F9 at MEDIUM rather
than HIGH. The doctrine in this build is consistently better than its implementation, which is the
right way round: implementations are cheap to fix, doctrine is not.

---

## SEAL VERDICT

**SEAL BLOCKED BY:** F1 (unreachable negative control in `gen_p40.py:139-143` — the framework's green light is not evidence), F2 (P37 `witness_edges_from_WA` stale by 3,214; 30,654 published vs 33,868 measured), F3 (X15 header claims 5,333 joins, payload ships 5,000 — undisclosed truncation), F4 (197 tied X15 resolutions forced to one verse, law 8; 101 rows non-reproducible), F6 (X15 PW3-F1 re-stamp names LENS-AUDIT E3/E8, never read by its builder, and omits `quran.json`).

*Clear these five and this seat's objection falls. F5, F7–F13 are recorded, non-blocking, and should be logged to the repair queue rather than fixed under seal pressure.*

---
*PANEL P40 · seat PX3 · MACHINE-SCHOLAR, labeled · review only · 2026-09-04*
*Every number in this report is reproducible from the commands recorded beside it.*
*Human scholarly review is invited and has not been waited for.*
