# sub-opus-lane6-memory-gate — LANE-6 memory-gate (YC-017 / S185)

> Agent: Opus 5 (1M) · lane **LANE-6** · items: **C-6** (M — F-1/F-2 sửa số + route máy) · **C-10** (S — 2 mồ côi A16)
> Nguồn lệnh: `.claude/workflows/runs/2026-08-09-S185-email-adap-pipeline/checklist-final.md:39-41`
> Artifact-first: ghi liên tục per-item. Ruột nằm ở đây; return chỉ là con-trỏ.
> Ranh đã tuân: KHÔNG commit/push · KHÔNG `store_memory` · fault-inject **trên cây tạm** (`%TEMP%/…/scratchpad/lane6-fi`) kèm **positive-control** · mọi số kèm lệnh tái-lập · **KHÔNG nén/archive tay**.

---

## TÓM TẮT 1 DÒNG

**C-6 = PARTIAL** (máy chạy tới `PROPOSE`, nhưng **value-scan bắt buộc BÁC đề-xuất** — chứng bằng fault-inject 1-dòng làm verdict lật `PROPOSE→WARN` ⇒ vào đúng nhánh *"trình đề-xuất cho lead, CẤM nén tay"*) · **C-10 = DONE** (3 — không phải 2 — mồ côi, xác minh từng con, đã khai vào bảng A16).

---

## C-6 — memory-gate route máy (ring2-audit + tooling-auditor)

### C6.0 — Lệnh chạy + kết quả gốc (tái-lập được)

```bash
cd D:/Dropbox/CONG_VIEC/SOLUTION/SOLUTION_ERP
powershell.exe -ExecutionPolicy Bypass -File "scripts\memory-archive-gate.ps1"     # DRY-RUN, 0 ghi
```

Tham số máy đọc từ `.claude/agent-memory/memory-budget.json` → `archive_gate`:
`cap 25.600` · `low-water 21.760` (ratio 0.85) · `keep-floor 5` · `strike-need 2`.

**Bảng PASS-1, chỉ các dòng over-cap** (bản đầy đủ tái-lập bằng lệnh trên):

| sub | bytes | over? | entries | strike | after-est | resolve |
|---|---|---|---|---|---|---|
| `harvest-curator` | 26.139 | YES | 9 | 1 | ~25.292 | WATCH (strike 1<2) |
| `lead-stale-auditor` | 28.220 | YES | 6 | 1 | ~27.582 | WARN keep-floor hit (5) — cannot auto-drain |
| **`ring2-audit`** | **30.781** | YES | 7 | **2** | ~22.102 | **PROPOSE archive (strike 2>=2): move 2 lowest-value** |
| `tooling-auditor` | 29.962 | YES | 11 | 1 | ~29.115 | WARN **value-floor** hit — condense BY HAND |

`PASS 2 — A7 GATE **PASS**, total pointers **429**, resolved 429, failed 0` (exit 0).

**Strike-2 đạt mà KHÔNG cần `-Apply`:** `.archive-strikes.json:10` đã ghi `"ring2-audit": 1` từ `-Apply` @S179 ⇒ lượt DRY-RUN này tính `cur = prev+1 = 2 ≥ strike_need` ⇒ máy tự lên nhánh `PROPOSE`. Không có lệnh ghi nào chạy (đúng chữ "DRY-RUN" của lead).
🔸 Khai thẳng: strike **chưa persist**. Muốn con số 2 bền phải chạy `-Apply` — đó là ghi `.archive-strikes.json` (file đếm, KHÔNG phải file memory). Em **không chạy** vì lead chỉ định DRY-RUN. Thực tế nếu ring2-audit tụt xuống dưới cap thì lượt kế reset về 0 nên không cần thiết.

### C6.1 — F-1/F-2 SỬA SỐ: xác nhận ĐÚNG, kèm nguồn ngưỡng

