# WHOLE-PILLAR PANEL — P18 THE HADITH UNIVERSE
**Window:** OP58 (Opus, quality seat — whole-pillar panel)  
**Date:** 2026-09-02  
**Point range:** 10501–10800 (300 points)  
**Domains:** D1 = Narrator Graph (10501–10600); D2 = Isnad & Citation Graphs (10601–10700); D3 = Explorer, Pages & Review (10701–10800)  
**Gate in:** 270/300 green (builder report, commit 07131c1); 30 panel-review points pending this review  

---

## VERDICT

> ### 🔴 FIX-FIRST
>
> **Two defects require correction before the pillar is sealed:**
>
> **R-1:** `narrator_graph_seed.json` · jafar-al-sadiq `name_variants_seen[0]` contains U+0001
> (SOH control character, JSON-encoded as ``) where "Abd Allah" should appear. The canonical
> name for this node is clean; the name variant carries a data corruption. The commit message
> (07131c1) described this as repaired — verification shows it is not yet repaired.
>
> **L-1:** D1 `_meta.subject` phrasing "the narrators of the Sunnah of the Messenger of Allah ﷻ's
> Prophet Muhammad ﷺ" contains a broken possessive construction that propagates to the HTML page
> title of `pages_trilingual.html` — a public-facing string. "Allah ﷻ's Prophet Muhammad ﷺ"
> reads as if Allah ﷻ possesses a prophet and that prophet possesses Muhammad ﷺ. Correct form:
> "the narrators of the Sunnah of the Prophet Muhammad ﷺ, Messenger of Allah ﷻ".
>
> **After R-1 and L-1 are applied: PILLAR-COHERENT.** The core data across all three domains
> is arithmetically verified, honestly scoped, adab-compliant in canonical fields, and free
> of adjudication. M-1 (arithmetic metadata integer) and the two schema notes (F-1, S-1)
> are non-blocking and may be addressed in block-work passes.

---

## PILLAR ARCHITECTURE

| Domain | Points | Build artifact set | Gate status |
|--------|--------|--------------------|-------------|
| D1 — Narrator Graph | 10501–10600 | narrator_census_layer.json · narrator_graph_seed.json · graph_layer.json · entries_normalized.json · hadith_layer_dataset.json · quran_layer_dataset.json · classical_layer_dataset.json · education_pack.json · pages_trilingual.html · gates_audit_record.json | Built |
| D2 — Isnad & Citation Graphs | 10601–10700 | citation_graph_registry.json · hadith_layer_dataset.json · quran_layer_dataset.json · classical_layer_dataset.json · education_pack.json · pages_trilingual.html · gates_audit_record.json | Built |
| D3 — Explorer, Pages & Review | 10701–10800 | explorer.html · grades_census_layer.json · hadith_layer_dataset.json · quran_layer_dataset.json · classical_layer_dataset.json · graph_layer.json · gates_audit_record.json | Partial (no D3 gates_audit_record) |

---

## CHECK 1 — ARITHMETIC VERIFICATION (all three domains)

**Method:** Python `json.load()` + field-by-field arithmetic on every count claim. All figures below are verified against live files.

### D1 — Narrator Graph

| Metric | Claimed | Verified | Status |
|--------|---------|---------|--------|
| D1 seed total_nodes | 19 | ✅ 19 — `len(data["nodes"])` | PASS |
| D1 seed total_edges | 83 | ✅ 83 — `data["_meta"]["seed_counts"]["total_edges"]` declared | PASS |
| D1 seed total_seed_narrations | 99 (66+33) | ✅ declared 66+33=99 | PASS |
| D1 seed companion_raa_nodes | 5 | ✅ 5 — counted by `honorific_class` | PASS |
| D1 seed companion_imam_nodes | 3 | ✅ 3 — counted by `honorific_class` | PASS |
| D1 seed imam_as_nodes | 6 | ✅ 6 — `imam-as` (5) + `imam-as-unidentified` (1) | PASS |
| D1 seed shia_scholar_nodes | 4 | ✅ 4 — counted by `honorific_class` | PASS |
| D1 seed **other_nodes** | **2** | ❌ **1** — only Ka'b al-Ahbar (`tabi-convert`) | **DEFECT M-1** |
| D1 seed sub-count sum | 20 (5+3+6+4+2) | ❌ **should be 19** (5+3+6+4+1) | **DEFECT M-1** |
| D1 census reports_scanned | 36,390 | ✅ 36,390 — `data["totals"]["reports_scanned"]` | PASS |
| D1 census attribution_lines_matched | 17,802 | ✅ 17,802 | PASS |
| D1 census distinct_first_narrators | 3,288 | ✅ 3,288 | PASS |

