Files
solution-erp/.claude/workflows/runs/2026-07-20-S141-adap-dot-9-10-bo-ba-sub/sub-reviewer-fable-spec.md
pqhuy1987 2757e418a1
All checks were successful
Deploy SOLUTION_ERP / build-deploy (push) Successful in 5m43s
[CLAUDE] Docs: closeout OUTWARD wave adap đợt-9/10 + vá drift skill-matrix H24
Closeout 4 mục OUTWARD của wave S141-S142 (anh gật @S143):
- adap-report 7/7 thư, đủ 5 trường REPORT-FORMAT LOCK, evidence đo thật
- email hub báo-nấc (sha 6c94873f72e0, selftest_verify exit 0, log _index cùng lượt)
- STAGE-2: 7 thư -> inbox/ai_infra/, _index 0 pending, cross-check 7/7
- squash K=8 wal: -> commit chốt

Ngoài wave: agents/README skill-matrix thiếu 2 row H24 (drift S121) -> 15/17 thành 17/17.

Nấc cao nhất khai được = executed-file/verified-pending-restart (trio CHƯA spawn).
2 phát hiện khai thẳng theo G-015 (chi tiết trong report + email):
- whitelist `tools:` KHÔNG chặn ghi ở runtime: 6 vai read-only bị append Write+Edit
- pull-lag do "watch broadcasts/inbox" canh nhầm chỗ

TICK H24: counter 16->17 (S143), 3-điều-kiện OK-reachable, không fail-loud.
Detector TOTAL 46 == baseline 46, 0 flag mới.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-22 12:32:27 +07:00

18 KiB
Raw Blame History

sub-reviewer-fable-spec — REVIEW-GATE spec v1 adap wave đợt-9/10 (S141, 2026-07-20)