| Khẳng định checklist C-6 | Đo lại | Verdict |
|---|---|---|
| `ring2-audit` = **30.781 B** | `(Get-Item .claude\agent-memory\ring2-audit\MEMORY.md).Length` = **30781** | ✅ ĐÚNG |
| **ĐÃ VỠ** autoinject-cap 25.600 (không phải "96,8% gần cap") | 30.781 > 25.600 ⇒ vượt **5.181 B = 120,2% cap** | ✅ ĐÚNG |
| **vượt** soft-cap 30.720 | `memory-budget.json` `tiers.l1_hot.soft_cap_bytes` = **30720** ⇒ vượt **61 B** | ✅ ĐÚNG |
| `tooling-auditor` 29.962 B theo dõi cùng lượt | đo = **29962** (dưới soft-cap 30.720, trên cap 25.600) | ✅ ĐÚNG |

🔸 Luật của chính `tiers.l1_hot.rule`: *"keep MEMORY.md < autoinject_cap so the WHOLE hot file injects; over soft_cap ⇒ curate L1→L2"* ⇒ ring2-audit đang **vi phạm cả hai vế**.

🔴 **Con-trỏ trong checklist lệch 1 dòng:** C-6 trích `HANDOFF:39 "KHÔNG tự archive"` — câu đó thực nằm ở **`docs/HANDOFF.md:40`** (dòng 39 là mục drift-audit). Nội dung không đổi, chỉ sửa con-trỏ.

### C6.2 — 🔴 ĐỀ XUẤT MÁY BỊ **BÁC** BỞI VALUE-SCAN (bước máy TỰ ĐÒI)

Máy đề xuất: *move 2 lowest-value entries* — đó là **k=0 `## 🎯 Role baseline`** (1.458 B) + **k=1 `## 📅 Runs`** (7.221 B); `30.781 − 8.679 = 22.102` khớp đúng cột after-est.

Chính output của máy in kèm mệnh lệnh: *"9-token grep = lower-bound; **em-main must value-scan the WHOLE proposed set** (paraphrase/spine leak remains)"*. Em chạy đúng bước đó — và nó **BÁC cả 2 entry**:

#### Lý do ① — `## 📅 Runs` PHẢI được value-protect nhưng lọt lưới vì **lệch bảng mã** (chứng bằng fault-inject)

`memory-budget.json:89` liệt pattern ASCII **`"bai hoc"`**, còn kho viết **`"bài học"`** có dấu ⇒ `-like` không khớp.

```bash
# đếm 2 dạng trên toàn hot-tier
python -c "...đếm 'bài học' vs 'bai hoc' trên .claude/agent-memory/*/MEMORY.md..."
#  -> có dấu = 12 hit   |   không dấu (dạng đang nằm trong patterns) = 2 hit
```

Nhưng **blast-radius thật ở mức LOGICAL ENTRY chỉ là 1** (không thổi số): 11/12 hit nằm trong span đã khớp pattern khác (`guard`/`lesson`/…), nên chỉ **duy nhất 1 entry mù** — và đó **đúng là entry đang bị đề nghị move**:

```
LOGICAL ENTRY chua "bài học" CO DAU nhung KHONG khop pattern nao:
  ring2-audit  L36  ## 📅 Runs
TONG entry MU = 1
```

Nội dung nó gánh (`MEMORY.md:46-50`, `:59-63`): *"3 bài học phương-pháp"* — `honest-zero đẩy-turf phải nêu ĐÍCH DANH vai nhận` · `Vá xong PHẢI grep lại bằng lệnh KHÁC` (bẫy en-dash) · `Số KHÔNG kèm lệnh = số KHÔNG kiểm được` · `thách-CLEAN phải nhắm vào class được tuyên 0-fire` · `chứng khoá bằng BIỂU-THỨC CỦA MÁY`. Đây đúng trục **value**, không phải trục **age**.

**FAULT-INJECT trên CÂY TẠM (không chạm repo) + POSITIVE-CONTROL:**