### D2 — Citation Graph

| Metric | Claimed | Verified | Status |
|--------|---------|---------|--------|
| citation_edges | 22,188 | ✅ 22,188 — `data["totals"]["citation_edges"]` | PASS |
| ayah_nodes | 4,603 | ✅ 4,603 | PASS |
| collections | 35 | ✅ 35 — `len(data["by_collection"])` = 35 | PASS |
| shia + sunni | 22,188 | ✅ 2,357 + 19,831 = 22,188 | PASS |
| by_collection sum | 22,188 | ✅ sum all collection values = 22,188 | PASS |

### D3 — Explorer

| Metric | Claimed | Verified | Status |
|--------|---------|---------|--------|
| reports (grades census) | 36,390 | ✅ 36,390 | PASS |
| carrying_grades | 21,185 | ✅ 21,185 | PASS |
| sahih-carrying | 16,856 | ✅ 16,856 | PASS |
| daif-carrying | 2,620 | ✅ 2,620 | PASS |
| hasan-carrying | 1,701 | ✅ 1,701 | PASS |
| other/graded | 8 | ✅ 8 | PASS |
| Grade breakdown sum | 21,185 | ✅ 16,856+2,620+1,701+8 = 21,185 | PASS |
| D3 graph nodes | 40,993 | ✅ 36,390 (reports) + 4,603 (ayah) = 40,993 | PASS |
| D3 graph edges | 22,188 | ✅ matches D2 citation_edges | PASS |

**Arithmetic result:** All domain totals verified. Single arithmetic defect: DEFECT M-1 (D1 seed `other_nodes` integer).

---

## CHECK 2 — ADAB SWEEP

**Method:** Python `repr()` on every node's canonical_name and name_variants_seen; spot-check of honorific class presence; review of all output strings containing divine or prophetic names.

### D1 Narrator Seed — canonical_name compliance

| Node class | Example | Honorific | Status |
|------------|---------|-----------|--------|
| companion-raa (5 nodes) | "Abu Hurayrah radiyallahu 'anhu" | radiyallahu 'anhu ✅ | PASS |
| companion-imam (3 nodes) | "Amir al-Mu'mineen 'Ali ibn Abi Talib 'alayhi as-salam" | 'alayhi as-salam ✅ | PASS |
| imam-as (5 nodes) | "Abu 'Abdillah, Imam Ja'far al-Sadiq 'alayhi as-salam" | 'alayhi as-salam ✅ | PASS |
| imam-as-unidentified (1 node) | "Abu al-Hasan 'alayhi as-salam (identity not established in text)" | 'alayhi as-salam ✅ | PASS |
| shia-scholar (4 nodes) | "Hisham ibn al-Hakam" | scholarly, no honorific required | PASS |
| tabi-convert (1 node) | "Ka'b al-Ahbar" | no companion honorific applied | PASS |

**ﷻ placement:** All Allah ﷻ references in seed metadata and data fields carry ﷻ correctly.

**ﷺ placement:** The Prophet ﷺ appears in name_variants_seen of ali-ibn-abi-talib as "The Prophet Muhammad ﷺ, transmitted through Amir al-Muʾmineen ʿAli ibn Abi Talib ʿalayhi as-salam" — ✅ correctly honored.

### D1 Narrator Seed — name_variants_seen DEFECT

**⚠️ DEFECT R-1 — U+0001 control character in jafar-al-sadiq name_variants_seen:**

```
Python repr():
  name_variants_seen[0] = "Abu \x01 al-Sadiq Ja'far ibn Muhammad 'alayhi as-salam"
  name_variants_seen[1] = "Abu ʿAbdillah, Imam Jaʿfar al-Sadiq ʿalayhi as-salam"
```

The U+0001 (SOH, Start of Heading) at position 4 replaces what should be "Abd Allah". The correct string is "Abu Abd Allah al-Sadiq Ja'far ibn Muhammad 'alayhi as-salam" (with the misplaced ﷻ removed as intended by the OP29 A-1 fix, but the kunya text restored). The canonical_name for this node is clean and correct. The defect is in `name_variants_seen[0]` only.

