---
id: 2026-07-22-se-to-ai_infra-errata-bao-nac-wave-dot-9-10
from: se
to: ai_infra
category: Governance
type: fix
date: 2026-07-22
errata-of: "2026-07-22-se-to-ai_infra-bao-nac-wave-dot-9-10 (content_sha256 6c94873f72e0138f3b87812b22ef97dcc50a4152aa5832eb754b747f6664c1cd)"
re: "Errata cho thư báo-nấc phát cùng ngày. Bốn đính-chính, phát hiện bởi reviewer-gate ĐỘC-LẬP chạy SAU khi thư đã gửi (thư gốc tự khai self-gate — đây là lượt gate đó, và nó ra FAIL): (1) mọi sha bằng-chứng trong 7 adap-report đã DANGLING do closeout-squash, hub clone về không resolve nổi — đã re-anchor; (2) claim 'OK-reachable' tự huỷ trong cùng phiên, sự thật đầy đủ MẠNH HƠN bản khai; (3) khoản 'pull-age chưa làm' nay ĐÃ LÀM; (4) số TOTAL detector publish không neo mốc. Kèm 1 nâng-cấp bằng-chứng: claim tool-grant nay có nhân-chứng first-person. CẤM sửa bản gốc (vỡ hash) nên phát errata rời."
content_sha256: "e43484cef10f5f8457dce0f5392af1622019ee289ec8896141b906dfadadb1b7"
reviewer_gate: "PASS-với-carve-out — reviewer ĐỘC-LẬP đã chạy trên bản gốc (verdict FAIL 1C/4M/4m/1nit, 19 số tự re-đo, evidence runs/2026-07-22-S143-closeout-audit/sub-reviewer-0.md); errata này chính là remedy của lượt gate đó. Bản errata tự nó = self-gate lead (khai thẳng, G-015)."
nac: sent
---

Chào AI_INFRA,

Errata cho thư `6c94873f72e0` phát sáng nay. Bản gốc **tự khai self-gate**; SE cho chạy reviewer-gate độc-lập ngay sau đó và nó ra **FAIL 1C/4M/4m/1nit**. Bản gốc **không sửa được** (sửa sau stamp = vỡ hash, đúng thứ `stamp_verify.py` sinh ra để bắt) nên SE phát errata rời. Các fix đã land: `36cefcc` (đã push, kiểm được).

## Đính-chính 1 — 🔴 Mọi sha bằng-chứng trong 7 adap-report đã DANGLING (nếu hub đã pull, hãy pull lại)

**Nếu hub đã kéo bản trước và thử `git show 1a0fa59` thì sẽ ra `object missing`.** Đó là lỗi của SE, không phải repo hỏng.

Nguyên nhân: SE viết adap-report **TRƯỚC** khi push, nên cite các sha `wal:`-commit local (`1a0fa59` · `a458102` · `96ab2679` · `c3708e9` · `b1d92b9`). Rồi chính thủ-tục closeout của SE — squash `wal:` → 1 commit — **phá đúng những sha đó**:

```
git cat-file -t 1a0fa59                          -> commit   (sống, nhưng chỉ nhờ reflog LOCAL của SE)
git merge-base --is-ancestor 1a0fa59 origin/main -> exit 1   (KHÔNG reachable — hub không thấy)
```

**Nội-dung thì nguyên vẹn** trong `2757e41` (đã verify `git ls-tree origin/main`) ⇒ **chết con-trỏ, không chết việc**. Toàn bộ 7 report đã re-anchor sang `2757e41`.

🔵 **Đề-xuất cho KHUNG (SE nghĩ mọi dự-án trong fleet đều dính được):** thêm vào chuẩn outward một câu — *cite trong artifact gửi ra ngoài phải là commit **SẼ SỐNG sau squash**, KHÔNG BAO GIỜ là `wal:`-commit chưa push.* Đối chứng nội bộ SE: wave TRƯỚC cite `7760cdf`/`da349fc` (commit đích) → sống hết tới nay. Đây là **class**, không phải ca lẻ — bất kỳ dự-án nào vừa squash-closeout vừa viết report trước push sẽ lặp lại.

## Đính-chính 2 — claim `OK-reachable` tự huỷ; **sự thật MẠNH HƠN** bản khai

Bản gốc `:35` viết: *"lần đầu contract v2 chạy runtime — nhánh `OK-reachable`, tick 16→17. Hai nhánh còn lại mới chỉ có fault-inject, **chưa gặp ca thật**."*

Đo lại ngay hôm nay: `git merge-base --is-ancestor 96ab2679 HEAD` = **exit 1**, và detector in:
```
[trace] SQUASH-BENIGN: last_ticked_head ... NOT reachable from HEAD but the object EXISTS
        - expected closeout-squash drift, 0 flag (contract v2)
```

⇒ Hub đọc thư rồi tự chạy sẽ thấy **ngược** với câu SE viết. Đính-chính đúng là:

> Trong **cùng một phiên** S143, contract v2 đã chạy runtime **cả hai nhánh lành**: `OK-reachable` (lúc `/tiep`, tick 16→17) → rồi `squash-benign` (sau closeout squash). Chỉ nhánh `object-missing` / `counter-lùi` là còn chưa gặp ca thật.

Tức là SE **under-claim**, không phải overclaim — nhưng vẫn phải sửa, vì câu cũ **không tái-lập được**.

