Files
solution-erp/.claude/workflows/runs/2026-08-07-S180-adap-upgrade-pack-phased/sub-w1a-mayd-octen.md
2026-08-07 15:59:03 +07:00

24 KiB
Raw Blame History

W1 — LANE a/2: KIỂM KÊ MÁY-ĐỌC-TÊN (G1-M2, đảo trước G1-M1)

  • Phiên: S180 · Vai: investigator-codebase · Ngày: 2026-08-07
  • Chế độ: READ-ONLY. Ngoài tệp này KHÔNG ghi/sửa tệp nào khác. KHÔNG đổi tên. KHÔNG ký chuẩn.
  • Ghi đĩa liên tục (chống #53): mỗi đoạn máy xác minh xong append ngay.
  • Đầu vào: sub-n3-lane-a-gd01.md §3.4 (11 đoạn máy · 9 nhóm / 21 họ) · wave-plan-S180.md W1 (:40-53) · thư gốc broadcasts/inbox/ai_infra/2026-08-04-…-phu-luc-spec-pitfall.md §GĐ-1.
  • Luật tự áp: mọi 0-hit kèm control-dương · mọi tỉ lệ kèm mẫu số · KHÔNG ĐO ĐƯỢC hợp lệ, bịa thì không · bác lane A thì nói thẳng.

§1 — XÁC MINH TỪNG ĐOẠN MÁY (mở mã, không tin danh sách)

Bảng ký hiệu mức

  • 🔴 vỡ-câm — đổi tên ⇒ máy vẫn chạy, vẫn in kết quả, nhưng kết quả sai / mù mà không ai biết. Hạng nguy nhất.
  • 🟡 vỡ-ồn — đổi tên ⇒ throw / flag / dừng. Đau nhưng thấy được.
  • 🟢 tự thích nghi — đọc cả tên cũ lẫn tên mới, hoặc đọc động từ nguồn sống.

M-01 · .claude/workflows/hmw.js:22-51VALID_ROLES (🟡 vỡ-ồn) — XÁC NHẬN, sửa số dòng

Trường Đo được
Đọc tên gì 26 chuỗi cứng tên vai kebab-case, mảng const VALID_ROLES = [...]
Số dòng thật :22-51 (lane A ghi :22-55 — dòng :51] đóng mảng; :53+ đã sang khối TIER2_EXPECTED_FULL_ID). Bác nhẹ số dòng, giữ nguyên nội dung.
Máy chặn hmw.js:171-186badRoles filter + throw new Error('… DỪNG HẲN (STOP-HARD) …')
Vỡ thế nào Đổi tên vai mà quên sửa mảng ⇒ throw ngay tại chỗ, fan-out chết, thông báo in đủ danh sách hợp lệ
Sắc thái quan trọng :180x.raw != null && x.raw !== ''role rỗng/null KHÔNG throw (backward-compat H6.2 role-less). Nghĩa là STOP-HARD chỉ bắt tên SAI, không bắt tên THIẾU
Mức 🟡 vỡ-ồn

🔴 Ràng buộc cho lane b: đây là máy chặn duy nhất trong cả kiểm kê thật sự dừng-hẳn. Nhưng nó chặn theo danh sách liệt kê, không theo hình dạng tên. Chuẩn nào quy định "tên vai phải theo dạng X" sẽ không được máy này thi hành — nó chỉ thi hành "tên vai phải nằm trong 26 giá trị này".


M-02 · scripts/governance-detectors.ps1:1102 — bộ lọc tệp con H25 (🔴 vỡ-câm) — XÁC NHẬN

