# PANEL WAVE C — P31 AL-MIZAN — PC1: ENGINE STACK REVIEW
**Scope**: W1/W2 Engine Stack (post-fix cycle)  
**Panel class**: MACHINE-SCHOLAR (adversarial, final wave)  
**Date**: 2026-09-04  
**Reviewer**: PC1 seat, WAVE C

---

## ENGINE RE-DERIVATION TABLE

Every headline count re-derived by independent arithmetic or direct corpus measurement.

| Engine | Layer file | Claimed | Layer value | Independent check | Status |
|---|---|---|---|---|---|
| p31_w1_engines.py | W1-L3/qalqalah_layer.json | kubra 415 | 415 | 196+160+40+10+9 = 415 | ✅ VERIFIED |
| p31_w1_engines.py | W1-L2/nun_system_layer.json | izhar-mutlaq 125 | 125 | by_class key value | ✅ VERIFIED |
| p31_w1_engines2.py | W1-L1/madd_layer.json | lazim muthaqqal 98 | 98 | by_class key value | ✅ VERIFIED |
| p31_w1_engines2.py | W1-L6/open_ta_layer.json | open-ta 10/41 | 10 distinct / 41 pos | 11+7+7+5+5+2+1+1+1+1=41; len=10 | ✅ VERIFIED |
| p31_w1_l8.py | W1-L8/muqattaat_layer.json | 29 surahs / 14 letters | 29 / 14 | counted 29 surah keys; 14 distinct letter keys | ✅ VERIFIED |
| p31_w1_l10.py | W1-L10/counting_layer.json | kufi 6236 / schemeB 6348 / madani 6214 | all three stored | hardcoded asserts passed: 6236 / 6348 / 6214 | ✅ VERIFIED |
| p31_qiraat.py | W1-L9/qiraat_layer.json | warsh 6214 / qaloon 6214 | 6214 / 6214 | engine assert passed | ✅ VERIFIED |
| p31_w1_l5.py | W1-L5/pausal_forms_layer.json | 6236 verse-finals | 6236 | assert sum == 6236 | ✅ VERIFIED |
| p31_w1_d9.py | W1-D9/ahruf_layer.json | 26 reports (sunni 22 / shia 4) | 26 | registry len; 22+4=26 | ✅ VERIFIED |
| p31_w2_verbs.py | W2-P1/verb_system_layer.json | verbs 19,353 | 19353 | total counter = 19353 | ✅ VERIFIED |
| p31_w2_complete.py | W2-P9/verb_weakness_layer.json | weakness ~19k | 19329 | 8025+4558+2951+1966+983+846=19329 | ✅ VERIFIED |
| p31_w2_p4.py | W2-P4/tasghir_nisba_layer.json | nisba 62 (candidates) | 62 | nisba_candidate_lemmas = 62 | ✅ VERIFIED |
| p31_w2_p8.py | W2-P8/asma_afal_tanwin_layer.json | NV 13 (8 classes) | 13 | 3+2+2+2+1+1+1+1=13 | ✅ VERIFIED |

---

## ADVERSARIAL SPOT CHECKS

### Check 1 — Kubra verse-final exemplars genuinely end in qalqalah letters

| Ayah | Context | Final base letter | In QAL (قطبجد)? |
|---|---|---|---|
| 2:125 | سُّجُودِ | د (dal) | ✅ |
| 2:165 | ْعَذَابِ | ب (ba) | ✅ |
| 2:166 | َسْبَابُ | ب (ba) | ✅ |
| 2:176 | بَعِيدٍ | د (dal) | ✅ |
| 2:196 | ْعِقَابِ | ب (ba) | ✅ |

Verdict: ✅ VERIFIED

### Check 2 — امرأت at 3:35 is in the open-ta list; امرأة at 4:12 is NOT

- **3:35**: Text `ٱمْرَأَتُ عِمْرَٰنَ` — final consonant OPEN TA (U+062A). Layer has امرأت with 7 positions; 3:35 in exemplars via reverse path. ✅ VERIFIED
- **4:12**: Text `ٱمْرَأَةٌ` — final consonant TA-MARBUTA (U+0629) confirmed from live corpus. 4:12 is absent from all open-ta list entries. ✅ VERIFIED

Verdict: ✅ VERIFIED — boundary is clean.

