[CLAUDE] Docs: S122 closeout - San-2/San-5 chay THAT lan dau + H24 counter tick 0->1 + RE-STAMP carry
All checks were successful
Deploy SOLUTION_ERP / build-deploy (push) Successful in 5m19s

PHIEN GOVERNANCE-ONLY: 0 prod-code, 0 mig, 0 FE => test 509 GIU (Phase 3.1 = N/A).

SAN-2 sentinel: dat @BUOC 0 (truoc moi flush) -> xoa @6.4 => RUNTIME-VERIFIED lan dau.
SAN-5 hau-kiem: chay THAT lan dau va TU BAT 3 BUG CUA CHINH NO (bug lead viet @W3):
  (1) do sai COT: `git log -1 --format=%cI` = commit CUOI cham folder => bat "folder bi SUA
      phien nay" thay vi "folder duoc TAO phien nay". Do that: S112-pe-signoff-close-review
      (tao 07-12) tra ve 07-15 vi W3.0 vua them synthesis => 9/9 DUONG-GIA. Dung = `| tail -1`.
  (2) soi sai CHO (nang hon, loi CAU-TRUC): chi grep WAL. Nhung WAL = so ghi-de <=40 dong VA
      marker wf: bi xoa NGAY khi viec xong ([!]wf: -> [x]XONG). San-5 chay CUOI phien => luc do
      marker DA BIEN MAT => soi mot so tam dang co lai de tim dau von thiet-ke de xoa di
      => KHONG THE dung. Spec v1:120 DA ghi "WAL/session-log" -- lead ROT nua sau ngay khi
      viet chinh muc do. => session-log = append-only = cho dau BEN nam.
  (3) BAY `grep -c` DINH LAN THU BA CUNG PHIEN: `|| echo 0` => grep in "0" VA exit 1 => echo
      ban them => "0\n0" => syntax error. Lead DA ghi bay nay vao §5.0(a) VA gui hub R2(β)
      -- cung phien -- roi VAN viet `|| echo 0`. Dung = `|| true`.
  => sau va: 1 run sinh phien nay, LECH=1 = TRUE-POSITIVE (marker thieu o session-log)
     => dong bang dong `wf:` trong session-log => LECH=0. Acceptance DAT.
  🔸 San-5 sai duoc 3 lan VI no `informational` -- neu la cong-chan thi 9 duong-gia da chan
     ca phien va nguoi se bypass ngay lan dau (dung cong-thuc R2 vua gui hub).

H24 counter: TICK dau tien 0->1, content-addressed neo HEAD-sha 2f068c5. Seed UNTICKED trung-thuc
  giu duoc y nghia: counter=1 la THAT, khong phai so bia. light 1/6 · deep 1/15 · OVERDUE none
  => nhip audit dau tien ~S128. 2 vai H24 VAN CHUA CHAY lan nao.

RE-STAMP carry (§L.b(j)(iv), nghi-thuc moi lan dau ap):
  truoc S122: 7 carry x 1 occurrence => streak≡1 => 0 fire VINH VIEN (45 logic-segment ma
  carry-lines=1). Sau re-stamp: 6 carry con mo = 2 occurrence (seg S119 + seg S122) => streak
  BAT DAU DEM DUOC. +2 carry moi (usermem-outside-repo, hook-vs-budget-cap, h23-precedence-fable).
  carry s119-wave DONG (wave xong) -- 🔴 CO Y BO tag [carry:...]: tag = "dang MO"; giu tag tren
  carry da dong => detector dem streak tuong no dang gia di => duong-gia. Lead suyt mac, tu bat.
  🔴 Khai thang: carry mo TRUOC S122 co tuoi DO-THIEU (§Q3 no-retrofit).

Flush agent-memory: investigator-codebase +1 entry (7 lane retro-harvest, 6/6 neo SHA that
  0 garble). 3 ky-thuat lane dang tai-dung ghi lai: do ordinal migration bang sorted-listing
  (khong tin nhan doc) · phan-biet hash-lech vs invariant-vo · truy owner-decision VAO CODE.
  19630 -> 22871 B (< autoinject cap 25600, < soft cap 30720 => KHONG curate).

🟡 XUNG-DOT khai de anh chot: PostToolUse hook doi nen MEMORY.md xuong 17.1KB, nhung
  memory-budget.json (SO ANH DAT) = autoinject 25600 / soft 30720 + "DO NOT auto-reduce
  (role_boundary_note + mark RC-...01-58-01: token-saving = forgetting work)". Hien 22871 B
  = DUOI ca 2 cap => em KHONG tu nen, cho anh chot. [carry:hook-vs-budget-cap]

User-Mark CHOT: 8 Active-High (6 cu + 2 ky hom nay) · 0 Active · 0 Medium · 1 superseded (AN, P7).
Hot-feed cuoi phien: 325K/380K = 85.5% nap | headroom 14.5% (WIP 31.1 · loi-lap 24.2 ·
  ton-dong 19.5 · quyet-dinh-cho 10.8). con-so = quyen anh.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