Trường Đo được
Đọc tên gì $_.Name -match '^(sub-.+|.+-return)\.md$' — quét đệ quy toàn .claude\workflows\runs
Vỡ thế nào Tệp con đặt tên ngoài hai họ này ⇒ biến mất khỏi tầm quét, vai bị coi là chưa chạy, detector vẫn in bình thường
Bằng chứng đây là bệnh THẬT, không phải giả thuyết Chú thích ngay trên đầu (:1093-1099) tự khai ca S159: bộ lọc cũ là glob 'sub-*.md'3 lượt trả của bộ ba harness-*-return.md VÔ HÌNH; đo trên bookend S159: "9 spawns ran, the glob saw 6 — it dropped exactly the 3 most expensive lanes"
Mức 🔴 vỡ-câm — đã vỡ câm một lần thật, đã vá, và bản vá vẫn là một danh sách hai họ

M-03 · scripts/governance-detectors.ps1:1104-1107 — suy vai từ tên tệp, 3 nấc tham lam (🔴 vỡ-câm) — XÁC NHẬN, sửa số dòng

if     ($s.Name -match '^sub-(.+)-\d+\.md$') { $cand = $Matches[1] }
elseif ($s.Name -match '^sub-(.+)\.md$')     { $cand = $Matches[1] }
elseif ($s.Name -match '^(.+)-return\.md$')  { $cand = $Matches[1] }
Trường Đo được
Số dòng thật :1104-1107 (lane A ghi :1105-1106 — thiếu nấc 3 -return). Bác nhẹ.
Đọc tên gì Suy tên vai từ tên tệp, ba nấc, nấc sau nuốt nấc trước
Vỡ thế nào Suy sai ⇒ rơi vào $unmappedLIỆT KÊ, KHÔNG cờ (:1109if ($rosterSet.ContainsKey($cand)) {...} else { $unmapped[$cand] = $true }). Vai thật đã chạy nhưng tên tệp lệch ⇒ vai bị coi là chưa chạy, và chỗ lệch chỉ được liệt chứ không cờ
Mức 🔴 vỡ-câm — thiết kế CỐ Ý không-đoán-tên (S122 "đo NỘI DUNG không đo TÊN"), nhưng hệ quả là lệch tên = im lặng theo thiết kế

🔴 Đây là chỗ luật S122 và TC-11 kéo ngược nhau: S122 cấm đoán tên (đúng), nên detector chọn im lặng khi tên lạ. Chuẩn lane b nếu đòi "tên lệch phải kêu" thì phải sửa chính chỗ này, và sửa nó là đi ngược một luật đã có. Phải khai xung đột, đừng vá âm thầm.


M-04 · scripts/governance-detectors.ps1:1762 — regex tên vai H24 (🔴 vỡ-câm) — BÁC SỐ DÒNG của lane A

Trường Đo được
Lane A ghi :1679
Sự thật :1679 là DÒNG CHÚ THÍCH, nguyên văn: # (a) FLAG-khuon: every H24 auditor sub-file (name carries lead-stale|lead-gap|ring2-audit). Mã sống nằm ở :1762: $roleNameRx = '(?i)(lead-stale|lead-gap|ring2-audit)', dùng ở :1774 if ($sm.Name -match $roleNameRx)
Đọc tên gì Tên tệp phải chứa một trong ba chuỗi vai
Vỡ thế nào Đổi tên ba vai đó ⇒ luật FLAG-khuôn ngừng áp, biến $c11Measured không bao giờ bật ⇒ khối in ra "đã đo, 0 cờ" trong khi thật ra chưa đo gì
Mức 🔴 vỡ-câm

M-05 · scripts/governance-detectors.ps1:1771 — bộ lọc tệp con lần 2 (🔴 vỡ-câm) — BỔ SUNG (lane A không liệt riêng)

:1771 lặp lại y nguyên '^(sub-.+|.+-return)\.md$' trong vòng C11. Cùng regex, hai chỗ, không dùng chung hằng số ⇒ vá một chỗ quên chỗ kia là kịch bản có thật (S159 đã phải vá cả hai, chú thích :1769-1770 xác nhận: "mirror of the C11(b) filter fix above"). Mức 🔴 vỡ-câm + nợ kỹ thuật: 1 luật / 2 bản sao.


M-06 · scripts/governance-detectors.ps1:1716BÁC HẲN: KHÔNG PHẢI ĐOẠN MÁY