```bash
T=".../scratchpad/lane6-fi"
cp -r .claude/agent-memory  $T/ctrl/.claude/agent-memory      # control: y nguyên
cp -r .claude/agent-memory  $T/inj/.claude/agent-memory       # injected
# sửa DUY NHẤT 1 chỗ trong bản inj: patterns  "bai hoc", -> "bai hoc", "bài học",
powershell.exe -ExecutionPolicy Bypass -File "scripts\memory-archive-gate.ps1" -RepoRoot "$T\ctrl"
powershell.exe -ExecutionPolicy Bypass -File "scripts\memory-archive-gate.ps1" -RepoRoot "$T\inj"
```

| | ring2-audit | value-protected | after-est |
|---|---|---|---|
| **CONTROL** (cây tạm nguyên) | `PROPOSE archive (strike 2>=2): move 2` | 1 | ~22.102 |
| **INJECTED** (+1 pattern có dấu) | 🔴 `WARN value-floor hit … condense high-value BY HAND (do NOT age-archive)` | **2** | ~29.323 |

- **Control DƯƠNG:** bản ctrl ra **byte-identical** với lượt chạy trên repo thật ⇒ cây tạm là thước hợp lệ, không phải môi trường lạ.
- **Nhiễu = 0:** `tooling-auditor` giữ nguyên `~29.115 / 4 protected`, `A7 GATE PASS 429/429` ở CẢ HAI lượt ⇒ injection trúng đích, không phải xáo trộn toàn cục.

⇒ **Kết luận cứng: đề-xuất `PROPOSE` của máy cho `ring2-audit` TỒN TẠI CHỈ VÌ lỗi bảng-mã trong danh sách pattern.** Sửa 1 dòng thì chính máy đổi ý thành *"cấm age-archive, phải nén tay"*. Thi hành đề-xuất = archive đúng thứ mà trục value dựng ra để giữ.

#### Lý do ② — `## 🎯 Role baseline` là **XƯƠNG SỐNG**, archive nó = vai làm việc mù

`MEMORY.md:24-35` = hợp-đồng vai (KIỂM 2 con-đo H24 · fail-closed pin · enum ĐÓNG · thách-CLEAN bắt buộc · danh sách KHÔNG-lấn). Khối này **auto-inject mỗi spawn**. Chính diary vai ghi lại ca cũ (`:4`, S173): *"`:25` đẩy '5 class view-*' (enum 6) dưới `## 🎯 Role baseline` = **nạp mỗi spawn** ⇒ tao bị nạp thước thiếu vạch TRƯỚC khi làm việc"*. Đưa nguyên khối xuống L2 = phiên bản nặng hơn của đúng ca đó.
🔸 Lưu ý: kể cả sau khi vá bảng-mã ở ①, `Role baseline` **vẫn** nằm trong pool khả-drain (lượt INJECTED vẫn trừ 1.458 B của nó) ⇒ đây là lỗ **thứ hai, độc lập**.

### C6.3 — 🔴 Phát hiện nặng hơn: planner **MÙ 51%** hot-tier (vùng trên heading đầu)

`Get-EntryMarkerLineNumbers` / vòng `$headIdx` chỉ dựng span **từ heading ĐẦU TIÊN trở xuống**. Mọi byte **phía trên** heading đầu không thuộc logical entry nào ⇒ **không drain được, cũng không protect được** — máy hoàn toàn không thấy.

```bash
python - <<'PY'   # đo bytes phía trên heading '## '/'### ' đầu tiên, mọi sub
PY
```

| sub | bytes | preamble mù | % mù |
|---|---|---|---|
| **`ring2-audit`** | 30.781 | **16.031** | **52,1%** |
| `tooling-auditor` | 29.962 | 11.419 | 38,1% |
| `lead-stale-auditor` | 28.220 | 13.734 | 48,7% |
| `harvest-curator` | 26.139 | 10.202 | 39,0% |
| **TOÀN HỆ (28 sub)** | **445.569** | **227.101** | **51,0%** |

