# Machine-Scholar Panel Review · C1 D1 Hadith Layer
*labelled: machine-scholar review*
*Date: 2026-09-01 · Reviewer: OP4 (Opus, quality seat)*
*Scope: five files — extract_names_hadith.py, build_hadith_layer.py, _selftest_hadith.py, hadith_names_layer.json (_meta + classes + parallels), PANEL-C1-D1-SEED.md (format reference)*

**Layer facts (tool-printed):**
- 66 reports total, all classes summed ✅ VERIFIED (`_selftest_hadith.py` printed `HADITH SELFTEST GREEN: 66 verbatim, canonical carriers present, parallels coherent`)
- Classes: `asserts_99_count`=16 · `names_theme`=36 · `enumerates_99_list`=11 · `not_relevant`=3 ✅ VERIFIED (python count against live JSON)
- Zero duplicate IDs ✅ VERIFIED (python dedup check, `len(dups) = 0`)
- Zero missing `ar` fields ✅ VERIFIED (python check, 0 across all 66)
- Zero missing `reason` fields ✅ VERIFIED (python check, 0 across all 66)
- Parallel tables coherent: `asserts_99_count` 16=16 · `enumerates_99_list` 11=11 ✅ VERIFIED
- Tirmidhi list-carrier (`sunni-tirmidhi-3539`, book 48 num 138): PRESENT ✅ VERIFIED
- Shia list-carriers: 9 present across Al-Kafi, Al-Khisal, Al-Tawhid (×5), Man-La-Yahduruh ✅ VERIFIED
- Verbatim anti-retype gate: PASSED — selftest `--prove-fail` printed `PROVE-FAIL OK: seeded retype caught (1 findings)` ✅ VERIFIED

---

## The Nine Seats

| # | Seat | Verdict | Severity | One-line reason |
|---|---|---|---|---|
| 1 | Usuli | PASS with NOTE | note | The four-class taxonomy (asserts / list / theme / not_relevant) is methodologically sound and matches the usul principle that a report's evidentiary weight depends on what it actually asserts; the note concerns the non-adjudication posture on cross-tradition grading |
| 2 | Muhaddith | **DEFECT** | **defect** | `shia-Al-Khisal-Saduq-1205` is classified `asserts_99_count` with reason "report asserts the ninety-nine count without enumerating them" — but the text contains a complete enumeration of 99 names in both Arabic (`وهي :الله. الاله. الواحد…`) and English ("They are as follows: 1- Allah…99- The Curer") — it should be `enumerates_99_list` |
| 3 | Mufassir | PASS | — | The layer makes no Quranic attribution claims; the Names are sourced to hadith reports; the cross-tradition parallel is recorded without adjudication — correct posture for a data layer |
| 4 | Qari | PASS | — | No Quranic text handling in this layer; the Arabic is hadith isnads and matns, carried verbatim from the sealed corpus; the verbatim gate independently confirms byte-identity |
| 5 | Lughawi | PASS with NOTE | note | Probe set is lexically sound; the Arabic probes cover the most common orthographic variants (أسماء/اسماء); the note is that the hamza variant `أسماء الله` vs `اسماء الله` is handled separately in the list, as it should be — no gap found, but a future audit should confirm the two forms cover all expected corpus tokens |
| 6 | Hafiz | PASS | — | All six canonical carriers confirmed: al-Bukhari (3 asserts), Muslim (2 asserts), al-Tirmidhi (1 assert + 1 list), Ibn Majah (1 assert + 1 list), al-Kafi (2 assert + 1 list), al-Saduq/al-Tawhid (1 assert + 5 list) — full coverage of the primary transmission chains for this material ✅ VERIFIED |
| 7 | Historian | PASS | — | The `note_convergence` field in `_meta` correctly records that both traditions carry the ninety-nine assertion without judging between them; the parallel table preserves the historical transmission record cleanly; no anachronistic claim is made |
| 8 | Pedagogue | PASS with NOTE | note | The `names_theme` class (36 reports, `context-only`) is large relative to the core classes; the `_meta` law field correctly states these are not to be cited as evidence for the count or list; a Block 5 annotation should make this boundary visible to consumers of the layer who encounter the full 66-report set |
| 9 | Adab Auditor | **DEFECT** | **defect** | `extract_names_hadith.py` line 3 (docstring) and `build_hadith_layer.py` line 2 (docstring) both write `Allah (JJ)` — the ASCII shorthand is forbidden by the Adab Law; `_selftest_hadith.py` and `hadith_names_layer.json` are compliant; fix is two string replacements in two files |

---

## Seat 2 Detail — Muhaddith Defect

File: `10-WAQF/build/C1-ALLAH/hadith_names_layer.json`