Vai: reviewer (fable-real single-lane, engine-đắt lệnh-A). Đề-bài: adversarial deep-pass spec v1 (bản đĩa spec-adap-dot-9-10-20-07-2026.md 14 468B = authoritative; bản inline task = nén, nhất quán). 5 trục: FIDELITY khuôn hub · CONSISTENCY floor SE · OMISSION · ACCEPTANCE đo-được · RISK chưa khai. Ghi TRONG LÚC LÀM (anti-#53).

VERDICT: GO-WITH-FIXES — 0 Critical / 7 Major / 9 minor

Spec đứng được: khuôn trio 5-câu + contract ①a + carve-out + stamp + annex đều bám thư hub sát (nhiều chỗ siết thêm đúng hướng: pin-missing→TRƯỢT, FI 2-chiều, TRIPLE-17 chống xoá-README). 7 Major đều fix-được bằng sửa spec ≤1 câu/điểm, không đổi kiến trúc.

Evidence base (đã chạm đĩa, không tin trí nhớ)

  • 7/7 thư inbox đọc trọn: 58e28bae (trio 5-câu + 4-khoản C) · 9a35405b (carveout-dp2 khối 1-6) · 6239dd40 (stamp-decode) · dede7ec5 (đính-chính tick + annex + design-note) · 101e69d6 (session-model kit + manifest 4 khoản + thang 5 nấc) · d68de5e7 (precedence delta) · 9cd1a486 (nudge).
  • Floor đĩa: session-start.md §2.1.2/§2.1.8 (:127-208) · session-end.md §L.b (:52-113) + :142 · .claude/governance/.session-counter.json (counter=15, S141 đã tick, history 5 entry, 3 ca FAIL-LOUD S127/S133/S139) · memory-budget.json (measured 14 row + h24_cadence 6/15/3 + C1-list) · hmw.js :22-36/:41/:55/:178-195 · lead-view-auditor.md:1-11 (mẫu frontmatter khớp 100% A1) · check-email.md:17 · send-email.md:28-32 · error-ledger.md:38-42 · governance-detectors.ps1 (:38 RepoRoot · :65-68 INFORM-sink owner-set · H24-1/2/3 + H24-4 sink → tên H24-5 TRỐNG) · agents/README:3/:5/:222 · engine:345 · vocab:51 · workflows/README:64.
  • Re-đo độc lập: git log da349fc = 2026-07-17 19:12:41 +0700, label "S135-S136" (force-fire trong message) → mốc annex ĐÚNG ngày; "S135" = item-label đúng (§L.b(j)(vi) "Item 3 S135"). · Sweep roster: bắt 2 site sống NGOÀI spec (dưới, M3) · Sweep "9 roster": chỉ workflows/README:64 ✓ · Sweep precedence stale-label: 0 hit sống ✓ spec claim đúng · AI_INFRA/scripts/stamp_verify.py TỒN TẠI (2 247B, Jul-3) — đọc trọn: regex tolerant "?([0-9a-fA-F]{8,64})"? :15 + 2-variant :38-39 + prefix-match :42 + exit-code ✓ đúng như thư mô tả → port verbatim khả thi.

MAJOR (7) — fix trước khi implement

M1 [B2↔B3↔khuôn ①a] Detector H24-5 thiếu nhánh counter-regress mà FI ca-2 lại kỳ vọng FLAG khi giảm-counter. B2 classify: is-ancestor→OK · cat-file=commit→SQUASH-BENIGN · else→FLAG object-missing; "Counter-regress check optional param" (spec:34) không formula, không nói FI bật param. B3 (spec:36): "ca-2 fake-sha 000…0 (+biến thể giảm counter) → KỲ VỌNG FLAG" — biến thể giảm-counter giữ sha reachable ⇒ đường B2 as-written ra OK-reachable 0-FLAG ⇒ acceptance ③7 "FI 2/2 PASS" bất khả thi hoặc bị né bằng cách chỉ test fake-sha (Goodhart: test biến-thể dễ đậu). Khuôn ①a: "counter-lùi ⇒ FAIL-LOUD như cũ" — lớp chống giả-mạo. Static-check khả thi read-only: FLAG khi counter < last_audit.light_at_counter counter < last_audit.deep_at_counter (đĩa hiện tại 15 ≥ 14/3 → repo thật vẫn 0-FLAG ✓ ③7 giữ được). Fix: quy định regress-branch DEFAULT-ON với formula trên (bỏ "optional param"), FI ca-2 chạy CẢ 2 biến-thể.

M2 [B2 ↔ governance-detectors.ps1:65-68] FLAG-vào-TOTAL ngày-một mâu thuẫn luật owner-set "detector MỚI vào INFORM-sink". :65-68: "INFORM-only flag sink for NEW detectors (C6, H24-4)… a brand-new net whose LOW hits are read by judgement on day one must not move the audited TOTAL" (anti-Goodhart, owner-set). Spec:34 quyết ngược: "object-missing = FLAG thật vào TOTAL". Có đường biện hộ (H24-5 MED + deterministic ≠ "LOW hits read by judgement") nhưng spec KHÔNG reconcile với luật đó. Fix (1 trong 2): (a) day-one vào INFORM-sink, promote vào TOTAL sau lượt chạy sạch (răng không mất — contract §2.1.8(b) runtime vẫn FAIL-LOUD); (b) giữ TOTAL nhưng ghi rõ lý-do phân-biệt class + đưa vào Chờ-anh (luật owner-set → owner quyết override).

M3 [A6 + acceptance ③4] Sweep sót 2 site sống + acceptance tự-giới-hạn "trên các file sửa" = Goodhart-able by construction. Grep độc lập bắt: session-start.md:97 + session-end.md:142 — cả hai mang "10 product/quality + 4 monitor INFORM-only" (đọc MỖI phiên, sống) — KHÔNG có trong danh-sách A6 (inline lẫn disk). ③4 đo "grep trên các file SỬA = 0" ⇒ site ở file CHƯA-sửa vô hình by construction (đúng bệnh "đo cái dễ đo" §L.b(f) đã tự ghi trong repo). Fix: +2 site vào A6; acceptance ③4 đổi thành grep REPO-WIDE trừ frozen-history (archive/ runs/ sessions/ adap-reports/ broadcasts/ agent-memory/) = 0 hit sống; cân nhắc +3 bullet trio vào khối topology session-start §2.1 (:98-113) + session-end Phase-1 (:36-39).

M4 [A4/A5 — consent + Light-skip = carve-out chưa khai, 0 lưới] Hub câu-3 floor: "chạy ĐỦ CẢ HAI ĐẦU mỗi phiên-LOGIC" (consent-form nhóm được giữ). SE thêm: anh-gật-mới-chạy + "Light → skip hợp lệ" + KHÔNG cadence-key ⇒ chuỗi phiên anh không gật / Light liên tiếp → trio không chạy mà KHÔNG một dòng nợ nào hiện (nhip-no-probe không phủ trio — by design). Đây đúng CLASS carve-out ô3, mà ô3 được hub CONFIRM chỉ ở nấc "PASS-với-carve-out" NHỜ 2 lưới sống (9a35405b khối 2: rủi-ro mới = "chủ quên gật mà không ai kêu"); trio-carve-out hiện 0 lưới. Fix rẻ: (i) proposal-line in CẢ khi Light (skip = thấy-mà-không-gật, không phải im lặng); (ii) skip ghi 1 dòng vết session-log/WAL trio: skipped <lý-do> (hậu-kiểm đếm được, cùng họ phép-8); (iii) adap-report khai nấc "PASS-với-carve-out (consent + Light-exempt)", KHÔNG tự khai đủ-floor.

M5 [Process — adap-report / email báo-nấc / STAGE-2 vắng khỏi spec + acceptance] Precedence d68de5e7 §5 đòi "tự-báo nấc kể cả 'đã re-verify, không đổi'"; manifest 101e69d6 có thang 5-nấc per-khoản; channel-contract SE (check-email.md STAGE-2 :20-22 + §J2) đòi move processed + _index. Spec chỉ nhắc adap-report 1 lần (defer-note hướng-(i), spec:46). Prior waves S137/S139 đều ship adap-reports + email hub. Fix: thêm bước "em-main @closeout: 7 disposition adap-report (kể cả SKIP/no-change) + email báo-nấc + STAGE-2 move + _index" + acceptance ③14 đếm được (7/7 disposition tồn tại).

M6 [A5(i)] Thêm §L.b(k) mà không sửa header range "(a)→(j)". session-end.md:52 "auto-maintain (a)→(j) (đủ HẾT, KHÔNG skip…)" = range-token sống; :53 CHÍNH LÀ ghi-chú vá class này ("Nhãn cũ ghi 8-step trong khi thân (a)→(i)=9 — view-stale-count… KHÔNG chép số vào nhãn"). Giữ "(a)→(j)" thì (k) đọc thành ngoài-danh-sách-bắt-buộc → skip-able. Fix: header → "(a)→(k)" hoặc đúng tinh thần :53 bỏ range; tuỳ chọn thêm mapping "(k) = trio" cạnh "(j) = H24" ở :52.

M7 [B6] Half-fix: prereq (a) "hub phát mẫu áp dụng" CŨNG đã về — chỉ flip (b) làm draft tự-mâu-thuẫn. Draft §4 (đọc đĩa): "không bật trước khi: (a) hub phát mẫu áp dụng, (b) khuôn bộ-ba SUB về, (c) anh duyệt VC". Kit 101e69d6 = "bộ kit + manifest" = mẫu áp dụng — về cùng đợt với 58e28bae; chính B6 trích K4/session_ctx_kb/meld-gap TỪ kit đó. Sau edit-(b), (a) vẫn treo "chờ hub" = stale đúng class spec đặt ra để vá. Fix 1 dòng: flip (a) " ĐÃ VỀ 2026-07-18 (101e69d6 — kit + manifest 4 khoản; §5-Q4 van-ngưỡng CHƯA được trả lời)". (c) giữ treo ✓.

minor (9)

  • n1 A1 "param SE từ chối full-id" = claim CHƯA-ĐO — hmw.js:51 tự khai "CHƯA AI THỬ THẬT (fix#8a)"; doc nói enum-alias. Deviation alias-vs-full-id vẫn ĐÚNG (policy S124 + alias = dạng ĐÃ-test per d68de5e7 caveat; full-id n=0) nhưng wording phải hedge + khai form-deviation trong adap-report.
  • n2 A7 thiếu cập-nhật measured._note addendum (tiền-lệ S138 "+2 row H24 đo TƯƠI" ghi trong _note) → thêm "S141 ADDENDUM +3 row trio".
  • n3 B1 "_tick_invariant_note: NET +1/label ≡ hub +1/cặp" — tương-đương chỉ trên cặp ĐÃ ĐÓNG; cặp đang-mở: hub-form +1 (chốt tại dừng) vs SE-form +0 (chờ nối) = lệch transient. Hub đã bless hành-vi (9a35405b khối 1: "chỉ cần re-sync câu-chữ, không phải đo lại") → thêm nửa câu khai transient để auditor sau không đọc thành tick-site-identical.
  • n4 refine "mục đã-BÁC (≥0 dòng)" — "≥0" cho phép luôn-rỗng = tự vô-hiệu mục-đích chống-nghi-thức-rỗng (58e28bae câu 1). Đổi: mục PHẢI hiện diện; 0-item → khai "không có ứng-viên bị bác".
  • n5 refine KHÔNG được pin run-folder đích-danh (audit có, refine không) + không fail-closed khi harness-eval-return.md vắng → spawn sai thứ-tự/sai folder = đọc bản cũ/bịa. Mirror rule audit: lead truyền path + input-missing → TỪ-CHỐI.
  • n6 engine:345 cite "hmw.js VALID_ROLES :22-36" — A3 chèn 3 dòng làm range stale (→ ~:39). Sửa hint hoặc bỏ line-hint (chuẩn "NO line-hints" đã có ở memory-budget pointer_style).
  • n7 B5 verify chỉ chạy biến-thể quoted (đúng incident-class S141) — thư mục-5 test 3 biến-thể; thêm 1 synthetic không-ngoặc/8-hex hoặc khai chỉ-test-quoted.
  • n8 agents/README:5 "đổi số" (+4→+7) trong khi README:3 tự ghi "Vá @S122 bằng BỎ số, không phải ĐỔI số — đổi số thì roster kế lại stale". Hoặc chuyển form bỏ-số, hoặc giữ đổi-số + 1 dòng lý-do (structural split có giá trị đọc) — hiện spec im lặng trước tension của chính file đích.
  • n9 writeGuard :187 + comment :180-181 enum read-only hiện ĐÃ thiếu lead-view/omission (drift sẵn có từ S121) — thêm trio mà không hoàn-thiện enum = bảo-tồn drift; nhân tiện thêm đủ 2 vai H24 hoặc degrade enum → mô-tả-class.

Trục-5 RISK — các câu hỏi task đặt, trả lời có bằng chứng

Câu hỏi Trả lời Evidence
B6 vi phạm carry #13(c) KHÔNG-wire? KHÔNG — edit = truth-up prereq trong draft (doc-only), 0 cơ-chế wire; #13(c) cấm WIRE. Còn M7 half-fix draft §4 + spec:42 "KHÔNG wire gì khác" + ③10 diff-scope
Consent-form trio Carve-out chưa khai + 0 lưới → M4 58e28bae câu-3 vs spec:22
TUẦN TỰ = kỷ-luật-người? Audit đã fail-closed (pin-missing→TRƯỢT) = chốt máy; refine chưa → n5 spec:16 vs :15
H24-5 FLAG-vs-INFORM M2 (luật :65-68 owner-set) + M1 (regress-branch) detectors.ps1:65-68
Mốc da349fc ĐÚNG: 2026-07-17 19:12:41 +0700; label commit "S135-S136", item-label S135 đúng (§L.b(j)(vi)) — nano: có thể ghi "S135-S136 closeout" git log da349fc
Ranh refine⟂lead-omission đủ sắc? Đủ như spec (discriminator WHOSE-memory: LEAD hot-feed/carry = omission · AGENT corpus = refine); ratify pending đúng chỗ Chờ-anh-1; reinject-ledger dùng chung 2 phía là điểm cần ratify nêu rõ spec:15 + session-start:112
A7 vi phạm no-hand-edit? KHÔNG — đo-bằng-script rồi chép số THẬT = đúng tiền-lệ S138 ADDENDUM (+2 row H24 "đo TƯƠI"); rule cấm sửa-không-đo. Còn n2 (_note) memory-budget.json:2/:143
Mirror C1 cấm ghi memory-budget/counter NGAY BÂY GIỜ? KHÔNG có cửa-sổ đo active — C1 window mở "từ script đo đầu-tiên khối (c) closeout tới verdict cuối" (§L.b(c)); trio chưa từng chạy (first-run phiên sau ③12); wave edits land mid-session TRƯỚC closeout ⇒ hợp lệ. Ghi 1 dòng thứ-tự "A7/B1 land trước khối (c)" là đủ session-end:56 + session-start:135

Fidelity tally 7 thư (trục-1)

  1. 58e28bae khối B câu 1-5 → A1-A5: FAITHFUL (4-lớp refine, chốt-dừng, đã-BÁC, PIN đích-danh, ≥2 số re-run, scribe-ngay, 2-tầng máy-đo→sub-phán, ranh 4 vai, khuôn (a)-(d) + 2 caveat). 2 deviation có chủ-đích: model-alias (n1, justified) + Light-skip (M4, phải khai). Khối C① khuôn contract → B1/A4(i) khớp từng điều-kiện; ② edits-land-trước-review = đã là floor SE (feedback S139); ③ rename ACK n/a; ④a hứa-máy — spec này không thêm câu "máy sẽ quét" nào thiếu mã (H24-5 = mã thật kèm FI) ✓; ④b n/a.
  2. 9a35405b khối 2 → B4 FAITHFUL (2 lưới đúng danh: nhip-no-probe + H25; "nên tụt"→"tụt" = siết, hợp lệ; basis + live-evidence S139→S140 đúng hướng). Khối 3 → hướng (i) DEFER khai trong adap-report + (ii) đã được thay bằng khuôn ①a APPROVED (đến sau, thắng) ✓; carry-đặt-tên đã làm S137 ✓.
  3. 6239dd40 → B5 FAITHFUL: regex verbatim thư :37; byte-safe SE đã có từ S125 (check-email:17); lỗ THẬT còn lại = extraction quote-strict (incident S141 suýt-oan 3/3, investigator-diary xác nhận) → pin mẫu + port script = đúng thuốc. n7.
  4. dede7ec5 → B1 note + A5(ii) annex FAITHFUL (baseline khai-1-lần, FAIL chỉ closeout sau mốc, n/a trước mốc, không lặp); design-note log-BOUNDED phản ánh đúng (history[] append-unbounded VERIFIED trên đĩa — 5 entry không cap). n3.
  5. 101e69d6 → B6 đúng scope KHÔNG-wire (kit adopt chờ VC = hợp lệ manifest "đã-đồng-ý" pending); M7 prereq-(a).
  6. d68de5e7 → "0 site sống" VERIFIED bằng grep độc lập (0 hit); nghĩa vụ còn lại = record re-verify vào adap-report (M5).
  7. 9cd1a486 nudge → ACK-only ✓.

Acceptance ③ per-dòng (trục-4)

1 ✓ đo được (grep frontmatter + non-empty) · 2 ✓ TRIPLE 3-nguồn + anti-Goodhart cấm-xoá-README (bài #48 R2-C1) · 3 ✓ grep-able · 4 ✗ Goodhart-able (M3) · 5 ✓ falsify = re-run script so JSON · 6 ✓ ConvertFrom-Json exit · 7 ✗ ca-2 giảm-counter bất khả thi as-spec'd (M1); vế repo-thật OK-reachable deterministic trong phiên (head 4c43d74 = ancestor tới khi closeout-squash) · 8 ✓ · 9 ✓ + fallback python-vắng khai thật · 10 ✓ (nửa "0 wire khác" đo bằng diff-scope file draft) · 11 ~ judgement-bounded (diff output trước/sau, flag mới từ roster/STATUS edits dự-kiến C2) · 12 ✓ nấc executed-file/verified-pending-restart = khai thật đúng G-011 · 13 ✓ E-006 backstop. Thiếu: ③14 process (M5).

Disposition bảng TỪNG finding

ID Khối Mức Fix 1-dòng Blocking?
M1 B2/B3/③7 MAJOR regress-branch DEFAULT-ON formula counter < last_audit.*_at_counter + FI ca-2 chạy cả 2 biến-thể CÓ (③7 bất khả thi nếu không)
M2 B2 MAJOR day-one INFORM-sink HOẶC khai override + Chờ-anh-4 CÓ (luật owner-set)
M3 A6/③4 MAJOR +session-start:97 +session-end:142; ③4 grep repo-wide trừ frozen CÓ (mục tiêu (E) vỡ nếu không)
M4 A4/A5 MAJOR proposal-line in cả Light + vết-skip 1 dòng + adap-report khai carve-out CÓ (floor-deviation phải khai trước khi báo hub)
M5 ①/③ MAJOR +bước em-main @closeout: 7 disposition + email + STAGE-2 + _index; +③14 CÓ (channel-contract)
M6 A5(i) MAJOR header §L.b "(a)→(j)"→"(a)→(k)" hoặc bỏ range CÓ (cùng commit với (k))
M7 B6 MAJOR flip prereq (a) ĐÃ VỀ (101e69d6) + note Q4 chưa trả lời CÓ (cùng edit B6)
n1 A1 minor hedge "chưa thử full-id (hmw.js:51)" + khai deviation adap-report không
n2 A7 minor +1 câu measured._note "S141 ADDENDUM +3 row" không
n3 B1 minor +nửa câu khai transient-lệch cặp-đang-mở không
n4 A1-refine minor "≥0 dòng" → "mục PHẢI hiện diện, 0-item khai lý-do" không
n5 A1-refine minor pin path cho refine + input-missing→TỪ-CHỐI không
n6 A6-engine minor sửa/bỏ line-hint ":22-36" không
n7 B5 minor +1 test synthetic không-ngoặc/8-hex hoặc khai scope không
n8 A6-README:5 minor chọn form bỏ-số hoặc ghi lý-do giữ đổi-số không
n9 A3 minor hoàn-thiện enum read-only (+2 vai H24) hoặc degrade không

(Blocking "CÓ" = nên fold vào spec TRƯỚC khi phát lệnh worker — tất cả đều là sửa-spec ≤1 câu, không phải redesign. n1-n9 fold lúc implement được.)

Đã-thử-phá mà ĐỨNG (positive validation — để không chỉ toàn gạch)

  • TRIPLE-17 + cấm-xoá-README: chống đúng catastrophic-Goodhart #48 (adap-report 2026-07-14 :48) ✓
  • FI 2-chiều trên cây tạm -RepoRoot: đúng feedback_faultinjection (FLAG đúng ca lỗi + IM-có-vết đúng ca squash) — detector script đã có hạ-tầng -RepoRoot + bài-học slug :398-409 ✓
  • Mirror C1 tái-dùng (0 cơ-chế mới): freeze-set canonical §L.b(c) đã phủ đủ mọi bề-mặt instrument đọc (agent-memory/** ⊇ memory-budget.json; counter; agents/*.md) ✓
  • ③12 nấc executed-file/verified-pending-restart: đúng thang G-011 + registry-probe BƯỚC 0.6b có sẵn ✓
  • KHÔNG cadence-key cho trio = FAITHFUL hub câu-3 "không counter đến-hạn nữa" (đây không phải lỗi — lỗi là thiếu vết-skip, M4) ✓
  • "0 site sống precedence" + "K1 gitignore PASS" + nguồn port stamp_verify.py: cả 3 claim của invest-lane RE-VERIFY độc lập ĐỨNG ✓

— reviewer, S141 2026-07-20. Token-cost ước: ~120K in / ~12K out tới điểm ghi file này.