- Owner 3-quyết: (30) JUMP để-nguyên-theo-nhịp · (31) 4 persona +NEVER-block (restart ĐÃ THOẢ) · (32) vòng 1→5 AUTO — lô consent gỡ 9 site (5 H1 + ring1-tự-bắt + 3 trio; E-013 EXT) - Memory-ops TRỌN: A1-A4/D1/D2/R1/B-series — A7 392/392 · mfe 20/20-100% lần đầu · lead-gap drain 24.728→16.485B · strike-ledger + WARN-latch (-Ack = owner-action) - V4 sleep AUTO đầu: 1 shard thật/16 KÊU · ring4 đầu-đời TRƯỢT-4/5 → 4 fix gist (scribe sub-ring4-close vì return-only) - Thư model re-stamp: 59ce1d0f → 9c909007 published (G-024a) — adap-report Đính-chính @S152 + sweep 13 bề-mặt LIVE - Bookend @close: stale 6 FLAG + gap 2 FLAG → vá 8/8; ring2 8/8 ĐẠT (4-A pin-bản-cắt → slot 33) · ring1 48Đ/5T/59-claim - M9 13 đơn-vị diary (3 S151-deep hồi-tố) · #53 ×10-chắc → tally 60-cận-dưới + errata subject-1b85713 - Session-log 2 run= + completeness-gate 5-vòng ĐẠT · HANDOFF segment S152 (carry 3-đóng/3-mới/23-giữ; slot 33/34) Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
20 KiB
sub-tooling-auditor — S152 @open (H1 tooling-freshness 4-mat)
INFORM-only, propose-only. Ghi APPEND TRONG LUC LAM (anti-#53). Moi so kem LENH. Diff-base: S151 (H1 ra PASS_WITH_FLAGS 8-finding). PIN doc: machine-baseline.md cung folder.
0. Ground-truth phien
- LENH
git log --oneline -5=> HEAD3058470 wal: flush 20260725T2014(hook), truoc do1b85713closeout S151. - LENH
git status --porcelain=> 3 muc: M.claude/governance/.session-counter.json· ??.claude/sessions/session-5/· ?? runs/2026-07-25-S152-... (= scaffold may @open, KHONG phai drift). - Model self-report: Opus 5 (1M) — worker-tier-pin giu.
1. MẶT ① SKILL
1a. State
- LENH
ls -1 .claude/skills/=> 6 skill project (contract-workflow · dependency-audit-erp · ef-core-migration · form-engine · iis-deploy-runbook · permission-matrix) + README.md. 0 THÊM / 0 XÓA vs S151. - LENH
git log --oneline -8 -- .claude/skills/(xem mục 1d) => last-touch.
1b. Nợ S151 — row Mig 67 trong ef-core-migration: ĐÓNG THẬT (verified)
- LENH
grep -n "Mig 67\|AddPeApprovedBudgetSnapshot\|67" .claude/skills/ef-core-migration/SKILL.md - => HIT
.claude/skills/ef-core-migration/SKILL.md:89— row bảng| **67** | **AddPeApprovedBudgetSnapshot** | ... snapshot 11 cột ... no new table (89 giữ) ... commit d4fbced |+ đuôi*(row bổ sung @S151 — ring1 TRƯỢT-1 bắt bảng dừng ở 66)*. - mtime SKILL.md =
Jul 25 19:11(LENHls -la .claude/skills/ef-core-migration/), 33.773B — khớp cửa-sổ vá S151. Nợ S151 CLOSED, không tái-mở.
1c. C2 15 LOW derived-stale — PHÁN: 15/15 DƯƠNG-GIẢ (module-local, không phải stale-total)
Tao KHÔNG tin số tổng của máy suông — tao tái-lập luật C2 nguyên văn (đọc scripts/governance-detectors.ps1:267-334, dựng lại 6 count-pattern + 2 token VN từ code-point :103-104 + 3 skip-rule ^\s*\| / baseline|\bS\d{2}\b|\(current / pre-token version-guard + ratio-band sev) chạy trên ĐÚNG tập $derivedDocs (all SKILL.md + all commands/*.md + CLAUDE.md + skills/README.md).
- LENH:
powershell -NoProfile -ExecutionPolicy Bypass -File <scratchpad>/c2b.ps1=> TOTAL_C2 = 15 — TRÙNG KHÍT con số máy (15). Tái-lập được ⇒ số máy đáng tin, và tao có line-ref để phán từng dòng. - Phân rã (máy chỉ cho tổng; đây là line-level):
contract-workflow/SKILL.md×6 —:24"3 bảng" (schema-pattern) ·:35"6 test PE 2-stage" ·:332"6 test PE N-stage" + "6 test Contract N-stage" (2 match CÙNG dòng) ·:367n=77 ·:371"3 bảng" (ApprovalWorkflowsV2).ef-core-migration/SKILL.md×7 —:100"2 migration tách" ·:101"1 migration GỘP" ·:109"4 bảng" Budget-defer ·:117"3 bảng" ·:120"1 bảng riêng" ·:168"Revert 1 migration" (heading) ·:185"Script từ 1 migration → latest" (comment lệnh).CLAUDE.md:93"6 test" ·commands/session-end.md:251"vd 130 → 132".
- Lý do phán dương-giả: không dòng nào khai TỔNG-trạng-thái. Chúng là (i) đếm module-local của 1 test-class/1 nhóm bảng, (ii) danh-từ đếm trong CÂU LỆNH/heading (
Revert 1 migration,Script từ 1 migration) — đây là đơn-vị, không phải count, (iii) ví-dụ minh-hoạ (vd 130 → 132). Cả 15 đã bị chính máy hạ LOW đúng theo ratio-band H18-A (xa canonical ⇒ LOW = advisory). - 🔴 KHÔNG đề-xuất vá 15 dòng này. Vá = viết lại văn-xuôi cho vừa detector = rời tập-đo (Goodhart): flag-count tụt trông như thành-công nhưng cái mất đi là ngữ-nghĩa module-local, còn năng-lực bắt stale-total thì y nguyên. Giữ nguyên, coi là nền LOW đã-hiểu.
1d. Last-touch + 2 mục còn lại của mặt ①
- LENH
git log --oneline -6 -- .claude/skills/=>1b85713(closeout S151) là commit gần nhất chạm skills/ ⇒ 0 commit chạm skills sau S151. Trước đóa09dcae(W4 positive-control) ·e88e75d(S118). - LENH
ls -la .claude/skills/*/SKILL.md=> contract-workflow 24.452B (May 8) · dependency-audit-erp 5.551B (Jun 18) · ef-core-migration 33.773B (Jul 25 = vá S151) · form-engine 5.450B (Apr 30) · iis-deploy-runbook 14.688B (Jun 25) · permission-matrix 7.864B (Jul 15). - permission-matrix — nợ S119 ĐÃ ĐÓNG: LENH
sed -n '1,20p'+grep -n "menu|polic"=>:3frontmatter +:17đều đã chuyển B1-pointer ("số menu-key · policy canonical → docs/STATUS.md, KHÔNG chép số ở đây") +:18dạy đếm-thật từMenuKeys.cs:147+:26bia-mộBg_*XOÁ-S61 (vá @S122 W4). ⇒ stale-S119 (liệtBg_*như menu SỐNG) CLOSED, không tái-mở. - form-engine
2026-04-30= LOW title-stale máy (H24-1) — tao xác nhận bằng mtimeApr 30 01:12+ 5.450B. Không phải phát hiện mới, không nâng cấp.
FLAG-1 — view-stale-count — LOW
.claude/skills/permission-matrix/SKILL.md:42 — heading ## Menu tree (seed — ~60 key sau Phase 8).
- LENH
grep -n "menu|polic|[0-9]{2,3}" .claude/skills/permission-matrix/SKILL.md(hit :42) · canonicaldocs/STATUS.mdrowMenu keys= 54 (baseline canonical-resolvemenu=54). - Vấn đề KHÔNG phải "lệch 6". Vấn đề là cùng file,
:17tự ra luật "KHÔNG chép số vào file này" (B1) mà:42vẫn giữ một con số — dạng hedge~60nên detector C2 mù (regex đòi(\d+)\s*menu, đây là "60 key"). Tự-mâu-thuẫn nội-bộ, không phải drift ngoài. - Đề-xuất (owner/lead quyết): bỏ
~60 key→## Menu tree (seed sau Phase 8). Rẻ, giữ trọn ngữ-nghĩa "hình-dạng", và làm:17đúng với chính nó.
2. MẶT ② SUB-ROLE — PASS (4 nguồn khớp, 0 dead-name sống)
2a. Roster count — đếm PHẦN TỬ, không grep số
- LENH
ls -1 .claude/agents/*.md | grep -v README | wc -l=> 20. - LENH
node -e(regex bắt khốiconst VALID_ROLES = [...]rồimatchAllliteral'...'→.length) => VALID_ROLES element-count = 20 (KHÔNG đọc con số nào trong comment — đếm phần tử thật). - Set-diff 2 chiều = RỖNG:
in VALID_ROLES not on disk: []·on disk not in VALID_ROLES: []. Đây là kiểm mạnh hơn so-số: 20=20 mà lệch tên vẫn lọt, set-diff thì không. docs/STATUS.md:452row| Sub-agents | **20** |·docs/STATUS.md:465state-line "Sub-agents 20". ⇒ 4 nguồn: đĩa 20 = VALID_ROLES 20 = STATUS:452 20 = STATUS:465 20.- LENH
git log— 0 commit chạm.claude/agents/sau1b85713. Diff vs S151: 0 THÊM / 0 ĐỔI / 0 XÓA.
2b. Skill-matrix có theo kịp roster không (S143 từng vá 15→17, roster sau đó lên 20)
- LENH
sed -n '176,197p' .claude/agents/README.md=> matrix| Agent | Skills |có đủ 20 row, GỒM 3 vai S145 mới nhất:ring1-audit:195·ring2-audit:196·ring4-audit:197(đềuref-only+ ghino-self-exempt). Header:174= "Skill assignment (6 skill, re-distributed S39)" — không hardcode số vai ⇒ không tự-lão-hoá. Nợ S143 CLOSED và không tái-sinh khi roster 17→20.
2c. Residual TÊN CHẾT ngoài vùng FROZEN — soi thật, kết luận: 0 ca dùng-sống
- LENH
grep -rn "tooling-harvest-audit|h24-audit|sleep-audit|lead-view-auditor|lead-omission-auditor"trên 8 bề-mặt SỐNG (.claude/agents/·.claude/commands/·hmw.js·scripts/·memory-budget.json·.claude/skills/·CLAUDE.md·docs/HANDOFF.md) => 10 hit. Tao mở TỪNG hit (không kết luận từ số):scripts/closeout-sentinel.ps1:67-68— LENHawk 'NR<=72 && /<#|#>/'=>1: <#⇒ 2 hit này nằm trong block-comment mở từ dòng 1, nội dung là bằng-chứng thiết-kế ("S148932d607touched lead-view-auditor/ + lead-omission-auditor/ — the OLD names"). mention, không phải use.scripts/governance-detectors.ps1:1708— comment granularity-note nhắc filesub-h24-audit-*.mdtừng tồn tại trong folder frozen. Tao soi tiếp phần CODE ngay dưới (:1722-1730): danh-sách vai đọc LIVE từ frontmatter ($informRoles←Get-ChildItem .claude\agents -Filter *.mdtrừ README) ⇒ derive-from-source, không hardcode tên ⇒ đổi tên vai KHÔNG làm hỏng detector.docs/HANDOFF.md:16/:18/:25(+4 hit vùng Prev/carry) — đều là ghi-chép việc đã xảy ra ("lead-omission-auditorFLAG-1gap-decision-sunk" @S148, "bắt @S146").
- 🔴 Phán theo luật S143 (prescriptive ⟂ frozen): 10/10 là frozen-record hoặc mention, 0 hit ở vị-trí prescriptive (0 trong
hmw.jscode · 0 trong 20 persona · 0 trongmemory-budget.json· 0 trong commands). Sửa chúng = giả-mạo lịch-sử ⇒ ĐỀ-XUẤT: KHÔNG SỬA. Nợ M-1 S150 (ô canonical giữ tên chết) đã đóng:STATUS:452nay dùng tên MỚI ở vị-trí mô-tả-trục, tên cũ chỉ còn trong bảng-mapping rename (lead-view-auditor→lead-stale-auditor) — đó là chỗ tên cũ BẮT BUỘC phải có.
3. MẶT ③ PLUGIN — PASS (registry 0-delta) + 1 nấc-đo phải khai riêng
LENH sed -n '1,45p' ~/.claude/settings.json (user-global — authority ③; project .claude/settings.json chỉ có hooks, KHÔNG override plugin/model).
- installed/registered = 18 entry
enabledPlugins· enabled = 15 (true) · disabled = 3 (false):pr-review-toolkit·code-modernization·hookify. IDENTICAL sổ S140/S143 ⇒ 0 THÊM / 0 ĐỔI / 0 XÓA. - assigned:
.claude/agents/README.md:213-220bảng H3 map 6 nguồn → vai (sql-database-assistant → inv-cb+impl-be · frontend-design → frontend-designer · skill-creator → mọi sub · claude-md-management → em main · pr-review-toolkit → reviewer dạng CHECKLIST · session-report → em main/cicd) + khối "KHÔNG enable" 4 mục có lý-do. used = per-session auto-trigger, KHÔNG suy từ enabled. 4 nấc installed → enabled → assigned → used khai tách, không conflate. - Standalone skill: 23 — LENH
ls -1 ~/.claude/skills | wc -l=> 23. Khớp sổ, 0 delta. - 🔴 Marketplace = LỚP ĐO RIÊNG (bài tự-soi S143, tao từng bỏ sót lớp này ≥5 ngày ở S140): LENH
ls -1 ~/.claude/plugins/marketplaces/claude-plugins-official/plugins | wc -l=> 37. S143 đo 37 ⇒ 0 net delta. ⚠️ Khai trung-thực: count trùng KHÔNG chứng được set trùng (tao không giữ list S143 để so tên); tao dán nguyên list 37 tên vào đây làm mốc cho phiên sau so-tên được: agent-sdk-dev clangd-lsp claude-code-setup claude-md-management code-modernization code-review code-simplifier commit-commands csharp-lsp cwc-makers example-plugin explanatory-output-style feature-dev frontend-design gopls-lsp hookify jdtls-lsp kotlin-lsp learning-output-style lua-lsp math-olympiad mcp-server-dev mcp-tunnels php-lsp playground plugin-dev pr-review-toolkit project-artifact pyright-lsp ralph-loop ruby-lsp rust-analyzer-lsp security-guidance session-report skill-creator swift-lsp typescript-lsp. - NEW-ALLOC: 0 skill/plugin MỚI ⇒ 0 action. Carry duy nhất:
security-guidance(có mặt marketplace, KHÔNG enable) — vẫn đáng cân-nhắc gánreviewer, nhưng nó mang hook Stop + edit-time warning ⇒ đụngsettings.jsonhooks ⇒ quyền owner, tao KHÔNG tự bật (giữ nguyên phán S143). - 📌 2 nợ S143 mặt-③ ĐÓNG (đo được, không suy):
settings.json:11nay ="model": "claude-opus-5[1m]"(S143 đoclaude-opus-4-8[1m]) ⇒ (a) F-C model-pin-flip-unlogged CLOSED —STATUS:452đã ghi "Lead = DEFAULT Opus 5 MAX (thư59ce1d0f@S149)" +commands/session-start.md:40VALUE-update cùng broadcast ⇒ sổ khớp pin. (b) recipe-no-op CLOSED —session-start.md:43outage-path nay bảo "GIỮ/model claude-opus-4-8[1m]" trong khi pin =opus-5⇒ fallback trỏ model KHÁC pin ⇒ recipe có tác-dụng thật, hết no-op. - Không xung đột với baseline:
machine-baseline.md:43"Lead phiên S152 = Fable 5 (anh launch)" = owner-choice per-session, khácsettings.json= default-fleet. 2 nấc khác nhau, cả 2 đều đúng.
4. MẶT ④ DOCS FRESHNESS — PASS_WITH_FLAGS
4a. docs/STATUS.md bảng CURRENT STATE, phần H1-turf
- LENH
grep -n "^| Skills|^| RAG" docs/STATUS.md=>:451| Skills | 6 | 3 domain + 3 ops |— ĐÚNG (đĩa 6 skill, phân 3 domain [contract-workflow · form-engine · permission-matrix] + 3 ops [dependency-audit-erp · ef-core-migration · iis-deploy-runbook]). 0 drift. :452Sub-agents 20 — khớp (mục 2a).:453| RAG chunks | **2447** | re-verify S151 ...vsmachine-baseline.md:41đo TƯƠI 2448 ⇒ lệch +1. Xem FLAG-2 (nhẹ, và có lý-do).
4b. agents/README.md:27 — ⓘ diagram 7-lane: khai VẪN ĐÚNG
Tao kiểm chính câu khai, không tin nó vì nó tự khai. LENH sed -n '28,60p' .claude/agents/README.md:
- Diagram legend cuối khối => 7 màu
cyan blue yellow orange purple red green= 7 lane ⇒ "7 core lane (pre-S47 snapshot)" đúng. - Câu ⓘ liệt NHÓM + TÊN 13 vai post-S47 (fd · db · office · H1 · H2 · 2×H24 · 3×trio · 3×ring) + "7 core (diagram)" = 20, và chốt "Số vai canonical →
docs/STATUS.md§Sub-agents" ⇒ B1-sạch, 0 số cứng ⇒ không tự-lão-hoá kiểu "17/17" (bài S143/S151). - Header hộp lead trong diagram = "lead default Opus 5 MAX (owner /model·/fable-real)" ⇒ đã theo broadcast S149. ⇒ phần "cosmetic ASCII chưa vẽ lại" chỉ còn đúng nghĩa lane-box chưa thêm 13 vai, và nó tự khai đúng vậy. KHÔNG phải drift — là nợ-cosmetic đã-khai; tao báo theo đúng chỉ-thị
:27("H1 flag drift này @session-start") chứ không nâng thành FLAG mới.
FLAG-2 — view-stale-count — LOW
docs/STATUS.md:453 RAG chunks 2447, đo tươi @S152 = 2448 (LENH: machine-baseline.md:41, nguồn list_projects).
- Không phải lỗi ai: row có stamp "re-verify S151" ⇒ đọc đúng là "2447 tại S151", và nó đúng tại S151. Đây là con số tự nhích mỗi lượt
store_memorycủa lead. - Đề-xuất: refresh 2447→2448 ở closeout S152 (việc thường-lệ, KHÔNG cần gate). KHÔNG đề-xuất bỏ stamp — stamp chính là thứ giữ row này khỏi thành lời-nói-dối.
FLAG-3 — view-stale-count — LOW (máy flag SAI LÝ-DO; chỗ đúng nằm ngay cạnh)
CLAUDE.md:93 — Application/ (6 test - PeWorkflowDefinition versioning).
- Máy (C2) flag vì "6 test ≠ canonical 532". Phán của tao: dương-giả ở lý-do đó — dòng này không khai tổng, và khối ngay trên đã B1-pointer ("Unit test pass — số hiện tại → docs/STATUS.md (canonical)").
- NHƯNG mở thư-mục ra thì có stale THẬT mà detector không thể thấy: LENH
ls -1 tests/SolutionErp.Infrastructure.Tests/Application/=> 38 file (AttendanceReportTests·ItTicket*×3 ·Hrm*×3 ·Pe*×13 ·Supplier*·WorkflowAppApproveV2Tests…). Mô-tả(6 test - PeWorkflowDefinition versioning)là hình-dạng thời S9; nay folder trải HRM/Office/IT-ticket/PE/Supplier. Cái lệch là NGỮ-NGHĨA mô-tả, không phải con số. - 🔴 Nhưng biết chỗ KHÔNG sửa: heading khối là
## 🧪 Tests (Phase 9 — Session 9 +6)⇒ khối có stamp S9 ⇒ đọc như ảnh chụp lịch-sử thì hợp-lệ. Hai cách đọc đều đứng được ⇒ tao không tự quyết, trình owner/lead 2 phương-án: (i) giữ nguyên vì đã stamp; (ii) rẻ hơn và hết nhập-nhằng: bỏ 2 chú-thích đếm trong cây ((6 test - …)·(17 codegen + 6 PE 2-stage approval S9)), giữ tên folder — cây vẫn làm đúng việc định-hướng. - Tao KHÔNG dùng số
[Fact]/[Theory]để khai số test (Theory expand runtime — luật của chính tao); "38 file" là đếm FILE, và đó là bằng-chứng đủ cho claim "mô-tả không còn khớp".
FLAG-4 — view-stale-count — LOW (delta lớp command)
.claude/commands/ = 19 file (LENH ls -1 .claude/commands/*.md | wc -l) — sổ MEMORY của tao ghi 18 (mốc S111).
- LENH
git log --diff-filter=A --name-only -- .claude/commands/=> 3 file thêm gần nhất:snapshot.md·pause.md·fable-clone.md. ⇒ delta 18→19 làsnapshot.mdkhông nằm trong mốc S111 của tao. - Đây là sổ TAO stale, không phải repo drift (không doc nào hardcode "18 command"). Ghi ra để đúng luật "diff vs last-session" và để phiên sau có mốc 19. 0 đề-xuất sửa file repo.
ⓘ INFORM (không phải FLAG)
- FLAG-khuôn C11 áp lên vai H1 = vốn-từ chưa vừa.
run.md:11buộc class ∈ enum ĐÓNGlead_self_audit.flag_classes(5view-*+ 6gap-*) — enum đó thiết-kế cho bề-mặt LEAD (H24), còn tao báo tooling/docs. Tao chọnview-stale-countcho cả 4 FLAG vì nó gần nhất, và KHÔNG tự chế class (luật CLOSED-enum; S143 vai lead-gap từ-chối tự chế + escalate là đúng). Khai ra để owner biết đây là vốn-từ bị kéo giãn, không phải 4 finding cùng bản-chất. Mở enum / cho H1 vốn-từ riêng = quyền owner. - Nợ S151 F-6 (#111 dương-giả C1 nhánh no-#) — không tái-phát ở lớp skill/docs của tao phiên này. Ca C1 MED duy nhất trong baseline (
sessions/2026-07-25-1930-S151-...:25cite #91 vs max 83) nằm ở session-log = frozen-record, và là turf H24/lead, không phải turf tao ⇒ tao KHÔNG lấn, chỉ ghi nhận đã đọc. - Skills/agents đều 0 commit chạm sau
1b85713⇒ mặt ①② tĩnh hoàn toàn từ S151; mọi thay đổi phiên này (nếu có) sẽ là do S152 tạo ra.
Verdict
PASS_WITH_FLAGS — 4 FLAG (4 LOW · 0 MED · 0 HIGH · 0 CRITICAL) + 3 INFORM. 0 FAIL. 0 việc tự sửa (propose-only, đúng luật).
| Mặt | Verdict | Finding |
|---|---|---|
| ① Skill | PASS | 1 LOW (FLAG-1 permission-matrix:42 "~60 key" tự-mâu-thuẫn B1). Nợ S151 (row Mig 67) CLOSED verified ef-core-migration/SKILL.md:89; C2 15 LOW tái-lập TOTAL=15 khớp máy → 15/15 DƯƠNG-GIẢ có line-ref; nợ S119 permission-matrix CLOSED @S122 |
| ② Sub-role | PASS | 0 finding. 4 nguồn 20=20=20=20 + set-diff 2 chiều RỖNG; skill-matrix 20/20 row (nợ S143 không tái-sinh); 10 hit tên-chết = 10/10 frozen/mention, 0 dùng-sống ⇒ đề-xuất KHÔNG SỬA |
| ③ Plugin | PASS | 0 finding. 18/15/3 IDENTICAL · standalone 23 · marketplace 37 (lớp đo riêng, đo có chủ-đích) · new-alloc 0 action. 2 nợ S143 CLOSED (pin claude-opus-5[1m] đã ghi sổ @S149 · outage-recipe hết no-op) |
| ④ Docs | PASS_WITH_FLAGS | 3 LOW: FLAG-2 RAG 2447→2448 (row có stamp, refresh @closeout) · FLAG-3 CLAUDE.md:93 máy-flag-sai-lý-do nhưng mô-tả cây tests lệch thật (Application/ = 38 file, mô-tả còn "PeWorkflowDefinition") · FLAG-4 sổ-tao 18→19 command. STATUS:451 Skills-6 ĐÚNG · README:27 ⓘ 7-lane khai vẫn đúng (legend 7 màu, B1 0-số-cứng) |
DIFF vs S151 (8 finding → nay 4 LOW): đóng ef-core Mig 67 (chính TRƯỢT-1 của tao @S151) · F-6 dương-giả không tái-phát · +2 nợ S143 mặt-③ đóng · 0 finding mới ≥MED. Hướng: freshness đang lên, phần còn lại là nền LOW đã-hiểu (C2 soft-net) + 1 con số tự-nhích (RAG).
Tự-soi (bài S151 TRƯỢT-1 = tao PASS mặt ① khi ef-core còn thiếu row): phiên này tao không kết PASS mặt nào từ suy-luận — mặt ① mở đúng file + grep chuỗi đích, mặt ② đếm phần-tử + set-diff, mặt ③ đọc settings.json + ls marketplace, mặt ④ mở tests/Application/ đếm file thay vì tin nhãn. Mỗi số trên có LỆNH kèm ngay cạnh.