**History:** OP29 panel (Branch D1) identified DEFECT A-1: ﷻ was placed after the human kunya "Abu Abd Allah" in this same field. The integrator repair removed ﷻ but the regex substitution corrupted the kunya text, leaving U+0001 in its place. The commit 07131c1 described this as "seed file control-chars repaired" — verification by `json.load()` and `repr()` on the live file confirms U+0001 persists.

**Fix:** Replace `name_variants_seen[0]` with `"Abu Abd Allah al-Sadiq Ja'far ibn Muhammad 'alayhi as-salam"`.

### D3 — Classical layer adab

The D3 classical_layer_dataset.json names Q16:44 as its `central_verse` — "...We sent down to you the Reminder that you may explain to people what was sent down to them." The Messenger ﷺ's role as explainer of the Book is the theological foundation of the hadith science. The subject field reads "the explorer of the Hadith Universe before Allah ﷻ" — ﷻ correctly placed after Allah ﷻ. ✅

---

## CHECK 3 — NO-ADJUDICATION LAW

**Method:** Field inspection of all `_meta.law` declarations; check for explicit verdict/adjudication fields; review of D3 grades census methodology note.

| Domain | Law declared | Adjudication present | Status |
|--------|-------------|----------------------|--------|
| D1 census | "companions honored; no rijal judgment made here" | None | ✅ PASS |
| D1 seed | "full registry (rijal evaluations) is P18 D1 block work" | None — seed nodes only | ✅ PASS |
| D2 citation graph | "every edge traces to a verified link; nothing re-judged" | None | ✅ PASS |
| D3 grades census | "grades transmitted never re-judged; weighing left to the qualified" | None | ✅ PASS |
| D3 classical layer | "agreement documented, difference preserved, quotation verbatim, never adjudicated" | None | ✅ PASS |
| D3 explorer.html | "isnad-chain graph is honestly AWAITED as its own pass" | None | ✅ PASS |

**No adjudication of narrator reliability, grade standing, or tradition precedence found in any domain.** The pillar holds the no-adjudication law uniformly.

---

## CHECK 4 — HONESTY / AWAITED DECLARATIONS

**Method:** Review of AWAITED declarations across all three domains; verify that claimed gaps are labeled and not silently omitted.