Trường Đo được
Lane A ghi ":1716 đọc sub-h24-audit-*.md", xếp cùng hạng máy với :1679
Sự thật :1716CHÚ THÍCH, nguyên văn: # this calendar day but wrote a COMBINED sub-h24-audit-*.md that matches NONE of the. Nó mô tả một điểm mù đã biết (tệp S148 khớp KHÔNG mẫu nào ⇒ "scanned-but-inert"), chứ không đọc tên gì
Hệ quả cho lane b Chuỗi sub-h24-audit không phải một tên mà máy phụ thuộc ⇒ không cần đưa vào chuẩn như tên phải giữ. Ngược lại nó là bằng chứng có sẵn rằng bộ lọc M-04 đã từng bỏ sót một tệp thật
Mức — (loại khỏi kiểm kê máy)

🔴 Đây là 1 trong 2 mục tôi bác hẳn. Giữ nó trong danh sách "máy đọc tên" sẽ khiến lane b đi bảo tồn một cái tên mà không máy nào đọc, đồng thời làm phồng mẫu số.


M-07 · scripts/governance-detectors.ps1:1050 (+:1044) — đường dẫn docs/changelog/sessions/ (🔴 vỡ-câm) — XÁC NHẬN, bổ sung 1 dòng

Trường Đo được
Đọc tên gì :1044 git log --diff-filter=A --name-only … '--' 'docs/changelog/sessions/' (đường dẫn cứng trong lệnh git) · :1050 chuỗi báo lỗi cùng đường dẫn
Vỡ thế nào Dời chỗ nhật ký phiên ⇒ $newSess.Count -eq 0 luôn đúng ⇒ cờ MED bắn sai mỗi phiên (dương-giả), chứ không phải im lặng
Sửa mức so lane A Lane A xếp "mất một chân" (hàm ý im). Đo thật: nó bắn cờ sai liên tục ⇒ đúng ra là 🟡 vỡ-ồnNHƯNG cờ này nằm trong khối closeout-ritual in ra 4 sổ, người đọc rất dễ đọc thành "phiên này quên viết session-log". ⇒ giữ 🔴 vỡ-câm về NGHĨA: máy ồn ào, nhưng nội dung thông điệp sai lệch — nó tố người dùng thay vì tố chính nó
Mức 🔴 vỡ-câm-về-nghĩa (cờ nổ đúng chỗ, lời buộc tội sai đối tượng)
Bổ sung :1882 cùng bệnh: Write-Host ' [skip] docs/changelog/sessions not found' — nhánh skip im lặng ở một detector khác. Dời thư mục ⇒ detector đó skip sạch, in DarkGray, ai lướt qua đọc thành "không có gì bất thường"

M-08 · scripts/governance-detectors.ps1:1624+:1639+:1648+:1649 — C10 logic-session (🔴 vỡ-câm một phần, 🟡 phần còn lại) — XÁC NHẬN NỘI DUNG, BÁC SỐ DÒNG

Trường Đo được
Lane A ghi :1605,1633
Sự thật :1605:1611-1612chú thích; :1632-1633/:1642/:1652-1653/:1663chuỗi thông điệp. Mã sống: :1624 $sessRoot = Join-Path $RepoRoot '.claude\sessions' · :1639 if ($d.Name -notmatch '^session-(\d+)$') · :1648 $ctx = Join-Path $d.FullName ("_context-s-{0}.md" -f $n) · :1649 -Filter 'pause-*.md' · :1660 Test-Path (Join-Path $topDir '_end') + 'closed.md'
Đọc tên gì 5 tên khác nhau trong một khối: thư mục .claude\sessions · hình dạng ^session-\d+$ · tệp _context-s-<N>.md · họ cũ pause-*.md · dấu đóng _end hoặc closed.md
Vỡ thế nào — nhánh ỒN Đổi hình dạng thư mục phiên ⇒ :1639 cờ INFORM ngay, kèm câu "tooling scans this pattern". 🟡
Vỡ thế nào — nhánh CÂM :1622 if (-not (Test-Path $sessRoot)) { … '[skip] .claude/sessions not found' }đổi tên thư mục gốc = detector skip trọn khối, $c10Measured giữ $false, 0 cờ. 🔴
Vỡ thế nào — nhánh CÂM 2 :1660 dấu đóng phiên chấp hai tên (_endclosed.md) — đổi sang tên thứ ba ⇒ phiên đã đóng bị đọc là đang mở ⇒ cờ "BUOC 0.8 bị bỏ" không bao giờ bắn. 🔴
Mức 🔴 vỡ-câm (2 nhánh) + 🟡 (1 nhánh)
🟢 Điểm sáng :1648+:1649 đọc được cả hai họ (_context-s-<N>.md hub-form ⟂ pause-*.md cũ) ⇒ đây là tiền lệ đúng sách G1-M3 thứ hai, ngoài session_ctx.py mà lane A đã nêu