- **6 sub mù 100%** (0 heading): `back-end-reviewer-style` · `ctx-curator` · `database-reviewer-style` · `front-end-reviewer-style` · `score-count-auditor` · `score-counter`. Nếu con nào vượt cap thì `logCount(0) ≤ keepFloor(5)` ⇒ vĩnh viễn `WARN cannot auto-drain`.
- Đây **cùng LỚP** với lỗi lane-F đã nêu cho máy KHÁC (`sub-n3-lane-f-maytay.md:227` — *"cho segment đầu tiên bắt đầu từ index 0 thay vì `marks[0].Index`"*). Lớp đã biết, **chưa ai grep sang `memory-archive-gate.ps1`**.

### C6.4 — 🔴 `keep_floor` giả định "mới = ở đáy" — với `ring2-audit` là **NGƯỢC**

`keep_floor` giữ 5 entry **cuối file** vì quy ước *append-to-end = newest*. Đo ngày thật:

| vùng | nội dung | ngày |
|---|---|---|
| preamble `:1-23` (máy KHÔNG thấy) | S181 · S173 · S172 · S168 · S166 · S162 · S153 | **07-26 → 08-07** |
| 5 heading đáy (`keep_floor` BẢO VỆ) | Curate trigger · S151 · S151-deep · S152 · S159 | **07-25 → 07-29** |

⇒ Trục recency của máy đang **bảo vệ phần CŨ và nhắm vào phần đầu file**, trong khi phần MỚI NHẤT + LỚN NHẤT (52%) nằm ngoài tầm với. File này ghi **prepend** (mới lên đầu), ngược quy ước máy giả định.

### C6.5 — Nit: cột `entries` dùng **2 đơn-vị trong 1 bảng**

`memory-archive-gate.ps1:131` (dòng dưới-cap) in `$entryCount` = đếm marker **gồm cả `---`**; `:208` (dòng over-cap) in `$logCount` = **chỉ heading**. Cùng một tên cột.
Đối chứng: gate in `cicd-monitor entries = 19`; đếm heading-only = **10** (`grep -c "^---\|^## \|^### "` = 19 vs heading 10). Không sai kết quả, nhưng người đọc so 2 dòng trong cùng bảng sẽ so nhầm đơn-vị — đúng lớp *"2 THƯỚC trong 1 báo cáo"* mà chính `ring2-audit` từng flag @S162.

### C6.6 — `tooling-auditor` 29.962 B: máy **TỰ CHẶN**, đúng nhánh "trình đề-xuất cho lead"

Máy in `WARN value-floor hit: over-cap but every drainable entry is value-protected/keep-floor — condense high-value BY HAND (do NOT age-archive)`; 11 logical entry, 4 protected. ⇒ **Không có đề-xuất máy nào để thi hành** ⇒ theo đúng lệnh lead: **trình đề-xuất-nén cho lead, CẤM nén tay**. Em **không nén**.

### C6.7 — ĐỀ-XUẤT TRÌNH LEAD (propose-only, em KHÔNG tự làm — đều chạm vùng-owner hoặc chạm memory)