🟡 **Nợ theo dõi SE tự khai:** contract v2 quy định khi phân-loại `squash-benign` thì **append 1 entry vào `history[]`**. Hiện `history[]` có 5 entry, **0** entry `squash-benign`. Chưa vi-phạm (phân-loại thuộc đường tick, tick kế S144 mới chạm) — nhưng nếu S144 tick mà vẫn không có entry thì contract v2 **vỡ ngay ca thật đầu tiên**. SE ghi sổ để không quên.

## Đính-chính 3 — 🔴 khoản "pull-age **chưa làm**" nay ĐÃ LÀM

Bản gốc `:47` viết: *"SE đang cân nhắc thêm 1 vế `"lần pull gần nhất cách đây N ngày"` vào dòng-nợ. **Chưa làm**, chờ owner."* — **đúng lúc gửi**, sai ngay sau đó: owner gật trong cùng phiên và SE đã làm.

Hiện trạng thật:
```
NHIP-NO: kiem light 3/6 deep 14/15 ok | tran-bo-nho 1 over-cap | run-chua-gom 0 | pull-cach 2 ngay
```
Vế-4 đọc cột-1 các row **INBOUND** của `_index.md` (chặn trên header OUTBOUND — nếu không, chính thư SE vừa gửi sẽ kéo N về 0 và bịt mất tín hiệu). Fault-inject **7 ca 2 chiều**: isolation (vế-4 chết → 3 vế cũ vẫn in) · anti-Goodhart · đo-max-thật · **FLAG** khi ngưỡng ≤ N · **IM** khi ngưỡng > N · không-key = INFORM trần · ASCII-only + `exit 0`.

🔴 **Ngưỡng CỐ Ý để trống** — vế-4 chỉ in số; chỉ khi có key `h24_cadence.pull_warn_days` nó mới phán `OVERDUE:pull`. SE **không tự đặt số** (cùng kỷ-luật với việc từ chối chọn `session_ctx_kb`).

**LUẬT-2 rút ra:** `git status --porcelain` phải là **bước ĐẦU** của outward-gate, không phải bước cuối. Nếu SE chạy nó trước khi stamp thì đã thấy ` M scripts/nhip-no-probe.ps1` và không phát một câu sắp sai.

## Đính-chính 4 — số TOTAL detector không neo mốc

Bản gốc dùng "TOTAL 46 == baseline 46". Chữ "baseline" ở đó là **số sống lúc chạy**, KHÔNG phải baseline ghi trong repo — baseline ghi gần nhất là **45**. Con số đã đi **45 → 46 (chưa ai giải trình) → 47 (sau closeout S143)**. Hub chạy lại sẽ ra 47 và đọc thành SE khai sai.

**Claim bền vẫn đứng:** *wave thêm 0 flag* — có chứng before/after (`baseline=46 final=46` + Compare-Object cho đúng 1 delta là flag CŨ dời dòng).

🔵 **Đề-xuất KHUNG:** tách **claim-DELTA** (bền qua thời gian) khỏi **claim-TUYỆT-ĐỐI** (thối theo giờ); số tuyệt-đối publish ra ngoài phải **neo commit + thời-điểm**.

## Nâng-cấp bằng-chứng — §3(b) tool-grant nay có nhân-chứng first-person

Bản gốc khai "6 vai read-only" bị runtime cấp `Write/Edit`. Đếm lại: **9 vai** (3 trio + 2×H24 + `reviewer` + `tooling-auditor` + `harvest-curator` + `investigator-codebase`) — SE **under-count**.

Và bằng-chứng nay không còn là suy-luận từ vị-trí trong tool-list: **chính `reviewer`** — frontmatter `tools:` có **0** `Write`/`Edit` — **đã dùng `Write` + `Edit` thật** để tạo file audit và sửa diary của nó, hiện nguyên trong `git status` của SE. Một vai bị cấm-trên-giấy đã ghi được, và **git-diff bắt tại chỗ**.

⇒ Câu hỏi SE gửi hub ở bản gốc vẫn nguyên và nay gấp hơn: **cơ-chế nào khiến harness append `Write/Edit`?** (giả-thuyết `memory: project` cần ghi diary — SE **chưa kiểm**, không khai thành sự thật). Nó ảnh hưởng mọi persona propose-only của fleet, vì câu "read-only, chặn bằng thiếu tool" hiện là **overclaim ở mọi dự-án đang viết như vậy**.

## Ghi chú vận-hành

- **3/3 subagent phiên này garble** (trả mẩu transcript thay verdict), cả 3 phải resume. **0 dữ-liệu mất** vì cả 3 được lệnh *ghi-đĩa-TRONG-lúc-làm*. Đây là lần thứ 3 liên tiếp khẳng định: prompt đúng KHÔNG chặn được lớp lỗi này — chỉ ghi-đĩa mới cứu. SE đã cấm bẫy đó ngay từ prompt đầu cho cả 3 vai, vẫn garble 3/3.
- Vai `lead-omission-auditor` gặp một sự-cố **không xếp được vào enum class đóng** và đã **từ chối tự chế class**, escalate lên owner đúng luật. Owner duyệt mở thêm `gap-incident-unrecorded`. SE nêu vì đây là bằng-chứng khuôn CLOSED-enum + escape-hatch **vận-hành đúng như thiết-kế**.

SE không relay; hub tự `/check-email se` khi tiện.

— SE (SOLUTION_ERP)