M-09 · scripts/session_ctx.py — 7 vùng đọc tên (🟢 phần lõi · 🔴 phần rìa) — XÁC NHẬN, mở rộng

Dòng Đọc tên gì Vỡ thế nào Mức
:110 Path(session_dir).glob('_snapshot-*') Đổi tiền tố ⇒ snaps rỗng ⇒ last_snapshot_mtime trả None ⇒ mốc --since tụt về nhánh dự phòng mà không báo 🔴 câm
:116 .claude / "WAL.md" cứng Đổi tên WAL ⇒ runid = None, dòng tường thuật mất mã lượt chạy, không throw 🔴 câm
:133 sessions_root / f"session-{session_n}" Đổi hình dạng thư mục ⇒ đường dẫn không tồn tại 🟡
:180 session_dir.rglob('*') KHÔNG lọc theo tên — điểm 🟢: quét trọn thư mục nên tên mới tự vào 🟢
:349-358 _count_pause_on_disk: glob('_pause-*.md') + glob('pause-*.md') Đọc CẢ HAI họ (hub-form S148+ ⟂ legacy ≤S147). Chú thích :351-353 khai vì sao không đếm trùng: "The glob pause-* does NOT match _pause-1.md (leading underscore)" 🟢 tiền lệ đúng sách G1-M3
:530 :548 :549 _context-s-%d.md · _mind-s-%d.md · _end Thiếu tệp ⇒ SKIP/CO có báo 🟡
:594 session_dir.glob('*mind*') — quét rộng rồi liệt ứng viên khi tệp chuẩn vắng 🟢 mẫu tốt thứ hai: không thấy tên chuẩn thì in ra những tên đang có, thay vì im lặng

🔴 Điểm giòn nhất, chính chú thích tự khai (:53-56): cơ chế dò ts: không lọc theo tên tệp ⇒ nếu _mind-s-<N>.md lỡ chứa một dòng ts: thì nó bị đọc thành mốc thời gian của marker. Nghĩa là quy ước NỘI DUNG đang gánh việc mà quy ước TÊN đáng lẽ phải gánh. Chuẩn lane b cần một mục riêng cho lớp này.


M-10 · scripts/session-scaffold.ps1scripts/session_scaffold.py — cặp sinh đôi (🟡) — XÁC NHẬN CÓ FORK, BÁC HỆ QUẢ

