Files
solution-erp/.claude/workflows/runs/2026-08-07-S180-adap-upgrade-pack-phased/sub-n3-lane-c-gd34.md
2026-08-07 14:35:33 +07:00

44 KiB

sub-n3-lane-c-gd34 — LANE C / 6 · GĐ-3 (nghi thức 2 đầu + cổng chặn mã lỗi) · GĐ-4 (sổ yêu cầu chủ dự án + chấm điểm)

  • run: 2026-08-07-S180-adap-upgrade-pack-phased · lane C · vai reviewer (/fable-clone)
  • engine: /fable-clone reviewer · model tự khai: claude-opus-5 · effort max
  • đầu vào ghim đích danh:
    • broadcasts/inbox/ai_infra/2026-08-04-Governance-upgrade-pack-phased-thu-chinh.md §GĐ-3 (:174-191) · §GĐ-4 (:195-214)
    • …-phu-luc-spec-pitfall.md §GĐ-3 (:181-227) · §GĐ-4 (:230-289)
    • …-luat-cham-diem.md TOÀN VĂN (9.970 B, :1-147)
    • …-khuon-fit-map-report-checklist.md Phần C (:228-380)
    • sub-invest-fitmap-S180.md (N1) · sub-review-n2-S180.md (N2) · run.md · spec-…md
  • ranh vai: read-only, propose-only. Không tự chọn phương án ở 2 xung đột — trình phương án + đánh đổi, quyền chọn là của anh.

