# PANEL-C4-SHAMAIL-V3 — Shama'il Layer v3 (Tier-2 Merged) Delta Review

**Window:** OP32 (Opus, quality seat)
**Input:** `10-WAQF/build/C4-MUHAMMAD/D3-SHAMAIL/shamail_layer.json` (version: `3.0 - tier-2 merged`, built `2026-09-02T04:40:07`)
**Scope:** Delta review — v2 seal (PANEL-C4-SHAMAIL.md) covered tier-1. This panel reviews the 597 newly-added tier-2 kept rows only.

---

## LAYER STRUCTURE VERIFIED ✅ VERIFIED

| Field | Value | Source |
|---|---|---|
| Tier-1 kept | 337 | `_meta.partition['kept']` |
| Tier-1 pointer | 214 | `_meta.partition['pointer_not_shamail_him']` |
| Tier-1 other | 688 | `_meta.partition['describes_other']` |
| Tier-1 sum | 1,239 | `_meta.partition_sum` (stored) |
| Tier-2 kept | 597 | `_meta.tier2_partition['kept']` |
| Tier-2 pointer | 175 | `_meta.tier2_partition['pointer']` |
| Tier-2 other | 658 | `_meta.tier2_partition['other']` |
| Tier-2 sum | **None** (should be 1,430) | `_meta.tier2_partition_sum` ⚠️ |
| Combined rows array | 934 | `len(L['rows'])` |
| Combined pointers array | 389 | `len(L['pointers_for_sirah'])` |
| Grand total (tier-1 + tier-2) | 2,669 | matches `method` signal-filter count |

---

## SEAT 1 — MUHADDITH (sample 6 tier-2 kept rows, id-lookup in candidates)

**Method:** Random sample (seed=42) from rows[337:933]. Each ID looked up in `shamail_candidates.json` (3,921 candidates). Checked: ID resolves, `ar` field present and non-empty.

| # | ID | Class | ar present | ar length | Verdict |
|---|---|---|---|---|---|
| 1 | sunni-ibnmajah-1624 | appearance | ✅ | 457 | PASS |
| 2 | sunni-abudawud-955 | manner | ✅ | 366 | PASS |
| 3 | sunni-malik-32 | manner | ✅ | 848 | PASS |
| 4 | sunni-bukhari-5271 | manner | ✅ | 1,111 | PASS |
| 5 | sunni-bukhari-3944 | appearance | ✅ | 532 | PASS |
| 6 | sunni-bukhari-197 | manner | ✅ | 417 | PASS |

**All 6 IDs resolve in candidates. All carry valid Arabic text. No ghost IDs.**

**Muhaddith verdict: PASS ✅**

---

## SEAT 2 — USULI (tier-2 partition 597/175/658, sum 1430, honesty check)

**Method:** Count rows[337:] and pointers_for_sirah[214:] directly from the JSON arrays. Compare against _meta.tier2_partition fields. Verify arithmetic.

| Check | Expected | Actual | Match |
|---|---|---|---|
| tier-2 kept (rows[337:]) | 597 | 597 | ✅ |
| tier-2 pointer (pointers[214:]) | 175 | 175 | ✅ |
| tier-2 other (from _meta only) | 658 | 658 | ✅ (accepted from _meta; not stored in array) |
| tier-2 sum (calculated) | 1,430 | 597+175+658 = 1,430 | ✅ |
| tier-2 sum (stored field) | 1,430 | **None** | ❌ |
| combined rows (934 = 337+597) | 934 | 934 | ✅ |
| combined pointers (389 = 214+175) | 389 | 389 | ✅ |
| grand total (tier-1 + tier-2) | 2,669 | 1,239+1,430 = 2,669 | ✅ |

**Finding: `_meta.tier2_partition_sum` is `None`.** The integer 1,430 was calculated in-build but not stored in the sum field. All bucket counts are correct and verified against the actual arrays. The arithmetic is honest; the assertion is absent.

**Usuli verdict: FIX-FIRST ⚠️**
Required fix: set `_meta.tier2_partition_sum = 1430` in the build script / layer JSON.

---

## SEAT 3 — ADAB (sweep of 597 tier-2 kept rows + 175 tier-2 pointers + _meta)

**Method:** `adab_scan.sweep()` (official framework module at `10-WAQF/framework/adab_scan.py`) applied to every `reason` field in tier-2 rows and pointers, and to the `_meta` dict.

| Scope | Rows scanned | Violations |
|---|---|---|
| tier-2 kept rows (reasons) | 597 | 0 ✅ |
| tier-2 pointers (reasons) | 175 | 0 ✅ |
| _meta fields | 1 | 0 ✅ |

**Note:** 11 tier-2 kept rows carry `ص` (sawi shorthand) rather than the full `ﷺ` glyph. `adab_scan.sweep()` accepts `ص` as a valid honorific — 0 violations returned.

**Adab verdict: PASS ✅**

---

## TIER-2 DISTRIBUTION (informational) ✅ VERIFIED

**Class breakdown (tier-2 kept, 597 rows):**

| Class | Count |
|---|---|
| manner | 442 |
| appearance | 77 |
| dress | 40 |
| speech | 38 |
| **Total** | **597** |

**Top collections (tier-2 kept):**

| Collection | Count |
|---|---|
| bukhari | 152 |
| muslim | 94 |
| abudawud | 79 |
| nasai | 76 |
| tirmidhi | 73 |
| ibnmajah | 50 |
| Al-Amali-Saduq | 10 |
| Al-Kafi-Volume-6-Kulayni | 8 |
| malik | 7 |
| Al-Amali-Mufid | 5 |
| (others) | 43 |

---

## PANEL VERDICT: FIX-FIRST ⚠️

| Seat | Result | Finding |
|---|---|---|
| Muhaddith | ✅ PASS | 6/6 sampled IDs resolve in candidates with valid Arabic |
| Usuli | ⚠️ FIX-FIRST | `_meta.tier2_partition_sum` is `None`; should be 1,430 |
| Adab | ✅ PASS | 0 violations in 597 rows + 175 pointers + _meta |

**Required fix (one field):**
In `shamail_layer.json` → `_meta`:
```
"tier2_partition_sum": 1430
```
(currently `null`)

This fix may be applied in the build script (`merge_shamail.py`) or directly in the JSON. Once applied, re-run the Usuli check: `sum(_meta['tier2_partition'].values()) == _meta['tier2_partition_sum']` must pass. All other checks are clean; the layer data is honest and complete.

## INTEGRATOR ADJUDICATION — 2 Sep 2026
The one fix applied: tier2_partition_sum computed (1,430) and asserted.
Muhaddith 6/6 and Adab 0/772 stand. **Shama'il v3: SEALED.**