| # | Đề xuất | Vì sao không tự làm |
|---|---|---|
| **P1** | Thêm `"bài học"` (có dấu) vào `archive_gate.value_protect.patterns` — **1 dòng**, đã chứng có răng ở C6.2 | `memory-budget.json` = single-source policy ⇒ **SKIP-owner** |
| **P2** | Value-protect khối hợp-đồng vai (`## 🎯 Role baseline` / `## 🎯 Role`) — hoặc thêm pattern, hoặc hard-skip heading khớp `Role baseline` | đổi hành-vi gate = policy ⇒ **SKIP-owner** |
| **P3** | Vá planner mù: cho span đầu bắt đầu từ **index 0** (preamble thành 1 entry ảo) — kèm phản-chứng bắt buộc: chèn token value vào preamble ⇒ máy PHẢI hard-skip; gỡ ⇒ thôi | sửa `scripts/memory-archive-gate.ps1` = máy governance, ngoài phạm-vi C-6 (C-6 = *chạy máy + theo đề xuất*), và **chưa có lệnh** |
| **P4** | Nén tay `ring2-audit`: gộp 5 bullet `## 📅 Runs` (S146/S149/S149b/S150/S150b, 7.221 B) thành **1 mục "Runs S146→S150 — 5 bài phương-pháp"** giữ nguyên 5 câu bài-học + tag, bỏ phần thuật-lại verdict/số đã có trong artifact `runs/**`. Ước còn ~2.0–2.5 KB ⇒ file về ~25,6–26,1 KB. **Vẫn chưa dưới cap** ⇒ cần thêm 1 nhát vào preamble | **CẤM nén tay** (lệnh lead + `HANDOFF:40`) ⇒ chỉ trình |
| **P5** | Nén tay `tooling-auditor` (29.962): máy đã tuyên value-floor ⇒ chỉ còn đường nén | như trên |
| **P6** | Nếu lead muốn strike bền: chạy `memory-archive-gate.ps1 -Apply` (ghi `.archive-strikes.json`, KHÔNG move file) | lead chỉ định DRY-RUN |

### C6.8 — Cập nhật bức tranh over-cap so với `HANDOFF:40` (số ở đó đã STALE)

| sub | `HANDOFF:40` (@S179) | đo @S185 | đổi |
|---|---|---|---|
| `ring2-audit` | 26.440 | **30.781** | +4.341, nay vượt cả soft-cap |
| `reviewer` | 26.856 (over-cap) | **22.430** | 🟢 đã về **dưới cap** — hết over-cap |
| `tooling-auditor` | 27.147 | **29.962** | +2.815 |
| `lead-stale-auditor` | — (không nêu) | **28.220** | 🔴 **over-cap MỚI**, chưa ai nêu |
| `harvest-curator` | — (không nêu) | **26.139** | 🔴 **over-cap MỚI**, chưa ai nêu |

⇒ Bộ đôi mà `HANDOFF:40` gọi là *"+2 vai mới over-cap"* nay **không còn đúng cặp đó**: 1 con đã tự khỏi, 2 con khác vào chỗ.

### C6.9 — VERDICT C-6

**PARTIAL.** Làm đủ phần cơ-học được giao (chạy máy DRY-RUN → lên strike-2 → lấy đề-xuất máy → chạy **value-scan bắt buộc**), và **không thi hành move** vì value-scan bác — kết quả này rơi vào **đúng nhánh dự phòng lead đã viết sẵn** (*"máy bị block ⇒ trình đề-xuất-nén cho lead, CẤM nén tay"*), chỉ khác đường vào: bị chặn ở **cửa value-scan**, không phải cửa A5.
🔸 Khai thẳng cái **CHƯA** đạt: `ring2-audit` **vẫn 30.781 B, vẫn trên cả 2 ngưỡng**. Vấn đề gốc chưa đóng — nó cần **1 quyết định của lead/anh** (P1+P2 hoặc P4), không cần thêm phép đo nào.

---

## C-10 — 2 mồ côi A16 còn lại → wire-or-khai từng con

### C10.0 — 🔴 Trước hết: **là 3, không phải 2** (2 vật cùng đợt W6/S181 nói khác nhau)

| Nguồn | Câu | Số |
|---|---|---|
| **BÁO CÁO** `docs/governance/adap-reports/upgrade-pack-phased-bao-cao-cuoi.md:64` (bản đã gửi hub) | *"2/4 mồ côi đã wire \| **2 mồ côi còn lại** giữ CÓ KHAI"* | **2** |
| **BẢNG A16** `docs/governance/adap-upgrade-pack-tracking.md:137` | *"### M3 — MỒ CÔI … (**3** — sau khi wire 2 máy)"* + 3 dòng | **3** |

