--- name: h18-ghostwire-stamp-integrity description: "H18/frontier adopt S100 — verify hash TRƯỚC khi áp broadcast (bắt stamp-then-edit thật) + 2 class ghost-wire (cron-claim, config-key-unread) + không stamp run-id chưa chạy + S125 sibling-test 2-chiều (verifier-suspect-first)" metadata: node_type: memory type: feedback originSessionId: c0d6d8d1-8e0e-46bf-ac36-ab0f45d2629f modified: 2026-07-24T10:21:02.939Z --- 3 bài học integrity từ S100 H18-adopt (2026-07-02): 1. **Hash-verify TRƯỚC khi áp = có răng thật:** broadcast `frontier-assessment` stamped `content_sha256` ≠ body (4 biến-thể canonical đều lệch; 2 file cùng đợt MATCH → phép đúng, body lệch stamp = nguồn phát edit-sau-stamp) → **HELD-integrity, không codify, đề nghị re-stamp**. Cùng đợt: cả 3 broadcast thiếu field `reviewer_gate` (24 cũ đều có) → gate-evidence in-body thì áp function-over-form NHƯNG phải flag format-regression về nguồn. 2. **Ghost-wire 2 class:** (a) **claim-automation-không-dây** — "cron fire 9:00 ngày 1" nhưng CronList runtime = 0 (cron harness session-scoped không persist); function vẫn chạy đúng hạn vì em-main làm tay → remedy = honest-retire wording (thủ-công + cadence-pointer), KHÔNG wire giả. (b) **config-key defined-but-unread** — `memory-budget.json mfe.sub_denominator.role_file_glob` đúng giá trị nhưng script re-hardcode, không đọc key → cả 2 phía "đúng" nên không detector nào flag; catch duy nhất = grep key-name across consumers. 3. **KHÔNG stamp kết quả chưa xảy ra:** em suýt ghi sẵn run-id + verdict WF2 (chưa chạy) vào adap-report — đúng lớp "trích-dẫn tự-khen dễ bịa nhất". Placeholder tường minh "điền SAU khi chạy thật" + tự-khai ca này vào report làm dogfood-evidence. 4. **Sibling-test 2 CHIỀU (S125, 2026-07-16):** mismatch hash có nhánh thứ 3 ngoài tamper/EOL — **VERIFIER của MÌNH hỏng**. Discriminator: chạy verifier trên sibling known-good. Sibling MATCH ⇒ phép đúng, file bệnh (ca S100 frontier-assessment) · sibling CŨNG FAIL ⇒ **verifier bệnh** (ca S125: PS 5.1 `Get-Content -Raw` decode UTF-8-no-BOM bằng ANSI → mojibake → false-TAMPER trên broadcast hub SẠCH; đối chứng `stamp_verify.py` hub → exit-0). Fix gốc: hash CHỈ từ bytes (`ReadAllBytes` + UTF8 decode PIN) — CẤM `Get-Content -Raw` cho hash; đã vá `check-email.md`/`send-email.md` S125. 5. **🔴 Ghost-wire class (c) — CLAIM-OF-FIX: doc khai "đã vá" một kẽ CHƯA vá, và kẽ đó KHÔNG TỒN TẠI ở chỗ nó chỉ (S148, 2026-07-24).** `C14-disposition-per-khoan.md:21` (@S144) khai *"Kẽ đã bịt: `/check-email` bước 2 chỉ đọc `outbox/se`, không nhắc `outbox/all`"*. Lead **tin bản tóm-tắt** → sửa `check-email.md` STAGE 1 đọc thêm `outbox/all`. **Cả hai vế đều sai:** (i) grep `outbox/all check-email.md` = **0 hit** ⇒ chưa hề bịt, chỉ được TUYÊN BỐ; (ii) `outbox/all` **chưa bao giờ** là việc của `/check-email` — 2 kênh 2 tool 2 sổ (`outbox/se`→`/check-email`→`_index` ⟂ `outbox/all`→`/adap-apply`→ **KHÔNG** vào `_index`, khai ở `_index.md` header dòng 7). Kiểm ngược bằng máy: **22/22** thư `outbox/se` đều có dòng index ⇒ **tool vốn không thủng**. ⇒ lead **vá một tool không hỏng, theo một lời khai không đo**. 🔴 **Kẽ THẬT nằm ở NHỊP, không ở TOOL:** không cửa phiên nào *dò* `outbox/all` ⇒ 10 broadcast fan-out nằm im **5 ngày**. Cùng lượt còn 1 báo-cáo sai cùng gốc: lead khai *"`_index` thiếu 17 dòng"* trong khi cả 17 là fan-out ⇒ **sổ đang đúng**, chỉ là lead áp nhầm luật cho kênh. **Why:** stamp-then-edit + fabricated-citation là lỗi im lặng — chỉ lộ khi RE-COMPUTE đối chứng nguồn gốc; một làn chỉ kiểm "tóm-tắt trung-thành bản-thô" sẽ mù khi bản-thô bịa từ đầu. **How to apply:** mọi broadcast/email cross-project → re-compute `SHA256(body)` canonical trước khi áp; mismatch → **sibling-test 2-chiều TRƯỚC**: sibling-fail ⇒ sửa verifier của MÌNH, sibling-match ⇒ HELD + báo nguồn (không suy diễn "chắc CRLF", cũng không hô tamper khi chưa loại trừ tool). Mọi report → chỉ cite run-id/số ĐÃ tồn tại; chưa chạy = placeholder tường minh. Đổi config-consumer → grep key-name toàn scripts/ xem có ai đọc thật không. Liên quan: [[faultinjection-proves-teeth]], [[canonical-spec-over-broadcast]], [[agent-return-garble-recover]].