pqhuy1987
2026-07-15 15:57:53 +07:00
parent 2f068c58e5
commit 16c91a8218
7 changed files with 136 additions and 18 deletions

View File

@ -1,5 +1,6 @@
# WAL — auto-generated, không sửa tay
updated: 2026-07-15T14:59 | session: S122 | branch: main
closing: S122 @2026-07-15T15:45
updated: 2026-07-15T15:45 | session: S122 | branch: main
goal: Adap 6 broadcast AI_INFRA (H23 · H24 · H22-wal-defect 5-sàn · H22-push-guard · EOL/CRLF · owner-sign). Spec v3 CHỐT (GO-WITH-FIXES · fix#8 anh ký). Phiên này = CHẠY WAVE W0→W6. Đọc v2 làm THÂN + v3-PATCH THAY-THẾ; v1 CẤM CHẠY.
chain:

View File

@ -110,6 +110,12 @@ Bearer từ `POST api.solutions.com.vn/api/auth/login` → status matrix expecte
## S116 — PE negative-quote invest (fable-clone ensemble, 07-13)
- Hội-tụ **FE-ONLY**: BE/DB nhận âm sẵn (no validator/CHECK); NS giữ-nguyên architectural; 3 chốt FE parseVnd/format/gate; sign-aware `VndInlineEdit:1003` tái dùng; chỉ submit-guard `:206` hard-reject. ⚠️ Lesson: quote sống `details[].quotes` KHÔNG `suppliers[].quotes`. **Detail:** `.claude/workflows/runs/2026-07-13-pe-negative-quote/` + session-log S116 + archive/2026-07.md 2×LENS. `[Opus-S116]`
- **2026-07-15 (S122 — retro-harvest 7 orphan, 7 lane read-only qua `/hmw` RUN-TRACE `wf_5ce007c4-980`; 7/7 done · 0 error · 1 RỖNG schema-fail · 526s · 836K tok):** Task: đọc 7 run-folder "orphan" + truy `git log` → đối-chiếu run ĐỊNH-làm vs THẬT-land, neo bằng `file:line`/SHA THẬT; **CẤM bịa sha, CẤM suy "chắc xong rồi" từ việc folder tồn-tại**. Nấc: **executed + lead verify từng cái**. Evidence: 6/6 lane có return **neo SHA thật, 0 garble**`a829d0d` (PE A1+EDGE-5, 2 file +513/148) · `e100ef0`+**Mig 63** (Supplier Excel-import Phase B, 20 file +8268/14) · `5fa11b5`+**Mig 64** (import v2, 28 file +7659/105) · `d436af2`+**Mig 65** (multi-NCC, 18 file +7272/425) · `88368fd` (PE giá-ÂM, spec-match 7/7, **S116 KHÔNG phải S113**).
🔴 **KẾT-QUẢ LẬT TIỀN-ĐỀ CỦA CHÍNH RUN — 0/7 là việc mất; 7/7 ĐÃ XONG, chỉ ghi synthesis SAI CHỖ.** 6 folder có `## synthesis` trong THÂN `run.md` (dạng-3) · `pe-negative-quote` rải trong `## Stages`+`## wf run-id` (dạng-4, `run.md:19` ghi thẳng *"PIPELINE COMPLETE — shipped + live-verified"* + cicd PASS + bundle-hash + smoke 200) ⇒ **thực-địa ≥4 dạng, doc thừa-nhận 2****orphan-authority đo TÊN FILE, không đo NỘI DUNG****8 dương-giả / 25 run = 32%**. Bồi: `8fa2fcc` khoe *"[H2 gate]"*`git show --stat` **KHÔNG chạm folder** ⇒ H2 đã soi + coi ĐÓNG, chỉ lệch tên. **KHÔNG phải convention-cũ:** cùng ngày 07-12, `h22-wal-adopt` ghi dạng-1 còn `S112-*` ghi dạng-3 ⇒ **thói-quen không nhất-quán**.
🟢 **3 kỹ-thuật lane đáng tái-dùng:** (a) **đo ordinal migration bằng sorted-listing** (`Mig 65` = vị-trí **65/66**) thay vì tin nhãn `CLAUDE.md` — doc là **DẪN-XUẤT**, phải neo vào file migration thật · (b) **phân-biệt hash-lệch vs invariant-vỡ**: session-log ghi FE-mirror SHA `3e16dba5` @S116 vs đĩa nay `617b0aa0`**KHÔNG mâu-thuẫn** (file tiến-hoá sau S116; invariant thật = *"2 app identical với NHAU"* **vẫn nguyên**, `git diff --no-index` exit=0) — checker so-literal-hash sẽ kêu oan đúng chỗ này · (c) **truy owner-decision VÀO TRONG CODE**: cả 5 decision của `supplier-excel-import` neo được ở code, `:376` **cite thẳng số decision** (`// unknown → default (decision 5, không reject)`).
🔸 **Lane RỖNG ≠ mất dữ-liệu:** `parallel[3]` schema-fail 0 return — nhưng synthesis nằm **trên đĩa** (`run.md:8`) ⇒ lead lấy lại nguyên vẹn + neo chéo từ 2 lane khác. Đúng `/tiep §2`: **per-turn ≠ per-task — return mất theo phiên, file trên đĩa còn.** File synthesis của folder đó **tự khai nấc bằng-chứng THẤP HƠN** 6 cái kia.
🔴 **Lead-error lane cần biết:** memoryPack lead bơm ghi *"S113/pe-negative-quote"***SAI, là S116**. Lane **KHÔNG bị dắt** (tự truy git ra `Mon Jul 13 17:08:34 2026`). ⇒ **tiền-đề trong memoryPack CÓ THỂ SAI ⇒ luôn tự truy git, đừng tin brief.** Tag `[s122-retro-harvest, false-orphan-by-naming, 0-of-7-lost, ordinal-measured-not-labeled, lane-empty-disk-survives, brief-premise-wrong]`.
## 🔄 Curate trigger
- >~30KB → archive recent → L2 `archive/<period>.md` (byte-exact append) + `_INDEX.md` substring pointer. Stale >3mo → remove.
- **Last curate: 2026-07-06 (em-main single-writer, hook-triggered @21.4KB)** — 6 stale governance/superseded entries (S93/S97/S98/S100/S101 + 07-01 Supplier-predecessor) verbatim → `archive/2026-07.md`, replaced with pointer-stubs. L1 back under target.

View File

@ -60,9 +60,33 @@ Em main PHẢI echo **TOÀN BỘ nội dung command body này** (đầy đủ Ph
- 🔴 **TRI-ACCEPT (S122) — định-nghĩa CANONICAL ở [`tiep.md`](tiep.md) §0, bước này CHỈ TRỎ (B1):** ĐÓNG = **dạng-1** `<stage>-synthesis.md` phẳng · **dạng-2** `harvest/<stage>-synthesis.md` (C8 legacy S71) · **dạng-3** heading `## synthesis` trong THÂN `run.md`. ⚠️ **Bản trước S122 chỉ nhận dạng-1** ⇒ đo thật: **8 dương-giả / 25 run = 32%**, trong đó folder **ghi chép đầy-đủ nhất** (có cả cicd PASS + bundle-hash + smoke) **vẫn** bị xếp orphan. Gốc: gate hỏi *"đã harvest chưa"* (câu hỏi về **NỘI DUNG**) nhưng đo **TÊN FILE** ⇒ đo cái **dễ đo**, không phải cái **cần đo**.
- 🔴 **Nhận ≠ cho phép:** TRI-ACCEPT = **lưới PHÁT-HIỆN cho bản CŨ** (đúng khuôn C8: *tha di-sản, cấm viết mới kiểu cũ*). **Run MỚI BẮT BUỘC ghi dạng-1**`workflows/README.md:17` thiết-kế **tên file mang nghĩa** (RAW `sub-` ⟂ VERIFIED `-synthesis.md`). Thấy run MỚI ghi dạng-3 ⇒ **NÊU** (drift), đừng im.
- 🔸 **Kẽ khai thật:** **dạng-4** (kết-quả rải dưới heading tuỳ-ý, vd `## Stages` + `## wf run-id`) **KHÔNG máy nào bắt được** — nhận nó = phải chấp-nhận "bất-kỳ run.md nào có vẻ nói về kết-quả" ⇒ quá lỏng, thành vô-nghĩa. ⇒ **để người phán**. Đây là **kẽ CÒN LẠI**, KHÔNG phải chuyện đã xử.
- **🚩 Sàn-5 — hậu-kiểm CỜ vs NỘI-DUNG (H22, adopt S122; informational, KHÔNG chặn):** mọi `runs/<id>/` **sinh trong phiên này** có dòng `wf: … run=<id>` tương-ứng trong WAL / session-log không? Lệch ⇒ **NÊU** + in danh-sách. Bắt ca *"run dựng xong nhưng marker không ai đăng-ký"* = **vi-phạm Sàn-1 lộ ra SAU** (`hmw.js` chỉ gate được đường của nó; raw Workflow/Agent đi thẳng — kẽ F2).
🔴 **Scope theo `git log -1 --format=%cI -- <folder>`, KHÔNG theo `mtime`** — mtime **không bền** (Dropbox resync ghi đè; R3-m5 chứng, FIX#4 đã bỏ mtime khỏi W0.5 vì đúng lý-do này). *(v1:120 nguyên-bản ghi "mtime-trong-phiên" — đó là bản TRƯỚC khi mtime bị bác; đừng bê nguyên.)*
**Acceptance:** chênh-lệch **0**, HOẶC in được danh-sách lệch.
- **🚩 Sàn-5 — hậu-kiểm CỜ vs NỘI-DUNG (H22, adopt S122; informational, KHÔNG chặn):** mọi `runs/<id>/` **SINH trong phiên này** có dòng `wf: … run=<id>` tương-ứng trong **WAL *HOẶC* session-log** không? Lệch ⇒ **NÊU** + in danh-sách. Bắt ca *"run dựng xong nhưng marker không ai đăng-ký"* = **vi-phạm Sàn-1 lộ ra SAU** (`hmw.js` chỉ gate được đường của nó; raw Workflow/Agent đi thẳng — kẽ F2).
```bash
# SINH = commit ĐẦU-TIÊN chạm folder (KHÔNG phải commit cuối)
for d in .claude/workflows/runs/*/; do
id=$(basename "$d"); [ -f "$d/run.md" ] || continue
born=$(git log --format=%cI -- "$d" | tail -1) # 🔴 tail -1 = ĐẦU-TIÊN
[ -z "$born" ] && born="9999" # chưa commit ⇒ sinh phiên này
[[ "$born" > "$SESSION_START" ]] || continue
# 🔴 `|| true` KHÔNG `|| echo 0`: grep -c đếm 0 vẫn IN "0" rồi exit 1
# ⇒ `|| echo 0` bắn THÊM một "0" ⇒ output "0\n0" ⇒ vỡ số-học. Xem bug-3 dưới.
w=$(grep -c "run=$id" .claude/WAL.md 2>/dev/null || true)
s=$(grep -rho "run=$id" docs/changelog/sessions/ 2>/dev/null | wc -l)
hit=$(( ${w:-0} + ${s:-0} ))
[ "$hit" -eq 0 ] && echo "SÀN-5 LỆCH: run=$id sinh $born nhưng 0 marker (WAL+session-log)"
done
```
🔴 **2 BUG lead tự mắc khi viết Sàn-5 @W3, Sàn-5 TỰ BẮT ở lần chạy THẬT ĐẦU TIÊN @S122** — ghi lại vì chúng là lý-do 2 luật dưới tồn-tại:
1. **Đo sai CỘT:** bản đầu dùng `git log -1 --format=%cI` = **commit CUỐI** chạm folder ⇒ bắt *"folder bị SỬA phiên này"* thay vì *"folder được TẠO phiên này"*. Đo thật: folder `S112-pe-signoff-close-review` (tạo **07-12**) trả về **07-15** vì W3.0 vừa thêm synthesis vào nó ⇒ **9 dương-giả / 9**. ⇒ **PHẢI `| tail -1`** (commit đầu-tiên = lúc sinh).
3. 🔴 **BẪY `grep -c` — lead dính LẦN THỨ BA trong CÙNG MỘT PHIÊN:** bản vá đầu viết `$(grep -c … || echo 0)`. `grep -c` đếm 0 thì **IN "0" *VÀ* trả exit 1** ⇒ `|| echo 0` **bắn THÊM** ⇒ output `"0\n0"` ⇒ `$(( … ))` **syntax error**. 🔴 Lead **đã ghi chính bẫy này** vào `§5.0` ghi-chú **(a)** *và* gửi hub trong **adap-request R2(β)** — **cùng phiên** — rồi **vẫn viết `|| echo 0`**. ⇒ Bằng-chứng thứ ba trong ngày cho: **bài-học viết ra / nạp vào context KHÔNG tự chặn được gì; chỉ LUẬT SOI-ĐƯỢC mới chặn.** Đúng: `n=$(grep -c … || true)` (grep vẫn in "0", `|| true` chỉ nuốt exit-code).
2. 🔴 **Soi sai CHỖ (nặng hơn — lỗi CẤU-TRÚC):** bản đầu chỉ grep **WAL**. Nhưng **WAL là sổ ghi-đè ≤40 dòng, và marker `wf:` bị xoá NGAY khi việc xong** (`[!] wf: run=…` → `[x] … XONG`). Sàn-5 chạy **cuối phiên** ⇒ lúc đó marker **đã biến mất từ lâu** ⇒ **soi một cái sổ tạm đang co lại, để tìm dấu vốn được thiết-kế để xoá đi** ⇒ **KHÔNG THỂ đúng**. Spec v1:120 **đã ghi "WAL**/**session-log"** — lead **rớt mất nửa sau** ngay khi viết chính mục này. ⇒ **session-log = append-only, vĩnh-viễn ⇒ đó mới là chỗ dấu BỀN nằm.**
⇒ **Hệ-quả BẮT BUỘC:** run RUN-TRACE **PHẢI** được ghi 1 dòng `wf: … run=<id>` vào **session-log** (`docs/changelog/sessions/`), không chỉ vào WAL. WAL = **sổ tạm cho `/tiep`**; session-log = **sổ cái cho hậu-kiểm**.
🔴 **Scope theo `git %cI`, KHÔNG theo `mtime`** — mtime **không bền** (Dropbox resync ghi đè; R3-m5 chứng, FIX#4 đã bỏ mtime khỏi W0.5 vì đúng lý-do này). *(v1:120 nguyên-bản ghi "mtime-trong-phiên" — đó là bản TRƯỚC khi mtime bị bác; đừng bê nguyên.)*
**Acceptance:** chênh-lệch **0**, HOẶC in được danh-sách lệch. 🔸 *Sàn-5 là **informational** — chính vì thế nó **an-toàn để sai**, và cái sai đó đã trả giá bằng việc tự lộ 2 bug ở lần chạy đầu. Nếu nó là cổng-chặn thì 9 dương-giả kia đã chặn cả phiên.*
- **(j) 🔷🔶 H24 lead-self-audit — counter + spawn theo NHỊP (adopt S122; đối-xứng `session-start §2.1.8`):**
- **(i) Đọc** `.claude/governance/.session-counter.json` + `h24_cadence` (`memory-budget.json`) → in **1 dòng**: `counter=<n> · light <a>/<light_every> · deep <b>/<deep_every> · OVERDUE: <none|light|deep>`. 🔴 **Nhịp ĐỌC từ config, CẤM hardcode ở đây** (detector `governance-detectors.ps1` H24-2 **fail-loud** nếu key thiếu — **không** giả-định default).

View File

@ -1,10 +1,7 @@
{
"_note": "Harness-24 (S121, 2026-07-15, wave adap-6-broadcast W2) session counter for lead-self-audit cadence. THIS FILE HOLDS STATE ONLY - every cadence NUMBER lives in .claude/agent-memory/memory-budget.json -> h24_cadence (single-source, H24 section 2(3)). Never copy the digits here.",
"_why_content_based_not_blind_increment": "Owner-decisions-15-07-2026 Q2, trap found by lane E: the Stop-hook .claude/hooks/wal-flush.ps1 auto-commits on EVERY turn-boundary. A blind counter++ would therefore tick many times per real session and the cadence would be meaningless. So a tick is CONTENT-ADDRESSED: it is keyed on the repo HEAD sha at tick time. Ticking twice on the same HEAD is a NO-OP, which is what makes running /session-start twice in a row safe (acceptance: 2x /session-start on the same HEAD => +1, not +2).",
"_why_this_path": "Deliberately .claude/governance/ and NOT .claude/agent-memory/. The hook covers exactly 3 paths (.claude/WAL.md, agent-memory/, workflows/runs/); .claude/governance/ is OUTSIDE all three, so this file is never swept into a 'wal:' commit as a side effect. Compare .claude/agent-memory/.mfe-state.json, which IS inside the hook's reach - a counter must not live there.",
"_contract": {
"tick": "tick(session, head): if head == last_ticked_head -> NO-OP (idempotent, same HEAD = same real session state). Else counter = counter + 1, last_ticked_session = session, last_ticked_head = head, last_ticked_at = date.",
"fail_loud_on_regress": "If an incoming counter is LOWER than the stored counter, or last_ticked_head names a commit not reachable from HEAD, DO NOT silently reset: report to owner. A counter that moves backwards means the state file was rolled back or hand-edited, and a silent reset would hide the cadence gap.",
@ -12,24 +9,19 @@
"jump": "jump_on_class_repeat (h24_cadence): if ONE flag class from lead_self_audit.flag_classes repeats N times, pull the next audit forward regardless of the counter.",
"writer": "Lead is single-writer. Wired at /session-start (W3 owns the ritual; W2 owns this file + its shape)."
},
"_seed_honesty": "Seeded UNTICKED on purpose. counter=0 and last_ticked_* = null mean 'no tick has ever happened', which is the truth at S121 - the ritual that performs the tick lands in W3. Seeding a fake first tick here would make the very first cadence reading a lie, and H24 exists to catch exactly that kind of invented number.",
"counter": 0,
"last_ticked_session": null,
"last_ticked_head": null,
"last_ticked_at": null,
"counter": 1,
"last_ticked_session": "S122",
"last_ticked_head": "2f068c58e5fd19417b58986fc1f0cd907c0c0065",
"last_ticked_at": "2026-07-15",
"last_audit": {
"light_at_counter": 0,
"deep_at_counter": 0,
"_note": "Counter value at which the last light/deep self-audit actually ran. 0 = never run yet (honest seed, same reason as above)."
},
"class_repeat": {
"_note": "Rolling tally per flag class from lead_self_audit.flag_classes (memory-budget.json). Key = class name, value = consecutive-audit repeat count. Empty = nothing observed yet; the 2 monitor roles land in W2 but have not run.",
"counts": {}
},
"history": []
}
}

File diff suppressed because one or more lines are too long

View File

@ -32,6 +32,22 @@
---
## ✅ Recently Done (S122 — 2026-07-15)
**Wave adap 6 broadcast AI_INFRA — W0→W6 ĐÓNG TRỌN.** Chain `4727d16..2f068c5` (**4 push**, K=0, tree clean). Session-log → [`2026-07-15-S122-adap-6-broadcast-wave.md`](changelog/sessions/2026-07-15-S122-adap-6-broadcast-wave.md).
- **Spawn-probe 14/14 SỐNG** (0 error/0 garble) — roster→14 chứng runtime. 🔸 phủ **Agent-tool registry** THÔI; đường `hmw.js→agentType` CHƯA phủ.
- 🔴 **W3.0 retro-harvest 7 orphan `22ea8c5` — LẬT TIỀN-ĐỀ: 0/7 là việc mất; 7/7 ĐÃ XONG, chỉ ghi synthesis SAI CHỖ.** Gốc: **orphan-authority đo TÊN FILE, không đo NỘI DUNG** ⇒ **8 dương-giả / 25 run = 32%**; folder **ghi-chép ĐẦY-ĐỦ NHẤT** (cicd PASS + bundle-hash + smoke 200) **vẫn** bị xếp orphan. Thực-địa **≥4 dạng** vs doc **2** ⇒ **TRI-ACCEPT** (nhận ≠ cho phép; dạng-4 = **kẽ CÒN LẠI**). dual-orphan **8→2**.
- **W3 9 file** `dfa3dae`+`53765b0` (WAL kế-hoạch 5): Sàn-3 canonical @`tiep.md §0` · `session-start` 0.6b registry-probe + 0.7-trỏ (`grep -c "chain rỗng"`=**0**) + §2.1.8 counter · `session-end` Sàn-2 + §5.0/§5.2 + Sàn-5 + §L.b(j) + RE-STAMP · `fable-clone` GAP#6 `tier:'opus'`.
- **W4** `a09dcae` positive-control: **5 FLAG → 0**, TOTAL **50→45** tụt **đúng 5**, **0 flag mới**. TOTAL 50 **khớp chính-xác dự-báo W2**.
- **W5** `c39ba9d`: engine roster → **0 occurrence** · **fix `$userMemDir` hardcode** ⇒ fault-inject **nay cô-lập được**.
- **4 bộ fault-inject CÓ RĂNG:** Sàn-1 **2 chiều** · Sàn-3 **9/9** (2 ca anti-Goodhart) · push-guard **10/10 cây git THẬT** (ca(2) `base+wal+[CLAUDE]`→K=0→**không deadlock**) · wal-recovery **4/4 ca 30 assert**.
- **Sàn-2 + Sàn-5 chạy THẬT lần đầu** @closeout ⇒ **đóng gap runtime**. 🔴 Sàn-5 **tự bắt 3 bug của chính nó** (đo commit-CUỐI thay commit-ĐẦU ⇒ 9 dương-giả · soi WAL-đang-co thay session-log **append-only** · bẫy `grep -c` **lần thứ 3 cùng phiên**) → vá xong **LỆCH=0**.
- **H24 counter TICK lần đầu 0→1** (content-addressed, neo HEAD-sha). `light 1/6 · deep 1/15 · OVERDUE: none` ⇒ **nhịp audit đầu tiên ~S128**.
- **Hub:** 5 adap-report + **6 adap-request** (R1-R5 + **R6 anh nêu**) + 2 email (**selftest-stamp PASS** cả 2).
- **2 mark Active-High** — anh chốt **TÁCH** (2 trục **khác nấc bằng-chứng**): `RC-pqhuy1987-15-07-2026-15-32-20` (H22 · bằng-chứng mạnh) · `RC-pqhuy1987-15-07-2026-15-32-23` (H24 · **caveat binding: "LỆNH về CÁCH LÀM, chưa phải bằng-chứng về HIỆU-QUẢ"**).
- 🔴 **CÒN NỢ (khai thẳng):** 2 vai H24 **CHƯA CHẠY lần nào** (counter=1, nhịp đầu ~S128) · precedence H23 **CHƯA test** (chờ phiên **lead=Fable**) · dạng-4 orphan = kẽ CÒN LẠI · **R6 chờ hub** (SE không tự dời memory được — `settings.json` 0 key ⇒ harness ép).
## 🔥 In Progress (S117)
| Task | Owner | Status |

View File

@ -0,0 +1,79 @@
# S122 — 2026-07-15 — Wave adap 6 broadcast AI_INFRA (W0→W6 đóng trọn)
**Lead:** Opus 4.8 (1M, Max) · **Vào phiên bằng:** `/session-start``/tiep` (nối mạch S121)
**Chain:** `4727d16..2f068c5`**4 push**, K=0, tree clean.
## wf: run-trace (Sàn-5 — sổ cái vĩnh viễn, KHÔNG phải WAL)
> 🔴 Dòng này ở đây vì **WAL là sổ ghi-đè ≤40 dòng** và marker `wf:` bị xoá ngay khi việc xong ⇒ hậu-kiểm cuối phiên **không tìm thấy**. Session-log = append-only ⇒ chỗ dấu BỀN.
- `wf: run=2026-07-15-S122-retro-harvest-7-orphan | wf-id=wf_5ce007c4-980 | 7 task investigator-codebase | engine /hmw RUN-TRACE | 7/7 done · 0 error · 1 RỖNG (schema-fail, dữ-liệu KHÔNG mất — lấy lại từ đĩa) | 526s · 836K tok · marker đăng-ký TRƯỚC phóng (Sàn-1) | synthesis: retro-harvest-synthesis.md`
## B1 — Vào phiên
`/session-start` → BƯỚC 0.7 WAL-check bắt mạch dở S121 (`[!]` chờ restart CLI) → anh gõ `/tiep`.
Ground-truth 9/9 probe khớp chain, **0 chỗ phải sửa ngược**.
🔴 **Spawn-probe 14/14 SỐNG** (0 error, 0 garble) — gate `[!]` chặn từ S121 đóng. 2 vai mới lean nhất roster (~26K tok < cap 60K).
## B2 — W3.0 (chèn mới): retro-harvest 7 orphan — LẬT TIỀN-ĐỀ
Anh chốt **đóng THẬT** (không scope, không allowlist, không bịa) FIX#4 **tự mâu-thuẫn** (thân nói SCOPE, acceptance nói ĐÓNG).
🔴 **Kết quả lật tiền-đề của chính run: 0/7 là việc mất — 7/7 ĐÃ XONG, chỉ ghi synthesis SAI CHỖ.**
- 6 folder `## synthesis` trong **thân `run.md`** (dạng-3) · `pe-negative-quote` (**S116**) rải trong `## Stages`+`## wf run-id` (dạng-4)
- thực-địa **4 dạng**, doc thừa-nhận **2** C8-dual **CHƯA ĐỦ** **TRI-ACCEPT**
- **Gốc:** orphan-authority hỏi *"đã harvest chưa"* (NỘI DUNG) nhưng **đo TÊN FILE** **8 dương-giả / 25 run = 32%**
- Ca nặng nhất: folder **ghi chép ĐẦY-ĐỦ NHẤT** (cicd PASS + bundle-hash + smoke 200 + *"PIPELINE COMPLETE"*) **vẫn** bị xếp orphan
- Bồi: `8fa2fcc` khoe *"[H2 gate]"* `git show --stat` **không chạm folder** H2 **đã soi + coi ĐÓNG**, chỉ lệch tên
- **KHÔNG phải convention-cũ:** cùng ngày 07-12, `h22-wal-adopt` ghi dạng-1 còn `S112-*` ghi dạng-3 **thói-quen không nhất-quán**
- Cách đóng: **COPY additive** (run.md giữ nguyên) 0 rewrite history. **dual-orphan 8→2**. +`rmdir` 2 probe-dir RỖNG (agent-memory 1614)
## B3 — W3 (9 file, WAL kế-hoạch 5) + W4 + W5
| Wave | Kết quả |
|---|---|
| **W3** `dfa3dae`+`53765b0` | Sàn-3 canonical @`tiep.md §0` (**fault-inject 9/9**) · `session-start` 0.6b registry-probe + 0.7-trỏ (acceptance `grep -c "chain rỗng"`=**0**) + §2.1.8 counter + H23-note · `session-end` Sàn-2 + §5.05.2 (**fault-inject cây-git 10/10**) + Sàn-5 + §L.b(j) + RE-STAMP + b · `fable-clone` GAP#6 `tier:'opus'` · +5 file sweep |
| **W4** `a09dcae` | positive-control **5 FLAG → 0**, TOTAL **50→45** tụt **đúng 5**, **0 flag mới** (đo `comm`). TOTAL 50 **khớp chính xác dự-báo W2**. = **B1 bỏ số**, không đổi số. 🆕 stale **nặng hơn con-số** detector đếm-số MÙ: `SKILL.md:20` liệt `Bg_*` như menu SỐNG Budget **xoá từ S61**, chỉ còn bia-mộ |
| **W5** `c39ba9d` | engine 4 hit **0 occurrence** (`:345` bẫy mega-line: sửa 1 chỗ còn 1 chỗ **cùng dòng**) · **fix `$userMemDir`** hardcode fault-inject **nay cô-lập được** |
## B4 — W6: 4 push + 5 report + 6 request + 2 email + 2 mark
- **push** `4727d16..c39ba9d` `..6dcd457` `..0f2fe29` `..2f068c5`. Mọi lần **squash→count→push TRỌN 1 LƯỢT**, trailing-K=0.
- **5 adap-report** (H22 · H23 · H24 · EOL/CRLF · owner-sign `n-a`) · **6 adap-request** (R1-R5 + **R6 anh nêu**) · **2 email** (selftest-stamp PASS cả 2)
- **2 mark Active-High** anh chốt **TÁCH** 2 trục **nấc bằng-chứng khác hẳn**: `RC-…15-32-20` (H22, bằng-chứng mạnh) · `RC-…15-32-23` (H24, **caveat binding: "LỆNH về CÁCH LÀM, chưa phải bằng-chứng về HIỆU-QUẢ"**)
## B5 — 🔴 R6 (ANH NÊU) — lead vá triệu-chứng, anh chỉ ra gốc
user-memory **48 file · 151 671 B** `C:\Users\…` = **0 git · 0 Dropbox · 0 history**; `.claude/agent-memory/` 1.1MB **git đủ** bất-đối-xứng **không lý-do kỹ-thuật**.
🔴 Bug **#53 zero-byte** (S45 **mất index thật**) xảy ra **đúng ở thư-mục không có history** *"verify byte>0"* = **kỷ-luật người đứng thay version-control**.
`settings.json` (project+user) = **0 key** **harness ép** SE **cố ý KHÔNG tự dời** (dời tay mất auto-inject) **hỏi hub**.
Hardcode = **hệ-quả phụ**: sinh `e70c046` **06-18** `c39ba9d` **07-15** = **27 NGÀY**; cơ-chế = **sinh-1-lần rồi SỐNG SÓT qua rà** (5/8 commit `-S` chỉ doc nhắc path; 1 trong 3 cái thật **`ae957c4` "double-check ×2"** đợt double-check **sờ đúng file mà không bắt**, hỏi *"logic đúng không?"* **logic VẪN đúng**).
## B6 — Sàn-2 + Sàn-5 chạy THẬT lần đầu (đóng gap runtime)
- **Sàn-2 sentinel:** đặt @BƯỚC 0, xoá 6.4 runtime-verified phiên này.
- **Sàn-5:** 🔴 **3 bug lead tự mắc @W3, Sàn-5 TỰ BẮT ở lần chạy đầu** (1) `git log -1` = commit **CUỐI** bắt "folder bị SỬA" thay "folder được TẠO" **9 dương-giả**; đúng = `| tail -1` · (2) **soi sai CHỖ**: chỉ grep WAL WAL **ghi-đè ≤40 dòng + marker bị xoá khi việc xong** soi sổ-tạm-đang-co để tìm dấu vốn thiết-kế-để-xoá **không thể đúng**; spec v1:120 **đã ghi "WAL/session-log"**, lead **rớt nửa sau** · (3) **bẫy `grep -c` lần thứ BA cùng phiên** (`|| echo 0` `"0\n0"` syntax error) lead **đã ghi bẫy này vào §5.0(a) VÀ gửi hub R2(β) cùng phiên**.
sau vá: **1 run sinh phiên này, 1 LỆCH = TRUE-POSITIVE** (marker thiếu session-log) đóng bằng dòng `wf:` đầu file này.
🔸 **Sàn-5 sai được 3 lần là VÌ nó `informational`** nếu cổng-chặn thì 9 dương-giả đã chặn cả phiên người sẽ bypass ngay lần đầu.
## 🔴 Lỗi LEAD phiên này (đều đã vào adap-report + mark + email hub)
1. *"đo lại tái-hiện CHÍNH XÁC dự-báo FIX#4"* rồi lấy trùng-khớp làm chỗ dựa **con-số đúng, HƯỚNG ĐO SAI** (cả spec lẫn lead đo TÊN FILE)
2. memoryPack ghi *"S113/pe-negative-quote"* **SAI, là S116**; sub **không bị dắt** (tự truy git)
3. **SHA BỊA** ghi `Commit 8fb2c9d` vào WAL **TRƯỚC khi commit**; **tái phạm WAL:13(b) đúng 1 NGÀY** sau khi thành bài học
4. `-m @'…'@` = here-string **PowerShell** trong **Bash** (tool-desc **cảnh-báo sẵn**)
5. *"runbook 8 hit"* thật **14** (lấy output `head -40` **đã cắt** làm số tổng)
6. Viết `exit 1` **chặn push** cho b EOL script **cố ý `exit 0` always**, W0.6 **đã bác** CRLF-fatal
7. **R6: vá triệu-chứng không hỏi gốc** `feedback_root_cause_over_symptom` **đã auto-inject** không tự bật; **anh phải chỉ**
8. **R6: vá đúng cái được chỉ, không quét cùng-lớp** anh hỏi mới lòi script thứ 2 **thoát vì MAY**
9. **Sàn-5 ×3** (B6 trên) gồm bẫy `grep -c` **lần thứ ba**
🔴 **Mệnh-đề chung, chứng 3 lần trong 1 ngày:** **bài-học viết ra / nạp vào context KHÔNG tự chặn được gì.** (#3 tái-phạm sau 1 ngày · #7 memory auto-inject không bật · #9 ghi bẫy vào §5.0 rồi vẫn mắc). thứ chặn được = **LUẬT SOI-ĐƯỢC**, không phải trí-nhớ. Đây lý-do adap-request R6 §3.2(4) đề-xuất **luật `no-absolute-path`** thay *"nhớ cẩn thận hơn"*.
🟢 **Đối-chứng:** 6/6 lane sub neo **SHA thật, 0 garble**. Khác biệt: **sub bị ép neo từng claim vào `file:line`; lead thì tự do viết văn.**
## Còn nợ (khai thẳng, KHÔNG giả-vờ đã đóng)
- **2 vai H24 CHƯA CHẠY lần nào** counter tick lần đầu phiên này (01); `light_every=6` nhịp audit đầu tiên **~S128**
- **Precedence H23 CHƯA test** chỉ phân-biệt được phiên **lead=Fable**
- **Dạng-4 orphan = kẽ CÒN LẠI** không máy nào bắt được, để người phán
- **R6 chờ hub** SE không tự dời memory được