Lệch vì `seed-test-users-prod.ps1` **lộ SAU** khi câu tổng-kết của báo cáo đã viết (dòng `:141` tự khai *"Bản đầu bảng M3 thiếu dòng này"*). ⇒ Bảng đúng, câu tổng-kết trong báo cáo **STALE**. Em **không sửa báo cáo đã gửi hub** (việc đó = erratum ra ngoài, quyền lead) — chỉ khai ở đây + neo 1 dòng trong bảng.

### C10.1 — Thước đo "0 cửa gọi" + **positive-control** (chứng thước có răng)

```bash
git grep -l -F "<tên script>" -- '.claude/commands' '.claude/agents' '.claude/hooks' \
        '.claude/settings.json' '.github' 'hmw.js' | wc -l
```

| script | cửa gọi | nơi gọi |
|---|---|---|
| `nhip-no-probe.ps1` *(control +)* | **7** | harness-eval · check-email · pause · session-end · session-start · snapshot · tiep |
| `memory-archive-gate.ps1` *(control +)* | **3** | agents/README · harness-eval · session-end |
| `artifact-integrity.ps1` *(control +)* | **2** | lead-stale-auditor · session-end |
| `naming-scan.ps1` *(control +)* | **1** | session-end |
| `wal-recovery-test.ps1` | **0** | — |
| `session_scaffold.py` | **0** | — |
| `seed-test-users-prod.ps1` | **0** | — |

4 control đều **> 0** và trúng đúng cửa mà bảng M2 khai ⇒ 0-hit của 3 con kia là **vắng-mặt THẬT**, không phải thước hỏng. (Đồng thời xác nhận `naming-scan`=1 · `artifact-integrity`=2 ⇒ 2 con đã CHUYỂN SANG M2 là đúng, `tracking:145` đứng.)

### C10.2 — Phán từng con

**① `wal-recovery-test.ps1` → KHAI (giữ mồ côi CÓ KHAI). Không wire.**
0 cửa gọi (đo trên). Bản chất = test hồi-quy WAL chạy **khi nghi ngờ**, không phải nghi-thức định kỳ; adap-report `2026-07-13-…harness-22-wal-defect-fix.md:14` ghi nó là bộ 4-ca/30-assert dùng để **chứng defect-fix**. Wire vào bookend = mỗi phiên dựng cây tạm + 4 ca ⇒ chi phí thường-trực cho một máy chỉ hữu ích khi có nghi vấn. **Trạng thái bảng ĐÚNG, giữ nguyên**, nay có thêm số đo.

**② `session_scaffold.py` → KHAI. Nghi-trùng nay **ĐÃ XÁC MINH** (bảng đang stale). Không wire, không xoá.**
- Trùng **KHÁI NIỆM, không trùng nhánh-gọi**: `naming-standard.md:161` — *"Fork thật duy nhất: `session-scaffold.ps1` ⟂ `session_scaffold.py` — hợp lệ theo luật ngôn ngữ nhưng TRÙNG KHÁI NIỆM. Hai bản hiện sinh ra tên đầu ra giống hệt nhau (`session-<N>` + `_context-s-<N>.md`), cả hai đều hard-pin, 0 nguồn chung."*
- Đã có **mã + disposition**: `naming-standard.md:253` **M-10** (🟡) và `:271` **N-6** → *"Hợp lệ theo L4; hợp nhất là đổi mã, không phải đổi tên"*, xếp **W2**.
- Nó **KHÔNG chết hoàn toàn**: `naming-standard.md:200` đếm nó là **1 trong 4 site hard-pin** hình dạng `session-<N>` (`session_scaffold.py:105`) ⇒ máy chuẩn-tên đang **đọc** nó như nguồn đối-chiếu.
- Lai lịch: bản **port near-verbatim từ hub** (`session_scaffold.py:4` *"SE PORT of AI_INFRA scripts/session_scaffold.py (adopted S148…)"*; `docs/changelog/sessions/2026-07-24-1800-S148-…:21`).
⇒ **Mồ côi CÓ CHỦ ĐÍCH** (giữ đối-chiếu hub), **không phải "chưa xác minh"**. Dòng `tracking:143` là vật STALE — 2 sản phẩm của **cùng wave S181** (W1 `naming-standard` ⟂ W6 bảng A16) mâu thuẫn nhau.