Trạng thái ghi: file này được đổ ruột trong lúc làm (chống #53). Mục nào chưa đo xong ghi CHƯA ĐO — cần <lệnh>; mục nào đo rồi mà không kết luận được ghi KHÔNG ĐO ĐƯỢC kèm lý do.


§0 — Cách đọc bảng khoản

Mỗi khoản GĐ-3/GĐ-4 được bóc theo đúng đơn vị in đậm của phụ lục (sàn) và bước làm đánh số của thư chính (thi hành). Hai nguồn đánh số LỆCH nhau — N2 F-07b đã bắt N1 giẫm chỗ này. Lane C dùng cặp mã kép: TC3-Lb = thư chính bước b · PL3-(x) = phụ lục khoản (x), và ghi rõ khi hai bên không ánh xạ 1-1.

Trạng thái mỗi khoản: (SE đã có vật tương đương, kèm file:line) · NỬA (có mảnh, thiếu vế) · THIẾU (không có vật) · NGƯỢC (SE có luật/máy chiều ngược) · KHÔNG ĐO ĐƯỢC.


🔴 PHẦN ƯU-TIÊN — 4 mục N4 không chia wave được nếu thiếu

§A — XUNG ĐỘT 1: phạm vi THẬT của doctrine exit-0 (ĐO XONG)

A.1 — Mệnh đề vào vs đo lại

Mệnh đề vào Đo lại hôm nay Kết luận
N1/lead: "SE chỉ có 2 máy fail-loud (session-counter-tick.ps1, h24-signal-write.ps1) + hmw.js checkpoint throw" ĐẾM THIẾU.5 máy trả exit≠0 khi PHÁT HIỆN LỖI (không tính exit≠0 do thiếu hạ tầng), và hmw.js4 chỗ throw chứ không phải 1 🔴 SỬA SỐ — 2 → 5 máy, 1 → 4 throw
lead cite governance-detectors.ps1:1963 dòng thật = :1962 (:1964 = exit 0). N2 F-11.2 đã bắt; lane C xác nhận ĐỘC LẬP bằng sed -n '1955,1964p' N2 đúng, dùng :1962

Vì sao lệch này quan trọng: đề bài trình bày SE như "gần như không có cổng chặn nào" ⇒ mọi phương án hoà giải sẽ bị vẽ như du nhập một cơ chế lạ. Đo lại thì SE đã có sẵn cả hai chế độ, và đã có một ranh giới thành văn. Bài toán đúng vì thế là mở rộng ranh có sẵn, rẻ hơn nhiều so với đổi doctrine.

A.2 — Liệt TỪNG TÊN (17 máy cắm vào cửa lệnh)

Phép đếm: grep -ohE "scripts/[a-z0-9._-]+\.(ps1|py)" .claude/commands/*.md | sort | uniq -c | sort -rn17 tên riêng biệt, 43 lần nhắc. Control-dương: session_ctx.py=8 · nhip-no-probe.ps1=6 · stamp_verify.py=5 ⇒ thước có bắt, không phải 0-hit câm.

Nhóm 1 — FAIL-LOUD: exit≠0 khi PHÁT HIỆN LỖI (5 máy)

# Máy Mã thoát Điều kiện trả mã ≠0 Neo
1 scripts/session-counter-tick.ps1 42, $code counter regression · missing-head :269, :79
2 scripts/h24-signal-write.ps1 2, 3 class ngoài enum-đóng · đầu vào sai khuôn :136,:142,:159,:175,:186,:191,:303,:307
3 scripts/memory-archive-gate.ps1 2 A7 toàn-vẹn con-trỏ: pointer gãy / archive 0-byte :325
4 scripts/session-scaffold.ps1 3, 4, 5 không lấy được đồng hồ · trùng id · đè _context đã có :14,:16,:137-138
5 scripts/stamp_verify.py 1 (2 = sai cú pháp gọi) băm nội dung KHÔNG khớp content_sha256 khai báo :51

Nhóm 2 — EXIT-0-ADVISORY: luôn 0 kể cả khi đầy cờ (9 máy)

# Máy Neo exit 0 Ghi chú
6 scripts/governance-detectors.ps1 :1964 (doctrine :1962) ĐO SỐNG HÔM NAY: TOTAL FLAGS: 49 + INFORM-ONLY: 21 — vẫn exit 0
7 scripts/closeout-sentinel.ps1 :138,:211,:234,:247 verdict đọc bằng DÒNG IN, không bằng mã thoát
8 scripts/nhip-no-probe.ps1 :230 doctrine tự khai :10-11 "exit 0 ALWAYS - a probe MUST NEVER block a stop point"
9 scripts/distill-shard-probe.ps1 :23,:27,:53,:71 thiếu key thì in FAIL-LOUD (khong gia dinh default) nhưng vẫn exit 0 — tên gọi ≠ mã thoát
10 scripts/mfe-eval.ps1 :45,:48,:334 tự khai READ-ONLY on budget; exit 0
11 scripts/spawn-model-audit.ps1 :522 (khai :140) tự khai INFORMATIONAL, exit 0 always
12 scripts/memory-selfimprove-audit.ps1 :346 :220 khai "detector owns the verdict"
13 scripts/agent-frontmatter-eol-check.ps1 :339 :325 khai "Advisory only - exit code stays 0"
14 scripts/crystallized-backfill.ps1 :159,:236 header :32 khai "(7) exit 0 ALWAYS : measure-and-report, NOT a build-gate"

Nhóm 3 — BIÊN (3 máy): exit≠0 CHỈ khi thiếu hạ tầng, không phải khi phát hiện lỗi

# Máy Ghi chú
15 scripts/measure-agent-memory.ps1 1 chỉ khi thiếu thư mục gốc (:7)
16 scripts/applied-eval-nokey.ps1 1 chỉ ở nhánh -Selftest (:346); chạy thường = exit 0 (:362)
17 scripts/session_ctx.py 0 câu sys.exit trong file ⇒ mã thoát mặc định 0 trừ khi tràn ngoại lệ

A.3 — 🔴 PHÁT HIỆN LỚN NHẤT CỦA LANE C: ranh giới ĐÃ TỒN TẠI, SE đã viết thành lời, trong CÙNG MỘT MÁY

scripts/memory-archive-gate.ps1:323-325 — chép nguyên văn, không sửa:

# Exit non-zero only on A7 integrity failure (broken pointer / 0-byte archive).
# Over-cap is a FLAG (not an error) - the gate reports, a human curates.
if ($gateFailPtr -gt 0) { exit 2 } else { exit 0 }

Một máy, hai chế độ, ranh vẽ sẵn:

  • TOÀN VẸN quyết được bằng máy (con trỏ có resolve không · tệp có 0 byte không) ⇒ chặn.
  • PHÁN XÉT cần người (vượt trần bao nhiêu thì nên dọn) ⇒ gắn cờ, không chặn.

Đối chiếu 5 máy fail-loud thì ranh này khớp 5/5 — không phải trùng hợp:

Máy Thuộc loại Vì sao chặn được mà không sợ oan
session-counter-tick sắp GHI trạng thái từ chối ghi một bộ đếm sai — chặn để không tạo dữ liệu hỏng
h24-signal-write sắp GHI trạng thái từ chối ghi một class ngoài enum
session-scaffold sắp GHI trạng thái từ chối đè _context đã có
memory-archive-gate (nhánh A7) toàn vẹn tham chiếu con trỏ resolve hay không — nhị phân, không cãi được
stamp_verify.py toàn vẹn băm băm khớp hay không — nhị phân, không cãi được

Luật ngầm của SE, nay phát biểu thành lời: một máy được phép CHẶN khi (a) nó sắp GHI, hoặc (b) vị từ của nó là nhị phân quyết-được-bằng-máy. Máy chỉ được GẮN CỜ khi vị từ của nó là phán-xét hoặc ước lượng.

Đây chính là câu trả lời cho "ranh vẽ ở đâu", và nó không do lane C bịa ra — nó đã nằm trên đĩa từ S73 (header memory-archive-gate.ps1:1 ghi Harness-11 PART-A (S73, 2026-06-18)).

A.4 — SE có lý-do-kỹ-thuật CHỐNG chặn-mù, nên gửi ngược hub

.claude/workflows/hmw.js4 chỗ throw: :126 (thiếu taskList) · :132 (checkpoint chưa duyệt) · :184 (vai ngoài whitelist) · :209 (sàn danh-nghĩa) — nhiều hơn con số 1 mà đề bài ghi. Quan trọng hơn là 2 chỗ CỐ Ý KHÔNG throw, kèm lý do viết sẵn:

  • hmw.js:166"CHẠY {keptN} lane ĐẦU, BỎ {dropped} lane CUỐI (LOUD-skip, KHÔNG throw — depth-axis:43)"
  • hmw.js:288"🔴 CỐ Ý KHÔNG throw: :124-125 đã khai per-lane throw bị nuốt thành null = STOP-SILENT"
  • hmw.js:178"throw có thể bị nuốt thành null = STOP-SILENT, tệ hơn"

🔴 Phản biện gửi ngược hub, dùng chính lập luận của hub. Hub nói "thuốc căn cơ cho tự-ý là CỔNG CHẶN" (phụ lục :206, khoản (viii)). Nhưng SE đo được một chế-độ-hỏng mà hub chưa liệt: cổng chặn đặt ở nơi mã thoát bị NUỐT thì biến thành DỪNG CÂM, và dừng câm trông giống hệt "chạy xong sạch" với người đọc. Đó đúng là lớp lỗi hub tự đặt tên ở món 4 :98: "nhãn không phản bác được thì không phải phép đo".

Khoản đề xuất gửi ngược (anh duyệt trước khi gửi): thang mã thoát 4 trạng thái của GĐ-3 nên kèm điều kiện tiên quyết — chỉ cắm cổng chặn ở nơi mã thoát CHẮC CHẮN được đọc; nơi mã thoát có thể bị nuốt thì cổng phải là dòng in LOUD thay vì mã thoát. SE có ca thật để dẫn chứng: hmw.js:288.

A.5 — Đánh đổi định lượng, đo sống hôm nay

powershell.exe -ExecutionPolicy Bypass -File scripts/governance-detectors.ps1TOTAL FLAGS: 49 + INFORM-ONLY: 21 (đếm tách riêng, chống-Goodhart) — và vẫn exit 0.

⇒ Lật governance-detectors.ps1 sang chế độ chặn ngay hôm nay = 49 cờ chặn mọi cửa tức thì. Đây là con số phải đặt lên bàn trước khi chọn phương án.

A.6 — 4 PHƯƠNG ÁN HOÀ GIẢI (trình để anh chọn — lane C KHÔNG chọn)

PA-1 — "Kéo dài ranh đã có" (ranh = sắp-GHI hoặc vị-từ-NHỊ-PHÂN)

Áp cổng chặn cho đúng lớp máy đã được phép chặn, mở rộng sang các vị từ nhị phân còn đang advisory. Giữ governance-detectors + closeout-sentinel + 4 probe ở nguyên exit-0.

  • Vào lớp chặn: vị từ tồn-tại-tệp-mốc của nghi thức hai đầu phiên — đúng thứ hub đòi ở nghiệm thu (phụ lục:223 "giả lập thiếu một tệp mốc thì cổng phải trả mã khác không"), vì đó là vị từ nhị phân.
  • Giữ advisory: mọi thứ phán xét — trôi tài liệu, độ phủ, văn phong, vượt trần, phân tầng trích dẫn.
  • Được: không cờ nào trong 49 cờ hiện tại bị lật thành chặn ⇒ chi phí chuyển đổi gần bằng 0; ranh đã có sẵn trên đĩa nên không phải dựng luật mới; khớp đúng chữ hub ở phần nghiệm thu GĐ-3.
  • Mất: không phủ được TC-06 ("tự ý bỏ") ở lớp phán xét — một nghi thức bị bỏ mà không sinh tệp mốc thì vẫn lọt. Hub :206 nói thẳng rằng lời nhắc không phải thuốc.
  • Rủi ro: sinh ra cám dỗ không sinh tệp mốc để khỏi bị cổng bắt — đúng dạng "rời tập-đo" (memory feedback_goodhart_leave_measurement_set). Phải kèm luật cửa nào có nghi thức thì bắt buộc sinh tệp mốc, mà luật đó lại nằm ở lớp advisory ⇒ vòng lặp chưa đóng. Khai thẳng, không giấu.

PA-2 — "Hai mã thoát trong một máy" (tách TOÀN-VẸN ⟂ PHÁN-XÉT ngay trong từng máy)

Nhân bản đúng khuôn memory-archive-gate.ps1:325 sang các máy nghi thức: mỗi máy tự chia cờ của nó làm hai rổ — rổ toàn vẹn lái mã thoát, rổ phán xét chỉ in ra.

  • Được: phủ được cả TC-06 lẫn TC-08 mà không lật 49 cờ (phần lớn 49 cờ rơi vào rổ phán xét); giữ nguyên doctrine "đèn không chặn điểm dừng"; là khuôn SE đã chạy thật từ S73 nên rủi ro thấp.
  • Mất: phải phân loại lại từng cờ trong governance-detectors.ps1 (49 + 21 = 70 cờ) — công việc thật, không nhỏ. Và bản thân việc phân loại chính nó là phán xét, nên phân loại sai sẽ đẻ ra cổng chặn oan.
  • Rủi ro: rổ toàn vẹn phình dần theo thời gian, mỗi lần có người thấy cờ của mình quan trọng — đúng dạng ranh trôi. Cần luật: vào rổ toàn vẹn phải có mã dấu RC của anh, mượn đúng cơ chế ACTIVE-MARKS.md đang sống.

PA-3 — "Thang 4 trạng thái ở DÒNG IN, không ở mã thoát"

Hub đòi phân biệt được bốn trạng thái (phụ lục:200: "Gộp chúng thành một mã là mất thông tin ngay tại chỗ cần nhất"). Đọc kỹ thì yêu cầu cốt lõi là phân biệt được; mã thoát là phương tiện hub chọn. SE đã in dòng verdict khuôn cố định — đó chính là cách closeout-sentinel đang hoạt động ("exit ALWAYS 0, READ verdict-line").

  • Được: không có rủi ro dừng câm (hmw.js:288); tương thích ngược hoàn toàn; làm xong trong một wave; khai với hub là "làm KHÁC, không phải làm thiếu" đúng mục 6 của khuôn báo cáo.
  • Mất: không có răng — đúng thứ hub gọi là lời nhắc, và hub đã tuyên nó không phải thuốc. Ai bỏ qua dòng in thì không có gì chặn lại.
  • Rủi ro: đây là phương án dễ trượt lượt soi chéo của hub nhất. Nếu chọn thì phải khai thẳng và khai trước, kèm bằng chứng hmw.js:288, chứ không im lặng.

PA-4 — "Cửa sau có răng" (chặn ở lượt SAU, không chặn lượt này)

Không chặn cửa đang chạy. Thay vào đó, tiền kiểm ở đầu cửa kế đọc tệp mốc của cửa đã đóng gần nhất; thiếu mốc thì trả mã thoát ≠0 ngay đầu cửa kế. Khớp đúng chữ hub thu-chinh:182 ("tiền kiểm chi phí bằng không, chạy ở đầu mọi cửa, chỉ đọc, soi cửa đã đóng gần nhất") và giữ được TC-07 (anh vắng vẫn thoát phiên được).

  • Được: hoà cả hai phía — cửa dừng không bao giờ bị chặn (TC-07 an toàn, đúng lo ngại của SE), nhưng lệch thì không thoát được vì cửa kế sẽ chặn. SE đã có sẵn đúng cơ chế neo: carrier-commit git log --diff-filter=A -1 -- <marker> (S158, 8/8 resolve) = "dấu thời gian ghi TRONG tệp/lịch sử, không tin mtime của hệ điều hành"trùng khít chữ hub :182.
  • Mất: trễ một nhịp — lệch bị bắt ở phiên sau chứ không phải tại chỗ. Với phiên dài thì độ trễ đáng kể.
  • Rủi ro: anh mở phiên mới và bị chặn ngay ở cửa đầu tiên vì lỗi của phiên trước, tức trải nghiệm xấu đúng lúc anh vừa ngồi xuống. Phải có đường khai suy giảm một dòng để đi tiếp, nếu không thì tự tạo ra một biến thể mới của bệnh TC-07.

Bảng cân nhanh — để anh cân, KHÔNG phải khuyến nghị:

phủ TC-06 rủi ro dừng câm chi phí chuyển lật 49 cờ? rủi ro trượt lượt soi hub
PA-1 thấp rất thấp rất thấp không trung bình
PA-2 cao thấp cao (phân loại 70 cờ) không thấp
PA-3 rất thấp không có rất thấp không cao
PA-4 cao thấp trung bình không thấp

🔴 Lane C KHÔNG chọn. Cả bốn phương án đều thi hành được; chọn cái nào là một quyết định cơ chế, tức quyền anh (nguyên tắc SE: đổi cơ chế = quyền anh, memory feedback_derived_flush_execution).


§B — XUNG ĐỘT 2: sổ-là-đường-ghi-chính ⟂ sàn-3 cấm-nguồn-đôi (ĐO XONG)

B.1 — Đo lại hai vế của xung đột

Vế hubluat-cham-diem:63: "Cuốn sổ là đường ghi chính, vì nó được ghi ngay trong lượt trao đổi." Nằm trong mục Nguồn đếm, và khối chữ ký :140 liệt phạm vi đã ký gồm "nguồn đếm" ⇒ câu này thuộc phần BẤT BIẾN, không phải hình thức đổi được. N2 F-08 đã bắt đúng chỗ này.

Vế SE — đo lại nguyên văn hôm nay, cả hai bản còn sống:

  • tiep.md:181: "🔴 Checklist = VIEW derive tươi — CẤM tạo file checklist nguồn-đôi (sàn-3)."
  • pause.md:117: cùng câu, trong khối MASTER-CHECKLIST rút-gọn (S138).

B.2 — 🔴 Đọc kỹ phạm vi của luật SE: nó hẹp hơn N1/N2 đang giả định

Luật SE cấm "file checklist nguồn-đôi". Chủ ngữ là checklist — một khung nhìn dẫn xuất về trạng thái việc. Câu trước nó (tiep.md:179-180) định nghĩa rõ checklist gồm gì: vừa-xong · vẫn-treo · chờ-anh, tất cả derive từ WAL đã reconcile + HANDOFF.

Luật này KHÔNG phải lệnh cấm chung cho mọi artifact mới. Nó cấm đúng một hình: dựng một tệp lưu trạng-thái-việc song song với WAL. Một cuốn sổ lưu lời anh đã nói không phải checklist, vì lời nói không derive được từ WAL — WAL chưa bao giờ giữ chúng.

Điều này thu hẹp xung đột lại rất nhiều: xung đột chỉ xảy ra ở ĐÚNG MỘT CỘT — cột trạng thái mà hub đòi trong khối việc-được-giao (phụ lục:240). Mọi cột khác của sổ đều rơi vào vùng trống thật.

B.3 — Đo "chỗ nào thật sự trống": bảng phủ 4 kho hiện có

Đo trực tiếp trên đĩa hôm nay:

Thứ hub đòi sổ giữ .claude/WAL.md docs/HANDOFF.md _context-s-<N>.md .claude/auto-memory/*.md Kết luận
mạch việc [x]/[!]/[ ] NGUỒN (khối chain:) hub không đòi — không đụng nhau
lời anh NGUYÊN VĂN (khối goal/next/verify là chữ lead) CÓ THẬT — bảng 2 cột Nguyên văn | Lead thi-hành (:10-17) (tiêu đề là nhãn-đội) 🟡 có mảnh, nhưng bị ghi đè mỗi phiên
mã định danh VĨNH VIỄN 🔴 NGƯỢC — đánh số 1..7tái dụng mỗi phiên (slug theo chủ đề, không theo lượt nói) TRỐNG THẬT
số lần đã nhắc TRỐNG HOÀN TOÀN
khối sở-thích-thường-trực 🟡nội dung (61 tệp) nhưng là nhãn-đội + Why/How, không nguyên văn, không mã, không liệt lằn-ranh-đỏ TRỐNG ở dạng hub đòi
khối lời-phàn-nàn TRỐNG HOÀN TOÀN — N1 đo grep "sở-thích|phàn nàn" = 0, N2 tái lập tách vế, đứng
trạng thái mở/đóng của một YÊU CẦU 🟡 gián tiếp qua task 🟡 cột Lead thi-hành 🔴 ĐÂY LÀ CHỖ DUY NHẤT ĐỤNG

Đếm kèm lệnh: ls -1 .claude/auto-memory/*.md | wc -l = 61 (khớp N1, đề-bài-lead ghi 60 — N2 đã bắt).

Trả lời thẳng câu hỏi cốt lõi: CÓ chỗ thật sự trống, và trống nhiều. Bốn trong bảy hàng trên không có bất kỳ kho nào giữ. Sổ-3-khối không phải bản sao thứ hai của thứ gì cả — trừ đúng một cột.

B.4 — 🔴 Bằng chứng SE ĐÃ TRẢ GIÁ cho đúng cái hub cảnh báo

Hub phụ lục:246, khoản (ii): "Mã định danh vĩnh viễn, cấm tái sử dụng... Bài học đã trả giá: nhãn thứ tự bị dùng lại làm gãy mọi chỗ trích dẫn chéo tới nhãn đó."

SE có đúng ca đó, đã ghi vào ký ức: memory feedback_absence_looks_like_clean"slot-index tái-dụng xoá IM-LẶNG (mất uỷ-quyền owner, hỏi lại 3 lượt)". Và cấu trúc gây bệnh vẫn đang chạy hôm nay: bảng HANDOFF:10-17 đánh số 1..7 rồi phiên sau đánh lại từ 1.

⇒ Đây không phải "adopt một luật lạ của hub". Đây là vá một vết SE đã chảy máu, bằng đúng liều thuốc hub kê. Ghi vào báo cáo là hội tụ độc lập, không phải sao chép.

B.5 — Ba phương án vẽ ranh (trình để anh chọn — lane C KHÔNG chọn)

PB-1 — "Sổ giữ LỜI, WAL giữ VIỆC; cột trạng thái của sổ là VIEW"

Sổ là nguồn duy nhất cho: lời nguyên văn · mã vĩnh viễn · thời điểm · số lần nhắc · sở thích · phàn nàn. Cột trạng thái của sổ không tự lưu, mà derive từ con trỏ tới WAL/todo (đúng khuôn tiep.md:181 đang bắt checklist làm).

  • Được: không vi phạm một chữ nào của sàn-3 — vì phần derive vẫn derive, phần lưu là phần WAL chưa bao giờ có. Giữ trọn "sổ là đường ghi chính" cho nguồn đếm chấm điểm (mà công thức chỉ cần mục bị lặp, không cần trạng thái).
  • Mất: lượt dò 0-phí phải đọc 2 tệp (sổ + WAL) mới trả được số "đang treo" ⇒ máy dò phức tạp hơn, và hỏng một trong hai thì số sai — phải in dò lỗi, không chặn đúng luật đèn nợ.
  • Rủi ro: con trỏ sổ→WAL gãy khi WAL bị squash. Nhưng SE đã có thuốc: neo bằng carrier-commit (git log --diff-filter=A -1 -- <marker>, S158, 8/8 resolve, sống-sau-squash by construction).

PB-2 — "Sổ giữ REQUEST, WAL giữ TASK — hai tầng khác nhau, cả hai đều là nguồn"

Tuyên minh bạch rằng đây là hai đại lượng khác nhau, không phải hai bản sao: yêu cầu của anh (REQUEST, sống xuyên phiên, đóng khi anh hài lòng) ⟂ việc phải làm (TASK, sống trong mạch, đóng khi code chạy). Một REQUEST đẻ ra N TASK.

  • Được: đơn giản nhất để thi công và để đọc; máy dò chỉ đọc một tệp ⇒ đúng chữ hub "lượt dò không tốn phí"; hợp với thực tế là một câu anh nói thường đẻ nhiều task.
  • Mất: phải sửa phạm vi luật đã ratify — bổ sung một câu vào tiep.md:181 + pause.md:117 kiểu "sàn-3 cấm nguồn-đôi cho trạng-thái-việc; sổ yêu cầu ở tầng REQUEST không thuộc phạm vi cấm". Sửa luật đã ratify = quyền anh, không phải việc lead tự làm.
  • Rủi ro: mở một ngoại lệ vào sàn-3 thì lần sau ai cũng viện được. Cần đóng khung bằng liệt kê, không bằng tính từ (đúng bài học A6 của chính hub): ghi thẳng "ngoại lệ áp cho ĐÚNG tệp <đường-dẫn-sổ>, không cho tệp nào khác".

PB-3 — "Không đẻ tệp mới — mở rộng HANDOFF thành sổ"

Không dựng artifact mới. Nâng cấp chính bảng HANDOFF:10-17 (vốn đã đúng hình 2 cột nguyên-văn ⟂ thi-hành) thành sổ: đổi số 1..7 thành mã vĩnh viễn, thêm cột số lần nhắc, thêm hai khối sở thíchphàn nàn, và ngừng ghi đè mỗi phiên (append-only).

  • Được: 0 tệp mới ⇒ 0 nguy cơ nguồn-đôi theo định nghĩa; tận dụng cấu trúc SE tự nghĩ ra và đã chứng minh có tác dụng (B.4); không phải động vào luật ratify nào.
  • Mất: phá vỡ hợp đồng của HANDOFF — memory feedback_status_handoff_tiering ghi rõ HANDOFF phải "giữ lean (current + 2-3 session)". Một cuốn sổ append-only vĩnh viễn thì không lean được, và HANDOFF là tệp brief 5 phút được đọc mỗi phiên ⇒ phình sẽ trả giá ở mọi phiên.
  • Rủi ro: trộn hai mục đích vào một tệp (brief-để-đọc ⟂ sổ-để-tra) là đúng dạng lỗi mà chính SE đã tách ra ở tiering. Có thể cứu bằng HANDOFF giữ 3 phiên gần nhất, phần cũ đẩy sang archive có _INDEX — nhưng thế là quay lại đẻ tệp, tức PB-1/PB-2 trá hình. Khai thẳng chỗ này.

Bảng cân nhanh:

phạm luật ratify? số tệp máy dò phải đọc phình HANDOFF? giữ được "đường ghi chính"?
PB-1 không 2 không có (cho nguồn đếm)
PB-2 có — cần anh sửa luật 1 không có, trọn vẹn
PB-3 không 1 có, nhưng đổi bằng độ lean

🔴 Lane C KHÔNG chọn. Cả ba đều thi hành được. PB-2 đòi anh sửa một luật đã ratify nên nó là quyết định của anh theo đúng nghĩa hẹp nhất; PB-1 và PB-3 không đòi sửa luật nhưng đều có giá phải trả đã ghi ở trên.

B.6 — Điều-kiện-vào bắt buộc cho wave W4 (khớp N2 F-10, lane C xác nhận độc lập)

W4 không được thi công trước khi anh chốt một trong ba phương án B.5. Lý do đo được: cả ba phương án cho ra cấu trúc tệp khác nhau (PB-1 có cột con-trỏ, PB-2 không, PB-3 không có tệp mới) ⇒ thi công trước rồi chốt sau nghĩa là làm lại từ đầu.


§C — BẪY A1 / GĐ-4-bẫy-5: SE có mắc không? (ĐO XONG — kết luận NGƯỢC với gợi ý của đề bài)

C.1 — Chữ của bẫy, chép nguyên văn

  • phụ lục GĐ-4 bẫy-5 (:274): "Cấm đổ hàng loạt 'nhãn của đội' vào cột dành cho 'lời chủ dự án'. Đó là tiêm diễn giải vào đúng cột cấm diễn giải, và tạo sẵn một loạt mục sẽ trượt khi đối chiếu. Cách đúng là đưa chúng vào một phụ lục riêng."
  • Phần C A1 (:278): "Dấu hiệu adapt thiếu, đã xảy ra thật ở hub: đổ hàng loạt khoản việc từ một sổ nội bộ sang cột lời nguyên văn."

Cơ chế của bẫy, tách rạch ròi: ô nhiễm cột nguyên văn bằng chữ do đội đặt ⇒ khi đối chiếu ngược với bản ghi hội thoại, các mục đó trượt vì anh chưa từng nói câu ấy.

C.2 — Ca sống đề bài đưa: docs/HANDOFF.md:17

Đo tận nơi. Bảng HANDOFF:10-17đúng hai cột: | # | Nguyên văn | Lead thi-hành |. Dòng 5 (:17) nguyên văn trên đĩa:

Cột Nội dung thật
# 5
Nguyên văn *"5 -> OK"*
Lead thi-hành "🔴 lead tự thu-hẹp thành "ghi-nhận, CHƯA phải lệnh đổi số" ⇒ giữ hmw_width.cap=20. Diễn-giải của lead, không phải chữ của anh — nếu anh ý là "nâng đi" thì nói lại, đừng để lead phán hộ"

C.3 — 🔴 KẾT LUẬN: KHÔNG phải bẫy này. Và lane C từ chối gật theo đề bài.

Ba lý do đo được, không phải lý luận:

  1. Cột nguyên văn SẠCH. Ô chứa đúng bốn ký tự anh gõ: 5 -> OK. Không một chữ nào của đội lọt vào. Bẫy A1 đòi hỏi ô nhiễm cột nguyên văn — điều kiện này không thoả.
  2. Diễn giải nằm ở cột ĐƯỢC PHÉP diễn giải. Cột thứ hai tên là Lead thi-hành, tồn tại đúng để chứa hành động của đội. Hub gọi cách đúng là "đưa chúng vào một phụ lục riêng" — SE đã làm mạnh hơn: không phải phụ lục ở cuối tệp, mà là cột kề bên, đọc song song được.
  3. Việc thu hẹp đã được TỰ KHAI, ngay trong ô, bằng chữ đỏ. Câu "Diễn-giải của lead, không phải chữ của anh — nếu anh ý là 'nâng đi' thì nói lại, đừng để lead phán hộ" là một lời khai suy giảm, đúng nhãn suy-giảm-hợp-lệ của GĐ-3 (phụ lục:191: "đặc tả cho phép và đã khai đủ bằng chứng. Không tính lỗi").

⇒ Nếu chấm theo đúng thang bốn nhãn của hub, ca HANDOFF:17suy-giảm-hợp-lệ, không phải tự ý bỏ, và không phải bẫy A1.

C.4 — Nhưng đây MỚI là điều đáng lo, và nó ngược chiều: khuôn sổ của hub KHÔNG bắt được ca này

Khối việc-được-giao của hub (phụ lục:240) có đúng sáu trường: mã · lời nguyên văn · thời điểm và phiên · trạng thái · số lần đã nhắc · con trỏ.

Không có trường nào cho "đội đã hiểu lệnh này thành gì".

⇒ Nếu SE dựng sổ đúng y khuôn hub, dòng cho ca này sẽ là: mã · "5 -> OK" · S179 · đang-mở · 1 lần · <con trỏ>. Toàn bộ phần lead tự thu hẹp phạm vi lệnh — tức đúng cái sai thật sự đã xảy rabốc hơi khỏi sổ.

🔴 Đây là một khoản SE làm MẠNH HƠN hub, có bằng chứng trên đĩa, và nên gửi ngược hub (mục 6 + mục 8 của khuôn báo cáo): khối việc-được-giao cần thêm một trường thứ bảy — "đội hiểu thành gì" — đặt cạnh cột nguyên văn. Thiếu trường này thì lớp lỗi "đội thu hẹp phạm vi lệnh mà không hỏi lại" không có chỗ nào để lộ ra, trong khi nó khác hẳn lớp lỗi "quên làm". SE có ca thật để dẫn: docs/HANDOFF.md:17.

C.5 — Chỗ SE SẼ mắc bẫy A1 nếu thi công W4 theo bản đồ N1 (xác nhận N2 F-04, đo thêm)

N1 (sub-invest-fitmap-S180.md:120) liệt nguyên liệu cho sổ: "việc-được-giao → WAL chain + HANDOFF + docs/changelog/migration-todos.md; sở-thích → 61 file auto-memory".

Đo: .claude/auto-memory/*.md = 61 tệp, và tiêu đề của chúng là nhãn do đội đặt — ví dụ đọc thẳng từ chỉ mục: "Máy rộng, UI hẹp" · "Vắng-mặt trông giống ổn" · "Claim mạnh hơn việc đã làm" · "Dry-run bắt lời-hứa-chưa-land". Không câu nào trong số đó là chữ anh gõ; chúng là chữ lead đúc ra để gợi nhớ.

⇒ Đổ 61 tiêu đề này vào cột lời nguyên văn = mắc bẫy A1 chính xác từng chi tiết, và tạo sẵn 61 mục sẽ trượt khi đối chiếu ngược. Tương tự với WAL.md (khối chain: toàn chữ lead) và migration-todos.md.

Acceptance bắt buộc cho spec W4 (trùng N2 F-04, lane C xác nhận và siết thêm):

  1. Cột lời nguyên văn chỉ nhận chữ anh gõ, và chỉ từ thời điểm dựng sổ trở đi.
  2. Dữ liệu cũ từ WAL / HANDOFF / auto-memory / migration-todos vào phụ lục riêng của sổ, cột riêng, nhãn rõ là suy ra, không phải nguyên văn.
  3. Ngoại lệ duy nhất được đề xuất: bảng HANDOFF:10-17 — vì cột Nguyên văn của nó đã là nguyên văn thật (kiểm được bằng đối chiếu bản ghi phiên). Nhập bảng này thì hợp lệ; nhập bất cứ thứ gì khác thì không. 🔴 Đây là đề xuất, cần anh gật — vì nó là ngoại lệ đầu tiên và mọi ngoại lệ sau sẽ viện nó.

§D — SỔ-3-KHỐI: hình dạng đề xuất (khối nào · ghi gì · AI ghi · ghi LÚC NÀO)

Đây là bản vẽ đề xuất, không phải bản thi công. Hình dạng cuối phụ thuộc anh chọn PB-1/PB-2/PB-3 ở §B.5 — cột trạng thái và cột con trỏ đổi theo phương án.

D.1 — Ba khối, đúng tên hub quy ước (A1 đòi "ba tiêu đề khối tồn tại")

Khối 1 — việc-được-giao

Trường Nội dung Ai ghi Lúc nào
YC-<số tăng dần>vĩnh viễn, cấm tái dụng; đóng thì lật trạng thái, không xoá dòng lead ngay lượt anh nói
lời nguyên văn đúng chữ anh gõ, cắt theo trần ký tự cứng đọc từ tệp cấu hình chung lead ngay lượt anh nói
thời điểm · phiên dấu thời gian + S<N> lead cùng lúc
trạng thái mở / đóng — hình dạng tuỳ phương án §B.5 lead lật lúc đóng
số lần đã nhắc số nguyên, lần đầu tính là 1 lead ghi 1; vai đọc sổ tăng tăng khi vai đọc sổ nhận ra trùng nghĩa
con trỏ trỏ tới nơi việc đang nằm (WAL / run-folder / commit) lead khi việc được nhận
🔴 đội hiểu thành gì (trường thứ 7 — SE thêm, xem §C.4) diễn giải của lead, tách hẳn khỏi cột nguyên văn lead ngay khi lead diễn giải

Khối 2 — sở-thích-thường-trực

Trường Nội dung Ai ghi Lúc nào
ST-<số> vĩnh viễn lead khi anh phát biểu một sở thích
lời nguyên văn chữ anh gõ lead ngay lượt đó
phạm vi được làm thẳng liệt kê loại việc lead cùng lúc
lằn ranh đỏ vẫn phải hỏi 🔴 LIỆT KÊ TỪNG LOẠI, cấm tính từ (A6) lead cùng lúc
lý do anh đã lường trước ghi nếu anh có nói lead cùng lúc
thời điểm · trạng thái lead

Hai mục mồi bắt buộc (hub thu-chinh:201; nghiệm thu đòi grep -c '<tiền-tố>' <sổ> ≥ 2):

  • ST-001 — cho phép làm thẳng trong phạm vi việc thường ngày. Lằn ranh đỏ đề xuất, liệt từng loại — SE có sẵn nguyên liệu, không phải bịa: đổi lược đồ dữ liệu (migration) · xoá dữ liệu · việc hướng ra ngoài (email/broadcast/adap-report) · việc không lùi được (deploy prod, wipe) · việc dính tiền · đổi cơ chế governance (SE-đặc-thù, feedback_derived_flush_execution) · đổi con số nhịp/ngân sách (SE-đặc-thù, quyền anh).
  • ST-002 — cho phép tự trị khi anh vắng. 🔴 Nội dung phải là luật ba bậc của GĐ-3 — xem §E.3, và xem cảnh báo nguồn-đôi ở §F.2.

Khối 3 — lời-phàn-nàn

Trường Nội dung Ai ghi Lúc nào
PN-<số> vĩnh viễn lead ngay lượt anh phàn nàn
lời nguyên văn chữ anh gõ lead ngay lượt đó
chủ đề gộp nhãn gộp để đếm lặp vai đọc sổ cuối phiên
thời điểm · phiên lead ngay lượt đó
số lần lặp vai đọc sổ cuối phiên

Đo trạng thái SE hôm nay cho khối 3: grep -rln "sở-thích\|phàn nàn" .claude/commands/ docs/governance/*.md = 0 hit (N1 đo, N2 tái lập tách vế bằng ripgrep, control-dương "điểm dừng" = 5 tệp — N2 sửa số control của N1 từ 3 lên 5). ⇒ khối này SE trống tuyệt đối, không có gì để migrate, dựng mới hoàn toàn.

D.2 — AI ghi: phân vai đề xuất, và chỗ nó đụng roster

Việc Vai SE đã có vai chưa?
ghi NGAY lời anh vào khối 1/2/3 lead (em-main) có — nhưng kỷ luật chưa thành văn, phải cắm vào tệp luôn nạp (§D.3)
tăng số lần nhắc · gộp chủ đề phàn nàn · đếm độc lập tầng 2 vai đọc sổ — 4 thấu kính CHƯA CÓ — đẻ vai mới ⇒ VƯỢT-KHUNG (đụng roster + hmw.js VALID_ROLES + GĐ-6 điều-kiện-vào-danh-sách trọn-gói-1-commit)
kiểm PHÉP ĐẾM ở tầng 3, cấm đề xuất điểm khác vai soi vai 🟡 SE có họ hàng gần: ring2-audit (soi lại vai kiểm) + cặp lead-stale-auditor/lead-gap-auditor. Gán thêm nhiệm vụ hay đẻ vai mới = quyền anh
quyết điểm cuối (tầng 4) anh

🔴 Khoản "thu hẹp vai cũ cùng lượt" (hub thu-chinh:206): phải đo xem vai nào của SE đang soi phần yêu cầu của anh. CHƯA ĐO — cần: grep -rln "yêu cầu của anh\|owner-request\|lời anh" .claude/agents/*.md kèm control-dương. Nếu có chồng lấn thì phải chuyển giao trong cùng một lượt và ghi rõ phần đã chuyển.

D.3 — Ghi LÚC NÀO: hai kỷ luật, và chỗ cắm phải đúng

Hub phụ lục:252 cấm rất rõ: "Cấm cắm vào tệp lệnh của một cửa: tệp lệnh chỉ được đọc khi tới cửa, nên cắm ở đó là chấp nhận mất mọi câu nói giữa hai cửa."

Chỗ cắm hợp lệ của SE — đo được, có hai ứng viên:

Ứng viên Có luôn được nạp mỗi lượt không? Bằng chứng
CLAUDE.md (gốc repo) tự khai "project instructions, checked into the codebase", nạp mọi lượt
.claude/auto-memory/MEMORY.md tự khai "user's auto-memory, persists across conversations", nạp mọi lượt
.claude/commands/*.md CẤM đúng thứ hub cấm — chỉ đọc khi tới cửa

⇒ Hai kỷ luật (ghi NGAY · tra sổ TRƯỚC khi hỏi) phải cắm vào một trong hai tệp trên. A3 còn đòi tìm được luật tra-sổtối thiểu hai chỗ: tệp luôn nạp tài liệu hướng dẫn nội bộ của đội (SE: docs/rules.md).

Định nghĩa A5 phải viết kèm, không được ghi chung chung (hub Phần C:300): hỏi lại mà không viện dẫn được thông tin mới nào là vi phạm; hỏi lại kèm thông tin mới và trích được nguồn là kỷ luật đúng. SE có họ hàng nhưng chưa thành văn — N1 khai grep "viện dẫn" auto-memory = 0 hit, N2 tái lập bằng ripgrep, control-dương How to apply = 48/61 tệp ⇒ 0-hit này đứng.


§E — GĐ-3: ba món N1 nêu thiếu — bóc từng món, và SE dựng thế nào cho khớp nghi thức hai đầu đang chạy

E.1 — Món 1: bốn nhãn, mỗi nhãn một vị từ kiểm được trên đĩa

Chữ hub (phụ lục:189-192), bóc thành bốn dòng:

Nhãn Định nghĩa hub Vị từ đĩa đề xuất cho SE SE đã có mảnh nào?
quên không có dấu vết ý định nào tệp mốc của bước vắng không có dòng khai nào trỏ tới bước đó 🟡 closeout-sentinel M5 bắt "audit đo rồi như chưa đo"
tự ý bỏ bỏ mà không khai, hoặc khai "bỏ êm" trong khi điều kiện cho phép bỏ đánh giá lại trên đĩa là sai tệp mốc vắng có dòng khai bỏ, phép kiểm điều kiện chạy lại ra sai vế thứ hai (đánh giá lại điều kiện) chưa có máy nào làm
suy giảm hợp lệ đặc tả cho phép đã khai đủ bằng chứng có dòng khai + con trỏ tới đặc tả cho phép CÓ VĂN HOÁ MẠNHnhip-no in probe-loi (khong chan) · khối ERRATA trong WAL (3 ERRATA lead tự khai @S180) · HANDOFF:17 (§C.3)
bị chặn điều kiện bên ngoài, có bằng chứng đã tìm cách gỡ có dòng khai + con trỏ tới nỗ lực gỡ 🟡 có văn hoá, chưa có khuôn

🔴 Chỗ SE giàu hơn nhưng KHÁC TRỤC — phải khai, không được nhận vơ: SE có taxonomy AS-signature 20 mã trong error-ledger. Nhưng đó là chữ ký hành động (làm gì sai), còn bốn nhãn của hub là nhãn ý định (vì sao lệch). Hai trục không thay thế nhau. Ánh xạ được một phần: quênE-011/AS-15 (nghi thức chạy tắt). ⇒ dựng bốn nhãn là việc mới, không phải đổi tên cái cũ.

Cách dựng khớp nghi thức hai đầu đang chạy: bốn nhãn là giá trị của một cột trong bảng vòng-hỏi-ngược (§E.2), và cặp lead-stale-auditor + lead-gap-auditor — vốn đã spawn vô điều kiện ở cả hai đầu (session-start.md:269 + session-end.md:119) — là chỗ tự nhiên để sinh ra bảng đó. Không cần đẻ vai mới cho món này.

E.2 — Món 2: vòng hỏi ngược, đóng khi không còn dòng trống

Chữ hub (phụ lục:196): bảng năm cột — bước thiếu hoặc lệch · đặc tả nói gì · bằng chứng trên đĩa · nhãn nào · câu hỏi đích danh; người điều phối định đoạt từng dòng; không dòng nào trống thì mới đóng được.

  • SE đã có gần nhất: bảng disposition từng dòng (memory feedback_meta_count_selfcoverage_blindspot — bài học S119: "'vá 19 finding' khi thật 23 = con số đóng vai đã-phủ-hết ⇒ bảng disposition TỪNG DÒNG thay số tổng"). 🔴 Đây là hội tụ độc lập rất mạnh: luật đóng của hub (không dòng nào trống) và bài học S119 của SE (từng dòng, không dùng số tổng) là cùng một phát hiện, tìm ra ở hai nơi khác nhau.
  • SE thiếu: khuôn năm cột cố định + luật đóng cơ khí hoá. Hiện là nghi thức, chưa có máy.
  • Cách dựng khớp: cột đặc tả nói gì phải trỏ chính tệp lệnh của cửa đó (hub :194 ràng: nguồn đối chiếu là đặc tả trong tệp lệnh, và đặc tả tự mâu thuẫn thì gắn cờ xung đột trả người điều phối, cấm tự phán). SE có tiền lệ đúng luật này: memory feedback_edit_must_predate_review ghi "spec tự-mâu-thuẫn → fix-mới thắng footer-cũ + khai trong report" — tức SE đã từng gặp và đã xử đúng hướng.

E.3 — Món 3: thang mã thoát bốn trạng thái

Chữ hub (phụ lục:200): trọn · thiếu-có-tên · không-xác-định · đặc-tả-xung-đột; "Gộp chúng thành một mã là mất thông tin ngay tại chỗ cần nhất."

  • SE đo được: thang này không tồn tại ở bất kỳ máy nào. Nhưng §A.2 cho thấy SE đã có sẵn mã thoát phân biệt ở nhóm fail-loud: h24-signal-write dùng 2 và 3 cho hai loại lỗi khác nhau; session-scaffold dùng 3/4/5 cho ba nguyên nhân khác nhau; session-counter-tick dùng 42. ⇒ văn hoá mã-thoát-có-nghĩa đã có, chỉ chưa chuẩn hoá thành một thang chung.
  • Cách dựng khớp: thang bốn trạng thái này là thứ phụ thuộc trực tiếp vào phương án anh chọn ở §A.6. Với PA-3 thì thang nằm ở dòng in; với PA-1/PA-2/PA-4 thì nằm ở mã thoát. 🔴 Không thi công món này trước khi anh chốt §A.6 — làm trước là làm lại.

E.4 — Ba món khác của GĐ-3 mà N1 không liệt vào nhóm thiếu, lane C bổ sung

  • PL3-(vii) guard vắng tệp phải là vị từ máy — N2 F-07a đã bắt N1 bỏ sót. Lane C xác nhận và bổ sung: SE giàu vị từ đĩa, đây là khoản dễ khai tương đương (Test-Path rải khắp; distill-shard-probe.ps1:23 là mẫu chuẩn: "khong thay memory-budget.json -> probe-loi (khong chan)").
  • TC3-L8 trần chi phí cho cửa hay dùng — SE KHÔNG ĐO ĐƯỢC (khớp TC-10 của chính hub). Doctrine SE: "đo BYTE, CẤM quy token" (S158). Nếu adopt thì trần = hướng dẫn + nghĩa vụ khai khi vượt, đúng chữ hub :185 ("Không có dụng cụ đo thì khai KHÔNG ĐO ĐƯỢC, đừng in số bịa").
  • TC3-L5 tiền kiểm ở đầu MỌI cửa — hub đòi liệt kê từng cửa, cấm ghi gộp. N1 mới chắc ở /tiep + /session-start. CHƯA ĐO cho /check-email, /adap-apply, /adap-report, /pause, /session-end — cần: grep -n "probe\|Sàn-3\|san-3\|nhip-no" .claude/commands/check-email.md .claude/commands/adap-apply.md .claude/commands/adap-report.md.