# PANEL WAVE P32 — SEAT PW1 · THE LINK LAYERS
**Scope:** W-A uncapped_links (31,855 rows) · W-C quote registry · W-B tier riding · W-N gate verdicts
**Reviewer:** MACHINE-SCHOLAR, labeled. REVIEW ONLY — no build file was modified.
**Laws applied:** `10-WAQF/skills/deep-audit/SKILL.md` (all 19)
**Date:** 2026-09-04

---

## VERDICT

**The arithmetic is honest. The identifiers are not.**

W-A's published totals re-derive **exactly** from HV ∪ E7 — every one of the eight headline
numbers reproduced independently on the first attempt, with zero drift. The NO-CAP law is
genuinely kept. W-C is byte-identical to its source engine. W-N's independence doctrine is
substantively correct. This is careful work and the summary layer is not lying about its own
sums.

But underneath it, **`_hadith_VERIFIED.json` stores a 0-based positional index where W-A reads
a canonical hadith key.** The two id spaces were joined as if they were one. The consequence is
that **97.5% of the 22,080 verified-only rows point the reader at the wrong hadith**, **25.2%
carry a tier read off that wrong hadith**, and the independent-corroboration count — the
centerpiece answer to council finding CH1-F2 — is **understated 12-fold (108 vs 1,309)**.

The defect is not in W-A's reasoning. It is a single line in the producer, and it is
mechanically fixable. But it cannot be sealed, because the layer's core evidentiary claim —
*"here is the hadith that witnesses this verse"* — currently resolves to the wrong hadith in
21,632 of 22,188 cases.

**SEAL BLOCKED.**

---

## 1 · WHAT I RE-DERIVED MYSELF (the ocean, measured first)

Per **law 1 (MEASURE THE OCEAN FIRST)** and **law 11 (SINGLE-SOURCE)**, I rebuilt W-A's totals
from `05-READINGS/work/_hadith_VERIFIED.json` and `10-WAQF/build/LENS-AUDIT/E7_pair_registry.json`
using my own set arithmetic — *not* the builder's `pop()` loop — then measured the written
artifact separately (**law 2 / I-2: the baseline must be independent of the check**).

| Quantity | W-A publishes | My re-derivation | Written artifact | |
|---|---|---|---|---|
| rows | 31,855 | 31,855 | 31,855 | ✅ |
| verified-only | 22,080 | 22,080 | 22,080 | ✅ |
| both | 108 | 108 | 108 | ✅ |
| quote-new | 9,667 | 9,667 | 9,667 | ✅ |
| verses covered | 4,972 | 4,972 | 4,972 | ✅ |
| per-ayah max | 256 | 256 | 256 | ✅ |
| per-ayah median | 5.0 | 5.0 | 5.0 | ✅ |
| per-ayah mean | 6.41 | 6.41 | 6.41 | ✅ |

Source counts: HV = 22,188 links / 4,603 verses, **0 intra-duplicates**. E7 = 9,775 pairs,
**0 intra-duplicates**. Artifact has **0 duplicate (verse, hadith) pairs**. The builder's own
assert `22188 + 9775 - 108 == 31855` holds.

**The summary layer is arithmetically clean.** Every finding below concerns what the numbers
are *about*, not the numbers themselves.

### NO CAP — verified genuine

| Probe | Rows |
|---|---|
| 112:1 (al-Ikhlāṣ) | 256 |
| 2:196 | 92 |
| **2:255 (Āyat al-Kursī)** | **26** |
| 2:256 | 11 |
| verses with **>9** rows | **880** |
| verses with exactly 9 rows | 497 |

The old cap of 9 is dead — 880 verses exceed it and the distribution is smooth across the
boundary (no pile-up at 9, which is what a surviving cap looks like). ✅ **CONFIRMED**

### CH1 flags ride verified-only rows — exactly

| Origin | Rows | carry `flags` | carry `cls`/`use` |
|---|---|---|---|
| verified-only | 22,080 | **22,080 (100%)** | 0 |
| both | 108 | 0 | 108 |
| quote-new | 9,667 | 0 | 9,667 |

