--- 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 --- 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. **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]].