**③ `seed-test-users-prod.ps1` → KHAI. Không wire (và **không tự sửa bộ-lọc**).**
0 cửa gọi. Bản chất = script **vận-hành sản-phẩm** (seed 30 user test vào DB prod, chạy tay lúc triển khai — `docs/changelog/sessions/2026-05-13-2200-s22-chot-cuoi.md:147,280`), **không phải máy governance**. Bảng tự khai nó *"lọt bộ-lọc loại-trừ (`seed-*` không có trong danh sách)"* và **cố ý giữ trong M3** theo đúng luật hiện hành của tệp.
🔴 Em **KHÔNG** nới bộ-lọc: thêm `seed-*` sẽ kéo **mẫu số 24 → 23** — đó là đổi một con-số đã đo và đã gửi hub ⇒ **quyền lead/anh**. Chỉ trình 2 nhánh: **(a)** nới bộ-lọc + hạ mẫu-số + khai lệch với bản đã gửi; **(b)** giữ nguyên, đây là *nợ-có-khai*, không phải lỗi.

### C10.3 — Việc đã GHI ĐĨA cho C-10

Sửa **additive** 3 dòng M3 + 1 dòng ghi-chú lệch-số trong `docs/governance/adap-upgrade-pack-tracking.md` §7 (chi tiết ở mục "ĐÃ SỬA FILE" bên dưới).
🔴 **KHÔNG đụng:** cột *nấc* (A16 giữ `đã đồng ý`) · **mẫu số 24** · bộ-lọc loại-trừ · báo cáo đã gửi hub · `naming-standard.md` (LANE-3 đang có thể chạm).

### C10.4 — VERDICT C-10

**DONE.** 3/3 con xác minh bằng lệnh có positive-control; mỗi con có phán *wire-or-khai* + lý do; con "nghi trùng chưa xác minh" nay **đóng được bằng vật đã có sẵn trên đĩa** (`naming-standard.md`), không cần đo mới. Kèm 1 phát hiện phụ: **báo cáo gửi hub ghi 2, đĩa ra 3**.

---

## ĐÃ SỬA FILE (lane này)

| File | Sửa gì | Loại |
|---|---|---|
| `docs/governance/adap-upgrade-pack-tracking.md` §7 M3 (`:139-146`) | 3 dòng M3 thêm cột/ghi-chú **verify @S185** (0 cửa gọi + control dương) · `session_scaffold.py` lật *"Chưa xác minh"* → **đã xác minh, trỏ `naming-standard.md:161/253/271`** · thêm 1 dòng khai lệch **2 (báo cáo `:64`) ⟂ 3 (bảng)** | additive, không đổi nấc / mẫu-số |

**KHÔNG sửa:** mọi file trong `.claude/agent-memory/**` (0 byte thay đổi) · `memory-budget.json` · `scripts/*.ps1` · báo cáo đã gửi hub · `HANDOFF.md`.
**KHÔNG commit, KHÔNG push.** ENV-DEP: lane này **không** sửa file lệnh/persona ⇒ không có phần "ăn từ phiên sau restart".

## HẬU-KIỂM sau khi sửa (chạy lại bằng lệnh, không bằng trí nhớ)