| Field | Current (wrong) | Required (correct) |
|---|---|---|
| `id` | `shia-Al-Khisal-Saduq-1205` | (same — ID is correct) |
| `class` | `asserts_99_count` | `enumerates_99_list` |
| `use` | `cite-for-count` | `cite-for-list` |
| `reason` | "report asserts the ninety-nine count without enumerating them" | "report enumerates 99 names explicitly (وهي :الله. الاله. الواحد…); extracted from al-Khisal of al-Saduq رحمه الله" |

Evidence: Arabic text contains `وهي :الله. الاله. الواحد. الاحد. الصمد. الاول. الآخر…` — the word `وهي` ("they are:") followed by all 99 names listed individually. English text confirms: "They are as follows: 1- Allah; 2- the God; 3- The One… 99- The Curer." ✅ VERIFIED (python: `'وهي' in ar → True`, `'They are as follows' in en → True`).

**Cascade impact of the correction:**
- `asserts_99_count`: 16 → 15 (one report moves out)
- `enumerates_99_list`: 11 → 12 (one report moves in)
- Parallel table `asserts_99_count` / `shia/Al-Khisal-Saduq`: 1 → 0 (entry removed)
- Parallel table `enumerates_99_list` / `shia/Al-Khisal-Saduq`: 1 → 2 (entry incremented)
- Selftest count check (line 15: `if total != 66`) is **unaffected** — total remains 66 ✅
- The selftest does not check per-class counts, so no selftest change is needed; the builder (`build_hadith_layer.py`) must be re-run after correcting the verdict in the HN source files, or the JSON can be patched directly under the integrator's authority

---

## Seat 9 Detail — Adab Defect

| File | Line | Context | Current | Required |
|---|---|---|---|---|
| `extract_names_hadith.py` | 3 | module docstring | `Allah (JJ)` | `Allah ﷻ` |
| `build_hadith_layer.py` | 2 | module docstring | `Allah (JJ)` | `Allah ﷻ` |

`_selftest_hadith.py` is clean. `hadith_names_layer.json` is clean. This is the same pattern as the Adab defect found in `build_names_layer.py` by the SEED panel — a mid-development shorthand that was not purged from docstrings.

---

## Seat 1 — Usuli Note

The non-adjudication posture is correct: grades are carried as recorded, the classical weighing is deferred to the qualified, and the parallel table records convergence without ranking traditions. One methodological note for the record: the `asserts_99_count` class contains several reports that are textually identical or near-identical across different Shia collections (the Hisham ibn al-Hakam report appears in al-Kafi, al-Tawhid, and Mujam-al-Ahadith across five separate entries). These are correctly treated as distinct reports from distinct collections — the usuli principle of transmission chains requires treating each riwaya separately even when the matn is shared. No defect; note for Block 5 glossing.

## Seat 8 — Pedagogue Note

The `names_theme` class is 55% of the total (36/66). A consumer of this layer encountering the raw JSON needs to understand that only 27 reports (asserts=16 + list=11) carry direct evidentiary weight for the 99-Names claim; the remaining 36 are supporting context and the 3 are excluded. This should be surfaced in the block header, not left to the `_meta.law` field alone.

---

## VERDICT

**FIX-FIRST**

Two defects must be corrected before publication:

1. **(Muhaddith, defect)** `shia-Al-Khisal-Saduq-1205` in `hadith_names_layer.json` — reclassify from `asserts_99_count` to `enumerates_99_list`; update `use` and `reason`; rebuild the parallel table. The text contains a complete 99-name enumeration and the current classification is demonstrably wrong.

2. **(Adab Auditor, defect)** `extract_names_hadith.py` line 3 and `build_hadith_layer.py` line 2 — replace `Allah (JJ)` with `Allah ﷻ` (two replacements, two files).

The data layer is methodologically sound in all other respects. The verbatim gate passes. The selftest is proven to fail on a seeded retype. The canonical transmission chains for the ninety-nine Names are fully represented in both traditions. Grades are carried verbatim. The classification taxonomy is correct in all but the one misclassified entry. The layer may be sealed immediately upon correction of these two defects.

---

*Independent human review invited on every finding above. Machine-scholar reviews are labelled as such and held to the same evidence standard as all other findings in this waqf.*

---

## INTEGRATOR ADJUDICATION — 1 September 2026, window Fable (integrator seat)
Both defects VERIFIED against the texts, then APPLIED: (1) al-Khisal-1205
reclassified to enumerates_99_list — its 94-name dot-separated enumeration
extracted mechanically, substring-gated, and added to the lists layer;
parallels rebuilt; (2) both docstrings now carry Allah ﷻ. The Usuli
same-matn note and the Pedagogue evidentiary note were also applied
(_meta.evidentiary_note: 17+12=29 direct-evidence reports of 66). Layer
v2.1, selftest GREEN. **Panel recommendation satisfied → hadith layer: SEALED.**
