# sub-reviewer PRE-COMMIT S146 — adversarial review + fault-inject re-verify

> Ghi-đĩa-trong-lúc-làm (anti-#53). Append theo thứ-tự tìm ra, KHÔNG đợi cuối.
> Run: `.claude/workflows/runs/2026-07-22-S145-apply-hub-answers/` · reviewer spawn @S146 · 2026-07-22

## [0] SCOPE GATE — VIỆC 4

`git status --porcelain` @spawn (14 M + 1 untracked):
```
 M .claude/agent-memory/memory-budget.json
 M .claude/agents/h24-audit.md
 M .claude/agents/sleep-audit.md
 M .claude/agents/tooling-harvest-audit.md
 M .claude/auto-memory/project_h22_wal_session_continuity.md
 M .claude/commands/pause.md
 M .claude/commands/session-end.md
 M .claude/commands/session-start.md
 M .claude/commands/tiep.md
 M .claude/governance/.session-counter.json
 M .claude/hooks/wal-flush.ps1
 M docs/governance/harness-11-engine.md
 M docs/governance/session-model-se-draft.md
 M scripts/nhip-no-probe.ps1
?? .claude/scheduled_tasks.lock
```
- 0 file `src/Backend` · 0 `fe-admin/` · 0 `fe-user/` · 0 `tests/` · 0 migration → **SCOPE GATE PASS** (governance/config-only đúng claim).
- ⚠️ `?? .claude/scheduled_tasks.lock` untracked — chưa rõ nên ignore hay commit. Ghi lại, kiểm sau.

Diffstat: 14 files, +225 / -35.

---

## [1] FINDINGS (append khi tìm ra)

### 🔴 F1 [MAJOR→BLOCKING-cho-claim-"grep MỌI consumer"] `session-end.md:114` + `:296` VẪN dạy `hook-3-path` — sót consumer LIVE, và acceptance MÙ với nó

Đĩa NOW (sau khi worker đã vá):
```
.claude/commands/session-end.md:114: ... (file ngoài hook-3-path; bằng-chứng sống: tick S133 ...)
.claude/commands/session-end.md:296: 🔴 M-7 — ... file NGOÀI hook-3-path ⇒ KHÔNG tự vào `wal:` commit ...
```
- **LIVE PRESCRIPTIVE** (thân `/session-end`, echo mỗi closeout) — KHÔNG phải lịch-sử.
- **Đã được cảnh-báo TRƯỚC** trong chính run này: `sub-implement-CE-sessionmodel.md:258-259` liệt đúng 2 dòng, gắn nhãn *"🔴 THẬT — cùng class, cần → 4. Worker-3 sở-hữu."* ⇒ worker-3 KHÔNG vá. Đây là **residual có người chỉ tận nơi mà vẫn rơi**.
- **Bất-đối-xứng nội-bộ:** `pause.md:40`/`:43` ĐÃ đổi sang `hook-4-path`, `session-end.md` thì không ⇒ 2 command anh em nay **nói ngược nhau về cùng một hook**.
- Ngữ-nghĩa mệnh-đề vẫn ĐÚNG (`.claude/governance/` vẫn ngoài cả 4) ⇒ hại = **dạy sai cardinality**, không phải hành-vi sai. Nhưng đó đúng là thứ C2b-EXT sinh ra để chặn.

### 🔴 F2 [MAJOR] Acceptance C2b-EXT (bản siết) **KHÔNG có răng với 3 lớp ca** — tự chứng bằng cách chạy nó trên HEAD (bản TRƯỚC khi vá)

Chạy **nguyên văn** phép (1) của ADDENDUM trên `HEAD` (git grep, tức trạng-thái tiền-vá):
```
HEAD:.claude/auto-memory/project_h22_wal_session_continuity.md:10   ✅ bắt
HEAD:.claude/commands/tiep.md:21                                    ✅ bắt
HEAD:.claude/commands/tiep.md:23                                    ✅ bắt
HEAD:.claude/commands/tiep.md:75                                    ✅ bắt
HEAD:.claude/governance/.session-counter.json:4                     ✅ bắt
HEAD:docs/governance/harness-11-engine.md:406                       ✅ bắt
HEAD:docs/governance/harness-11-engine.md:407                       ✅ bắt
=> 7 dòng. THIẾU 4 site THẬT:
```
| Ca TRƯỢT | Vì sao trượt |
|---|---|
| `tiep.md:78` (HEAD) *"Bẩn ngoài 3 path + không phải EOL-only ⇒ NÊU"* | vế lọc thứ-2 đòi dấu-hiệu hook **CÙNG DÒNG**; dòng này không có `hook`/`WAL.md`/`agent-memory`/`workflows/runs`/`wal-flush` ⇒ **bị vứt**. Đây là site LIVE, worker phải sửa tay mới xong. |
| `session-end.md:114` + `:296` (`hook-3-path`) | regex chỉ có `3 path` (**dấu cách**). `hook-3-path` là **gạch nối** ⇒ 0 match. Cũng nằm **ngoài** ý-định "quét `.claude/commands/`"? KHÔNG — thư-mục có trong scope, chỉ **mẫu chữ** trượt. |
| `session-model-se-draft.md:13` (`persist 3-path`) + `:56` (`quét đúng 3 path`) | file **NGOÀI tập quét** của phép (1) (chỉ có commands/hooks/auto-memory/.session-counter.json/engine). Site LIVE (draft đang được cập-nhật, không phải dated-report). |
⇒ Bản siết **đúng hướng** (bỏ dương-giả `session-end.md:162`) nhưng **siết lệch trục**: nó siết bằng *co-occurrence CÙNG DÒNG* + *tập-file hẹp* + *một mẫu chữ duy nhất*, trong khi 3 lớp ca thật đều lọt. **Không vacuous** (vẫn bắt 7/11) nhưng **không đủ để làm cổng**.

### ✅ F3 [HELD] Live-verify hook 4-path = THẬT (tự xác minh, không tin lead)
```
$ git show --name-only --format='%H|%s|%ci' da7ee8a
da7ee8aebf458bd3aa1ba26ee48b14f3ff3872e3|wal: flush 20260722T2256|2026-07-22 22:56:10 +0700
.claude/WAL.md
.claude/sessions/session-1/probe.md          <== path thứ-4 BỊ NUỐT THẬT
.claude/workflows/runs/.../spec-apply-hub-s145-v2.md
...
```
+ `grep -n 'paths = @' .claude/hooks/wal-flush.ps1` → **13:** (comment "GIỮ $paths Ở ĐÚNG DÒNG 13" khớp đĩa)
+ `.claude/settings.json` dùng `-File .claude/hooks/wal-flush.ps1` ⇒ body re-đọc mỗi Stop, không cần restart. Claim của lead **ĐỨNG**.

### 🟠 F4 [MAJOR] Residue `session-1/probe.md` đã COMMIT vào repo ⇒ (a) ô-nhiễm ID-space phiên-LOGIC, (b) tín-hiệu ⑤ KÊU vĩnh-viễn cho tới khi push
- `da7ee8a` là commit THẬT trên `main`, chứa `.claude/sessions/session-1/probe.md` (vật thử nghiệm).
- Hệ-quả (a): `session-start.md` BƯỚC 0.8 định `<N> = max(<N> hiện có)+1` ⇒ phiên-LOGIC THẬT đầu tiên sẽ là `session-2`, còn `session-1` là rác probe. `regex ^session-\d+$` khớp `session-1` ⇒ **nó được tính**.
- Hệ-quả (b): ⑤ = `git log --name-only origin/main..HEAD | grep -q '.claude/sessions/'` ⇒ commit `da7ee8a` chưa push ⇒ **⑤ KÊU** ở mọi `/tiep` tới khi push. Sàn-3 sẽ "HỎI LẠI ANH" vì một file probe. (Hướng hỏng an-toàn, nhưng là **báo động thường-trực do rác test**.)