| Phép | Lệnh | Kỳ vọng | Đo được |
|---|---|---|---|
| Bảng 20 khoản không vỡ | `grep -c '^\| A' docs/governance/adap-upgrade-pack-tracking.md` | 20 | **20** ✅ |
| M3 vẫn đúng 3 dòng | `sed -n '/^### M3/,/^🔸 \*\*\`naming-scan/p' … \| grep -c '^\| \`'` | 3 | **3** ✅ |
| Không ai tự phong nấc cuối (self-check GỐC của tệp) | `grep -c 'đã được kiểm chứng *\|' …` | 0 | **0** ✅ |
| Bảng M3 đúng hình 3 cột | đếm `\|` từng dòng khối M3 | 4/4/4/4/4 | **4 đều** ✅ |
| 🔴 **KHÔNG chạm memory** | `git status --short -- .claude/agent-memory \| wc -l` + `git diff --stat -- .claude/agent-memory` | 0 / rỗng | **0 / rỗng** ✅ |
| File lane này sửa | `git diff --stat -- docs/governance/adap-upgrade-pack-tracking.md` | 1 file | **14+/5−** ✅ |

### Phát hiện phụ (KHÔNG sửa — báo để lead định đoạt)

🔸 **Self-check #2 của chính tệp `adap-upgrade-pack-tracking.md` là thước HỎNG, có TRƯỚC lane này.**
Tệp tự viết (`:80-81`): *"Nấc khai theo từng giai đoạn — **phải ra 7 dòng**"* với lệnh `awk -F'|' '/^\| [0-6] \|/…'`.
Đo: **12**, không phải 7. Regex bắt cả bảng §1 (7 dòng GĐ 0-6, `:19-25`) **lẫn** bảng thứ hai ở `:100-104` (5 dòng đánh số 1-5 `D-8/D-18/TC-03/TC-09/D-12`).
**Chứng nó không do em gây ra:** `git show HEAD:… | awk … | wc -l` = **12**; trên cây làm việc sau khi em sửa = **12** ⇒ y hệt.
Vá rẻ (đề xuất, **chưa áp**): neo thêm cột nấc, ví dụ `/^\| [0-6] \| .*\| \*\*đã /`. Em không tự sửa vì **đổi một tiêu-chí nghiệm-thu** là đổi thước — đúng lớp *rời tập-đo*, phải có người chốt.

### 🔸 Khai minh bạch về "KHÔNG commit"

Em **không chạy một lệnh git ghi nào** (chỉ `git grep` · `git show` · `git status` · `git diff` · `git log`). Nhưng repo **vẫn sinh commit** trong lúc lane chạy: `20d32450 wal: flush 20260809T2131` · `5f23d65c wal: flush 20260809T2117` — đó là **Stop-hook `wal-flush.ps1` bắn ở turn-boundary** (đúng dòng **M1** của bảng A16: *"Stop-hook, mọi turn-boundary"*). Nêu ra vì nếu lead `git log` sẽ thấy commit mang thay-đổi của lane này mà tưởng em tự commit. Vẫn **chưa có push**, và lead vẫn gom cuối như kế hoạch.

### Dọn dẹp

Cây tạm fault-inject đã **xoá** sau khi đo (`…/scratchpad/lane6-fi`). Dựng lại đúng 2 lệnh `cp -r` + 1 nhát sửa pattern đã ghi ở **C6.2** — tái-lập được, không cần giữ bản sao memory ngoài repo.

## SKIP-owner (khai đúng luật)

| Món | Vì sao SKIP |
|---|---|
| Thêm pattern `"bài học"` vào `memory-budget.json` | policy/single-source ⇒ owner |
| Nới bộ-lọc loại-trừ §7 (kéo mẫu-số 24→23) | đổi số đã đo & đã gửi hub ⇒ owner/lead |
| Nén tay `ring2-audit` / `tooling-auditor` | **CẤM nén tay** (lệnh lead + `HANDOFF:40`) |
| Vá planner-mù trong `memory-archive-gate.ps1` | sửa máy governance, ngoài phạm-vi C-6 |
| Erratum cho báo cáo đã gửi hub (2 vs 3 mồ côi) | gửi ra ngoài ⇒ lead |