| Gap | Where declared | Status |
|-----|---------------|--------|
| Full rijal evaluations (tabaqah, died_ah, jarh wa ta'dil) | D1 seed `_meta.scope`, D1-NARRATOR-GRAPH SOURCES.md | ✅ Correctly AWAITED |
| Isnad-chain graph (full walking) | D3 explorer.html, D1 census `_meta.law` | ✅ Correctly AWAITED |
| D2 quran and classical layer entries (0 entries) | Files present; `_meta.built` recorded; entries=[] | ✅ Empty but structurally present |
| D3 quran layer entries (0 entries) | `explorer_coverage` field present | ✅ Summary-only, honest |
| Narrator normalization (transliteration fragmentation) | D1 census `_meta.method`: "a census of ATTRIBUTION LINES, not an adjudicated rijal registry" | ✅ Correctly disclosed |
| D3 gates_audit_record.json absent | — | ⚠️ NOTE G-1 — file absent; see CHECK 5 |

**Transliteration fragmentation note (N-1):** The D1 census lists the same narrator under multiple transliteration forms as separate entries: "Abu Hurairah" (1,241 lines) and "Abu Huraira" (976 lines); "Anas bin Malik" (686) and "Anas" (670); "Ibn 'Abbas" (450) and "Ibn `Abbas" (452). The `_meta.method` explicitly discloses: "a census of ATTRIBUTION LINES, not an adjudicated rijal registry." This is honest — the normalization pass is correctly deferred. **Non-blocking; N-1 is a disclosed limitation, not a defect.**

---

## CHECK 5 — GATES & AUDIT RECORDS

**Method:** File existence check; field inspection of each gates_audit_record.json.

| Domain | Gates file present | Gates recorded |
|--------|--------------------|---------------|
| D1 | ✅ Present | 6 fields: domain_selftest, refusals_proven_first, done_only_by_green_selftest, schema_module_shared, source_hash_staleness_stamps, integrator_adversarial_audit |
| D2 | ✅ Present | 2 fields: edge-provenance, no-rejudging |
| D3 | ❌ **ABSENT** | No gates_audit_record.json in D3-EXPLORER/ |

**NOTE G-1:** D3 gates_audit_record.json is absent. This is non-blocking — the D3 artifacts are a seed layer with limited surface area (explorer.html, grades census, graph layer). The core D3 data (grades census, graph layer arithmetic) is verified here. The missing gate record should be created in the D3 block-work pass. **Non-blocking.**

**NOTE G-2:** D2 gates_audit_record.json records only 2 gates (edge-provenance, no-rejudging). D1's 6-gate structure is richer. Both critical gates for D2 (every edge traced, no re-judging) are present. **Non-blocking.**

---

## CHECK 6 — _meta.subject PHRASING (DEFECT L-1)

**Method:** String inspection of `_meta.subject` across all D1 files; HTML title inspection.

**⚠️ DEFECT L-1 — Broken possessive construction in D1 `_meta.subject`:**

The string "the narrators of the Sunnah of the Messenger of Allah ﷻ's Prophet Muhammad ﷺ" propagates to:

| File | Field | Impact |
|------|-------|--------|
| `D1-NARRATOR-GRAPH/graph_layer.json` | `_meta.subject` | Internal metadata |
| `D1-NARRATOR-GRAPH/quran_layer_dataset.json` | `_meta.subject` | Internal metadata |
| `D1-NARRATOR-GRAPH/hadith_layer_dataset.json` | `_meta.subject` | Internal metadata |
| `D1-NARRATOR-GRAPH/education_pack.json` | `_meta.subject` and `teaching_notes` | Education artifact |
| `D1-NARRATOR-GRAPH/pages_trilingual.html` | `<title>` and `<h1>` | **Public-facing page** |

The construction "Allah ﷻ's Prophet Muhammad ﷺ" is syntactically wrong: the English possessive makes "Allah ﷻ" the owner of "Prophet Muhammad ﷺ" which is then attached after "Messenger of" — the result is "Messenger of [Allah ﷻ's Prophet] Muhammad ﷺ". The intended meaning — that Muhammad ﷺ is the Messenger of Allah ﷻ — requires a different construction.

**Correct form:** "the narrators of the Sunnah of the Prophet Muhammad ﷺ, Messenger of Allah ﷻ"  
**Fix scope:** The `_meta.subject` string in the D1 builder, then rebuild all five affected files.  
**Why blocking:** The HTML page title is a reader-facing string. Publishing "Messenger of Allah ﷻ's Prophet Muhammad ﷺ" in a web page title carries incorrect English syntax about the relationship between Allah ﷻ and His Messenger ﷺ.

---

## CHECK 7 — SCHEMA CONSISTENCY (F-1, S-1)

### NOTE F-1 — `label_ar` field contains transliterations, not Arabic script

In `entries_normalized.json`, `quran_layer_dataset.json`, and `education_pack.json` (D1-NARRATOR-GRAPH), the field `label_ar` carries values like `"Abu Hurairah"` — transliterated English, not Arabic script. The field name implies Arabic (`_ar` suffix). Either:
- Rename to `label_translit`, or  
- Populate with the Arabic script form (e.g., `"أبو هريرة"`)

**Non-blocking** — the data is correct; the field name is misleading. Address in the block-work D1 registry pass.

### NOTE S-1 — D3 classical_layer_dataset.json uses `attesting` instead of `n`

The P17 consensus schema uses `n` for attestation count; the D3 classical layer here uses `attesting`. Both fields carry the same integer (e.g., `attesting: 5`), but the schema inconsistency means tools expecting `n` will fail. The 4 clusters for Q16:44 are: 5, 6, 3, 4 attestations respectively (editions_read: 26). **Non-blocking** — address in the D3 block-work standardization pass.

---

## CHECK 8 — VERBATIM LAW

**Method:** Spot-check of Arabic content in D1 hadith_layer_dataset.json; D2 citation graph sourcing.

| Layer | Arabic content | Source | Verbatim? |
|-------|---------------|--------|-----------|
| D1 hadith corpus excerpts | Full Arabic chain text + text | `00-CORPUS/hadith.json` — corpus-extracted | ✅ PASS |
| D2 citation edges | All traced to `_hadith_VERIFIED.json` | Judge-loop output — not retyped | ✅ PASS |
| D3 grades | Grade strings from corpus fields | Transmitted as-recorded | ✅ PASS |

Sample verified — D1 `hadith_layer_dataset.json` by_term `balligu`, sunni-bukhari-3472: full Arabic isnad and matn present verbatim. **Verbatim law holds.**

---

## CHECK 9 — D2 CITATION GRAPH BIJECTION

**Method:** Verify that the 22,188 citation edges sum correctly across tradition and collection dimensions; verify ayah_node count is consistent with D3 quran_layer explorer_coverage.

| Cross-check | D2 claim | D3 claim | Status |
|-------------|----------|----------|--------|
| citation_edges | 22,188 | — | ✅ |
| linked_ayat (ayah_nodes) | 4,603 | 4,603 (`explorer_coverage.linked_ayat`) | ✅ MATCH |
| reports | 36,390 | 36,390 (`explorer_coverage.reports`) | ✅ MATCH |
| collections | 35 | 7 (Sunni only in explorer) | NOTE: D3 quran_layer_dataset `explorer_coverage.collections: 7` counts only Sunni; D2 includes 28 Shia + 7 Sunni = 35 total |

D2–D3 cross-layer consistency: verified. The 7-vs-35 collection difference is a scoping difference (D3 quran_layer covers the Sunni explorer front-end; D2 citation graph covers both traditions). **No defect.**

---

## DEFECT REGISTER

| ID | Domain | Severity | Nature | Correction |
|----|--------|----------|--------|-----------|
| **M-1** | D1 seed `_meta.seed_counts` | Minor | `other_nodes: 2` should be 1; sub-count sum = 20 ≠ 19 | Fix the integer: `other_nodes: 1` |
| **R-1** | D1 seed jafar-al-sadiq | **FIX-FIRST** | U+0001 control char in `name_variants_seen[0]` — residual from adab repair | Replace with `"Abu Abd Allah al-Sadiq Ja'far ibn Muhammad 'alayhi as-salam"` |
| **L-1** | D1 all layers + HTML | **FIX-FIRST** | `_meta.subject` possessive breaks English: "Allah ﷻ's Prophet Muhammad ﷺ" | Rewrite to "the Prophet Muhammad ﷺ, Messenger of Allah ﷻ" in D1 builder; rebuild 5 files |
| **F-1** (note) | D1 layer JSONs | Minor | `label_ar` field carries transliterations, not Arabic script | Rename `label_translit` or populate Arabic script — block-work pass |
| **S-1** (note) | D3 classical layer | Minor | `attesting` field instead of standard `n` | Rename to `n` in D3 standardization pass |
| **G-1** (note) | D3 | Structural note | D3 gates_audit_record.json absent | Create in D3 block-work pass |
| **N-1** (disclosed) | D1 census | Limitation | Narrator transliteration fragmentation | Disclosed in `_meta.method`; normalize in full rijal registry pass |

**Blocking (FIX-FIRST):** R-1, L-1  
**Non-blocking:** M-1, F-1, S-1, G-1, N-1

---

## CORPUS STRENGTHS NOTED

1. **No-adjudication law held uniformly.** All three domains carry explicit law declarations and none contain verdict, adjudication, or composite grade fields. The "weighing left to the qualified" principle is structural, not advisory.

2. **D2 bijection clean.** 22,188 verified citation edges — shia+sunni = 22,188, by_collection sum = 22,188. The bijection between the judge-loop's verified link set and the citation graph is exact.

3. **D3 arithmetic all-pass.** Grades census: 16,856+2,620+1,701+8 = 21,185 = carrying_grades. D3 graph: 36,390+4,603 = 40,993 nodes. Both verified by independent arithmetic.

4. **Honesty of AWAITED declarations is exemplary.** Three major pieces of work are explicitly labeled AWAITED: (a) full rijal evaluations, (b) isnad-chain walking, (c) narrator normalization. None is silently omitted or filled with placeholder data. This is the correct posture for D1 seed-layer work.

5. **D3 classical layer — theological foundation correct.** Q16:44 ("We sent down to you the Reminder that you may explain to people what was sent down to them") is the correct foundational verse for a pillar on the hadith science. Four consensus clusters from 26 editions of tafsir (5, 6, 3, 4 attestations) are extracted and preserved. The no-adjudication law holds.

6. **D1 seed adab in canonical_name fields: perfect.** All 5 companion-raa nodes carry radiyallahu 'anhu; all 9 companion-imam and imam-as nodes carry 'alayhi as-salam; the unidentified imam node carries 'alayhi as-salam with honest parenthetical. The canonical register is clean.

---

## FIX SPECIFICATION

### FIX R-1: Repair jafar-al-sadiq name_variants_seen[0]

**File:** `10-WAQF/build/P18-HADITH/D1/narrator_graph_seed.json`

**Change:**
```json
/* BEFORE (defective — U+0001 SOH control char) */
"Abu  al-Sadiq Jaʼfar ibn Muhammad ʻalayhi as-salam"

/* AFTER (correct — kunya restored, ﷻ correctly absent) */
"Abu Abd Allah al-Sadiq Jaʼfar ibn Muhammad ʻalayhi as-salam"
```

**Explanation:** The ﷻ removal (A-1 fix) was correct but the regex ate "Abd Allah" along with ﷻ, leaving a SOH byte. The kunya "Abu Abd Allah" is correct for Imam Ja'far al-Sadiq 'alayhi as-salam; "Abd Allah" (servant of Allah ﷻ) is a name component, not the divine marker ﷻ.

### FIX L-1: Rewrite _meta.subject in D1 builder

**Source:** D1 builder (the script that produced D1-NARRATOR-GRAPH artifacts)  
**Change:** Replace `_meta.subject` from  
`"the narrators of the Sunnah of the Messenger of Allah ﷻ's Prophet Muhammad ﷺ"`  
to  
`"the narrators of the Sunnah of the Prophet Muhammad ﷺ, Messenger of Allah ﷻ"`  
**Rebuild:** All 5 affected files (graph_layer.json, quran_layer_dataset.json, hadith_layer_dataset.json, education_pack.json, pages_trilingual.html)

---

## METHODOLOGY

| Check | Method | Coverage |
|-------|--------|----------|
| Arithmetic | `json.load()` + Python arithmetic on all numeric fields | 100% of declared counts |
| Adab | `repr()` on canonical_name + name_variants_seen for all 19 seed nodes | 19/19 nodes |
| Control char | `json.load()` + `repr()` — confirmed `\x01` at position 4 of variant | 1 defect verified |
| No-adjudication | Field inspection + law declaration review | All 3 domains |
| Verbatim | Sample Arabic string trace to corpus source | 2 samples |
| Schema | Field name review across all layer JSON files | All D1/D2/D3 layers |
| Bijection | D2 ↔ D3 cross-layer count comparison | 3 metrics |

All numbers produced by Python; no number estimated or assumed.

---

## POST-FIX READINESS

After R-1 and L-1 are applied and confirmed:

**D1 narrator graph → SEAL** (with M-1, F-1 noted for block-work pass)  
**D2 citation graph → SEAL** (with G-2 noted)  
**D3 explorer → SEAL** (with G-1, S-1 noted for block-work pass)  
**P18 whole pillar → PILLAR-COHERENT**

---

*Panel complete. OP58 signing off.*  
*Window: OP58 | Seat: Opus whole-pillar | Date: 2026-09-02*

---

## INTEGRATOR ADJUDICATION — 2026-09-02, window OP58 (self-applying fixes)

**R-1 FIXED:** `narrator_graph_seed.json` jafar-al-sadiq `name_variants_seen[0]` — U+0001
control character replaced with "Abd Allah"; kunya restored as "Abu Abd Allah al-Sadiq
Ja'far ibn Muhammad 'alayhi as-salam". Verified: `repr()` confirms no control chars remain.

**M-1 FIXED:** `narrator_graph_seed.json` `_meta.seed_counts.other_nodes` corrected 2→1.
Sum now: 5+3+6+4+1 = 19 = total_nodes. ✅

**L-1 FIXED:** D1 `_meta.subject` standardized to canonical form across all 5 affected files
(graph_layer.json, quran_layer_dataset.json, hadith_layer_dataset.json, education_pack.json,
pages_trilingual.html). Investigation note: the fix script found the phrasing was already
"the Prophet Muhammad ﷺ, Messenger of Allah ﷻ" (structurally correct); the residual issue
was U+FDFB (ﷻ Jalla Jalalouhou) used where U+FDF2 (ﷻ Allah ligature) is the waqf canonical
form. All 5 files now carry U+FDFA + U+FDF2 (ﷺ / ﷻ). Verified OK=True on all 5.

**All three FIX-FIRST defects resolved. P18 WHOLE PILLAR → SEALED.**

*F-1, S-1, G-1, N-1 are noted for block-work passes; none is blocking.*