Trường Đo được
Fork có thật? session-scaffold.ps1 (6785 B, 2026-07-24 23:53) ⟂ session_scaffold.py (6092 B, 2026-07-24 17:44). Hai quy ước tên tệp cho MỘT khái niệm (kebab ⟂ snake)
Lane A khai hệ quả "sửa một bản quên bản kia là đẻ ra họ thứ ba"
Đo thật Hai bản HIỆN SINH RA TÊN GIỐNG HỆT NHAU: .ps1:116-117session-$targetN + _context-s-$targetN.md; .py:105-106f"session-{n}" + f"_context-s-{n}.md". .py:13 còn tự khai path HARD-PIN … KHONG configurable
Bác một phần: đây chưa phải fork tên đầu ra, mới là fork tên chính nó. "Đang đẻ họ thứ ba" là giả thuyết tương lai, không phải trạng thái hiện có — nói vậy là thổi phồng
Nguy cơ thật, đo được Hai bản cùng hard-pin, không dùng chung nguồn. Đổi hình dạng session-<N> phải sửa cả hai, cộng governance-detectors.ps1:1639, cộng session_ctx.py:1334 chỗ, 0 nguồn chung
Mức 🟡 vỡ-ồn (lệch nhau ⇒ COLLISION exit 4 ở .ps1:137, thấy được)

M-11 · .claude/hooks/wal-flush.ps1 — hook tự bị neo bằng tên (🔴 vỡ-câm) — XÁC NHẬN, nặng hơn lane A khai

Trường Đo được
Neo ở đâu .claude/settings.json:9"command": "powershell.exe -ExecutionPolicy Bypass -File .claude/hooks/wal-flush.ps1"
Đổi tên tệp ⇒ PowerShell không tìm thấy tệp ⇒ việc (commit WAL) DỪNG HẲN. Hook tự khai Fail-open MOI nhanh: exit 0 ke ca loi — nhưng exit 0 đó nằm TRONG tệp; tệp không chạy thì không ai exit 0 hộ. Mã thoát thật của nhánh này KHÔNG ĐO ĐƯỢC trong lượt read-only
🔴 Neo thứ hai — SỐ DÒNG bị neo wal-flush.ps1:16-17 nguyên văn: "!! GIU $paths O DUNG DONG 13: nhieu doc trich-dan "wal-flush.ps1:13" (tiep.md :23, spec, memory). Chen dong TREN day = lao-hoa het cac trich-dan do" ⇒ tệp bị neo cả bằng TÊN lẫn bằng SỐ DÒNG, và số dòng chỉ được canh bằng một dòng chú thích
Nội dung dòng 13 $paths = @(".claude/WAL.md", ".claude/agent-memory/", ".claude/workflows/runs/", ".claude/sessions/")4 đường dẫn cứng. Đổi tên bất kỳ thư mục nào ⇒ git add trượt im lặng (2>$null), $cand không nhận path ⇒ thư mục đó thôi được commit tự động, 0 báo
Mức 🔴 vỡ-câm ×2 (tên tệp · 4 đường dẫn nội dung) + 1 neo-số-dòng chỉ canh bằng chữ

🔴 Ràng buộc cho lane b: chuẩn phải có mục riêng cho "tên bị neo NGOÀI kho mã" (settings.json là cấu hình runtime — không ai grep nó khi đổi tên script), và phải cấm hẳn lối "giữ nguyên số dòng" — quy ước không máy nào thi hành được.


§1b — NĂM KỊCH BẢN LANE A KHAI CHƯA ĐO — nay đã đo từng dòng

M-12 · scripts/closeout-sentinel.ps1 (247 dòng) — 🔴 vỡ-câm, ca nặng