The flag rides verified-only rows and nothing else; the USE axis rides every quote row and
nothing else. Exactly as `_meta.law` states. ✅ **CONFIRMED** (see F6 for the flag's *content*)

---

## 2 · FINDINGS

### 🔴 F1 · CRITICAL — ID-SPACE COLLISION: 97.5% of verified rows name the wrong hadith
**Files:** `01-TOOLKIT/verify_hadith_links.py:70-72` (producer) · `10-WAQF/framework/p32_wa_rebuild.py:44-49,66` (consumer)

The producer discards the corpus's own keys and re-keys by enumeration position:

```python
it = rows if isinstance(rows, list) else list(rows.values())   # keys thrown away
for j, r in enumerate(it):
    HAD[(trad, coll, j)] = norm(...)                            # j = 0-based POSITION
```

So `_hadith_VERIFIED.json`'s `h[2]` is a **0-based positional index**. The consumer builds its
tier map from the **canonical dict key**:

```python
it = entries.items() if isinstance(entries, dict) else (... r.get("id", i) ...)
tier_map[(trad, book, str(num))] = tier_of(...)                 # num = CANONICAL key
...
"tier": tier_map.get(h, "UNRESOLVED")                           # joins POSITION against KEY
```

This is the I-1 rule *"join on IDs, never on names"* broken in its purest form — a position
joined against a key.

**Five independent proofs, each able to falsify the others:**

**(a) Offset histogram — a clean spike at zero.** For every HV sunni link sharing a verse+book
with an E7 pair (E7's ids are provably real corpus keys — it contains `bukhari 774.2`, which no
positional index can produce), I measured `E7_key_position − HV_num`:

| offset | −3 | −2 | −1 | **0** | +1 | +2 | +3 |
|---|---|---|---|---|---|---|---|
| count | 50 | 116 | 212 | **1,184** | 216 | 121 | 64 |

A single sharp spike at **+0** with a symmetric decaying shoulder (neighbouring hadith in the
same tafsīr cluster). `HV_num` **is** the 0-based corpus position.

**(b) The 114 UNRESOLVED vanish.** Read as canonical keys, 114 links resolve to nothing. Read as
positions, **0 fail**. A wrong hypothesis does not clear every residual.

**(c) Book arithmetic.** For all seven sunni books, `max_int_key + non_integer_keys == total_keys`
(bukhari 7563+26=7589, tirmidhi 3956+42=3998, nasai 5758+7=5765 …), and every unresolved number
falls in the gap `(max_int, total]` — the tail that runs off the end of canonical numbering.

**(d) Content proof — verse 2:143.** HV says `['sunni','bukhari',4502]`.
- Position 4502 → **Bukhari 4487**: *"Noah will be called on the Day of Resurrection… 'Did you convey the Message?'… "* — the **ummatan wasaṭan** tafsīr hadith. **This is the hadith for 2:143.**
- Canonical key "4502" → *ʿĀʾisha on fasting ʿĀshūrāʾ* — that belongs to 2:183–185.

**(e) Content proof — verse 87:1.** HV `['sunni','abudawud',868]` → position 868 → **Abū Dāwūd 869**: *"When 'Glorify the name of your mighty Lord' was revealed…"* — verbatim 87:1.

**Impact:** **21,632 of 22,188 verified links (97.5%)** carry a written id that does not resolve
to the intended hadith. A reader who opens the cited reference gets a different report. The
556 that happen to be correct are coincidences of the suffix drift, not correctness.

---

### 🔴 F2 · CRITICAL — 5,599 rows (25.2%) carry a tier read off the wrong hadith
**File:** `10-WAQF/build/P32-SHAHADAT/W-A/uncapped_links_per_verse.json` (via `p32_wa_rebuild.py:66`)

Re-running the builder's own `tier_of()` against the **correctly resolved** hadith:

| | count |
|---|---|
| tier unchanged by the fix | 16,589 |
| **tier CHANGES** | **5,599 (25.2%)** |
| unresolvable after fix | 0 |

Top corrections — **bidirectional, therefore noise rather than inflation**:

| old → new | n | | old → new | n |
|---|---|---|---|---|
| T2 → T2b | 1,297 | | T2b → T2 | 1,174 |
| T3 → T2 | 1,031 | | T2 → T3 | 934 |
| T3 → T2b | 225 | | T2b → T3 | 203 |
| T5w → T5s | 188 | | T5s → T5w | 181 |

**Sampled proof (2 of 6 verified-only rows sampled were wrong — consistent with 25.2%):**

| verse | written h | built tier | true tier | |
|---|---|---|---|---|
| 2:143 | sunni/tirmidhi/2994 | T2 | T2 | ok (luck) |
| 1:1 | sunni/muslim/877 | T1 | T1 | ok (T1 is book-level) |
| 112:1 | shia/Al-Kafi-V2/2087 | T5w | T5w | ok (luck) |
| 2:255 | shia/Nahj-al-Balagha/50 | T6 | T6 | ok (luck) |
| 2:19 | shia/Al-Kafi-V1/0 | UNRESOLVED | T6 | ❌ |
| **87:1** | **sunni/abudawud/868** | **T2** | **T2b** | ❌ |

87:1 is the clean case: the build publishes **T2** (clean ṣaḥīḥ/ḥasan). The actual hadith
(Abū Dāwūd 869) is graded *Daif* by al-Albānī, *Daif* by ʿAbd al-Muḥyī, *Isnād Ṣaḥīḥ* by Zubair
— i.e. **T2b, contested**. The build silently removes the contest.

Note the T1 rows (9,477) are *accidentally immune* — `tier_of` returns T1 for bukhari/muslim
regardless of number. That immunity is luck, not design, and it does not extend to the hadith's
identity (F1 still applies to all 9,477).

---

### 🔴 F3 · HIGH — the "108 both" is understated 12× ; the gate verdict is dishonest by omission
**Files:** `W-A/uncapped_links_layer.json` (`by_origin.both: 108`) · `W-N/independent_gate.json`

**Direct answer to the panel's question — the 108 is NOT plausible.**

Because the join is broken (F1), the intersection of the verified layer and the quote registry
is almost entirely missed:

| | builder | corrected |
|---|---|---|
| CORROBORATED (both) | **108** | **1,309** |

**1,201 (verse, hadith) pairs that ARE independently corroborated by the quote method are
currently stamped `"meaning-link (bench-tier; CH1-F2: old gate was a restatement)"`.**

Decomposed, in the region where the two readings differ (11,307 sunni pairs), E7 confirms the
positional id **156** times against the canonical id **33** — 4.7:1. On the shia side, 125
against 19 — 6.6:1.

This is the most consequential finding for the pillar's *meaning*: W-A's headline story is
"only 108 of 22,188 verified links survive an independent check." **The true figure is 1,309** —
still a minority, but a materially different result, and the layer currently understates its
own best evidence.

---

### 🟠 F4 · MEDIUM — W-B has 100 framework nodes and no build; 4 of 17 P32 domains unbuilt
**Files:** `10-WAQF/framework/gen_p32.py:33` · `10-WAQF/build/P32-SHAHADAT/`

`gen_p32.py:33` declares **"W-B · The tier gate"** (framework nodes **27801–27900**) and the
no-omission map assigns it two council findings — `CH1-F4/F5 T5 split` and `CH1-F6 sunni-side
label` (lines 82). There is **no `W-B/` directory**.

| domain | build dir |
|---|---|
| W-A, W-C, W-D, W-E, W-F, W-G, W-H, W-I, W-J, W-K, W-L, W-M, W-N | present (13) |
| **W-B · The tier gate** | **ABSENT** |
| **W-O · Witness pages** | **ABSENT** |
| **W-P · Education** | **ABSENT** |
| **W-Q · Gates & panels** | **ABSENT** |

W-B's substance ("the ladder rides every link verbatim") is *de facto* delivered inside W-A's
`tier` field — which is precisely the field F2 shows to be 25.2% wrong. So the one domain
chartered to own tier correctness is the one with no artifact and no gate of its own.

---

### 🟠 F5 · MEDIUM — the "NO-OMISSION PROOF" is circular and partly tautological
**File:** `10-WAQF/framework/gen_p32.py:80-90`

```python
domtxt = " ".join(p["domain"] for p in new) + " REPAIR"
for fnd, dom in FINDINGS.items():
    assert dom.split()[0] in domtxt, "OMISSION: %s -> %s" % (fnd, dom)
```

Both operands are **hardcoded literals in the same file** — `FINDINGS` (lines 81-87) is compared
against `P28X`/`P32D` (lines 16-48), forty lines above. The assert compares the file to itself.
It can only fail if someone edits one literal and not the other; it carries **no information
about whether any work landed**. This breaks **law 5 (KNOWN-POSITIVE)** and I-2's *"the baseline
must be independent of the check, or the check cannot fail."*

I mutation-tested it:

| mutation | result |
|---|---|
| emit **zero** nodes | `CH2 census-to-lookup → REPAIR` still **PASSES** |
| emit everything **except the REPAIR pillar** | REPAIR mapping still **PASSES** |
| replace all domains with one decoy string `"notes: W-A W-B W-C W-N …"` | **every finding PASSES** |

Two distinct defects: the manual `+ " REPAIR"` makes that mapping **unfalsifiable**, and the
substring-over-a-concatenated-blob test means membership is never actually checked. The proof
currently certifies that CH1-F4/F5 and CH1-F6 are "not omitted" — while W-B (F4) has no artifact.

*Framework structure itself is sound:* 30,000 nodes, contiguous 1…30,000, zero duplicates,
26,400 ledger untouched (append-only law kept), RESERVE 450 marked `block: "reserved"`. ✅

---

### 🟠 F6 · MEDIUM — the CH1-F1 flag is blanket, and the per-link class was never persisted
**Files:** `p32_wa_rebuild.py:68` · `10-WAQF/build/LENS-AUDIT/CH1_full_census.json`

Every one of the 22,080 verified-only rows carries the identical string
`"isnad-shingle-risk-class (CH1-F1, 16.5% population rate)"`.

But CH1 did not find a 16.5% *property of every link* — it found **a specific set of 3,662
links** (`COUNCIL-BENCH1-HADITH-SCIENCES.md:107`, class D), alongside class A 10,625 / B 2,971 /
C 4,930. W-A discards that partition and flags the whole population.

Checking whether the partition is recoverable: `CH1_full_census.json` holds **only aggregates** —
`links: 22188`, `classes: {4 counts}`, `verses_all_classD: 87`. **The per-link classification was
computed and thrown away.** Neither the 3,662 links nor the 87 all-class-D verses can be named.

Consequences: **18,418 rows carry a risk flag they do not warrant** (I-2: *"a false alarm costs
trust exactly as much as a false all-clear"*), the 3,662 genuine ones are indistinguishable, and
CH1-F1 **cannot be remediated at row level** until `01-TOOLKIT/verify_hadith_links.py` is re-run
persisting the class. This is CH2's own "census-to-lookup" defect, still live inside the layer
that claims to answer it.

---

### 🟡 F7 · LOW-MEDIUM — W-N is a legend, not a gate; and its verdict strings match nothing
**File:** `10-WAQF/build/P32-SHAHADAT/W-N/independent_gate.json` (515 bytes)

The entire artifact is `_meta` plus three class names. **No counts, no per-row verdicts, no
independence test, no known-positive** (law 5). The verdicts it describes live in W-A; W-N
records nothing that could be checked or that could fail.

Worse, none of its three strings appears verbatim in W-A:

| W-N declares | W-A writes |
|---|---|
| `CORROBORATED (quote-method)` | `CORROBORATED (independent quote method)` |
| `meaning-link (bench-tier)` | `meaning-link (bench-tier; CH1-F2: old gate was a restatement)` |
| `evidentiary quote (born independent)` | `evidentiary quote (uniqueness+anchored-run+contained-formula laws)` |

A consumer joining W-A rows to W-N's classes on the verdict string gets **zero matches** in all
three classes.

**Credit where due — the independence *doctrine* is sound.** I checked the substance, not just
the claim: `audit_registry.py:23` builds `vsk[key] = skel(uthmani)` and matches **Qur'ān verse
skeletons against hadith text**, whereas the old gate matched **hadith text against the tafsīr
commentary cell** (`verify_hadith_links.py:72`, which fed `matn or ar` — isnād included). The
second operand genuinely differs, so an isnād shingle cannot forge a quote match. **CH1-F2 is
answered correctly in method.** It is answered *wrongly in count* (F3) and *not evidenced* in
W-N itself.

---

### 🟡 F8 · LOW — 58 rows link to book front-matter, not hadith
**Evidence:** 58 verified rows carry `h[2] == "0"` (55 shia + malik + bukhari).

Sample — verse **2:19** (the thunderstorm parable) → `['shia','Al-Kafi-Volume-1-Kulayni','0']` →
resolves to id 1: *"In the Praise of Allah, the Beneficent, the Merciful. All praise belongs to
Allah Who is praised for His bounties…"* — **the book's opening doxology**, not a report.

The shia corpora carry non-hadith front matter as row 0/1, and the link layer treats it as a
narration. These 58 rows should be classed, not silently tiered (they currently land T6/UNRESOLVED).

---

### 🟡 F9 · LOW — the GOLDEN label overstates its own tier set
**Files:** `W-C/quote_registry.json` `_meta.law` · `audit_registry.py:127`

The published law string says **"GOLDEN = full-quote × graded-tier (T1/T2/T5)"**. The computation
is `full × (T1, T2, T5s)` — **T5s only**:

| definition | count |
|---|---|
| full × T1/T2/**T5s** | **860** ← published |
| full × T1/T2/T5s/T5w/T5m ("T5" as written) | 1,247 |

A reader taking "T5" at face value expects 1,247. The restriction is *deliberate and documented
at source* (`audit_registry.py:127` comments *"CH1-F5: only STRONG shia verdicts"*) — so this is
a labelling imprecision in the published string, not a computational error. Recommend the law
string read `T5s`.

---

### 🟡 F10 · LOW — the ladder cannot express *mawḍūʿ* / *munkar*
**File:** `p32_wa_rebuild.py:26-42`

`tier_of` returns **T3** for any graded hadith that is neither ṣaḥīḥ nor ḥasan. Sample 2:125 →
Ibn Mājah 1008 is graded *Daif* (Albānī), **"Daif Munkar"** (ʿAbd al-Bāqī), *Daif* (Zubair) — and
lands in **T3**, the same rung as a mildly weak report, and *above* T4 (ungraded). A fabricated
or *munkar* report is not separable from an ordinary weak one anywhere in the layer.

---

## 3 · WHAT IS GREEN (verified, not assumed)

| # | Claim | Evidence |
|---|---|---|
| G1 | W-A's 8 headline totals | re-derived independently, exact match |
| G2 | NO CAP is real | 2:255 = 26 rows; 880 verses > 9; smooth distribution |
| G3 | Zero duplicate (verse, hadith) rows | 31,855 rows / 31,855 distinct |
| G4 | CH1 flags ride verified-only rows exactly | 22,080/22,080; 0 on quote rows |
| G5 | USE axis rides every quote row | 9,775/9,775; 0 on verified-only |
| G6 | **W-C is byte-identical to E7** | `W['registry'] == E7` → `True` — **law 11 (SINGLE-SOURCE) kept** |
| G7 | W-C totals re-derive | by_class_and_tier ✅, GOLDEN 860 ✅, golden_verses 231 ✅ |
| G8 | **W-C ids all resolve** | 0 of 9,775 absent from corpus — the quote engine's ids are clean |
| G9 | Quote-engine content is correct | 9:108 → Abū Dāwūd 44 *names the verse explicitly*; 2:125 → Ibn Mājah 1008 recites 2:125 |
| G10 | W-N's independence doctrine | second operand is the Qurʾān, not the tafsīr cell — genuinely a different method |
| G11 | Framework integrity | 30,000 nodes, contiguous, 0 dupes, 26,400 untouched, RESERVE marked |

**The defect is confined to the HV-join.** Everything sourced from E7 is sound. That is the
single most useful fact for the repair: W-C, and the 9,667 quote-new rows, do not need rebuilding.

---

## 4 · MECHANICAL TABLE

| # | Sev | Layer | File | Claim under test | Measured | Verdict |
|---|---|---|---|---|---|---|
| F1 | 🔴 CRIT | W-A | `verify_hadith_links.py:70-72` / `p32_wa_rebuild.py:44-49,66` | ids identify a hadith | 21,632/22,188 (97.5%) misresolve | **FAIL** |
| F2 | 🔴 CRIT | W-A/W-B | `p32_wa_rebuild.py:66` | "tier rides every link verbatim" | 5,599/22,188 (25.2%) wrong | **FAIL** |
| F3 | 🔴 HIGH | W-A/W-N | `uncapped_links_layer.json` | `both = 108` | true = **1,309** (12.1×) | **FAIL** |
| F4 | 🟠 MED | W-B | `gen_p32.py:33` | W-B built | no directory; 4/17 domains absent | **FAIL** |
| F5 | 🟠 MED | framework | `gen_p32.py:80-90` | "no-omission proof" | circular; 3/3 mutations pass | **FAIL** |
| F6 | 🟠 MED | W-A | `p32_wa_rebuild.py:68` | CH1-F1 flagged | blanket on 22,080; 3,662 unrecoverable | **WEAK** |
| F7 | 🟡 LOW-MED | W-N | `independent_gate.json` | "the independent gate" | 0 counts, 0 verdicts; strings match nothing | **WEAK** |
| F8 | 🟡 LOW | W-A | 58 rows `h[2]=="0"` | rows are hadith | front-matter doxology | **FAIL** |
| F9 | 🟡 LOW | W-C | `quote_registry.json` `_meta` | GOLDEN = T1/T2/T5 | computes T1/T2/T5s (860 vs 1,247) | **MISLABEL** |
| F10 | 🟡 LOW | W-A | `p32_wa_rebuild.py:26-42` | ladder transmits grades | *munkar* collapses into T3 | **WEAK** |
| G1–G11 | ✅ | all | — | see §3 | re-derived | **PASS** |

---

## 5 · BLAST RADIUS BEYOND MY SCOPE (law 13 · GAP-HIGHLIGHT — what this commission itself missed)

My lane was W-A / W-C / W-B / W-N. The positional id space is **not** confined to it. I swept the
consumers of `_hadith_VERIFIED.json` and found the same join reproduced elsewhere — **these are
not audited, and must be swept before any seal:**

| File | Line | Status |
|---|---|---|
| `10-WAQF/framework/audit_tiers.py` | 60, 64, 76 | **SAME DEFECT** — identical `tier_map` built on canonical keys, joined against HV's positional `h`. The published tier census — the very layer CH1-F4/F5/F6 were derived from — inherits F2 wholesale. |
| `10-WAQF/framework/p31_joins.py` | 49 | **READER-FACING** — renders `"%s %s #%s" % tuple(l0["h"])`, printing a positional index as a hadith number into human-readable citations. |
| `10-WAQF/framework/verify_credit_map.py` | 25-33 | immune — aggregates by `(trad, book)` only, never joins on number. |
| `audit_lens.py`, `audit_ocean.py` | — | appear immune (no `h`-number join), **not exhaustively verified**. |
| `01-TOOLKIT/`: `audit_phase_f.py:84`, `build_archive.py:592`, `build_hadith_register.py:87`, `build_judge_bundles.py:66` | — | **UNAUDITED.** `build_archive` and `build_judge_bundles` are output-producing and are the highest risk of shipping wrong citations. |

Further gaps I could not close in this lane:

1. **Downstream count drift.** If W-F (TVF v3) or W-M (the 4,938 exposition queue) ride W-A's
   `origin` field, the 108 → 1,309 correction changes their published counts. Not checked.
2. **The 87 all-class-D verses** named in CH1 are now unidentifiable (F6) — verses where *every*
   link is attribution-unestablished. Those are exactly the verses a reader should be warned about.
3. **The treebank acquisition** (`00-CORPUS/acquired/irab_treebank/`) — licence, SHA seal, and the
   139,376-token claim — is listed in the wave header but sits outside my scope lane and was
   **not verified by me**. Another seat must own it before seal.
4. **I did not verify HV's own construction** beyond the id convention — whether the 22,188 links
   are correctly *selected* is CH1's question, not re-opened here.
5. **The repair is cheap and should be done at the producer, not the consumer.** Persisting the
   corpus key (and the A/B/C/D class) in `verify_hadith_links.py` fixes F1, F2, F3, F6 and F8 in
   one pass, and leaves W-C untouched. Patching W-A alone would leave `audit_tiers.py` and
   `p31_joins.py` diverging — a **law 11 (SINGLE-SOURCE)** violation in the making.

---

## SEAL VERDICT

**SEAL BLOCKED BY:**

1. **F1** — id-space collision: 97.5% of verified rows (21,632/22,188) name the wrong hadith. Root cause `verify_hadith_links.py:70-72`.
2. **F2** — 5,599 rows (25.2%) publish a tier read off the wrong hadith; the contested/clean distinction is silently destroyed (87:1 proof).
3. **F3** — independent corroboration understated 12×: `both = 108` where the truth is **1,309**; 1,201 corroborated pairs mislabelled `meaning-link`.
4. **F4** — W-B holds 100 framework nodes and two council findings with **no build artifact**; W-O/W-P/W-Q likewise absent.
5. **F5** — the no-omission proof is circular and survives all three mutation tests, so it cannot certify anything — including its own claim that F4's findings were not omitted.

**Not blocking, required before the next wave:** F6 (persist the CH1 per-link class), F7 (give
W-N counts and a known-positive), F8, F9, F10 — and the §5 sweep of `audit_tiers.py`,
`p31_joins.py` and the four unaudited `01-TOOLKIT` consumers.

**Re-review trigger:** rebuild from the producer, then this seat re-runs the five proofs in §2·F1
plus the eight totals in §1. Expected post-fix signature: `UNRESOLVED = 0`, `both ≈ 1,309`,
tier-change count `0` against a corrected baseline, and `2:143 → bukhari 4487`.

*Machine-scholar review, labeled. Human scholarly review invited, never waited for. All counts
in this document were produced by the reviewer's own scripts against the sealed sources
(`source_sha fbc8744a…199bb`); no build artifact was modified.*
