Nghi-thức mở phiên chạy trọn một lượt sau khi owner bắt lỗi lead dừng ở BƯỚC 0.7(b)
hỏi consent trong khi PN-001/YC-026/YC-027 đã chốt từ lượt trước (→ PN-002, YC-027 nhắc 1→2).
Vòng @open — 12 vai, 8/12 lượt return dính #53, 0 byte mất (artifact-first vào LỆNH GỐC):
- V1 tooling PASS_WITH_FLAGS-7 + harvest GATE-FAIL-5 → ring1 26Đ/4T/6KC trên 36 claim
- V2 stale 11 FLAG + gap 7 FLAG (deep) → ring2 7Đ/3T/14KC trên 24, enum-gate 18/18
- V3 trio eval MIXED 38-trục/13-REGRESSION → refine 2-action/16-BÁC → audit 24Đ/7T/4KC (98 số byte-exact)
- V4 shard IM ⇒ NO-OP có khai · V5 detector 58+26 INFORM
- Khối chấm điểm → KHÔNG ĐO ĐƯỢC (A8 cấm in điểm; tầng-3 bác phép đếm tầng-2, tầng-1 0 lỗi)
- Phase 3.5 _mind-s-15 block-0 qua mind-check 10/0 → ctx-audit TRUOT 5 FLAG
Vá bề mặt (đều do đội bắt, lead đo lại từng cái):
- CLAUDE.md:77 KHKK 69,71 → 69,71,72 (ring1 phán ef-core-migration/SKILL.md là DƯƠNG-GIẢ ⇒ 1 chỗ là đủ)
- contract-workflow/SKILL.md: "cầu KHKK→HĐ (W5) chưa làm" → ĐÃ LÀM b275893c; giữ vế liên-danh N-HĐ còn nợ THẬT
- WAL: gỡ cụm gộp *conversation tiếp tục* với *phiên-LOGIC chưa khép* (_end L14, 6 bề mặt chọi 1); C5 39/40 OK
- HANDOFF: lật 3 mục NEXT-em đã land ef1d4fbb (harvest-curator 21.308 · reviewer 85,7% · measured 30 row 29/29)
- error-ledger +2 RCA: SCORE-T2-S189 (tầng-2 sai L1+L2) · H24-RESET-S189 (máy gộp đo-ra-0 với không-đo-được)
- tally H24 18 class nấc deep ⇒ deep 1/1 OVERDUE → 0/1 ok; orphan run-folder 0
Load-bearing: ring5 = 0 hit session-start.md ⇒ guard RCA ONESHOT-S188 không fire được ở cửa MỞ ·
YC-027 land 2/4 cửa (tiep/pause = 0) ⇒ cần phép kiểm ĐỦ-CỬA · byte⟂ký-tự: theo ký-tự 0/29 vai
vượt (max 96,5%) ⇒ cảnh báo "2 over-cap" kêu oan (câu 76) · CẤM chạy PROPOSE archive cho
ring2-audit (move-set = {Role baseline, Runs} ⇒ xoá thước của vai KIỂM).
Squash 16 commit wal: trailing chưa-push theo §5.0 (mark RC-pqhuy1987-15-07-2026-15-32-20).
Docs-only ⇒ CI path-filter skip, không deploy.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
21 KiB
TOOLING: PASS_WITH_FLAGS — 7 flag
H1 tooling-auditor · bookstart @open vòng V1 · phiên S189 (phiên-LOGIC L15) · 2026-08-10 INFORM-only · propose-only · single-writer = lead (B3 VERIFY → APPEND). Vai KHÔNG tự sửa file nào. G-015:
store_memoryđã strip, NHƯNGBashcòn = write-channel mở ⇒ KHÔNG tuyên "read-only enforced". Nấc bằng-chứng: mọi số dưới đây ĐO TỪ ĐĨA trong phiên này, không chép số cũ trong diary.
0. TÓM TẮT 4 MẶT
| Mặt | Verdict | Số đo (đĩa, hôm nay) |
|---|---|---|
| ① skill | PASS_WITH_FLAGS (2) | 6 project + 23 standalone + 20 command (19→20: +day.md) |
| ② vai-trò / roster | PASS (0 flag) | 29 — khớp 6/6 bề mặt |
| ③ plugin | PASS (0 flag) | 18 registered / 15 enabled / 3 disabled — 0-delta phiên thứ 7 |
| ④ docs | PASS_WITH_FLAGS (5) | 4 vá S188 đều THẬT; drift còn lại = carry-over + 1 mới |
Phân bố: 1 HIGH · 2 MED · 3 LOW · 1 INFORM. Điểm sáng: mặt ② lần đầu SẠCH TUYỆT ĐỐI kể từ S179 — cả 6 bề mặt roster + frontmatter 29/29 × 3 khoá.
1. XÁC NHẬN 4 VÁ CỦA BOOKEND @CLOSE S188 (lead dặn: đừng tin dòng khai, mở file đối chứng)
Mở từng file đối chứng. CẢ 4 ĐỀU VÁ THẬT — không có vá-trên-giấy.
| # | Vá khai @S188 | Đối chứng đĩa | Verdict |
|---|---|---|---|
| 1 | Tests 668→680 | docs/STATUS.md:476 = **680 PASS** | 45 Domain + 635 Infra, khai ĐO ×2 nguồn độc-lập (local dotnet test @gate-cụm + CI run #482 b275893c tách-phần 45/635, đối chứng thứ 3 sub-reviewer-cum.md) |
✅ THẬT + có phương-pháp |
| 2 | bundle 2 đời | docs/STATUS.md:479 = admin BZ1PG34E (1.813.772 B) · user 0ObPwWFB (1.728.765 B), khai đo LIVE trên VPS 2026-08-10 19:53-19:55 (sub-cicd-cum.md:53-54) + ship-proof tầng đĩa "chỉ còn ĐÚNG 1 index-*.js mỗi app". STATUS:10 mega-line KHÔNG chép hash, chỉ trỏ :479 (đúng B1) |
✅ THẬT + B1-sạch |
| 3 | roster README | .claude/agents/README.md:27 — số đã BỎ HẲN (trỏ docs/STATUS.md §Sub-agents), enumeration đã thêm ring5-audit. Đếm phần-tử: 7 core (diagram) + 22 tên = 29 = đĩa |
✅ THẬT + ĐỦ (xem §3) |
| 4 | Modules GĐ3 | CLAUDE.md:74 row Contract = + Duyệt HĐ GĐ3 (YC-023/024/025, S187-S188) · cột Migration 1-11 · **0-mig @S188** |
✅ THẬT — nhưng row KHKG kế bên lại hở → F-1 |
🔑 Vá #3 đáng ghi nhận về CHẤT, không chỉ về số: vá bằng BỎ SỐ (tuân luật README:3 cấm chép số) chứ không phải ĐỔI SỐ — đúng đơn thuốc mà chính dòng :28 (bài S143) kê. Đổi số thì roster kế lại stale; bỏ số thì hết class. Đây là lần đầu lớp drift này được đóng ĐÚNG CÁCH sau khi sống qua S185→S186→S188.
2. MẶT ① — SKILL
Đo: .claude/skills/ = 6 project (contract-workflow · dependency-audit-erp · ef-core-migration · form-engine · iis-deploy-runbook · permission-matrix) · ~/.claude/skills/ = 23 standalone · .claude/commands/*.md = 20.
DIFF vs S188/S186: command 19 → 20. File mới = .claude/commands/day.md, added 6bf768da 2026-08-10.
✅ SẠCH — day.md KHÔNG phải máy mồ-côi (control dương chạy đủ)
Áp phép đo "máy MỚI sinh trong phiên = ứng-viên mồ-côi số 1" (method file method_orphan_machine_audit.md). Kết quả có nhà khai đủ:
- Máy đi kèm tồn tại thật:
scripts/day-probe.ps1(scripts/*.ps136→37). day-probeđược trỏ ở ≥4 bề mặt sống:CLAUDE.md(khối "Mạch việc dở") ·.claude/commands/day.md·.claude/commands/pause.md·.claude/commands/tiep.md.- ⇒ cặp
day.md+day-probe.ps1có nhà khai, có cửa gọi. KHÔNG flag. (Ghi nhận để phiên sau không nghi lại.)
F-6 (LOW · mặt ①) — ef-core-migration/SKILL.md bảng migration dừng ở Mig 71, canonical = 72
- Bằng chứng:
.claude/skills/ef-core-migration/SKILL.md:99= row cuối| **71** | AddKhkkApprovalGroupCatalogAndFinalizeRuntime |. Đĩa có Mig 7220260806070242_AddMaHangMucToContractSigningPlanLines.cs.grep -c AddMaHangMucToContractSigningPlanLines= 1, và hit đó nằm ở:25— trong ghi-chú lineage ("bảng dừng ở Mig 71…"), KHÔNG phải một row của bảng. - Đây là carry-over S179 F-7, sống qua S179 → S180 → S186 → S188 (≥4 phiên).
- 🔸 Tự bác một vế:
:102ghi "last schema-changing Mig 70" — VẪN ĐÚNG, không flag. Đo:grep -c CreateTabletrên Mig 72 = 0 (Mig 71 cũng 0 theo S179). Theo từ-vựng "schema-changing" mà chính file định nghĩa (= tạo bảng), câu này còn hiệu lực. Vá phần bảng, đừng đụng:102. - Đề xuất: thêm 1 row
| **72** | AddMaHangMucToContractSigningPlanLines | S177/L11 — KHKK Line +MaHangMuc, AddColumn no new table |.
F-7 (LOW · mặt ① ranh ④) — permission-matrix/SKILL.md cây vẽ thiếu root so với số chính nó khai
- Bằng chứng:
:3(frontmatter description) khai "12 root". Cây ở:55-79chỉ dựng 8 nhánh root nhìn thấy được (Contracts:55·PurchaseEvaluations:58·KeHoachKyKet:60·Workflows:73·PeWorkflows:75+ phần trên), phần còn lại chỉ tồn tại dưới dạng câu văn:22-28. - 🔸 Chỗ SAI là CÂY, không phải SỐ —
ring1@S182 đã chốt 12 là số ĐÚNG. Đừng "vá" bằng cách hạ:3xuống 8 (đó là Goodhart: rời tập-đo, làm số khớp cây thay vì cây khớp thực tế). - Carry-over S179 F-2/F-3 → S182 → S186. Chưa vá.
- Đề xuất: bổ sung 4 root vắng vào cây. ⚠️ Cảnh báo kèm (bài S186): trong 4 root từng bị liệt,
Purolà TÊN MA — 6/6 hit đều nằm trong COMMENT trỏ NAMGROUP; tên thật làHopDongCung. Lấy tên từMenuKeys.cs, đừng chép lại danh sách cũ.
3. MẶT ② — VAI TRÒ / ROSTER — PASS, 0 FLAG
Roster = 29. Khớp 6/6 bề mặt, đo hôm nay:
| # | Bề mặt | Giá trị | Lệnh/neo |
|---|---|---|---|
| 1 | Đĩa | 29 | ls .claude/agents/*.md | grep -v README | wc -l (glob thô = 30, trừ README.md — bẫy đã biết) |
| 2 | hmw.js VALID_ROLES |
29 | parse khối const VALID_ROLES = [ → \n], strip comment //, 29 chuỗi |
| 3 | .claude/agent-memory/*/ |
29 dir | |
| 4 | docs/STATUS.md:480 (canonical) |
29 | | Sub-agents | **29** | |
| 5 | .claude/agents/README.md:27 enumeration |
29 | 7 core + 22 tên, đếm PHẦN-TỬ |
| 6 | skill-matrix agents/README:194-231 |
29 row | comm 2 chiều: disk∖matrix = ∅ · matrix∖disk = ∅ · 0 row trùng |
Set-diff đĩa ↔ VALID_ROLES: rỗng cả 2 chiều. 0 vai thừa, 0 vai ma, 0 dir mồ-côi.
Frontmatter: model: opus 29/29 · effort: max 29/29 · memory: project 29/29. ⇒ nợ S181 (2 vai W4b thiếu effort) đã đóng và giữ được qua 2 lượt sinh vai.
🔑 Bề mặt thứ 6 (skill-matrix) — nợ dai nhất của mặt ② ĐÃ ĐÓNG
Lịch sử: S182 matrix phủ 26/28 (thiếu score-counter + score-count-auditor) → S185 vẫn ghi "còn 26". Hôm nay đo lại: 29/29, 0 ghost. Cả 2 vai W4b + ring5-audit đều đã có row. Đây là bề mặt cuối cùng của mặt ② còn hở — nay hết.
🔸 Khai PHẠM-VI + tự-hiệu-chỉnh độ mạnh bằng chứng (bài S180, ring1 bác)
KHÔNG khai "6 bề mặt ĐỘC-LẬP". Thật ra:
- Bề mặt 1 và 3 đồng-biến một phần (dir memory sinh theo vai, tuy không tự động).
- Bề mặt 4, 5, 6 là 3 nguồn tay-nuôi ĐỘC-LẬP THẬT (3 vị trí khác nhau, 2 file khác nhau, không có máy nào đồng bộ chúng).
- ⇒ Độ mạnh thật ≈ đĩa + 4 nguồn tay-nuôi độc lập, đủ để tuyên PASS chắc, nhưng không phải "6 nhân chứng rời nhau".
Thừa / idle / scope-drift: 0. Không vai nào trên đĩa vắng khỏi registry, không vai nào trong registry vắng khỏi đĩa.
4. MẶT ③ — PLUGIN — PASS, 0 FLAG
Nguồn thẩm quyền = user-global ~/.claude/settings.json (KHÔNG conflate với project .claude/settings.json — file project chỉ có hooks.Stop → wal-flush.ps1).
Báo đúng 4 nấc, KHÔNG conflate:
| Nấc | Giá trị | Nguồn |
|---|---|---|
| installed (marketplace) | 37 | ~/.claude/plugins/marketplaces/claude-plugins-official/plugins |
| registered | 18 | enabledPlugins keys |
| enabled | 15 | enabledPlugins value = true |
| disabled | 3 | pr-review-toolkit · code-modernization · hookify (đều @claude-plugins-official) |
| assigned (map → vai) | có bảng | .claude/agents/README.md:238-244 |
| used | 🔴 KHÔNG ĐO ĐƯỢC từ repo ⇒ KHÔNG KHAI | — |
- 0-delta phiên thứ 7 liên tiếp (S169 → S173 → S179 → S180 → S185 → S186 → S189). Không có plugin mới cần phân bổ.
- Lead model ở file đó:
claude-opus-5[1m]+effortLevel: xhigh. - ✅ Vá S179 R-1 GIỮ ĐƯỢC:
agents/README:239nay ghifrontend-design (standalone; 🔴 plugin trùng **ĐANG enabled** — cố ý KHÔNG dùng)— khớp đĩa ("frontend-design@claude-plugins-official": true). Vị-từ đã đúng, không tái phát. - ✅
agents/README:236khai "18 plugin registered (15 enabled / 3 disabled)" — KHỚP đĩa từng con số.
New-allocation: 0 skill mới, 0 plugin mới ⇒ không có gì cần phân bổ phiên này. (day.md/day-probe.ps1 là máy nội bộ, không phải skill/plugin.)
5. MẶT ④ — DOCS
F-1 (HIGH) — CLAUDE.md:77 bảng Module: KHKK khai 69, 71 — THIẾU Mig 72
🔴 XÁC NHẬN phát hiện của lead. Đây LÀ flag mặt-4, và nó nặng hơn một ô lẻ.
- Bằng chứng:
CLAUDE.md:77cột Migration =**69, 71**. Mig 72 =20260806070242_AddMaHangMucToContractSigningPlanLines.cs— tên file tự khaiContractSigningPlanLines⇒ đúng module KHKK của chính row đó, không phải module khác. docs/STATUS.md:471canonical = 72 ✅ đúng. ⇒ lệch nằm ở derived, không phải canonical (tin tốt: chuỗi B1 không hỏng từ gốc).- Vì sao HIGH: row này là cột "Migration" của bảng Module — bề mặt mà người đọc dùng để trả lời "module này gồm những migration nào". Thiếu 1 mã ở đây = câu trả lời SAI, khác với một con số tổng bị lệch.
Trả lời trực tiếp câu lead hỏi — "còn bề mặt nào khác cùng lớp không?":
- Cùng-lớp HẸP (chuỗi
69, 71): CHỈ 1 site.grep "69, 71\|69,71\|Mig 69.*Mig 71"trênCLAUDE.md·docs/CLAUDE.md·docs/STATUS.md·docs/PROJECT-MAP.md·ef-core-migration/SKILL.md→ 1 hit duy nhất =CLAUDE.md:77. Không phải lớp "claim chép nhiều site". Vá 1 chỗ là đủ cho vế này. - 🔴 NHƯNG cùng-lớp RỘNG (= "bề mặt kể migration bỏ sót Mig 72") có site THỨ HAI:
ef-core-migration/SKILL.md:99(→ F-6). ⇒ Mig 72 đang vắng ở 2 bề mặt derived độc lập. Nếu chỉ váCLAUDE.md:77rồi tuyên "đóng lớp" thì sót đúng một nửa. - Đề xuất: vá CẢ HAI trong CÙNG một lượt:
CLAUDE.md:77→**69, 71, 72**(+ nửa câu mô-tả Mig 72) và thêm row 72 vàoSKILL.md.
F-2 (MED) — docs/database/schema-diagram.md:515 khai 91 bảng, canonical = 97
- Bằng chứng:
:515=Tổng: **91 bảng** (Mig 42, + __EFMigrationsHistory hệ thống).·docs/STATUS.md:472canonical = 97 @S164 (prodsys.tables= 97). - Lệch 6 bảng, và neo
Mig 42so với Mig hiện hành 72 ⇒ ô này đứng yên từ khoảng 30 migration trước. - 🔸 Phân loại theo tiêu-chí S186 ("dòng này khai về QUÁ KHỨ hay tự nhận là ẢNH HIỆN-TẠI?"): dòng mở bằng "Tổng:" = tự nhận ảnh hiện-tại ⇒ stale THẬT, không phải dương-giả.
- Carry-over S179 F-8. Chưa vá.
- Đề xuất: đổi thành con trỏ B1 (
số bảng → docs/STATUS.md) thay vì thay số — chínhCLAUDE.mdđã mô tả file này là "(số bảng → docs/STATUS.md)", nên hạ số ở đây là khôi phục hợp đồng B1 đã tuyên, không phải quyết định mới.
F-3 (MED) — docs/PROJECT-MAP.md 0 hit cả 4 module đang sống
- Bằng chứng (kèm control dương, bắt buộc):
| Từ khoá | Hit trong PROJECT-MAP.md |
|---|---|
ContractSigningPlans |
0 |
KeHoachKyKet |
0 |
PeWorkItemBudgets |
0 |
ContractCatalogEntries |
0 |
contract (control dương) |
31 |
- Control dương = 31 ⇒ thước không hỏng, file không rỗng — 4 số 0 kia là vắng mặt THẬT, không phải lỗi grep. (Đúng bài "0-hit phải kèm control dương".)
- Vì sao đáng MED:
PROJECT-MAP.mdlà file #3 trong 5-file-đọc-trước củaCLAUDE.md. Một "bản đồ toàn cảnh" không chứa module KHKK (7 bảng, Mig 69/71/72) + module ngân-sách PE đang chạy prod ⇒ người đọc theo đúng quy trình khởi động sẽ dựng sai bản đồ ngay từ đầu. - Carry-over S179 F-5. Chưa vá.
F-4 (LOW) — docs/STATUS.md:10 mega-line CURRENT ghi roster 28, canonical :480 = 29
- Bằng chứng:
:10chứa· roster 28 ·;:480=| Sub-agents | **29** |; đĩa = 29. - 🔸 Cố ý hạ xuống LOW, có lý do đo được — không thổi lên:
:8tự khai trước rằng dòng CURRENT lag: "Dòng CURRENT ngay dưới đây advance @closeout nên tụt sau — giữa phiên đọc.claude/WAL.md" ⇒ có caveat gắn liền, người đọc được cảnh báo.- Dòng có neo cửa sổ (
S161→S168) ⇒ mang tính bản-ghi-đông-lạnh nhiều hơn ảnh hiện-tại. - Vế bundle trong chính dòng đó đã B1-hoá đúng (
bundle prod → canonical ở :479, KHÔNG chép số ở đây) — chứng minh khuôn vá đã có sẵn ngay tại chỗ.
- Đây là lớp tái phát: S180 bắt cùng bệnh ở mega-line (khi đó
:8). Cùng dòng, cùng loại, đổi số dòng. - Đề xuất: áp đúng khuôn mà vế bundle đã dùng — thay
roster 28bằngroster → :480(bỏ số, không đổi số). Đổi 28→29 thì phiên có vai thứ 30 lại stale.
F-5 (INFORM · phương-pháp — không phải lỗi nội dung) — công thức đo cạnh STATUS:471 tái dựng ra 71, không ra 72
🔑 Flag này sinh ra từ chính cú trượt của em trong phiên này — báo lại để nó không bẫy vai sau.
docs/STATUS.md:471khaiMigrations = **72**kèm phương-pháp: "đo đĩals Persistence/Migrations/*.cstrừ Designer+Snapshot = 72".- Áp đúng chữ thì ra 71. Vì migration
20260717032812_AddPeApprovedBudgetSnapshot.cscó chữ "Snapshot" trong TÊN CỦA CHÍNH NÓ ⇒ bộ lọc "trừ Snapshot" ăn nhầm một migration thật. - Đo lại đúng:
ls *.cs= 145 · trừ*.Designer.cs(72) · trừApplicationDbContextModelSnapshot(1) = 72 ✅. Ordinal file cuối = 72AddMaHangMucToContractSigningPlanLines.git log --diff-filter=Dtrên thư mục = 0 file bị xoá (loại giả thuyết "mất 1 migration"). - ⇒ SỐ 72 ĐÚNG. Sai là CÔNG THỨC nằm cạnh nó. Em đã suýt báo "canonical drift 72 vs 71" — tức là báo oan chính ô canonical đúng, chỉ vì tin công thức chép trong doc thay vì tự dựng phép đo.
- Đề xuất: sửa chữ trong
:471thành "trừ*.Designer.cs+ApplicationDbContextModelSnapshot". Chi phí 1 dòng, chặn một lớp báo-oan lặp lại. - 🔸 Bài rút: công thức chép trong doc cũng là một derived-artifact và cũng lão hoá — nó không được miễn trừ chỉ vì trông giống một lệnh chạy được.
6. DIFF vs S188
| Mặt | S188 / baseline gần nhất | S189 (hôm nay) | Delta |
|---|---|---|---|
| skill project | 6 | 6 | 0 |
| skill standalone | 23 | 23 | 0 |
| command | 19 | 20 | +1 day.md (6bf768da) |
scripts .ps1 |
36 | 37 | +1 day-probe.ps1 |
| roster | 29 (đĩa) — nhưng README:27 khai 28 + liệt thiếu ring5-audit |
29, README:27 đã vá đúng cách | F-1 S188 ĐÓNG ✅ |
| skill-matrix | 26/28 (S182) → "còn 26" (S185) | 29/29, 0 ghost | ĐÓNG ✅ |
| frontmatter | 26/28 effort (S181) |
29/29 × 3 khoá | giữ sạch ✅ |
| plugin | 18/15/3 | 18/15/3 | 0-delta phiên 7 |
| Tests (docs) | 668 | 680 (đo ×2 nguồn) | vá THẬT ✅ |
| bundle (docs) | 2 đời | BZ1PG34E / 0ObPwWFB đo LIVE |
vá THẬT ✅ |
| Migrations | 72 | 72 (đĩa xác nhận) | 0 |
Đóng phiên này (do S188 vá): 2 nợ mặt ② + 2 vá mặt ④.
Còn treo: 4 carry-over — F-6 (S179 F-7) · F-7 (S179 F-2/F-3) · F-2 (S179 F-8) · F-3 (S179 F-5). Cả 4 đều là nợ từ drift-audit THÁNG S179, sống qua ≥4 phiên.
Mới sinh: F-1 (Mig 72 vắng ở CLAUDE.md:77 — sinh 2026-08-06, chưa từng bị bắt).
7. ĐÃ SOI MÀ SẠCH (để lead biết mặt nào đã phủ — không chết non)
- ✅ Roster set-diff đĩa ↔
VALID_ROLES— rỗng 2 chiều. - ✅
agent-memory/*/29 dir — 0 dir mồ-côi, 0 vai thiếu dir. - ✅ Frontmatter 29/29 ×
model/effort/memory. - ✅ skill-matrix
comm2 chiều — 0 vai sót, 0 row ma, 0 row trùng. - ✅ Plugin: 4 nấc đo rời,
agents/README:236khớp đĩa từng số; vá S179 R-1 (frontend-design) không tái phát. - ✅
day.md+day-probe.ps1— có nhà khai ≥4 bề mặt ⇒ không mồ-côi (đã chủ động soi vì là máy mới sinh). - ✅
STATUS:476Tests /:479bundle /:471Migrations /:472bảng — canonical đều TƯƠI. - ✅
STATUS:10vế bundle đã B1-hoá đúng (chỉ vế roster hở → F-4). - ✅
ef-core SKILL:102"last schema-changing Mig 70" — tự bác, KHÔNG flag (Mig 71 & 72 đềuCreateTable= 0). - ✅
STATUS:7khối "S185 ĐÓNG" ghiTests 668— tự bác, KHÔNG flag: bản-ghi-đông-lạnh có neo phiên/ngày, khai về quá khứ. Sửa = giả mạo phép đo cũ (bài S181/S186). - ✅
permission-matrix:3"12 root" — tự bác, KHÔNG flag:ring1@S182 chốt 12 là số ĐÚNG; lỗi ở CÂY (→ F-7).
Phạm vi CHƯA phủ (khai thẳng, không để lead tưởng đã quét hết)
- ❌ Chưa soi trọn nội dung 20
.claude/commands/*.md(chỉ soi tên + máy đi kèm). - ❌ Chưa soi trọn 23 skill standalone
~/.claude/skills/(chỉ đếm). - ❌ Chưa soi
docs/governance/theo từng file (chỉ chạm qua con trỏ từ CLAUDE.md). - ❌ Nấc plugin
used— không đo được từ repo, không khai. - ❌ Số dạng LOC/%/ms/byte-cap trong persona — chưa quét lớp này.
8. ĐỀ XUẤT CHO EM MAIN (propose-only — vai KHÔNG tự sửa)
Ưu tiên vá trong phiên (rẻ, chặn lớp):
- F-1 + F-6 CÙNG LƯỢT —
CLAUDE.md:77→69, 71, 72vàef-core-migration/SKILL.md+row 72. (Vá 1 trong 2 = sót nửa lớp.) - F-5 — sửa công thức
STATUS:471thành "trừ*.Designer.cs+ApplicationDbContextModelSnapshot". 1 dòng, chặn báo-oan lặp. - F-4 —
STATUS:10roster 28→ bỏ số, trỏ:480(khuôn có sẵn ngay trong dòng đó).
Vá được thì tốt (nợ tháng S179, đã ≥4 phiên):
4. F-2 — schema-diagram.md:515 → con trỏ B1 thay vì số 91.
5. F-3 — PROJECT-MAP.md bổ sung 4 module sống.
6. F-7 — permission-matrix bổ sung root vào CÂY (⚠️ lấy tên từ MenuKeys.cs — Puro là tên ma, thật là HopDongCung).
🔴 Chống Goodhart — 3 chỗ CẤM "vá cho tụt flag-count": đừng hạ permission-matrix:3 12→8 · đừng sửa STATUS:7 "Tests 668" · đừng đụng ef-core SKILL:102 "Mig 70". Cả 3 đang ĐÚNG; sửa chúng chỉ làm số flag đẹp lên trong khi nội dung xấu đi.
🔴 Nếu vá F-1/F-4 mà đóng luôn "lớp Mig 72 / lớp roster-số" thì phải grep lại bằng LỆNH KHÁC sau khi vá — bài absence_looks_like_clean.