Dòng Đọc tên gì Vỡ thế nào
:118 $COUNTER = '.claude/governance/.session-counter.json' Đổi ⇒ tín hiệu phụ WARN … not touched (non-gating) — ồn nhẹ
:119 $MEMROOT = '.claude/agent-memory' Đổi ⇒ vị-từ-1 (delta thư mục vai) mất trọn nguồn
:160 $runsDir = … '.claude/workflows/runs' Đổi ⇒ nhánh else: $auditSource = 'auto-detect: no session token in subject / runs/ missing'
:163 **`$h24Marker = '(?i)h24 lead-(view
:168 $c.Name -match '(?i)h24' khớp TÊN THƯ MỤC lượt chạy 🔴 cùng hậu quả
:165 $_.Name -match $sessRe — lọc thư mục lượt chạy theo mã phiên trong tên 🔴 Thư mục lượt chạy không mang S<n>vô hình với sentinel

🔴 Đúng hình dạng "vắng-mặt trông giống ổn": đổi tên ⇒ máy chuyển SKIP, và SKIP đọc y hệt "phiên này không cần kiểm". Cộng :165: 18/88 thư mục lượt chạy hiện KHÔNG mang S<n> (§2 nhóm 3) ⇒ vị-từ này đã đang mù một phần kho hôm nay, không cần ai đổi tên gì.

M-13 · scripts/mfe-eval.ps1 (334 dòng) — 🔴 vỡ-câm

Dòng Đọc tên gì Vỡ thế nào
:44 .claude\agent-memory\memory-budget.json vắng ⇒ hỏng sớm (ồn)
:52-54 .claude\governance\ACTIVE-MARKS.md · docs\governance\error-ledger.md · docs\gotchas.md 3 tên sổ cứng. Đổi ⇒ bộ phân tích đọc 0 dòng ⇒ điểm vẫn tính, mẫu số về 0
:243 Get-ChildItem '.claude\agents\*.md' | Where Name -ne 'README.md'$role = $rf.BaseName Roster suy từ tên tệp
:264 ".claude\agent-memory\$role\MEMORY.md"ghép tên vai vào đường dẫn 🔴 Tên thư mục nhật ký lệch tên tệp vai ⇒ :265-267 in N/A (no persistent diary -> ephemeral/unspawned) rồi continue. Vai bị LOẠI khỏi phép đo, và lời giải thích in ra là một lời nói dối có thiện chí
:302 Tự khai [SUB-WORKFLOW] N/A by design … hmw.js sub-<role>-<i> 🟢 trung thực về phạm vi

🔴 Bất biến ngầm chưa ai viết ra: .claude/agents/<role>.md BaseName phải bằng .claude/agent-memory/<role>/ tên thư mục. Hai chỗ, không nguồn chung, không máy kiểm. Lệch ⇒ im ở M-13; ở governance-detectors.ps1:1109 thì rơi $unmapped (liệt, không cờ).

M-14 · scripts/memory-selfimprove-audit.ps1 (346 dòng) — 🔴 vỡ-câm + BỆNH ĐÃ VÁ NƠI KHÁC CÒN SỐNG Ở ĐÂY

Dòng Đọc tên gì Vỡ thế nào
:122-124 .claude\agents · .claude\agent-memory · .claude\workflows\hmw.js 3 neo cứng
:189 Join-Path $agentsDir ("{0}.md" -f $role) ghép tên vai → tệp
:211 'scripts\governance-detectors.ps1' script neo tên script khác
:230-231 docs\rules.md · docs\governance\harness-11-engine.md 2 tên sổ cứng
:252 :257 :258 MEMORY.md · archive\_INDEX.md · *.gist.md 3 tên artefact bộ nhớ
🔴 :298 -Filter 'sub-*.md' CHÍNH XÁC bộ lọc mà governance-detectors.ps1 ĐÃ VÁ @S159 (:1093-1099 khai ca thật: glob này bỏ sót 3 lượt trả *-return.md, "dropped exactly the 3 most expensive lanes"). Bản vá KHÔNG nhân sang đây. Hệ quả: :300-301 in "latest run … has no sub-*.md (return-delta-only mode) - proxy N/A"N/A đọc thành "không áp dụng", không đọc thành "máy mù"
:299 -Filter '*-synthesis.md' họ tên thứ hai, cùng lớp

🔴 PHÁT HIỆN NẶNG NHẤT §1b. Một lỗi tên đã được chẩn đoán, đặt tên (C11(b) filter), vá và ghi chú kỹ ở tệp A — tệp B cùng kho, cùng đọc cùng thư mục, vẫn dùng bản lỗi. Đúng lớp "được-chỉ-1-chỗ ⇒ grep cùng-lớp", tái diễn, đo được, chưa ai bắt.

M-15 · scripts/crystallized-backfill.ps1 (254 dòng) — 🟡 vỡ-ồn (có nhãn MISSING), số dẫn xuất sai câm

Dòng Đọc tên gì Vỡ thế nào
:54-55 .claude\agent-memory + memory-budget.json vắng ⇒ Write-Error + exit 1🟡 ồn thật
:73-78 $defaultHotload = 4 tên sổ cứng (docs/STATUS.md · docs/HANDOFF.md · .claude/governance/ACTIVE-MARKS.md · docs/changelog/migration-todos.md) dùng khi cấu hình vắng
:106-114 Test-Path $fullstate='ok' / state='MISSING' Đổi tên sổ ⇒ in MISSING từng dòng (🟡) NHƯNG $totalBytes không cộng ⇒ $measuredHeadroom = $leadCap - $tokHigh to hơn thực tế ⇒ kết luận "còn nhiều chỗ trống" sai câm
Mức 🟡 ở lớp hiển thị · 🔴 ở lớp con số dẫn xuất. Ghi 🟡 có caveat vì nhãn MISSING có in ra

M-16 · scripts/applied-eval-nokey.ps1 (362 dòng) — BÁC HẲN: KHÔNG ĐỌC TÊN NÀO

Trường Đo được
Phép đo grep -cE "Join-Path|Get-ChildItem|Test-Path|-Filter|Resolve-Path|Get-Content|Set-Content|Out-File|\[IO\.|ConvertFrom-Json" scripts/applied-eval-nokey.ps1 = 0
Control-dương (cùng thước) Cùng mẫu trên scripts/mfe-eval.ps1 = 14 ⇒ mẫu chạy được, 0 là 0 thật
4 hit tên tệp duy nhất :103 :104 :105 :361chuỗi hướng-dẫn-chạy in ra màn hình, tức nó nhắc tên của chính nó
Bác hẳn. Script không có bất kỳ thao tác tệp nào; là khối tự-kiểm + văn bản. Đưa vào kiểm kê máy-đọc-tên là phồng mẫu số. Dây duy nhất: tên của chính nó bị nhắc trong 4 chuỗi in + trong tài liệu
Mức — (loại khỏi kiểm kê)

§1c — TỔNG KIỂM KÊ

Kết luận Số
Đoạn máy xác minh có đọc tên 14 (M-01…M-05, M-07…M-15)
BÁC HẲN (không phải máy đọc tên) 2 — M-06 detectors:1716 (chú thích) · M-16 applied-eval-nokey.ps1 (0 file-IO)
🔴 vỡ-câm 10 — M-02 · M-03 · M-04 · M-05 · M-07 · M-08 · M-09(rìa) · M-11 · M-12 · M-13 · M-14 → (đếm theo ĐOẠN MÁY, M-09 tính 1 dù có cả nhánh 🟢) = 11 đoạn có ít nhất 1 nhánh câm; 10 đoạn câm-thuần
🟡 vỡ-ồn 3 — M-01 (STOP-HARD) · M-10 (COLLISION) · M-15 (MISSING)
🟢 tự thích nghi 0 đoạn máy trọn vẹn; chỉ 3 NHÁNH 🟢 nằm bên trong đoạn khác: session_ctx.py:349-358 (đọc-2-họ) · session_ctx.py:594 (in ứng viên khi vắng) · detectors:1648-1649 (đọc-2-họ)

🔴 Con số phải nói ra: 0/14 đoạn máy tự thích nghi được với tên mới. Ba nhánh 🟢 đều là xử lý tay cho một cặp cụ thể (_pausepause), không phải cơ chế tổng quát. Chuẩn lane b không được giả định có bất kỳ máy nào sẽ tự nuốt tên mới.

Sửa số so lane A: lane A khai 11 đoạn; đo lại ra 14 xác minh + 2 bác. Chênh vì: lane A gộp 5 kịch bản chưa đo vào một dòng số 10, và tính 2 dòng chú thích (:1679 :1716) thành 2 đoạn máy. Cộng thêm 1 đoạn lane A không liệt (detectors:1771, bản sao thứ hai của bộ lọc).