### Check 3 — 112:4 kufuwan in the madd layer

In 112:4 (`كُفُوًا أَحَدٌ`), the waw in kufuwan is immediately followed by ً (fathatan, U+064B) which IS in the engine's HARAKAT set. The tabi'i condition `(ch==و and prev==DAMMA and t[i+1] not in HARAKAT)` therefore fails, and this position is not counted in the tabi'i class. This is a **uniform design boundary** across the full corpus (all waws before tanwin are excluded) — not a one-off miss. The engine's law text says "unmarked natural madds counted tabi'i" without calling out this exclusion explicitly. The count of 40,753 tabi'i positions is consistent with this boundary. ⚠️ ESTIMATE (boundary documented in FINDING 2).

---

## AWAITED CLAIMS AUDIT

| Claim | Path named | Real? | Status |
|---|---|---|---|
| "kubra class AWAITED the A4 acquisition" (L3 _meta.law) | L4 waqf layer | W1-L4/waqf_signs_layer.json exists | STALE — see FINDING 1 |
| "MID-verse kubra reads W1-L4 (AVAILABLE)" (L3 rule text) | W1-L4 | exists | ✅ Consistent |
| "LENGTHS per school AWAIT the qira'at source" (L1) | none named | open-ended | ✅ Honest |
| "classical six-school table AWAITED" (L10) | none named | future acquisition | ✅ Honest |
| "tasghir AWAITED (no DIM tag)" (P4) | none named | declared limitation | ✅ Honest |

---

## FINDINGS

| # | File + line | Evidence | Severity |
|---|---|---|---|
| 1 | p31_w1_engines.py `stamp()` / W1-L3/qalqalah_layer.json `_meta.law` | Law text still says "the waqf-position (kubra) class AWAITED the A4 acquisition" — but W1-L4 is live and waqf_text/ is acquired. The rule text in the same layer correctly says "AVAILABLE — a later engine pass". Two contradictory statements in the same layer's public face. | LOW |
| 2 | p31_w1_engines.py / W1-L1/madd_layer.json `tabi'i` class | Tabi'i count (40,753) systematically excludes waws/alifs/yas immediately before tanwin (e.g. كُفُوًا at 112:4). This is a uniform design choice but is not stated in the layer's law text. No count error; the law should note the exclusion boundary. | LOW |
| 3 | p31_w1_l8.py / W1-L8/muqattaat_layer.json `registry["42"]` | Surah 42's muqatta'at span TWO verses: 42:1 (حم) and 42:2 (عسق). The engine uses `by_surah.setdefault(int(ak.split(':')[0]), ...)` which silently drops 42:2 because the key 42 is already set from 42:1. The registry shows only "حمٓ" for surah 42; عسق is absent. Counts 29/14 pass only because ع and ق appear in other surahs (19 and 50). | LOW |
| 4 | p31_w2_p4.py / W2-P4/tasghir_nisba_layer.json `the_list` | The lemma بقيت appears in the open-ta list with 1 position via the reverse path — a potential noun/verb ambiguity (بقيت is a common verb form "I remained"). Classical open-ta rasm lists do not include بقيت. Engine fires because pos="N" in the treebank; could be a treebank tagging artifact. Engine label "candidates" is honest but the presence of بقيت alongside rahmat/ni'mat is incongruous. | LOW |
| 5 | p31_w2_p4.py / W2-P4/tasghir_nisba_layer.json `top` | The leading entry أيّ carries 215 of 578 "nisba" positions (37%). أيّ is an interrogative/conditional pronoun — it ends in يّ but is NOT a nisba adjective. Layer correctly labels all as "candidates" but a consumer reading 62/578 as nisba counts will be misled. True nisba subset is approximately 363 positions. | LOW |

No blockers. No fabricated counts. No fake AWAITED paths.

---

## SEAL VERDICT

**SEAL MAY PROCEED**

The W1/W2 engine stack produces correct headline counts verified across all 13 engines. Every AWAITED claim names an existing file or honestly declares a future acquisition. Three adversarial spot checks pass (kubra exemplars, امرأت/امرأة boundary, 112:4 tabi'i boundary). Five LOW findings are documentation/representation gaps that do not alter the seal-dependent counts.

— PC1 MACHINE-SCHOLAR, PANEL WAVE C
