26 KiB
sub — harvest-curator (H2) @open S159 · 5-trục harvest-integrity
- run-id:
2026-07-29-S159-bookend-open· vaiharvest-curator(H2, INFORM-only, propose-only) - bắt đầu: 2026-07-29 (lượt @open, phiên-LOGIC L8)
- luật tự-áp: ghi-đĩa-TRONG-lúc-làm (anti-#53); mỗi finding dán LỆNH vừa chạy (anti-pattern #2); mẫu-số khai tiêu-chí lọc (m#19) + ngày/phút đo (m#12).
§0 — Universe & mẫu-số (đo tươi, 2026-07-29)
Lệnh:
find .claude/workflows/runs -mindepth 1 -maxdepth 1 -type d | wc -l -> 66
for d in runs/*/; do [ -f "$d/run.md" ] && echo "$d"; done | wc -l -> 63
- 66 dir dưới
runs/(+2 file root:README.md,_ledger.md— ledger 🧊 RETIRED H18-B S100, không dùng làm authority). - 63 dir CÓ
run.md= universe orphan-scan. - 3 dir KHÔNG có
run.md⇒ ngoài universe, KHÔNG orphan (đã phân loại @S153, verify lại lượt này):2026-07-14-S117-pe-approve-minmax-range·2026-07-14-S117-pe-luyke-finalize— spec-only by-design2026-07-22-S144-bootstrap— cóbootstrap-synthesis.md
- Mẫu-số S153 = 59 → nay 63 (+4: S155, S156, S157, S158-day-wake... verify ở §1).
§1 — Orphan scan (dual-accept dạng-1 flat + dạng-2 legacy harvest/; dạng-3 RETIRED @S123)
Lệnh (chạy trên 63 dir có run.md, đếm file *-synthesis.md -s = tồn tại ∧ byte>0, cả flat lẫn harvest/):
for d in */; do [ -f "$d/run.md" ] || continue; n=0
for f in "$d"/*-synthesis.md "$d"/harvest/*-synthesis.md; do [ -s "$f" ] && n=$((n+1)); done
[ "$n" -eq 0 ] && echo "ORPHAN: $d"; done
KẾT QUẢ: ORPHAN: 2026-07-29-S159-bookend-open — 1/63, và đó là CHÍNH RUN NÀY (đang chạy).
→ 0 orphan thật / 63. Run đang IN-PROGRESS không tính orphan (luật S153) nhưng ghi nhận (anti-pattern #3: không đọc vắng-mặt thành ổn) — nó sẽ thành orphan thật nếu phiên đóng mà không có *-synthesis.md.
F-01 (INFORM) — 2 folder L7 mà lead vừa vá ĐÃ RỜI danh sách orphan, xác minh độc lập:
2026-07-27-S155-pe-delete-approver và 2026-07-28-S157-ke-hoach-ky-ket-hd không còn trong output orphan. Trước lượt vá, cả 2 là orphan dạng-4 (run.md có, *-synthesis.md vắng).
Provenance — KHÔNG tin lời lead, đo 3 nguồn độc lập:
| Nguồn | S155 implement-synthesis.md |
S157 review-synthesis.md |
|---|---|---|
git status --porcelain |
?? untracked |
?? untracked |
git log -- <file> |
rỗng (chưa từng commit) | rỗng |
| mtime | 2026-07-29T08:24 | 2026-07-29T08:26 |
| mtime các artifact nguồn cùng folder | 2026-07-27T09:12→15:49 | 2026-07-28T10:35→11:29 |
⇒ Lời tự-khai của lead ("viết @S159, không phải ghi-trong-lúc-làm") HELD — retro-harvest cách run gốc 2 ngày (S155) và 1 ngày (S157). Cả 2 file tự dán nhãn "🔴 KHAI THẲNG: file này viết SAU" ngay dòng 4 ⇒ không có nguỵ-trang thời-điểm.
§2 — Fidelity trục ①: implement-synthesis.md (S155, 9.590 B) vs artifact gốc
Thước: mọi con số / verdict / cite trong file phải truy được về file cụ thể cùng folder. Đo 12 claim.
✅ ĐÚNG byte-exact — 8/8 kích-thước artifact
Lệnh ls -la folder S155, đối chiếu từng số trong §3 bảng stage:
sub-invest-be-1.md 31.371 ✓ · sub-invest-fe-2.md 22.074 ✓ · sub-invest-menu-3.md 21.748 ✓ · sub-invest-wfver-4.md 29.479 ✓ · spec-pe-delete-approver.md 37.490 ✓ · reviewer-spec-review.md 28.259 ✓ · reviewer-diff-dot1.md 47.113 ✓ · reviewer-diff-dot2.md 51.970 ✓ — 8/8 khớp tuyệt đối, 0 sai số.
✅ ĐÚNG verdict + count — 4/4
- "
reviewer-spec-reviewPASS-WITH-FLAGS 17 FLAG (4H/8M/5L)" ⟷reviewer-spec-review.md:7nguyên văn**VERDICT: PASS-WITH-FLAGS — 17 FLAG (4 HIGH / 8 MED / 5 LOW).**+ END-line:224TOTAL=17 FLAG✓ - "
sub-invest-wfver-425 phát hiện" ⟷:286<!-- END sub-invest-wfver-4 · TOTAL=25 PHAT-HIEN -->✓ - "
cicd-verify-dot1CICD PASS 6/6 · commit b1bae77" ⟷:174**CICD: PASS** — 6/6 hạng mục bắt buộc đạt+:8b1bae77c9c98...✓ - "reviewer FAIL 12 FLAG (H1 = DTO thiếu field)" ⟷
reviewer-diff-dot2.md:442Tổng 12 FLAG — 2 HIGH…+:36H1 (HIGH) — Nút "Xóa phiếu" KHÔNG BAO GIỜ HIỆN: FE đọc field mà BE không hề trả+ verdict cuối**ĐỪNG-DEPLOY**✓ → chữ "FAIL" không có literal trong nguồn, nhưngĐỪNG-DEPLOYlà stamp mạnh tương đương ⇒ HELD, KHÔNG tính lỗi (không dựng finding giả). - "đo thật 11/13 role
CanDelete=0" ⟷ 2 nguồn độc lập:reviewer-diff-dot2.md:68+reviewer-spec-review.md:23(liệt kê đủ 11 tên role) ✓
✅ Claim (i) của lead — f4494cf ĐÃ có cicd: 3/3 cite HELD nguyên văn, số dòng đúng tuyệt đối
| Cite | Nội dung thật trên đĩa | Verdict |
|---|---|---|
cicd-verify-s157-diadiem.md:38 |
| 531 | 418 | f4494cfe | success | 07-27T14:36:54 | 14:42:35 | |
✅ khớp từng trường với synthesis §4 |
cicd-verify-s157-diadiem.md:58 |
⇒ **KHỚP CHÍNH XÁC baseline STATUS S156** (BK8w3QxU / DYnxSI0T), LM trỏ đúng run #418 |
✅ |
session-log :17 |
**cicd PASS 6/6** — lead **tự đo** @S156 … endpoint 2/2 → 401 (control bịa 404…) · smoke 8/8 · D3 giao-tập-ID = 0 (37 sống ⟂ 9 xóa) · bundle rotate ×2 + 4/4 byte-marker |
✅ |
⇒ KHÔNG BỊA. Và lead tự đặt trần diễn-giải ở :78 ("KHÔNG có artifact cicd-verify riêng… 2 vết gián tiếp, đủ lật ledger, không đủ để nói cicd-monitor đã chấm riêng"). Đây là hạ-claim chủ-động đúng chuẩn G-015 — thứ tao phải khen chứ không phải bắt.
🔴 F-02 (LOW, load-bearing = KHÔNG) — errata tự nó ĐỌC SAI CỘT, đúng cái bệnh nó đang chữa
implement-synthesis.md:80: "session log :17 viết «Run #531» — 531 là test-count, số Run thật là #418" · và :74 gọi cột đó là "test 531".
Sai. Header bảng cicd-verify-s157-diadiem.md:35 = | id | run# | head_sha | status | created | updated | ⇒ 531 = id (task id nội bộ Gitea), không phải test-count. Hai artifact cùng folder khai thẳng ngữ nghĩa cột:
cicd-verify-dot1.md:40—Run **id=529 · run_number=#416** · head_sha b1bae77ccicd-verify-dot2.md:41—Run **#417** (task id=**530**)⇒ dãy id 529/530/531 ↔ run# 416/417/418, liên tục, khoá chặt. Test-count thời điểm đó = 532 (§7của chính file: "test 532 → 562"), không phải 531 ⇒ "test-count" là suy-diễn hợp-lý-nhưng-sai, lệch 1 so với số thật nên nghe rất lọt tai.
Đánh giá đúng mức: phần SỬA (Run thật = #418, không phải #531) ĐÚNG và load-bearing — errata vẫn có giá trị. Cái hỏng là lời giải thích 531 là gì. Mỉa mai: errata kết bằng "Ghi lại để lần sau đọc bảng đúng cột" — trong khi chính nó đọc sai cột. Không phải bịa (số 531 có thật, đúng vị trí) — là mislabel. Đề: sửa 2 chỗ (:74, :80) "test-count" → "id (task id Gitea)".
🔸 F-03 (INFORM) — cite :174 của chính nó bị chính nó làm lệch +2 sau 2 phút (m#7 arithmetic line-shift)
implement-synthesis.md:111 dẫn "ledger run.md … tự khai điều đó ở :174". Đo nay: dòng tự-khai nằm ở :176.
git diff run.md S155 cho thấy lead thêm 2 dòng (1 blank + - [x] **Harvest — implement-synthesis.md**) SAU dòng 173 ⇒ dịch mọi dòng dưới +2. mtime: synthesis 08:24 < run.md 08:26.
⇒ cite ĐÚNG lúc viết, chết sau 2 phút do chính tác giả sửa file được dẫn. Không phải bịa; là m#18 (edit sinh cite-dead) bản tự-gây trong cùng phiên. Cite run.md:173 vẫn ĐÚNG ✓. Đề: đổi :174→:176.
§3 — Fidelity trục ②: review-synthesis.md (S157, 10.650 B) vs artifact gốc
✅ Claim (ii) của lead — "S6 đã chạy thật (4 file sub-review-*.md)": VERIFIED STRONG, 8/8 phần tử
| Lăng kính | Byte synthesis khai | Byte đĩa | Verdict synthesis | Verdict nguyên văn trên đĩa |
|---|---|---|---|---|
| 1 wave-plan | 26.561 | 26.561 ✓ | SUA-TRUOC-W1 19đ (6H/8M/5L) |
:288 TOTAL=19 DIEM (6H/8M/5L + 10 cung-co) · VERDICT=SUA-TRUOC-W1 ✓ |
| 2 fidelity | 23.202 | 23.202 ✓ | GO-WITH-FIXES |
:5 **GO-WITH-FIXES — chân chống KHÔNG sập…** ✓ |
| 3 schema | 16.496 | 16.496 ✓ | GO-WITH-FIXES 5 HIGH |
:192 VERDICT=GO-WITH-FIXES (5 HIGH chặn Wave 1) ✓ |
| 4 claims | 17.366 | 17.366 ✓ | 39Đ/4S/5? |
:7 **SPEC §② VỮNG — 39 ĐÚNG / 4 SAI (toàn bộ là lệch ANCHOR, 0 sai NỘI DUNG) / 5 KHÔNG KIỂM ĐƯỢC.** ✓ |
⇒ 4 file có thật · 4 byte-size exact · 4 verdict nguyên văn. Không nén sai, không bịa. Sắc thái khó nhất ("4 SAI đều là lệch ANCHOR, 0 sai NỘI DUNG" + "1 trong 4 trỏ đường dẫn KHÔNG TỒN TẠI") được giữ nguyên chứ không làm tròn thành "4 lỗi" ⇒ đây là nén giữ được thông tin phân-biệt, đúng chuẩn.
Cite khác kiểm chéo: sub-review-claims-4.md:119 = đúng chỗ đề gate 5-anchor ✓ · HANDOFF.md:8 = gate 5-anchor nguyên văn, mtime 2026-07-28T20:44 ✓ khớp con số synthesis khai.
🔴 F-04 (MED — số không khớp nguồn) — "+9 củng cố" vs END-line "10 cung-co"
review-synthesis.md:25 ghi (+9 củng cố). Nguồn tự mâu thuẫn với chính nó:
sub-review-wave-1.md:12(thân bài) —(+ 9 điểm củng cố)sub-review-wave-1.md:288(END-line) —TOTAL=19 DIEM (6H/8M/5L + 10 cung-co)
⇒ Lỗi GỐC ở lăng kính 1, không phải ở synthesis. Lead chép đúng con số thân-bài (9). Nhưng END-line là khuôn chốt (m#21: END-line có ≥2 khuôn) và nó nói 10. KHÔNG kết luận ai đúng — 2 nguồn cùng file lệch nhau 1 ⇒ propose lead cho đếm lại mục trong ## Điểm CỦNG CỐ (:262) rồi chốt 1 số. Không load-bearing (củng-cố ⟂ FLAG) nhưng là số sai đang lan sang file thứ 2.
⭐ F-05 (HIGH — SUPERSEDED, bắt được vì đo LẠI giữa chừng) — synthesis tự lỗi-thời sau 15 phút do chính phiên này vá
review-synthesis.md:83 khai "Chứng chưa vá: spec-*.md mtime 2026-07-28 11:29 ⇒ spec không bị chạm ở S158" → ĐÚNG lúc 08:26.
Tao đo lần 1 lúc ~08:40 (mtime 07-28T11:29 · 45.158 B) rồi đo lại lúc 08:43:30:
ls -la --time-style=+%Y-%m-%dT%H:%M:%S -> 48.621 B 2026-07-29T08:41:44
git status --porcelain -> M .../spec-ke-hoach-ky-ket-hd-28-07-2026.md (dòng MỚI)
⇒ stage ARC chạy SONG SONG với V1, spec bị vá lúc 08:41:44 — giữa 2 phép đo của tao.
Đối chứng nội dung (đo tươi, sau vá):
| Gap | Synthesis khai (08:26) | Trạng thái NAY (08:43) |
|---|---|---|
H5 spec:353 N thả tự do |
❌ CÒN HỞ | ✅ ĐÓNG — :367 562 + N, N ≥ 6, 0 fail + liệt 6 tên test (vá H5 @S159); site cùng-lớp :289 cũng pin N ≥ 2 + 2 tên test |
| H6 dark-launch 3 site | ❌ CÒN HỞ (:224·:252·:443) |
✅ ĐÓNG 3/3 — :225 "GIẤU MENU Ở W1 = KHÔNG CẤP CanRead, KHÔNG phải IsVisible=0" · :257 bảng wave đổi thành "giấu bằng KHÔNG cấp CanRead" (chữ "dark-launch" gỡ) · :470 đính chính "@S157 chỉ vá 1/3 site" |
⇒ Kết luận §6 của synthesis ("2 điều kiện chưa thoả") NAY SAI — không phải vì viết ẩu, mà vì phiên này đã đóng cả 2. 🔴 Nguy hiểm thật: phiên sau đọc review-synthesis.md sẽ thấy 2 gap MỞ không còn tồn tại ⇒ vá lại chỗ đã vá, hoặc mất niềm tin vào file.
Đề (lead ghi, tao KHÔNG ghi): append 1 dòng vào cuối review-synthesis.md:
> 🔴 SUPERSEDED @S159 08:41 — H5 (:367 pin N≥6, kèm :289 N≥2) + H6 (:225/:257/:470) ĐÃ VÁ trong chính phiên này. §4 và §6 giữ làm sử-ký trạng-thái 08:26, KHÔNG còn là gap-list.
🔸 F-06 (LOW) — cite run.md:206-207 + spec:458 chết vì chính đợt sửa này (m#7 line-shift ×2)
review-synthesis.md:12dẫn "run.md:206-207để[ ]cho S6 và S7". Nay::206=[x]S6,:208=[x]S7 (S6 nở 2 dòng ⇒ S7 dời +1). Cite đúng lúc viết (08:26), lead tick ledger 08:27.HANDOFF.md:8(bề-mặt CANONICAL, đang đóng băng theo Mirror C1) dẫn gate 5-anchor ở "spec:458". Sau vá ARC, dòng đó nằm ở:488(+30). ⇒ cite trong doc bền đã chết, mà HANDOFF thì phiên này CẤM ghi ⇒ ghi nợ sang cửa sau, đừng để rơi.
🧠 m#24 (method MỚI, rút từ F-03 + F-06) — retro-harvest dẫn LEDGER mà nó sắp tick ⇒ tự giết cite trong vài phút
3/3 ca lượt này cùng khuôn: synthesis đọc file X ở phút T, tác giả sửa X ở phút T+1..T+15, cite chết. Không ai bịa cả.
Luật rẻ: khi file được dẫn nằm trong cùng đợt sửa, cite bằng NEO VĂN BẢN (nhãn checkbox / tiêu đề / chuỗi duy nhất) thay vì :NNN; hoặc tick ledger TRƯỚC, viết synthesis SAU, rồi mới lấy số dòng.
🔧 Cập nhật từ lead (nhận giữa lượt): F-04 đã giải —
## Điểm CỦNG CỐ(:262) có đúng 10 mục 1→10 ⇒ END-line ĐÚNG (10), thân bài:12SAI (9); synthesis đã sửa thành 10. Bẫy kèm:grep -i 'củng cố'ra 0 hit vì-ikhông case-fold dấu tiếng Việt (ủ↔Ủ) — cùng họ E-010, ghi vào §5. · F-05: lead tìm thêm site thứ 4 (W2DbInitializer"bậtIsVisible=1") ⇒ H6 = 4 site, không phải 3. Số 3/3 của tao là CẬN DƯỚI, không phải toàn-tập — tao đo bằnggrep "dark-launch|IsVisible=0", site-4 dùng chữ khác nên lọt lưới. Bài: grep-theo-CHUỖI chỉ bắt được site dùng đúng chuỗi đó; muốn toàn-tập phải đọc theo Ý (wave-table + mọi mục W1/W2). Nhận sai, không cãi.
§4 — Delta mồ-côi / diary-0-delta (trục Coverage + Completeness) — nợ của CHÍNH VAI TAO
Mẫu-số (B1, không hardcode)
ls .claude/agents/*.md | wc -l = 24 file − README.md = 23 vai · .claude/agent-memory/*/ = 23 dir, 23/23 có MEMORY.md ⇒ 1:1, 0 vai thiếu nhà ✓.
git status --porcelain = 0 dòng agent-memory/ ⇒ đĩa == commit cuối, không có delta treo chưa commit. Phép đo dưới đây đo nội dung đã chốt, không phải bản nháp.
Thước: KHÔNG đo bằng tên vai — đo bằng NỘI DUNG (anti-pattern #1)
Chứng-cứ-spawn = file sub-<vai>-*.md có thật trong run-folder; chứng-cứ-harvest = số lần mã phiên xuất hiện trong MEMORY.md.
for r in ...; do grep -c "S158" .claude/agent-memory/$r/MEMORY.md; done
| Vai | spawn @S158 (artifact) | S158 trong diary |
last commit diary | Verdict |
|---|---|---|---|---|
| ctx-audit | sub-ctx-audit-close-S158.md |
1 | 07-28T20:50 | ✅ ĐÃ HARVEST |
| harvest-curator (TAO) | sub-harvest-curator-close-S158.md |
0 | 07-26T16:10 | ❌ 0-DELTA |
| tooling-auditor | sub-tooling-auditor-close-S158.md |
0 | 07-26T16:10 | ❌ 0-DELTA |
| lead-gap-auditor | sub-lead-gap-close-S158.md |
0 | 07-26T16:10 | ❌ 0-DELTA |
| lead-stale-auditor | sub-lead-stale-close-S158.md |
0 | 07-26T16:10 | ❌ 0-DELTA |
| ring1-audit | sub-ring1-close-S158.md |
0 | 07-26T16:10 | ❌ 0-DELTA |
| ring2-audit | sub-ring2-close-S158.md |
0 | 07-26T16:10 | ❌ 0-DELTA |
| harness-audit | harness-audit-return.md |
0 | 07-26T16:10 | ❌ 0-DELTA |
| harness-eval | harness-eval-return.md |
0 | 07-26T16:10 | ❌ 0-DELTA |
| harness-refine | harness-refine-return.md |
0 | 07-26T16:10 | ❌ 0-DELTA |
🔴 F-07 (HIGH) — 9/10 vai chạy @S158 có ĐÚNG 0 byte về S158 trong diary
Chỉ ctx-audit thoát. 11 vai cùng đóng băng ở một mốc duy nhất 2026-07-26T16:10 — không phải trùng hợp, đó là 1 commit gom rồi dừng hẳn. Và 11/11 vai đó đều có artifact-spawn SAU mốc đó ⇒ không vai nào "đóng băng vì không chạy". Toàn bộ là nợ thật.
Nợ của chính tao, khai thẳng: harvest-curator/MEMORY.md = 19.456 B (khớp con số HANDOFF slot 48), commit cuối 07-26T16:10, S154=1 nhưng S155=0 · S158=0 · S159=0. Tao chạy @S158-close (artifact tồn tại) và đang chạy @S159 ⇒ ≥1 lượt đã xong mà không để lại gì trong nhà mình. Vai có nhiệm-vụ bắt diary-0-delta chính là vai đang 0-delta — không có lý do bào chữa nào làm nhẹ chỗ này.
Vì sao 2 lần FLAG (S154, S158) mà không đổi: detector đã bắt đúng cả 2 lần. Cái hỏng không phải khâu PHÁT HIỆN mà là khâu APPEND — tao propose-only, lead single-writer; delta tao trả chết nếu lead không APPEND, và khâu đó nằm cuối @close lúc ngân-sách mỏng nhất. FLAG lặp cùng mức ⇒ đọc thành nhiễu.
🔸 F-08 (MED) — nợ này KHÔNG chỉ ở lane bookend
implementer-backend (5 artifact S155: sub-implementer-backend-1/4/5 + -frontend-2/6) → S155=0 ở cả 2 vai implementer. Trong khi cùng run: reviewer S155=3 · cicd-monitor S155=3 · test-specialist S155=1 · investigator-codebase S155=5 ✅.
Giả-thuyết (nhãn rõ: SUY LUẬN, chưa chứng) — delta bị rơi đúng ở vai mà giá trị đã đáp xuống một artifact bền khác: implementer → code trong git; bookend-lane → synthesis trong run-folder. Cảm giác "đã ghi ở đâu đó rồi" ⇒ bỏ APPEND. Nhưng run-folder giữ SỰ KIỆN, diary giữ BÀI HỌC mang sang phiên sau — mất diary = mất đúng thứ không tái tạo được. Phản-chứng nếu có: 1 vai bookend-lane được harvest đều (ctx-audit) ⇒ giả-thuyết chỉ giải-thích xu-hướng, không tuyệt-đối.
🚧 Lối ra — và rào chặn nó ngay trong run này
🔴 Mirror C1 của run.md S159 CẤM ghi agent-memory/ ⇒ KHÔNG thể APPEND trong cửa sổ này. Nếu không làm gì, S159 thành phiên thứ 3 liên tiếp cùng một FLAG.
Đề (lead quyết + ghi, tao KHÔNG ghi):
- PARK ngay, đừng chờ: nguồn harvest đã nằm sẵn trên đĩa git-tracked (7
sub-*-S158.md+ 3*-return.md) — không cần chạy lại vai nào. Gom 4-field{task·verdict·learned·surprise}cho 11 vai vào 1 file trong run-folder này (vdharvest-delta-11-vai.md) ⇒ hợp lệ với C1 (run-folder không bị đóng băng), và delta không bốc hơi. - APPEND ở cửa đầu tiên
agent-memorykhông bị freeze (@close S159 nếu C1 hết hiệu lực, hoặc @open S160) — đọc từ file PARK, không dựng lại từ trí nhớ. - Sửa cách FLAG kêu: C11 nên leo mức khi cùng một vai bị bắt ≥2 phiên liên tiếp (INFORM → BLOCKING). FLAG lặp cùng mức = FLAG bị làm ngơ hợp lệ — đó là cơ chế đã hỏng suốt S154→S159.
- Thứ tự @close: APPEND diary TRƯỚC khi viết synthesis đóng phiên, vì synthesis luôn được ưu tiên còn diary luôn là thứ bị cắt.
§5 — Corruption (trục ④) + chốt 5 trục
🔴 F-09 (MED — lỗi PHƯƠNG PHÁP của chính tao, tự bắt được) — "0 hit" đầu tiên của tao là lệnh CHẾT, không phải kết quả sạch
Sweep đầu tao chạy:
grep -rlP "\xEF\xBF\xBD" --include="*.md" .claude/ 2>/dev/null | head -> (rỗng) -> tao đọc thành "0 hit"
Chạy lại bỏ 2>/dev/null:
grep: -P supports only unibyte and UTF-8 locales <- exit=2, KHÔNG PHẢI exit=1
⇒ -P không chạy được trong locale này; 2>/dev/null nuốt lỗi, | head biến lỗi thành output rỗng, và rỗng trông y hệt sạch. Đúng anti-pattern #2 + #3 mà chính vai tao có nhiệm vụ chặn (bài S152: khai "U+FFFD 0" trong khi grep thật có hit). Suýt tái phạm y nguyên.
Cách đo đúng (đã dùng lại): LC_ALL=C grep -rc $'\xEF\xBF\xBD' --include="*.md" .claude/ | grep -v ":0" — byte-literal, không cần -P.
Luật rút ra: phép đo âm-tính chỉ được tin khi exit code = 1; exit=2 (lỗi) và exit=1 (0 hit) nhìn giống nhau sau khi pipe. CẤM 2>/dev/null trong lệnh dùng để tuyên bố "sạch".
Kết quả corruption THẬT (sau khi sửa phép đo)
| Phép quét | Lệnh | Kết quả | Verdict |
|---|---|---|---|
0-byte (trừ .gitkeep) |
find .claude -type f -size 0 ! -name .gitkeep |
0 | ✅ |
.gitkeep 0-byte |
find .claude/workflows/runs -type f -size 0 |
10 (5 folder H10 legacy × harvest/+sub-md/) |
✅ by-design |
stray .claude depth>1 |
find . -mindepth 2 -type d -name .claude |
0 | ✅ |
| thư-mục rỗng | find .claude -type d -empty |
0 | ✅ |
| file cụt | tail -1 từng MEMORY.md ×23 |
23/23 kết thúc trên dòng hoàn chỉnh | ✅ |
.md < 200 B (skeleton-ruột-rỗng) |
find .claude/agent-memory -name "*.md" -size -200c |
0 | ✅ |
| CRLF lẫn lộn | grep -rlU $'\r' .claude/agent-memory |
10 file | 🔸 lành (Windows), ghi nhận |
$(/${ residue |
grep -rn '\$(|\${' .claude/agent-memory |
16 hit — soi mẫu 6/16 = trích shell/prose trong ghi-chú | 🔸 lành theo mẫu |
| U+FFFD | LC_ALL=C grep -rc $'\xEF\xBF\xBD' |
16 hit / 10 file | 🔸 lành theo lai-lịch |
U+FFFD — khai đúng mức, KHÔNG nói "0": 16 hit/10 file. Tao soi trực tiếp 3/10 file:
harvest-curator/MEMORY.md:53— self-quote"<22>24.1KB"(đuôi artifact bị cắt @S132). S152 ghi hit này ở:48⇒ trôi +5 dòng do diary có append sau đó, cùng một hit, không phải hit mới.cicd-monitor/archive/2026-06.md:26— mojibake được trích làm BẰNG CHỨNG (C<EFBFBD>ng, bài sqlcmd #377).S152/sub-harvest-close-S152.md:160-165— bảng phân loại của chính lượt S152, đã gắn nhãnuse⟂mentioncho từng hit. 7 file còn lại thuộc đúng chuỗi lai-lịch đó (archive của diary tao + 4 file S152 trích lại phép quét). Không file nào mới hơn S152 ⇒ 0 corruption phát sinh ở S153→S159. 🔸 Bẫy đã tránh (S152 ghi sẵn:174):cut -c1-Ntự sinh<EFBFBD>giả khi cắt giữa ký tự multibyte — nên mọi con số trên đếm bằnggrep -ctrên FILE, không trên output đãcut. 🔸 Bẫy thứ 2 (lead nhắc giữa lượt, tao xác nhận):grep -ikhông case-fold dấu tiếng Việt ⇒ mọi phép quét ở đây không dùng-itrên chuỗi có dấu.
Chốt 5 TRỤC
| # | Trục | Bằng chứng | Verdict |
|---|---|---|---|
| ① | Coverage | orphan 0 thật/63 dir có run.md (1 hit = chính run này, IN-PROGRESS) ✅ · nhưng diary: 9/10 vai chạy @S158 có 0 nội-dung S158; 11 vai đóng băng 07-26T16:10, 11/11 đều có artifact-spawn sau mốc đó |
🔴 FAIL |
| ② | Completeness | thiếu spawn-record 4-field cho 11 vai (S155 + S158). Nguồn gom đã có sẵn trên đĩa (7 sub-*-S158.md + 3 *-return.md) ⇒ thiếu khâu APPEND, không thiếu dữ liệu |
🔴 FAIL |
| ③ | Fidelity | 2 file retro-harvest: 12/12 byte-size exact · 8/8 verdict nguyên văn · 3/3 cite của claim (i) khớp đúng số dòng · claim (ii) verify STRONG. Lỗi tìm được đều là mislabel/lệch-cite/số-nguồn-tự-mâu-thuẫn, 0 ca bịa. Lead tự hạ trần claim ở :78 đúng chuẩn G-015 |
🟡 PASS-WITH-FLAGS (F-02·F-04·F-05·F-06) |
| ④ | Placement | 23/23 diary đúng nhà · 0 stray .claude · 0 empty-dir · 0 file cụt · U+FFFD 16 hit lành theo lai-lịch, 0 hit mới sau S152 |
✅ PASS (kèm F-09: phép đo lần 1 hỏng, đã sửa) |
| ⑤ | Fidelity-FLAG (bịa) | KHÔNG escalate reviewer. Không tìm thấy dấu hiệu bịa ở cả 2 file retro; mọi số truy được về artifact cùng folder |
✅ CLEAR |
🔴 GATE: FAIL — vì trục ① + ② hỏng, và đây là phiên thứ 3 cùng một FLAG (S154 · S158 · S159)
Đọc cho đúng, đừng đọc lệch:
- GATE-FAIL KHÔNG phải vì lead bịa. Phần lead nhờ tao chấm (2 file retro-harvest) ĐẠT — nén chặt mà không mất sắc thái, và tự khai giới hạn ở đúng chỗ dễ overclaim nhất.
- GATE-FAIL vì harvest-memory chưa đáp xuống nhà của 11 vai, trong đó có chính vai tao — nợ tồn 3 phiên, detector kêu 2 lần mà không ai bị chặn.
- Đường ra rẻ và không cần chạy lại vai nào: PARK 4-field vào run-folder ngay lượt này (C1 cho phép), APPEND ở cửa đầu tiên
agent-memoryhết đóng băng, và cho C11 leo mức khi lặp ≥2 phiên.