[CLAUDE] Docs: S125-S126 closeout GOP — H23-precedence DO (spawn-param THANG hard-pin, /fable-real SONG) + sweep all-inherit va 15+3+5 + gotcha #83 + hub-mail h23-result
All checks were successful
Deploy SOLUTION_ERP / build-deploy (push) Successful in 5m30s
All checks were successful
Deploy SOLUTION_ERP / build-deploy (push) Successful in 5m30s
- NHOM A restart-verify: A1 tier:'fable' tren reviewer pin-opus -> resolved claude-fable-5 (spawn-param THANG); A2 no-tier -> claude-opus-4-8 DU lead=Fable (pin an runtime); A3 autoMemory WRITE-path OK (project_h23_spawn_precedence.md moi). - B1 sweep all-inherit floor-song: 15 dong/5 file + 3 cung-lop lot-pattern + 5 dong H23-stale o 3 command-file (H1 bat) -> VA HET; spawn-model-audit Section-D flush H8->S124 + effort-check (fault-inject 2-chieu PASS, 14 duong-gia -> 0); governance-detectors C3 seed +worker-tier-pin; re-grep 0 floor-song; suite 45 = baseline 0-new. - vocab-alias-map §3 canonical flip -> worker-tier-pin (all-inherit/two-tier = 2 alias cu); STATUS:6 FROZEN-diary label (het H24-3 lag); STATUS:25 + agents/README:5 sync. - Email hub h23-precedence-test-result stamp 945cf3ad (reviewer-gate FAIL bat 3 loi truoc stamp -> gotcha #83 aggregate-cumulative) + _index cung luot. - B3/B4 owner-gated: soan b3-b4-owner-gated-proposals.md CHO ANH (mega-line retier + budget:74 wording) — 0 apply. - Closeout: harvest 4 lane + 2 monitor (H2 GATE PASS 5/5, 0/29 orphan; H1 3/4 clean + 5-spot fix) + curate moved-not-cut reviewer/inv-cb + carry disposition (DONG 2: restart-s124, h23-fable-test-postrestart; MO re-stamp 9) + H24 counter=5 + pilot H22 D5 (pause-roundtrip + hook-fire re-verified; cross-model PENDING). - Governance/tooling-only: 0 prod-code, 0 mig, test 509 GIU, bundle FROZEN. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
@ -1,9 +1,21 @@
|
||||
# WAL — auto-generated, không sửa tay
|
||||
updated: — | session: — | branch: —
|
||||
goal: (trống — không có mạch dở)
|
||||
closing: S126 @2026-07-16T14:49:33+0700
|
||||
updated: 2026-07-16 | session: S126 | branch: main
|
||||
goal: Thực-thi spec adap-review S125 — NHÓM A + B1/B2/B3/B4/B6 [XONG HẾT] → còn B5 closeout GỘP S125+S126 → /pause.
|
||||
|
||||
chain:
|
||||
(rỗng)
|
||||
[x] /tiep resume S126 — ground-truth 4/4; lệch lead=Fable (WAL dự-kiến Opus, owner-choice) → D5 ghi, control A2 mạnh hơn (bằng chứng: runs/2026-07-16-S126-adap-spec-execute/run.md)
|
||||
[x] NHÓM A 3/3 — A1 H23=FABLE spawn-param THẮNG hard-pin ⇒ /fable-real SỐNG · A2 worker-pin=OPUS ăn runtime DÙ lead=Fable · A3 memory-write file mới OK (bằng chứng: runtime-verify-synthesis.md + spawn-model-audit -SessionId c0fa4300…)
|
||||
[x] B1 sweep+vá — 15 floor-sống/5 file + 3 cùng-lớp lọt-pattern → VÁ HẾT (vocab-alias-map §3 canonical-flip · STATUS:25/:42 · agents/README:5 · fable-real-runbook ×11 · harness-11 ×3 · hmw.js :9/:44-51 · spawn-model-audit Section-D flush H8→S124 + header/E.5 · governance-detectors C3 seed +worker-tier-pin); fault-inject 2-chiều PASS (inject 2 lỗi → 2 FLAG đúng; happy-path 14-dương-giả → 0); re-grep 0 floor-sống; detector-suite 45 = baseline, 0 flag mới (bằng chứng: sweep-synthesis.md)
|
||||
[x] B6 — 0 mail mới (hub chưa reply/re-stamp/vá-snippet — chỉ ghi-nhận); email H23-result: reviewer-gate FAIL bắt 3 lỗi thật → fix → stamp 945cf3ad selftest MATCH + stamp_verify exit-0 + _index CÙNG lượt (bằng chứng: broadcasts/outbox/ai_infra/2026-07-16-se-to-ai_infra-h23-precedence-test-result.md)
|
||||
[x] B2 memory-vế khớp S124 (carry (c) vế-memory đóng; vế STATUS:6 → closeout) · B3+B4 soạn surface 🔒CHỜ ANH (bằng chứng: b3-b4-owner-gated-proposals.md)
|
||||
[!] B5 closeout GỘP S125+S126 — session-end: STATUS Recently-Done (+bump label S119→ mới nhất, xử H24-3 MED) + HANDOFF tiering + session-log + memory-flush roster (harvest 4 lane VERIFIED trong sweep-synthesis §memoryDelta) + H2 harvest-gate 5-trục + H1 tooling-chốt + H24 counter tick + disposition TỪNG carry (6 product + h23-ĐÓNG + retier-mở) + commit + squash wal: + push
|
||||
[ ] /pause (đề bài anh — sau NHÓM B)
|
||||
|
||||
next: (trống)
|
||||
verify: (trống)
|
||||
next: Chạy /session-end theo checklist B5 (mọi việc khác ĐÃ xong, evidence trong runs/2026-07-16-S126-adap-spec-execute/) → /pause.
|
||||
|
||||
verify:
|
||||
- bash .claude/… §0 orphan-scan → 2026-07-16-S126-adap-spec-execute KHÔNG orphan (có runtime-verify-synthesis.md + sweep-synthesis.md)
|
||||
- powershell scripts/spawn-model-audit.ps1 → Section D: [OK] worker-tier-pin holds (14/14 model + 14/14 effort), TOTAL FLAGS 0
|
||||
- python D:\Dropbox\CONG_VIEC\AI_INFRA\scripts\stamp_verify.py broadcasts/outbox/ai_infra/2026-07-16-se-to-ai_infra-h23-precedence-test-result.md → exit 0
|
||||
- git grep -n 'all-inherit' -- docs/governance/vocab-alias-map.md | head -3 → dòng 47 là header alias (worker-tier-pin chuẩn)
|
||||
|
||||
File diff suppressed because one or more lines are too long
@ -86,7 +86,7 @@ Bearer từ `POST api.solutions.com.vn/api/auth/login` → status matrix expecte
|
||||
- **[→ git 07-12 · Mig64 IsPublic shipped since] Supplier import-v2 LENS-4 public/visibility recon:** 3 SELECTION consumers ALL hit `GET /suppliers` ListSuppliersQuery (SuppliersPage:83 · PeDetailTabs:2222 · ContractCreatePage:321); DISPLAY-of-existing joins by stored SupplierId MUST NOT filter (ContractFeatures/PeFeatures/Dashboard); write-guard backstops `ContractFeatures.cs:64`+`PurchaseEvaluationSupplierFeatures.cs:49`. Rec fail-closed default + stored `IsPublic bit`. Tag `[s112b, supplier-visibility, fail-closed-default]`.
|
||||
- **[all verbatim → archive/2026-07.md] S98 verify-lane (detector 28→25, 8 derived-stale=FP vs canonical 61/89/440/79; grep exact misses README variant) · S97 feedback-audit (#77/#78/#79 `gotchas.md:1301/1317/1325`; #53-garble×6=cicd MEMORY-self-target ~17.5KB; Mig60 wrong-table Approvals→Mig61 Changelogs) · 07-01 Supplier-predecessor SUPERSEDED by 07-06 · S93 MFE denom=marks/AS/guards dedup-AS-xref=29, coverage exact-id OR ≥2-content-word.**
|
||||
|
||||
- **[→ archive/2026-07.md @S125 + archive/2026-06.md] PE FROZEN-Mig59 + go-live recon (S87→S89):** giữ nóng ⭐ LATENT #73-class HoSoLink PUT-clears (`PurchaseEvaluationFeatures.cs:280` vs PeHeaderForm PUT omits, no preserve-test) · 3 cơ-chế finalize coexist AUTO-first · budget-matrix authz-asymm PRO=drafter/CCM=role (`PeSuggestedPriceFeatures.cs:153-199`).
|
||||
- **[→ archive/2026-07.md @S125 + 2026-06.md] PE FROZEN-Mig59 recon (S87→S89):** giữ nóng ⭐ LATENT #73-class HoSoLink PUT-clears (`PurchaseEvaluationFeatures.cs:280`) · 3 cơ-chế finalize coexist AUTO-first · budget-matrix authz-asymm PRO=drafter/CCM=role.
|
||||
- **[→ archive/2026-07.md @S125 + _INDEX] 2026-06-20 governance recon:** `harness-11-engine.md`=CANONICAL (D5-D10) · `error-ledger.md` §L.a/§L.b · H14 age-decay KHÔNG căn-cứ cắt feature · EVAL golden-set 14q weekly-manual.
|
||||
- **[→ archive/2026-07.md @S125 + _INDEX] PE recon (S69→S76):** WinnerQuoteTotal DERIVED 3-site · Budget gate PURE-ROLE (`PurchaseEvaluationFeatures.cs:800-801`) · V2 routing IGNORES roles (=ApproverUserId) 100% LINEAR.
|
||||
- **[→ archive/2026-07.md @S125 + _INDEX] Office/HRM recon (S65→S69):** 21 `Off_*` keys · 10 office pages SHA-mirror · golive-flip=remove `RevokeTemporarilyHiddenModulesAsync` (`DbInitializer.cs:2040`) · **gotcha #66** `index.css` ngoài @layer → heading cần `text-white!`.
|
||||
@ -105,10 +105,10 @@ Bearer từ `POST api.solutions.com.vn/api/auth/login` → status matrix expecte
|
||||
- **[→ archive/2026-07.md @S125 · Mig 66 SHIPPED] S117 PE giá-chốt RANGE Min+Max invest [fable-real-single]:** ApprovedPrice WRITE 1-site `ApplyApprovedPriceOnFinalize` (3 nhánh DaDuyet; skipToFinal chỉ dời pointer) · ⭐ HĐ-gen KHÔNG đọc ApprovedPrice (GiaTri=SUM IsSelected `CreateContractFromEvaluationFeatures.cs:88-100`) · `types/purchaseEvaluation.ts` KHÔNG SHA-mirror 2-app (edit riêng) · latent: winnerQuoteTotal subset ÂM vs validator `>=0 :501`. `[s117, prominmax]`
|
||||
- **[→ archive/2026-07.md @S125] S117 PE lũy-kế RCA [fable-real-single]:** phiếu A/018 KHÔNG DaDuyet (opt-in finalize UNCHECKED S97 `PeWorkflowPanel.tsx:57`) · ⭐ residual DISPLAY-LIE #78 nửa-còn-lại: `endsBeforeCeo`=config-TRUE bất chấp pointer (detail `:1152-1154` · list `:647-651`) · 3 cơ-chế finalize phân biệt Mig58-optin ≠ Mig53/54-threshold ≠ Mig31-pointer · fix-rec pointer-aware, KHÔNG nới filter lũy-kế `PeFeatures.cs:906`. `[fable-S117]`
|
||||
|
||||
## S116 — PE negative-quote invest (fable-clone ensemble, 07-13)
|
||||
- Hội-tụ **FE-ONLY**: BE/DB nhận âm sẵn (no validator/CHECK); NS giữ-nguyên architectural; 3 chốt FE parseVnd/format/gate; sign-aware `VndInlineEdit:1003` tái dùng; chỉ submit-guard `:206` hard-reject. ⚠️ Lesson: quote sống `details[].quotes` KHÔNG `suppliers[].quotes`. **Detail:** `.claude/workflows/runs/2026-07-13-pe-negative-quote/` + session-log S116 + archive/2026-07.md 2×LENS. `[Opus-S116]`
|
||||
- **[→ archive/2026-07.md @S126] S116 PE negative-quote invest (fable-clone):** hội-tụ **FE-ONLY** (BE/DB nhận âm sẵn); ⚠️ quote sống `details[].quotes` KHÔNG `suppliers[].quotes`. Detail: `runs/2026-07-13-pe-negative-quote/`. `[Opus-S116]`
|
||||
|
||||
- **[→ archive/2026-07.md @S125 verbatim] S122 retro-harvest 7 orphan (`wf_5ce007c4-980`, 836K tok, 6/6 lane neo-SHA-thật 0-garble):** 🔴 LẬT tiền-đề — **0/7 mất, 7/7 ĐÃ XONG chỉ synthesis SAI CHỖ** ⇒ orphan-authority đo TÊN không đo NỘI-DUNG (8 dương-giả/25 run = 32%) · 🟢 tái-dùng: (a) ordinal-mig = sorted-listing, KHÔNG tin nhãn doc (doc = DẪN-XUẤT) · (b) hash-lệch ≠ invariant-vỡ (`git diff --no-index` 2-app exit-0 = mirror còn) · (c) owner-decision truy VÀO code (`:376` cite số decision) · 🔸 lane-RỖNG ≠ mất (synthesis trên đĩa `run.md:8` — per-turn ≠ per-task) · 🔴 memoryPack premise CÓ THỂ SAI (S113→thật S116), lane tự truy git đừng tin brief. Tag `[s122-retro-harvest, false-orphan-by-naming]`.
|
||||
- **[→ archive/2026-07.md @S125 verbatim] S122 retro-harvest 7 orphan (6/6 lane 0-garble):** 🔴 LẬT tiền-đề — **0/7 mất, 7/7 XONG chỉ synthesis SAI CHỖ** (orphan đo TÊN không đo NỘI-DUNG, 8 dương-giả/25=32%) · lane-RỖNG ≠ mất (per-turn ≠ per-task) · memoryPack premise CÓ THỂ SAI — lane tự truy git đừng tin brief. Tag `[s122-retro-harvest, false-orphan-by-naming]`.
|
||||
- **S126 (2026-07-16) A2 worker-pin tally + B1 all-inherit sweep [opus ×2, em-main VERIFY+APPEND]:** A2: **14/14 opus + 14/14 max** — lane no-tier CHÍNH NÓ resolve `claude-opus-4-8` DÙ lead=Fable ⇒ pin ăn runtime. B1: 284 instance → **15 floor-sống/5 file** + 26 lineage + 235 frozen; ⭐ nặng nhất `vocab-alias-map.md` §3 TỰ khai all-inherit="Canonical (hiện hành)" — doc chống-fork tự fork; class = S125 vá 2 command-file KHÔNG grep sibling governance. Lesson: mega-line blow Read-cap → perl-window giữ file:line; 2-pattern grep LỌT biến-thể không-literal (runbook:119 "lead-runtime (inherit)") — cần mắt-người pass khi vá. Em-main vá 15+3, fault-inject Section-D 2-chiều PASS, re-grep 0 floor-sống. Tag `[s126, h23-precedence, all-inherit-sweep]`.
|
||||
|
||||
## 🔄 Curate trigger
|
||||
- >~30KB → archive recent → L2 `archive/<period>.md` (byte-exact append) + `_INDEX.md` substring pointer. Stale >3mo → remove.
|
||||
|
||||
@ -43,3 +43,7 @@
|
||||
|
||||
- **[→ git+session-log 07-07] S105 BVAAU cross-repo auth RCA:** Q1 root-cause = FE Home MÙ session (bundle cũ relative `/api` trên site TĨNH `web.config` loại `^/api/` → `/api/auth/me` 404 → anonymous); fix API_BASE-absolute `51c69fb` LIVE. Q2 CRM1 hở 2 tầng (FE soft + API `enforceCrmGate:false`) → flip `AUTH_ENFORCE_CRM_GATE=true`. Q3 Zalo "User_ID" KHÔNG có UI. Class **"hub+site-tĩnh relative-`/api` chết im prod"**; #53-garble-7 → SendMessage-resume recover. *(verbatim → archive/2026-07.md)*
|
||||
- **[→ 07-12 LENS-3 entry above + git 07-06] S104 Supplier 30-field 🅰️ schema-invest WF `wf_5ac2cdb0`:** SUPERSEDED anchors giữ: ClosedXML 0.105.0 = Excel-standard (KHÔNG OpenXml-raw, `csproj:8`); reuse-existing-cols>parallel; `UpdateSupplierCommand.cs:49-57` blind-set=latent#73; seed fill-nulls-if-exists (`DbInitializer.cs:2781`); `SupplierDto` hand-projected 2-site (`GetSupplierQuery.cs:21`+`ListSuppliersQuery.cs:48-50`); `Dialog.tsx:48` max-h-70vh; extract `ui/PathLink.tsx`. Chốt Mig 62 +18 nullable. *(verbatim → archive/2026-07.md)*
|
||||
|
||||
## @S126 hook-curate batch (2026-07-16, em-main single-writer, moved-not-cut verbatim từ L1)
|
||||
|
||||
- **S116 — PE negative-quote invest (fable-clone ensemble, 07-13):** Hội-tụ **FE-ONLY**: BE/DB nhận âm sẵn (no validator/CHECK); NS giữ-nguyên architectural; 3 chốt FE parseVnd/format/gate; sign-aware `VndInlineEdit:1003` tái dùng; chỉ submit-guard `:206` hard-reject. ⚠️ Lesson: quote sống `details[].quotes` KHÔNG `suppliers[].quotes`. **Detail:** `.claude/workflows/runs/2026-07-13-pe-negative-quote/` + session-log S116 + archive/2026-07.md 2×LENS. `[Opus-S116]`
|
||||
|
||||
@ -77,10 +77,10 @@ Adversarial pre-commit reviewer SOLUTION_ERP. Read-only verify + live curl prod
|
||||
## 📅 Recent activity (compressed — full verbatim → `archive/2026-06.md` + `archive/2026-07.md` via `archive/_INDEX.md`)
|
||||
|
||||
- **S124 L2 fidelity-to-source review, adap-wave plan — PWF (0 misread/1 MAJOR/3m):** 5/6 broadcast-reading traps read-faithful (NOT-adopt→method/spirit · h17 4-floors-KEEP · r6 abs-path). MAJOR = **push-guard "REFINEMENT ahead-of-broadcast" (spec:58) = OVERCLAIM**: SE trailing-K is LOOSER than broadcast ahead-range-all-count, keeps sandwiched wal:→leak; NO dimension strictly ahead. run.md:15 + mark cl.4 already carry honest "noise-accepted no-rewrite" ⇒ spec contradicts own run.md+mark. **Lesson: "ahead/refinement" = verify vs broadcast's ACTUAL requirement (looser≠ahead); spec+adap-report = shipped artifact → reconcile before hub-send.** Verified: adap-reports at `docs/governance/` not `.claude/` (path-trap false-empty). → `archive/2026-07.md`.
|
||||
- **S124 (2026-07-15) adap-wave-reply PLAN L3-lens — PASS_WITH_FIXES (0C/3M/2m):** disk `sub-reviewer-3.md`. 🎯 **do-token trap committed WHILE adopting do-token**: spec "STATUS=26075 tok (real-N)" — I re-Read FULL → truncation = **70892 tok** (tail-alone 33944 > 26075) ⇒ near-cap CHUNK mislabeled whole-file, 2.72× under, feeds owner re-tier. **Lesson: verify do-token claim = re-Read full + read truncation line yourself; token count tokenizer-invariant ⇒ 2×+ gap = mis-measure not env.** M2 meta-count "6 R1-R6"→5 (R5 highest-value dropped). M3 nấc "verified" on cadence NEVER-RAN (hub-expected = "đã đọc không đổi"). Positives held: authority-class owner-gated correct · harness_floor 55K self-audit honest · all-inherit 14/14. Anti-garble: full disk-write BEFORE return.
|
||||
- **S125 (2026-07-16) do-token RELABEL correction (em-main on-behalf, B3 append):** negative-control 3-probe (`'a'×150K`→notice "150,006 tokens" ~1,0/char · `'x'×150K`→150,006 Y HỆT content-independent · mixed-ASCII 150K→143,251 ~0,955) ⇒ **notice-N = heuristic họ-đếm-ký-tự = CẬN-TRÊN bảo-toàn, KHÔNG phải real-token** (tokenizer thật nén chuỗi lặp ≪0,1/char). 70892 (dòng trên) đọc lại = cận-trên; dải thật STATUS [31K byte/4 — 70,9K notice]. **Lesson sửa-frame: "token count tokenizer-invariant" chỉ đúng cho so-sánh chunk-vs-full CÙNG heuristic; nhãn "real-N" tự nó = mislabel-as-real — phải negative-control (chuỗi lặp) mới phân biệt heuristic/tokenizer.** Nguồn: hub `phuong-phap-dem-token-tien-de-vong4` + adap-report cùng tên.
|
||||
- **S125 (2026-07-16) fable-real adap-review — PASS-WITH-SELF-FIXES [engine:fable-real · vai compound anh gán reviewer+inv-cb · inline-lead]:** 2 near-miss TỰ BẮT trước khi ra ngoài: (1) **false-TAMPER → RCA verifier**: PS 5.1 `Get-Content -Raw` decode UTF-8-no-BOM bằng ANSI → mojibake → hash sai trên broadcast hub SẠCH; **sibling-test 2 CHIỀU** — sibling-MATCH⇒file-bệnh (tiền lệ S100) · sibling-CŨNG-FAIL⇒**verifier-bệnh** (S125); chốt bằng `stamp_verify.py` hub exit-0. (2) **suýt claim-sai nguồn outward**: draft adap-request viết "snippet hub dùng Get-Content -Raw" — mở hub `check-email.md:18` thì snippet **để HỞ decode** (`$txt` không định nghĩa) + hub ĐÃ CÓ s76 script-verify → sửa email+request TRƯỚC stamp cuối; email edit-sau-stamp → **RE-STAMP** `58f5afd8` + selftest exit-0 ×2. **Lesson: outward-claim về văn-bản bên kia = mở ĐÚNG file+dòng trước khi viết; email đã stamp mà cần sửa = sửa→re-stamp→re-selftest cùng lượt, đừng để stamp-then-edit sống.** Bẫy tooling: Edit-tool 3× fail chèn escape BOM (pipeline sinh-chữ render escape thành U+FEFF thật) → build-from-codepoint. Evidence: `runs/2026-07-16-S125-fable-real-adap-review/`.
|
||||
- **S123 governance 4-change review — PWF (3 must/1 MAJOR/3m):** detail → [topic](project_s123_governance_4change_review.md). 🔴 **#53 garble tại TAO; đĩa KHÔNG cứu vì chưa ghi diary ⇒ Luật: ghi diary TRƯỚC return.** Bài: vá-1-lớp⇒grep MỌI detector cùng-lớp TRONG diff · fault-inject N/N chỉ chứng trục ĐÃ chạm ("trục nào KHÔNG có ca?") · luật-viết≠luật-làm · "N/N" trộn đo+dựng-lịch-sử=false-specificity · "fix" bằng đổi-format-cho-trượt-mẫu = Goodhart rời-tập-đo.
|
||||
- **[→ archive/2026-07.md @S126] S124 adap-wave-reply PLAN L3-lens — PASS_WITH_FIXES (0C/3M/2m):** 🎯 do-token trap bắt WHILE adopting (chunk 26075 mislabeled whole-file 70892, 2.72× under) + M2 meta-count + M3 nấc-verified-on-NEVER-RAN. Lesson: verify do-token = re-Read full + tự đọc truncation-line.
|
||||
- **[→ archive/2026-07.md @S126] S125 do-token RELABEL (em-main B3):** negative-control 3-probe ⇒ notice-N = **CẬN-TRÊN heuristic, KHÔNG real-token**; dải STATUS [31K byte/4 — 70,9K notice]. Lesson: nhãn "real-N" tự nó = mislabel — negative-control (chuỗi lặp) mới phân-biệt heuristic/tokenizer.
|
||||
- **[→ archive/2026-07.md @S126] S125 fable-real adap-review — PASS-WITH-SELF-FIXES [engine:fable-real inline-lead]:** 2 near-miss tự bắt: false-TAMPER→RCA **verifier-bệnh** (PS5.1 ANSI-decode; sibling-test 2-CHIỀU: sibling-MATCH⇒file-bệnh · sibling-FAIL⇒verifier-bệnh) · suýt claim-sai nguồn outward→mở ĐÚNG file+dòng trước khi viết; stamp-then-edit = sửa→RE-STAMP `58f5afd8`→re-selftest cùng lượt. Bẫy Edit-tool escape-BOM→build-from-codepoint. Evidence: `runs/2026-07-16-S125-fable-real-adap-review/`.
|
||||
- **S123 governance 4-change review — PWF (3 must/1 MAJOR/3m):** → [topic](project_s123_governance_4change_review.md). 🔴 **#53 garble tại TAO; đĩa KHÔNG cứu vì chưa ghi diary ⇒ ghi diary TRƯỚC return.** Vá-1-lớp⇒grep MỌI matcher cùng-lớp TRONG diff · đổi-format-cho-trượt-mẫu = Goodhart rời-tập-đo.
|
||||
- **S117 PE negative-quote FE-only spec-review — PASS.** Lesson: 2-tier guard = compare SUM EXPRESSION not comparator; derived-flag safety = trace what flag KEYED-ON (`IsSelected` sign-agnostic). → `archive/2026-07.md`.
|
||||
- **S116 outward-email GATE H-22 WAL restart runtime — PASS (3m).** Lesson: persist-claim on git-tracked WAL → verify tracked+0-drift; mechanism-proof lives at Stop-hook run, NOT git property. → `archive/2026-07.md`.
|
||||
- **S115 presence-not-age spec-review — PWF (0C/2M/5m).** Lesson: verify EACH regex-alt vs EACH target-line by hand; acceptance-grep can't detect its OWN deliverable's miss; skip-on-contiguous-prefix = correctness-inversion. → `archive/2026-07.md`.
|
||||
@ -90,14 +90,15 @@ Adversarial pre-commit reviewer SOLUTION_ERP. Read-only verify + live curl prod
|
||||
- **S97 PE finalize UAT + Mig 60/61 — PASS:** default-flip byte-mirror SHA256 ×2; RUNTIME-flag grep-all + 4-projection. → `archive/2026-07.md`.
|
||||
- **S93 Harness-16 MFE adopt — PASS:** code-gate re-derived denom; WF1 caught vocab-fork H6.7≠H16. → adap-report + _INDEX.
|
||||
|
||||
- **S92 (2026-06-29) PROD-security hide 5 menu-groups admin-only (uncommitted) — PASS (1 note):** A-E upheld; CatalogManager Danh-mục stripped (by-spec, 0 users). → [project_s92_admin_only_modules_revoke.md](project_s92_admin_only_modules_revoke.md).
|
||||
- **June-2026 digest — LESSON-ONLY (verbatim → `archive/2026-06.md` 70KB + `_INDEX`; S89/S90/S91 PE FROZEN):** merge-distill fabricates false-specificity ⇒ QUALITY gate AFTER presence · sha = self-declared frontmatter NOT recompute · spec-scope-framing can be FALSE ⇒ read changed-set · fail-closed guard BEFORE terminal-state + server-recompute no-trust-client · TRACKED = check-ignore ≠ git-ls-files(committed) · public-grant root NOT inherit-root · upgrade MUST MUTATE row NOT skip-existing; menu-hide ≠ API-lock · single→multi stops at display-layer.
|
||||
- **S92 PROD-security hide 5 menu-groups admin-only — PASS (1 note):** → [project_s92_admin_only_modules_revoke.md](project_s92_admin_only_modules_revoke.md).
|
||||
- **June-2026 digest — LESSON-ONLY (verbatim → `archive/2026-06.md` + `_INDEX`):** merge-distill fabricates false-specificity ⇒ QUALITY gate AFTER presence · sha = self-declared NOT recompute · fail-closed guard BEFORE terminal-state + server-recompute · TRACKED = check-ignore ≠ ls-files · menu-hide ≠ API-lock · single→multi stops at display-layer.
|
||||
|
||||
- **S108 first-real-run H19 — FAIL (1C+4M+6m):** email "đã sửa comment" khi hmw.js chưa sửa. Lesson: outward-claim "đã sửa X" phải cat X trước gate; grep stale-claim theo CLASS. → `archive/2026-07.md`.
|
||||
- **S109 fidelity-gate 2 gist L2 — PWF (3):** gist meta-count 15≠disk 14; delta tự-tính = false-specificity; fact-claim trong N/A verify như content. → `archive/2026-07.md`.
|
||||
- **S111 H22 WAL adopt — PWF (0C/1M):** CATCH "STAGED" còn khi N.3 nâng VERIFIED-RUNTIME = nâng-nấc-quên-sync cùng-diff; live-witness>forensics. → `archive/2026-07.md`.
|
||||
- **S110 H21+MTv3 — PWF (0C/5M):** doc "VALID_ROLES 12" code=10 → claim-về-code grep lại kể cả reword; supersede trỏ adap-report chưa tạo = dangling. → `archive/2026-07.md`.
|
||||
- **S112 fable-real-single close-reviews+FINAL — GO 0-must:** Import btn reuses sibling-menu guard but endpoint=Admin ⇒ derive guard from ENDPOINT authz; EDGE-5 gác FROM-state ở ĐỈNH method KHÔNG per-branch; self-flip token-test = internal NOT external-accept. → [topic](project_s112_supplier_import_review.md).
|
||||
- **S126 (2026-07-16) A1-H23-probe + email-H23-gate [opus ×2, em-main VERIFY+APPEND] — gate FAIL bắt 3 lỗi thật trước stamp:** (1) 🎯 "Audit 2/2/0" NON-REPRODUCIBLE — audit COUNTS = **session-cumulative**, chính 2 lane review đẩy 2→4. **Lesson: số AGGREGATE cumulative KHÔNG vào outward artifact mời-reproduce — evidence bền = per-lane theo run-id.** (2) "Ba việc nêu ở thư" thực = **2 ASK** — MỞ thư đếm ask thật, đừng gộp courtesy-expectation. (3) "hub 17/17" = SE-self-obs R1-open → hedge+quy-thuộc. Lõi verified độc-lập: lead=Fable **116/116** records · A1 fable · A2 opus. Fixed → stamp `945cf3ad` selftest+stamp_verify+_index CÙNG lượt. Evidence: `runs/2026-07-16-S126-adap-spec-execute/`.
|
||||
|
||||
---
|
||||
|
||||
|
||||
@ -46,3 +46,9 @@
|
||||
- **S116 (2026-07-13) outward-email GATE se→ai_infra H-22 WAL restart runtime-verify — PASS (0 over-claim / 3 minor):** file `broadcasts/outbox/ai_infra/2026-07-13-se-to-ai_infra-h22-wal-restart-runtime-verify.md`. 6/6 ground-truth re-run MATCH — #1 rev-list=0 · #2 tree clean (modulo email-artifact itself untracked) · #3 HEAD=88bd8e6 · #4 WAL empty-template · #5+#6 EXACT: archive-gate 12/12 sub<25.6KB (tightest investigator-codebase 25237, 363B headroom) + A7 246/246 pointers 0-fail; crystallized 382713B/380K-tok cap/252429-tok headroom. Caveat section STRONG+prominent (own §header "Nấc honest", bold WAL RỖNG/CHƯA, enumerates a/b/c verified vs content-recovery NOT; line31 defers real-persist→S111 Stop-hook×2). No implicit "full restart-recovery verified". **Minor: (1) caveat item (a) "WAL persist qua restart" evidentiary-WEAK — `.claude/WAL.md` git-COMMITTED @88bd8e6 empty-template 0-drift → post-reboot existence = git/filesystem guarantee NOT WAL-mechanism proof (self-corrected by line31 defer-to-S111); (2) unit-notation "382.7KB / 380K-tok" juxtaposes bytes-vs-tokens (382.7KB≈95-127K tok not 382.7K) — looks scarier/understates headroom, "(fits)+252K" resolves; (3) current tree clean modulo email-artifact-itself (untracked).** Lesson: persist-claim on git-tracked WAL → verify tracked+0-drift FIRST; "file survives restart" = git/filesystem property, mechanism-persist proof lives at Stop-hook run (S111). No Smart-Friend lower — report well-calibrated toward humility.
|
||||
|
||||
- **S117 (2026-07-13) PE negative-quote FE-only spec-review (financial-invariant-owner lens) — PASS (0 blocking, 1 confirm + 2 test-notes):** budget-intact VERIFIED — UpsertQuote (`PurchaseEvaluationDetailFeatures.cs:282-366`) writes 0 budget fields; quote ThanhTien flows ONLY into read-only display aggregates (currentProposalTotal/prevSelectedTotal :911-926 + winnerQuoteTotal :1188) — NEVER mutates PeWorkItemBudget. #81 IsWinner + S114 multi-winner SAFE: winner-derive keyed on `IsSelected` boolean, sign-agnostic (negative ThanhTien irrelevant). R1 baked (ContractFeatures.cs:46 GiaTri>=0 untouched=manual path; CreateContractFromEvaluation:88-90 no-clamp=PE-inherit). R2 FE:201/BE:206 BOTH `SUM(ThanhTien where IsSelected)<=0` = IDENTICAL algebraic sum → 0 divergence from negatives. CONFIRM raised: enterable-negatives OPERATIONALIZE net-value driving CEO-escalation gate (winnerQuoteTotal<CeoApprovalThreshold→CCM skip-CEO) — governance, not display; owner sign-off. T3 note: `SeedWinnerWithQuoteAsync` seeds 1 quote/winner → "mixed net>0 submittable" half needs multi-quote seed. **Lesson: 2-tier guard divergence check = compare SUM EXPRESSION not just comparator; derived-flag safety = trace what flag is KEYED-ON (IsSelected≠ThanhTien); "budget intact" true for RECORD but quote-sum still flows to display+governance aggregates.**
|
||||
|
||||
## @S126 hook-curate batch (2026-07-16, em-main single-writer, moved-not-cut verbatim từ L1)
|
||||
|
||||
- **S124 (2026-07-15) adap-wave-reply PLAN L3-lens — PASS_WITH_FIXES (0C/3M/2m):** disk `sub-reviewer-3.md`. 🎯 **do-token trap committed WHILE adopting do-token**: spec "STATUS=26075 tok (real-N)" — I re-Read FULL → truncation = **70892 tok** (tail-alone 33944 > 26075) ⇒ near-cap CHUNK mislabeled whole-file, 2.72× under, feeds owner re-tier. **Lesson: verify do-token claim = re-Read full + read truncation line yourself; token count tokenizer-invariant ⇒ 2×+ gap = mis-measure not env.** M2 meta-count "6 R1-R6"→5 (R5 highest-value dropped). M3 nấc "verified" on cadence NEVER-RAN (hub-expected = "đã đọc không đổi"). Positives held: authority-class owner-gated correct · harness_floor 55K self-audit honest · all-inherit 14/14. Anti-garble: full disk-write BEFORE return.
|
||||
- **S125 (2026-07-16) do-token RELABEL correction (em-main on-behalf, B3 append):** negative-control 3-probe (`'a'×150K`→notice "150,006 tokens" ~1,0/char · `'x'×150K`→150,006 Y HỆT content-independent · mixed-ASCII 150K→143,251 ~0,955) ⇒ **notice-N = heuristic họ-đếm-ký-tự = CẬN-TRÊN bảo-toàn, KHÔNG phải real-token** (tokenizer thật nén chuỗi lặp ≪0,1/char). 70892 (dòng trên) đọc lại = cận-trên; dải thật STATUS [31K byte/4 — 70,9K notice]. **Lesson sửa-frame: "token count tokenizer-invariant" chỉ đúng cho so-sánh chunk-vs-full CÙNG heuristic; nhãn "real-N" tự nó = mislabel-as-real — phải negative-control (chuỗi lặp) mới phân biệt heuristic/tokenizer.** Nguồn: hub `phuong-phap-dem-token-tien-de-vong4` + adap-report cùng tên.
|
||||
- **S125 (2026-07-16) fable-real adap-review — PASS-WITH-SELF-FIXES [engine:fable-real · vai compound anh gán reviewer+inv-cb · inline-lead]:** 2 near-miss TỰ BẮT trước khi ra ngoài: (1) **false-TAMPER → RCA verifier**: PS 5.1 `Get-Content -Raw` decode UTF-8-no-BOM bằng ANSI → mojibake → hash sai trên broadcast hub SẠCH; **sibling-test 2 CHIỀU** — sibling-MATCH⇒file-bệnh (tiền lệ S100) · sibling-CŨNG-FAIL⇒**verifier-bệnh** (S125); chốt bằng `stamp_verify.py` hub exit-0. (2) **suýt claim-sai nguồn outward**: draft adap-request viết "snippet hub dùng Get-Content -Raw" — mở hub `check-email.md:18` thì snippet **để HỞ decode** (`$txt` không định nghĩa) + hub ĐÃ CÓ s76 script-verify → sửa email+request TRƯỚC stamp cuối; email edit-sau-stamp → **RE-STAMP** `58f5afd8` + selftest exit-0 ×2. **Lesson: outward-claim về văn-bản bên kia = mở ĐÚNG file+dòng trước khi viết; email đã stamp mà cần sửa = sửa→re-stamp→re-selftest cùng lượt, đừng để stamp-then-edit sống.** Bẫy tooling: Edit-tool 3× fail chèn escape BOM (pipeline sinh-chữ render escape thành U+FEFF thật) → build-from-codepoint. Evidence: `runs/2026-07-16-S125-fable-real-adap-review/`.
|
||||
|
||||
@ -46,4 +46,5 @@ H1 tooling-freshness auditor **SOLUTION_ERP-self**. Read-only + **propose-only**
|
||||
- **2026-07-14->07-15 (S118 @end + S119 @start+META -> `archive/2026-07.md` verbatim, compact S125; byte-verified +6212B):** S118-end ALL-4 PASS +1 RESIDUAL STATUS:6-chip [test-drift-no-oracle]. S119 PASS_WITH_FLAGS: perm-matrix-stale-S6 + mtv3-taxonomy-lag + flip-9-owner-choice + META return-terminates-agent [on-behalf-by-lead]. Lessons hoisted -> user-memory feedback files.
|
||||
- **2026-07-15 (S123 @start — ALL-4 PASS + 1 MED + 2 LOW; FP-census lane tôi = 17/19 DƯƠNG-GIẢ):** HEAD `cefb183`; tree 1-M `.session-counter.json` (em-main tick 1→2, expected). **①SKILL PASS** 6+23+18 identical S122. **C2 replicate 15/15 KHỚP baseline em-main** ⇒ **15/15 FP, 0 MED**: contract-wf 6 (`:24/:35/:332×2/:367/:371`) · ef-core 7 (`:99/:100/:108/:116/:119` per-mig phrase + `:167` HEADING "Revert 1 migration" + `:184` shell-comment) · CLAUDE:86 · session-end:126 ("vd 130→132 nếu thêm 2 test"). Ratio-band ĐÚNG việc (far-from-canonical→LOW). 🔴 **ĐỪNG vá 13 flag 2 SKILL này** — noise cấu-trúc, KHÔNG suy-giảm. **②ROSTER PASS 14=14=14** (disk 14 = 15 file −README · STATUS:25 · hmw.js VALID_ROLES) + **14/14 `model: inherit`**; `agents/README:3` B1-pointer 0-số ✓. 🔴 **MED — G-015 overclaim 2 vai H24:** `lead-view-auditor:77` + `lead-omission-auditor:68` ghi "KHÔNG Write/Edit/commit (mày không có tool đó)" nhưng cả 2 CÓ `Bash`@:6 ⇒ `git commit` LÀM ĐƯỢC ⇒ SAI cho *commit*. 5 persona khác CÓ caveat; đúng 2 vai soi-LEAD thì KHÔNG. 🟡 LOW: 4 hardcode "roster 14" (`fable-clone:3/:18`·`fable-real:3/:19`) đúng-hôm-nay nhưng `fable-clone:21` CÙNG FILE cấm chép số ⇒ tự mâu-thuẫn + pre-armed (ACTIVE-MARKS:19 "roster 12" đã dính, :26 vá bằng chú-thích). **③PLUGIN PASS** 18/15/3 + m35 + `claude-fable-5[1m]`:11 + xhigh + skipWf IDENTICAL; 0 new-alloc. **④DOCS (a) STATUS:6 `view-stale-header` THẬT** — `Last updated: 2026-07-15 (S119…)` mà `:35 Recently Done (S122)`; mega-line S119×3, **S120/121/122 = 0 hit**. **H24-1 MÙ** (chỉ so NGÀY; 07-15=newest⇒0 flag) = **âm-giả chứng-minh-được**. Tái-phát **lần 4** (S116/S117/S118) ⇒ fix CẤU-TRÚC, không bump. **(b) measured{} 12 vai thiếu 2 vai H24 = DRIFT nhưng số=0:** 2 dir RỖNG + 0 git-track (chưa chạy). Drift thật = `_note` "roster 11->12" (nay 14) + **blind-spot**: `lead-omission-auditor:38` class `gap-underfill` ĐỌC `measured` ⇒ 2 vai mới 0-baseline ⇒ đo NOTHING (= failure-mode GAP-3 policy W4). Fix RẺ: `measure-agent-memory.ps1:10` **auto-discover**, 0 hardcode. 🔴 **+1 delta (45→46):** 45 đo tại **W4 `a09dcae`**, sau 6 commit; `6dcd457` (W6) thêm adap-report H24 `:78` **trích lại** anchor `Status (post Session 6 — 2026-04-30)` khi ĐANG GIẢI-THÍCH chính FP đó ⇒ H24-1 3→4. Số-học khép. 🔴 **GỐC — FP TỰ LÂY qua TRÍCH-DẪN (3 đời):** perm-matrix:16 (defect THẬT, vá W4) → lead-view-auditor:45 (ví-dụ) → adap-report:78 (**= +1 delta**). **Mỗi doc viết VỀ FP tự thành FP.** Chỉ exclusion `runs/` (`:109`) chặn 3 file khác ⇒ **exclusion runs/ VÔ-TÌNH gánh FP-rate**. **DỰ-BÁO:** session-log S123 trong `docs/changelog/sessions/` trích anchor ⇒ TOTAL **47**; trong `runs/` ⇒ **46**. 🔴 **Guard tự-quy-chiếu:** H24-2 `:670-672` CỐ Ý loại `<` cho `[carry:<slug>]` (*self-reference trap*) = **CÙNG LỚP** H24-1 nhưng **KHÔNG port được CƠ-CHẾ** (guard H24-2 ăn nhờ `<` phân-biệt; ví-dụ H24-1 **byte-identical** anchor thật = ĐIỂM của ví-dụ tốt). **ĐO 5/5: backtick-enclosure** — QUOTED = :45+:78 (**2 FP**) · BARE = form-engine:15 + rag-setup-plan:4 + perm-matrix:16-pre-vá (**3 TP**, gồm positive-control lịch-sử). ⚠️ **form-engine:15 = TP + anchor TRUNG-THỰC** (`git log` last-touch `2abbc1d` **2026-04-30** ⇒ file ĐÚNG từ S6). 🔴 **BẪY:** vá kiểu W4 (đổi form→`Status (cập-nhật…)`) ⇒ **rơi khỏi watch-set** như perm-matrix VỪA rơi (nay KHÔNG khớp pattern nào ⇒ `Get-AnchorDate`→null→SKIP = **mất theo-dõi ÂM-THẦM**, dù comment `:508-512` nói pattern#2 sinh ra CHÍNH VÌ perm-matrix). form-engine:15 = **TP DUY-NHẤT nuôi pattern#2**. **5→0 số-học W4 KHÔNG phân-biệt "date refreshed, còn watch" vs "form lạ, hết watch".** Model **Opus 4.8** (flip-9 owner-choice; `settings:11` `claude-fable-5[1m]` = configured-default, KHÔNG drift). ⚠️ L1 over-cap carry S124. Tag `[s123-start, fp-census-17-of-19, fp-self-propagating-via-quotation, backtick-discriminator-5-of-5, g015-overclaim-2-new-vai, status6-stale-header-4th-recur, measured-12-of-14, perm-matrix-silent-watch-loss]`
|
||||
|
||||
- **2026-07-16 (S125 @start — ①②③ PASS + ④ PASS_WITH_FLAGS; worker-tier-pin S124 VERIFIED disk+commit):** HEAD `3aacdf9`(wal), tree clean. **②ROSTER PASS** 14 persona; **14/14 `model:opus`@:5+`effort:max`@:6** on-disk+committed (`git show HEAD:tooling-auditor.md`✓); agents/ last-touch `23bbe97`(S124), 0-since. **①SKILL PASS** 6+23+18 identical S123; contract-wf/ef-core count-stale=monthly(08-01). **③PLUGIN PASS** 18/15/3 IDENTICAL; `claude-fable-5[1m]`:11 lead default UNCHANGED (pin=SUBS-only). **R6 ✓** project `settings.json:2` `autoMemoryDirectory`=`.claude/auto-memory`; my ctx-inject FROM that path ⇒ relocate WORKS; authority ③ user-global. **④ 5 RESIDUAL — worker-tier-pin doc-sync NOT finished:** HIGH `STATUS:25` row "all-inherit/TOÀN roster `model:inherit`" + stale "cả **12** lên top-tier"/"**10** product"(roster 14) · HIGH `agents/README:5` "TOÀN BỘ sub `model:inherit`" CONTRADICTS same-file :38 worker-tier-pin · MED `fable-real-runbook.md` **≥2 FALSE CITATION** `:227`/`:563` cite `investigator-codebase.md:5`/`reviewer.md:5`=`inherit` but disk=`opus` (fix NON-trivial: hmw.js alias-vs-frontmatter "chưa test") · MED `fable-real.md:37` · LOW `fable-clone.md:43`(corrected :57). 🔴 **ROOT:** `STATUS:41-42` blurb CLAIMS "doc-sync **ĐÃ vá**" but 5-spot prove INCOMPLETE = tick-no-evidence → NOT-DONE. Ack machine-fired: STATUS:6 header H24-3; harness-11:57 vocab-seed +worker-tier-pin(D7). **Method:** frontmatter tier-flip→grep MỌI doc citing agent `:5`=inherit. Model self **Opus 4.8**. ⚠️L1 carry S126. `[s125-start, worker-tier-pin-verified, doc-sync-incomplete-5spot, false-citation-runbook, da-va-but-incomplete, mem-gap-s124]`
|
||||
- **2026-07-16 (S125 @start — ①②③ PASS + ④ PASS_WITH_FLAGS; worker-tier-pin S124 VERIFIED disk+commit):** HEAD `3aacdf9`(wal), tree clean. **②ROSTER PASS** 14 persona; **14/14 `model:opus`@:5+`effort:max`@:6** on-disk+committed (`git show HEAD:tooling-auditor.md`✓); agents/ last-touch `23bbe97`(S124), 0-since. **①SKILL PASS** 6+23+18 identical S123; contract-wf/ef-core count-stale=monthly(08-01). **③PLUGIN PASS** 18/15/3 IDENTICAL; `claude-fable-5[1m]`:11 lead default UNCHANGED (pin=SUBS-only). **R6 ✓** project `settings.json:2` `autoMemoryDirectory`=`.claude/auto-memory`; my ctx-inject FROM that path ⇒ relocate WORKS; authority ③ user-global. **④ 5 RESIDUAL — worker-tier-pin doc-sync NOT finished:** HIGH `STATUS:25` row "all-inherit/TOÀN roster `model:inherit`" + stale "cả **12** lên top-tier"/"**10** product"(roster 14) · HIGH `agents/README:5` "TOÀN BỘ sub `model:inherit`" CONTRADICTS same-file :38 worker-tier-pin · MED `fable-real-runbook.md` **≥2 FALSE CITATION** `:227`/`:563` cite `investigator-codebase.md:5`/`reviewer.md:5`=`inherit` but disk=`opus` (fix NON-trivial: hmw.js alias-vs-frontmatter "chưa test") · MED `fable-real.md:37` · LOW `fable-clone.md:43`(corrected :57). 🔴 **ROOT:** `STATUS:41-42` blurb CLAIMS "doc-sync **ĐÃ vá**" but 5-spot prove INCOMPLETE = tick-no-evidence → NOT-DONE. Ack machine-fired: STATUS:6 header H24-3; harness-11:57 vocab-seed +worker-tier-pin(D7). **Method:** frontmatter tier-flip→grep MỌI doc citing agent `:5`=inherit. Model self **Opus 4.8**. ⚠️L1 carry S126. `[s125-start, worker-tier-pin-verified, doc-sync-incomplete-5spot, false-citation-runbook, da-va-but-incomplete, mem-gap-s124]`
|
||||
- **S126 (2026-07-16) session-end CHỐT [opus-worker, em-main VERIFY+APPEND]:** 3/4 PASS-clean (① SKILL 6-project 0-diff — task gọi "check-email/send-email skill" thực-ra = **COMMANDS** `.claude/commands/`, 6 skill thật 0-đổi · ② ROSTER 14/14 `opus`@:5 + `max`@:6 disk-verified; README:5 + STATUS:25 flip worker-tier-pin ⇒ **S125-HIGH "README:5 contradicts :38" RESOLVED** · ③ PLUGIN 18/15/3 + `fable-5[1m]`/xhigh IDENTICAL) + ④ DOCS PASS_WITH_FLAGS: 🎯 bắt **5 dòng "H23-precedence CHƯA test" SÓT ở 3 command-file** (`session-start.md:50/:52` canonical BƯỚC 0.6 đọc MỖI phiên · `fable-clone.md:63/:65` cross-ref "hmw.js:44-52 mang cùng ghi-chú" ĐẢO/GÃY sau khi hmw.js vá · `ultra-on.md:35`) trong khi 7 file khác đã "ĐO S126" — **same-class-miss ×2 trong CÙNG PHIÊN đang vá class đó**; em-main vá NGAY 5/5 + LOW STATUS:25 "10+2"→"10+4". Learned: fact-runtime chốt ⇒ grep MỌI file mang claim cũ GỒM lớp **command-doc** (sweep-synthesis liệt consumer thiếu lớp ⇒ miss tái-sinh; commands/*.md blind-spot khớp S57/S99 method-mine). Tag `[s126-end, 5spot-h23-stale-caught, commands-layer-blindspot, s125-high-resolved]`.
|
||||
@ -2,7 +2,7 @@
|
||||
|
||||
> 🔴 **Số vai canonical → [`docs/STATUS.md`](../../docs/STATUS.md) §Sub-agents. KHÔNG chép số vào file này** (B1 derived-trỏ-canonical). *Bản trước S122 cứng-hoá "12-agent" ở **8 chỗ** trong khi roster đã 14 — đó chính là class `view-stale-role-desc`, và `agents/README` bị lấy làm **ví-dụ minh-hoạ** cho class đó trong [`lead-view-auditor.md`](lead-view-auditor.md). Vá @S122 bằng cách **bỏ số**, không phải bằng cách **đổi số** — đổi số thì roster kế lại stale.*
|
||||
|
||||
> **Architecture:** sub-agents **all-inherit top-tier (Harness-8 2026-06-16 — thay thế two-tier Harness-4)** + em main **lead frontier-class (anh chọn per-session)** coordinator — **10 product/quality** (7 core + frontend-designer pink S47 + database-agent read-advisory S52 + 📄 office-document S107) + **4 monitor INFORM-only** (`tooling-auditor` H1 + `harvest-curator` H2, 2026-06-07 Harness 1 · `lead-view-auditor` + `lead-omission-auditor` H24, **S121 W2**). Tier: **TOÀN BỘ sub `model: inherit`** (ăn top-tier model của lead — **runtime = per-session (Fable ↔ Opus, outage-driven; Fable DOWN → H5-fallback Opus tự-kích revert-free KHÔNG sửa frontmatter, Fable UP → tự về); lịch-sử flip-chain đầy-đủ (S98→nay) = canonical [`docs/STATUS.md` §Sub-agents]** (🔴 S106 gộp 1-chain per anh-confirm — reader này KHÔNG enumerate/cập-nhật mỗi flip; BƯỚC 0.6 probe mỗi phiên xác-định runtime SỐNG, per-session KHÔNG steady-state) · effort **Max** (env machine-wide). SE KHÔNG có lớp helper/gopher rẻ (**mọi sub đều substantive memory-bearing → tất cả lên inherit**). *(Trước H8: 4 promote inherit + 7 demote pin `claude-opus-4-8` — lịch sử ở Upgrade 2026-06-10 + S66 dưới.)*
|
||||
> **Architecture:** sub-agents **worker-tier-pin `opus`+`effort:max` (owner-decision S124 2026-07-15 — thay thế all-inherit Harness-8, trước nữa two-tier Harness-4)** + em main **lead frontier-class (anh chọn per-session)** coordinator — **10 product/quality** (7 core + frontend-designer pink S47 + database-agent read-advisory S52 + 📄 office-document S107) + **4 monitor INFORM-only** (`tooling-auditor` H1 + `harvest-curator` H2, 2026-06-07 Harness 1 · `lead-view-auditor` + `lead-omission-auditor` H24, **S121 W2**). Tier: **TOÀN BỘ sub `model: opus` + `effort: max`** (worker-tier-pin S124 — sub cố-định KHÔNG theo lead; **đo S126:** lane no-tier resolve `claude-opus-4-8` DÙ lead=Fable = pin ăn runtime, và per-task `tier:'fable'` THẮNG pin trong lượt lệnh engine-đắt anh gõ. **Lead runtime = per-session owner-choice (Fable ↔ Opus); lịch-sử flip-chain lead = canonical [`docs/STATUS.md` §Sub-agents]** (🔴 S106 gộp 1-chain per anh-confirm — reader này KHÔNG enumerate/cập-nhật mỗi flip; BƯỚC 0.6 probe mỗi phiên xác-định runtime lead SỐNG) · effort **Max** (env machine-wide + frontmatter). SE KHÔNG có lớp helper/gopher rẻ (**mọi sub đều substantive memory-bearing → worker-tier = opus+max, KHÔNG hạ thấp hơn**). *(Lineage: two-tier H4 [4 promote inherit + 7 demote pin `claude-opus-4-8`] → all-inherit H8 S66–S123 → worker-tier-pin S124 — chi-tiết ở Upgrade 2026-06-10 + S66 dưới.)*
|
||||
> 🔍 **Đếm roster = ĐO ĐĨA, đừng tin số trong doc:** `ls -1 .claude/agents/*.md | grep -v README | wc -l`. ⚠️ **Glob thô `ls .claude/agents/*.md` bắt LUÔN `README.md`** ⇒ ra **thừa 1** — đây là bẫy số-học thật (R2-C1: acceptance cũ `=14` **FAIL trên implementation ĐÚNG**, và ép "sửa" bằng cách **xoá `README.md`** = catastrophic-Goodhart).
|
||||
> **Upgrade S52 (2026-06-08 — AI_INFRA broadcast `2026-06-08-Agent-database-codebase-agents`):** **+database-agent (read-advisory DB specialist, floor DB1–DB11)** — schema/query/migration-design-review/perf/concurrency (DB11 RowVersion vá lost-update S43). Tailor READ-tier (implementer-backend vẫn author) · color OMIT (8 standard hết) · `store_memory` strip. `codebase-agent` = **SKIP n-a** (investigator-codebase đã cover grep/audit + `csharp-lsp` Windows no-op). ✅ **verified-runtime** — spawned OK S53 (first real spawn, caught Mig 46 committed-but-unapplied-local drift) + S56 2× (pre-golive-verify schema-stream + golive-harden design+review). DB11 lost-update fix landed S56 (atomic ExecuteUpdate + Serializable tx, gotcha #58).
|
||||
> Pattern: Anthropic Building Effective Agents orchestrator-workers + Cognition "writes single-threaded" hybrid + post-deploy automated watchdog.
|
||||
|
||||
@ -42,7 +42,8 @@
|
||||
|
||||
## Project — ongoing decisions / context
|
||||
- [H22 WAL session-continuity](project_h22_wal_session_continuity.md) — sổ WAL ≤40 + Stop-hook persist VERIFIED-RUNTIME S111 (hot-reload ENV-DEP #2/#3) + /pause·/tiep 1-đường + squash wal: + FLIP run-trace ≥3-task + D10 AS-6-taxonomy-đổi; hook PS1 KHÔNG bash (PATH 3-context); pilot kill/đổi-acc pending
|
||||
- [Model-tier evolution → worker-tier-pin S124](project_harness4_two_tier_model.md) — H4 two-tier → H8 all-inherit → **S124 worker-tier-pin (14/14 sub = opus+effort:max, lead owner-choice, Fable qua /fable-real)**; H23-precedence nay testable ở Opus (chờ restart); restart-lesson: EDIT-agent-tồn-tại/command cần restart (hot-reload ENV-DEP, agent-MỚI khác)
|
||||
- [Model-tier evolution → worker-tier-pin S124](project_harness4_two_tier_model.md) — H4 two-tier → H8 all-inherit → **S124 worker-tier-pin (14/14 sub = opus+effort:max, lead owner-choice, Fable qua /fable-real)**; restart-lesson: EDIT-agent-tồn-tại/command cần restart (hot-reload ENV-DEP, agent-MỚI khác)
|
||||
- [H23 spawn-precedence — ĐO S126](project_h23_spawn_precedence.md) — spawn-param tier THẮNG frontmatter hard-pin ⇒ /fable-real SỐNG · worker-pin ăn runtime (no-tier=opus DÙ lead=Fable ⇒ không inherit); đo 2026-07-16 spawn-model-audit 0-mismatch
|
||||
- [database-agent verified + local-drift catch](project_database_agent_verified_local_drift.md) — verified-runtime S53; read-advisory DB lens bắt committed-but-unapplied-local mig (green tests+prod miss)
|
||||
- [HoSoLink open-from-web browser block](project_hosolink_open_from_web_browser_block.md) — web KHÔNG click-open file:// từ https (browser block); chỉ Edge GPO `IntranetFileLinksEnabled` one-click; FE render + Copy fallback (S67)
|
||||
- [Harness 1·2·3 adopt](feedback_harness_123_adoption.md) — roster 8→10 (+2 monitor INFORM-only tooling-auditor+harvest-curator) · email channel `broadcasts/` self=se; verified-runtime S50
|
||||
|
||||
@ -17,4 +17,4 @@ metadata:
|
||||
- **Commit `wal:` = ngoại-lệ duy-nhất** format `[CLAUDE]` (rules §5.2) — máy sinh, squash về commit-chốt trước push (`origin/main..HEAD` — không bao giờ rewrite đã-push). Squash xong = điểm review-diff wal-paths (AS-10 backstop dời, không mất).
|
||||
- **D10 S111: deploy.yml paths-ignore +agent-memory/** +runs/**** → budget.json/runs đổi HẾT trigger CI — **AS-6 taxonomy đổi từ S111** (phân loại CI-trigger phiên sau nhớ điều này).
|
||||
- **Nhánh-im-lặng fail-open phải chứng bằng fault-inject**, không bằng quan-sát-vắng-mặt (reviewer bịt lỗ ca 0-delta).
|
||||
- **Pilot PENDING (NEXT-anh):** kill-giữa-chain → `/tiep` thật · đổi-tài-khoản · hook-fire re-check phiên mới · pause-roundtrip 1 workflow THẬT. Cơ chế đầy đủ → engine PHẦN N + [[h18-ghostwire-stamp-integrity]] (STAGED-until-verified nguyên tắc) + [[workflow-fanout-reliability]] (run-trace mandate mới).
|
||||
- **Pilot — ĐÃ CHẠY THẬT 1 leg (S125→S126, 2026-07-16):** pause-roundtrip ✅ — `/pause` (S125) → restart → `/tiep` (S126): sàn-3 §0 cả 3 tín-hiệu MẠNH đều CÓ và đều KHỚP chain (orphan-folder = spec-holder đúng dòng `[!]`), ground-truth verify 4/4, mạch nối 0 hỏi-lại, NHÓM A thực-thi thẳng từ spec. **Còn PENDING:** kill-giữa-chain (unplanned) · đổi-tài-khoản · **đổi-MODEL leg** (WAL dự-kiến Opus 4.8 MAX, owner mở phiên Fable ⇒ thực-tế same-model — KHÔNG claim cross-model đã test). Hook-fire per-turn ✅ **RE-VERIFIED S126**: boundary duy-nhất 14:24 → `f9fa77d wal: flush 20260716T1424` tự-động (1 boundary = 1 commit, đúng thiết-kế; S125 1-turn-dài 0 boundary nên 0 fire = ĐÚNG, không phải hỏng — đừng đọc "không fire ở phiên 1-turn" thành broken). Cơ chế đầy đủ → engine PHẦN N + [[h18-ghostwire-stamp-integrity]] (STAGED-until-verified nguyên tắc) + [[workflow-fanout-reliability]] (run-trace mandate mới).
|
||||
|
||||
17
.claude/auto-memory/project_h23_spawn_precedence.md
Normal file
17
.claude/auto-memory/project_h23_spawn_precedence.md
Normal file
@ -0,0 +1,17 @@
|
||||
---
|
||||
name: h23-spawn-precedence-result
|
||||
description: "H23-precedence ĐO 2026-07-16 S126: spawn-param tier THẮNG frontmatter HARD-PIN (tier:'fable' trên reviewer pin-opus → resolved claude-fable-5) ⇒ /fable-real SỐNG; worker-tier-pin ăn runtime (lane no-tier = claude-opus-4-8 DÙ lead=Fable ⇒ không phải inherit-lead)."
|
||||
metadata:
|
||||
node_type: memory
|
||||
type: project
|
||||
originSessionId: c0fa4300-e317-4d1c-ad41-e819e6eb0a42
|
||||
---
|
||||
|
||||
**H23-precedence — ĐO THẬT 2026-07-16 (S126, phiên đầu sau restart kích-hoạt frontmatter S124):**
|
||||
- **Spawn-param THẮNG frontmatter hard-pin:** lane `reviewer` (frontmatter `model: opus` reviewer.md:5) spawn `tier:'fable'` → resolved **`claude-fable-5`** (3 records, `wf_f960dae2-fa0/agent-a6e8ca7bdaf910195.jsonl`) ⇒ **`/fable-real` + `/fable-clone` SỐNG** — không NO-OP, không cần re-pin.
|
||||
- **Worker-tier-pin ăn RUNTIME:** lane `investigator-codebase` KHÔNG tier → resolved **`claude-opus-4-8`** (9 records) trong khi **lead = Fable 5** ⇒ loại giả-thuyết inherit-lead (control mạnh hơn hẳn lead=Opus — ở đó 2 giả-thuyết cho cùng đáp-số).
|
||||
- Phép đo: `scripts/spawn-model-audit.ps1 -SessionId c0fa4300-…` (PA-2b): 2 dispatch / 2 explicit / 0 mismatch; tally đĩa 14/14 `model: opus` + 14/14 `effort: max`.
|
||||
- 🔴 Khác case frontmatter-`inherit` (đo 07-15 `wf_cb964f83-331`): `inherit` có thể chỉ là "defer to caller" (không có contest); case hôm nay là **contest thật hard-pin vs param → param thắng**.
|
||||
- Hệ-quả vận-hành: giữ nguyên worker-tier-pin S124 + `/fable-real` per-invocation; carry `h23-fable-test-postrestart` ĐÓNG (báo hub cùng ngày, s124-report §3).
|
||||
|
||||
Liên quan: [[project-harness4-two-tier-model]] · [[h22-wal-session-continuity]]
|
||||
@ -11,7 +11,7 @@ metadata:
|
||||
- **14/14 sub-agent frontmatter = `model: opus` + `effort: max`** (worker-tier gán-cứng, KHÔNG còn inherit). Lý-do owner: CICD hay rớt, cần Opus MAX mới chạy tốt.
|
||||
- **Lead = frontier-class owner-choice mỗi phiên** {Fable 5 (1M) Max | Opus 4.8 (1M) Max} qua `/model` (BƯỚC 0.6 probe).
|
||||
- **Fable cho 1 vai** = owner gõ `/fable-real <vai>` (single-top-model) HOẶC `/model` chọn lead=Fable tay.
|
||||
- 🔴 **H23-precedence NAY TESTABLE ở lead=Opus** (frontmatter=`opus`≠`fable`): spawn `tier:'fable'` → resolved `fable`=spawn-thắng / `opus`=frontmatter-thắng. **CHƯA test** (chờ restart kích-hoạt frontmatter mới). Nếu frontmatter thắng ⇒ `/fable-real` NO-OP (mark H21 AH) ⇒ owner dùng `/model` tay.
|
||||
- ✅ **H23-precedence ĐÃ ĐO 2026-07-16 S126** (phiên đầu sau restart; lead=Fable vô-tình làm control sạch): spawn `tier:'fable'` trên reviewer (pin `opus`) → resolved **`claude-fable-5`** = **SPAWN-PARAM THẮNG hard-pin** ⇒ `/fable-real` SỐNG, không re-pin. Lane no-tier → `claude-opus-4-8` DÙ lead=Fable ⇒ **pin ăn runtime, không inherit-lead**. Chi-tiết → [[h23-spawn-precedence-result]].
|
||||
- `hmw.js resolveModel`: role-có-frontmatter → undefined → frontmatter opus tự lo (worker-tier) · role-less → inherit lead · per-task `tier:'opus'|'fable'` escape-hatch.
|
||||
|
||||
**Lineage (lịch-sử, đã superseded):**
|
||||
|
||||
@ -58,12 +58,11 @@ taskList: [ { role:'<vai anh gán>', tier:'opus', label:'lens-1', prompt:'…' }
|
||||
- ⇒ Lỗi cũ 🟥 reviewer @S108 (lead=Fable → ensemble N×Fable) = **đã vá bằng pin**, giữ mô-tả làm lịch-sử.
|
||||
- 🔴 **Lỗ THẬT còn lại = `tier:'fable'` của `/fable-real`** (KHÁC frontmatter opus) → H23-precedence (xem dưới): nếu frontmatter thắng, `/fable-real` KHÔNG lên Fable được.
|
||||
|
||||
### 🔴 CHƯA VERIFY — precedence spawn-param ⟂ frontmatter (H23 §2(2), khai bắt-buộc)
|
||||
### ✅ ĐÃ VERIFY S126 (2026-07-16) — precedence spawn-param ⟂ frontmatter (H23 §2(2); flip từ "CHƯA VERIFY")
|
||||
|
||||
**Ở SE cả hai ĐANG cùng hiện-diện:** `hmw.js` trả alias vào `agent(…, {model:…})` **TRONG KHI** frontmatter **toàn roster** = **`opus`** (worker-tier-pin S124). **Chưa ai test bên nào THẮNG** (`hmw.js:44-52` mang cùng ghi-chú này).
|
||||
🔴 **Nếu frontmatter (opus) thắng ⇒ `tier:'fable'` của `/fable-real` = NO-OP** ⇒ KHÔNG escalate Fable được (owner dùng `/model` tay). *(`tier:'opus'` thì trùng frontmatter, vô-hại.)*
|
||||
**Phép thử — NAY TESTABLE kể cả lead=Opus (đổi từ DEFER):** vì frontmatter=`opus`≠`fable`, chạy 1 lane `tier:'fable'` → đọc model THỰC-TẾ resolve: `fable`=spawn thắng · `opus`=frontmatter thắng — **phân-biệt được bất-kể lead**. ⚠️ **CHỜ RESTART** kích-hoạt frontmatter mới rồi chạy (phiên kế). 🔴 Khai thẳng: **CHƯA test lượt này**, đừng bán quá nấc.
|
||||
**Đang có (PA-2, anh chốt O1) = 2 lớp GIÁN-TIẾP, KHÔNG thay được phép thử trên:** PA-2a hằng-số `TIER2_EXPECTED_FULL_ID = 'claude-opus-4-8'` (`hmw.js:53`) + PA-2b `scripts/spawn-model-audit.ps1` so resolved-vs-expected. 🔸 Neo-tại-spawn = **bất-khả-thi** (param chỉ nhận enum alias) — và **chính mệnh-đề đó cũng CHƯA thử** truyền full-id xem có bị từ-chối không (fix#8a).
|
||||
**Đo thật (run `wf_f960dae2-fa0`, phiên đầu sau restart kích-hoạt frontmatter S124):** lane `reviewer` (frontmatter `opus`) + `tier:'fable'` → resolved **`claude-fable-5`** ⇒ **SPAWN-PARAM THẮNG hard-pin** ⇒ `tier:'fable'` của `/fable-real` KHÔNG NO-OP — escalate Fable ĐƯỢC (`hmw.js:44-51` mang kết-quả + caveat cùng nội-dung). *(`tier:'opus'` trùng frontmatter, vô-hại như cũ.)*
|
||||
Control: lane no-tier → `claude-opus-4-8` **DÙ lead=Fable** ⇒ pin ăn runtime (loại inherit-lead). **Caveat GIỮ:** retrospective (không hứa spawn tương-lai — PA-2b) · **ALIAS-pin only** (hub full-id KHÔNG covered) · **fix#8a vẫn mở** (param từ-chối full-id? chưa thử). Evidence: `runs/2026-07-16-S126-adap-spec-execute/runtime-verify-synthesis.md`.
|
||||
**PA-2 (anh chốt O1) = 2 lớp GIÁN-TIẾP bổ-trợ:** PA-2a hằng-số `TIER2_EXPECTED_FULL_ID = 'claude-opus-4-8'` (`hmw.js:53`) + PA-2b `scripts/spawn-model-audit.ps1` so resolved-vs-expected.
|
||||
> ⚠️ **Grep `tier:'opus'` ≥1 hit = ĐIỀU-KIỆN CẦN, KHÔNG ĐỦ** — nó chỉ đo **CHỮ trong file**, không đo runtime ⇒ **Goodhart-able 100%**.
|
||||
|
||||
## 🔴 Floor model-tier v3 + lead-discipline
|
||||
|
||||
@ -46,11 +46,10 @@ Em main xác nhận **lead model resolve được** đầu session. **Lead = fro
|
||||
|
||||
**Lịch-sử flip-chain đầy-đủ (S98→nay) = canonical [`docs/STATUS.md` §Sub-agents]** (🔴 S106 gộp 1-chain per anh-confirm — reader này KHÔNG enumerate/cập-nhật mỗi flip; chống churn 4-file/flip). **BƯỚC 0.6 probe MỖI phiên** xác-định runtime SỐNG (per-session — KHÔNG tin note phiên trước, KHÔNG steady-state).
|
||||
|
||||
> 🔴 **H23 note — LỖ CHƯA-TEST (khai bắt-buộc theo H23 §2(2), adopt S122).** Nguyên-văn broadcast đòi khai: *"thứ-tự ưu-tiên giữa **'tham-số tại spawn'** và **'pin ở tệp định-nghĩa'** khi **CẢ HAI cùng hiện-diện** — rất có thể **chưa từng được test**"*.
|
||||
> **Ở SE, cả hai ĐANG cùng hiện-diện:** `hmw.js` trả alias → `agent(…, {model:…})` **trong khi** frontmatter toàn roster = **`opus`** (worker-tier-pin S124, KHÔNG còn inherit). 🔴 **Chưa ai test bên nào THẮNG.**
|
||||
> **Vì sao nghiêm-trọng (đổi trọng-tâm S124):** frontmatter=opus nên `tier:'opus'` ≡ frontmatter (trùng, vô-hại). Lỗ THẬT nay = **`tier:'fable'` của `/fable-real`**: nếu **frontmatter (opus) thắng** ⇒ `/fable-real` KHÔNG escalate Fable được (owner dùng `/model` chọn lead=Fable tay).
|
||||
> **Phép thử ĐÚNG — NAY TESTABLE kể cả lead=Opus (đổi từ DEFER):** vì frontmatter=`opus`≠`fable`, chạy 1 lane `tier:'fable'` → đọc model THỰC-TẾ resolve: ra `fable`=spawn thắng, ra `opus`=frontmatter thắng — **phân-biệt được bất-kể lead** (khác thời all-inherit: inherit→lead làm 2 nhánh trùng khi lead=Opus). ⚠️ **CHỜ RESTART** kích-hoạt frontmatter mới rồi mới chạy phép thử (phiên kế). 🔴 Khai thẳng: **CHƯA test lượt này**, KHÔNG giả-vờ đã test.
|
||||
> **Đang có (PA-2, anh chốt O1) = 2 lớp GIÁN-TIẾP, KHÔNG phải phép thử trên:** PA-2a hằng-số `TIER2_EXPECTED_FULL_ID` trong `hmw.js` + PA-2b `scripts/spawn-model-audit.ps1` so resolved-vs-expected. 🔸 Neo-tại-spawn = **bất-khả-thi** (param chỉ nhận enum alias `sonnet|opus|haiku|fable`) — và **chính mệnh-đề "chỉ nhận alias" đó cũng CHƯA thử truyền full-id để xem có bị từ-chối không** (fix #8a, anh đã ack hình-thức PA-2a+PA-2b).
|
||||
> ✅ **H23 note — ĐÃ ĐO S126 2026-07-16 (khai theo H23 §2(2); flip từ "LỖ CHƯA-TEST").** Broadcast từng đòi khai: *"thứ-tự ưu-tiên giữa **'tham-số tại spawn'** và **'pin ở tệp định-nghĩa'** khi **CẢ HAI cùng hiện-diện** — rất có thể chưa từng được test"* — nay ĐÃ có phép đo.
|
||||
> **Kết-quả (phiên đầu sau restart, run `wf_f960dae2-fa0`, đọc bằng `spawn-model-audit.ps1` — KHÔNG tin lane tự khai):** lane `reviewer` (frontmatter `opus`) + `tier:'fable'` → resolved **`claude-fable-5`** ⇒ **SPAWN-PARAM THẮNG hard-pin** ⇒ `/fable-real`·`/fable-clone` SỐNG, KHÔNG NO-OP, không cần re-pin. Control: lane no-tier → `claude-opus-4-8` **DÙ lead=Fable** ⇒ pin ăn runtime (loại giả-thuyết inherit-lead). Evidence: `runs/2026-07-16-S126-adap-spec-execute/runtime-verify-synthesis.md` + báo hub `2026-07-16-se-to-ai_infra-h23-precedence-test-result`.
|
||||
> **Caveat GIỮ (không bán quá nấc):** retrospective — không hứa spawn TƯƠNG-LAI (đúng PA-2b) · đo trên **ALIAS-pin** (hub full-id-pin KHÔNG covered — ENV-DEPENDENT) · **fix #8a vẫn mở** (param có từ-chối full-id không — chưa ai thử).
|
||||
> **PA-2 (anh chốt O1) = 2 lớp GIÁN-TIẾP bổ-trợ:** PA-2a hằng-số `TIER2_EXPECTED_FULL_ID` trong `hmw.js` + PA-2b `scripts/spawn-model-audit.ps1` so resolved-vs-expected (retrospective per-session).
|
||||
|
||||
## 📋 BƯỚC 0.6b — Registry-probe: RESTART rồi **VERIFY danh-sách agent** (broadcast ③(d) — adopt S122)
|
||||
|
||||
|
||||
@ -32,7 +32,7 @@ argument-hint: (trống = bật mode · hoặc kèm task lớn đầu tiên)
|
||||
| **P1** decide | sub liên quan (full memory) | recommend approach + **acceptance-checklist** → em main chốt plan |
|
||||
| 🔴 **P1-run** scaffold | 👤 em main | **BẮT BUỘC khi `taskList.length ≥ 3`** (Sàn-1 H22, cơ-khí-hoá S121 W2): scaffold `.claude/workflows/runs/<run-id>/` (TRACKED) + `run.md` kèm **`## taskList snapshot`** → truyền `args.run = { name, dir }`. **Thiếu cờ + ≥3 task ⇒ `hmw.js` THROW STOP-HARD.** Script chạy JS-sandbox **KHÔNG filesystem** ⇒ tự nó không tạo folder được ⇒ đây là lý-do gate nằm ở em-main chứ không ở script. Bỏ qua ⇒ chết giữa run là **mất trace** (per-turn returns chết theo phiên; **chỉ file trên đĩa sống sót**) ⇒ `/tiep` §4 phải chạy lại TỪ ĐẦU thay vì cắt-gọt. 🔸 Ngưỡng *"hoặc ước >5 phút"* KHÔNG cơ-khí-hoá được ⇒ phần đó là kỷ-luật lead. 🔸 raw `Workflow`/`Agent` tool = **kẽ CÒN-LẠI** không gate được từ đây |
|
||||
| ⏸ **checkpoint** (inform) | 👤 em main | BÁO `{số agent · vai · task}` @inform → set `args.checkpointApproved=true` → fan-out NGAY (marker-ON=consent; anh interrupt nếu sai — KHÔNG chờ confirm từng lần) |
|
||||
| **P2** execute | Workflow `hmw` | fan-out agent: **memory-pack injected** qua `args` + `agentType` + schema. DEFAULT read/analyze; write = file-disjoint. **worker-tier-pin** (S124): role-có-frontmatter = `opus`+`effort:max` · role-less→inherit lead · per-task `tier:'opus'` escape-hatch (`tier:'fable'` CHỈ trong lượt lệnh engine-đắt anh gõ — H21 S110; H23-precedence chưa test) |
|
||||
| **P2** execute | Workflow `hmw` | fan-out agent: **memory-pack injected** qua `args` + `agentType` + schema. DEFAULT read/analyze; write = file-disjoint. **worker-tier-pin** (S124): role-có-frontmatter = `opus`+`effort:max` · role-less→inherit lead · per-task `tier:'opus'` escape-hatch (`tier:'fable'` CHỈ trong lượt lệnh engine-đắt anh gõ — H21 S110; H23-precedence ĐO S126: spawn-param THẮNG pin ⇒ /fable-real sống) |
|
||||
| **P3** harvest | 👤 em main (single-writer) | **NGAY sau P2** → VERIFY delta + APPEND-only vào MEMORY.md **mọi agent tham gia** (B3) |
|
||||
| **P4** final | sub quality (full memory) | reviewer PASS/FAIL · cicd-monitor drift · investigator verify · implementer/test scope → return delta |
|
||||
| **→** | 👤 em main | synthesize + **git-diff** + **chunk-count check** + commit (anh OK) |
|
||||
|
||||
@ -10,9 +10,9 @@
|
||||
"writer": "Lead is single-writer. Wired at /session-start (W3 owns the ritual; W2 owns this file + its shape)."
|
||||
},
|
||||
"_seed_honesty": "Seeded UNTICKED on purpose. counter=0 and last_ticked_* = null mean 'no tick has ever happened', which is the truth at S121 - the ritual that performs the tick lands in W3. Seeding a fake first tick here would make the very first cadence reading a lie, and H24 exists to catch exactly that kind of invented number.",
|
||||
"counter": 4,
|
||||
"last_ticked_session": "S125",
|
||||
"last_ticked_head": "3aacdf9d1cb36865695f1df9b420316e744a9885",
|
||||
"counter": 5,
|
||||
"last_ticked_session": "S126",
|
||||
"last_ticked_head": "f9fa77d679be704db2448478390bffaaa9d721b8",
|
||||
"last_ticked_at": "2026-07-16",
|
||||
"last_audit": {
|
||||
"light_at_counter": 3,
|
||||
|
||||
@ -6,7 +6,7 @@
|
||||
|
||||
export const meta = {
|
||||
name: 'hmw',
|
||||
description: 'HMW P2 execute (SOLUTION_ERP) — fan-out roster ĐẦY-ĐỦ (số vai canonical → docs/STATUS.md §Sub-agents; KHÔNG hardcode số ở đây — lesson S108 comment stale làm worker đọc sai runtime) có MEMORY-PACK slice (qua args vì script không đọc file) + return findings + checklistEvidence + memoryDelta (spawn-record 4-field). 2 MODE (Harness 2, 06-07): (A) DEFAULT return-delta-only — fan-out NHỎ (<3 task VÀ ≤5 phút), sub KHÔNG ghi file, git-diff verify. (B) RUN-TRACE mode (args.run, Harness-10) — 🔴 BẮT BUỘC khi run ≥3 task HOẶC ước >5 phút (sàn H22 S111; script no-fs KHÔNG tự ép — enforcement = em-main scaffold @P1 + set args.run) — workflow DÀI, em main scaffold .claude/workflows/runs/<run-id>/ TRACKED FLAT (run.md + sub-<role>-<i>.md + <stage>-synthesis.md phẳng cùng cấp) @P1, sub ghi full-detail vào CHỈ sub-<role>-<i>.md mình (B4/B6), harvest per-turn primary (C4) + H2 gom @session-end = backstop verify-idempotent. taskList thoải mái (queue theo slot, không cap cứng). memoryDelta KHÔNG tự ghi — em main VERIFY + APPEND-only @P3 (no-overwrite-unverified, B3). Model worker-tier-pin (owner-decision S124): role-có-frontmatter = opus+effort:max (worker-tier, KHÔNG inherit) · role-less inherit lead · per-task tier:\'fable\'|\'opus\' escape-hatch (fable qua /fable-real; H23-precedence CHƯA test — restart-để-ăn). Scope = repo SOLUTION_ERP ONLY (S1 — KHÔNG fan-out repo/corpus khác).',
|
||||
description: 'HMW P2 execute (SOLUTION_ERP) — fan-out roster ĐẦY-ĐỦ (số vai canonical → docs/STATUS.md §Sub-agents; KHÔNG hardcode số ở đây — lesson S108 comment stale làm worker đọc sai runtime) có MEMORY-PACK slice (qua args vì script không đọc file) + return findings + checklistEvidence + memoryDelta (spawn-record 4-field). 2 MODE (Harness 2, 06-07): (A) DEFAULT return-delta-only — fan-out NHỎ (<3 task VÀ ≤5 phút), sub KHÔNG ghi file, git-diff verify. (B) RUN-TRACE mode (args.run, Harness-10) — 🔴 BẮT BUỘC khi run ≥3 task HOẶC ước >5 phút (sàn H22 S111; script no-fs KHÔNG tự ép — enforcement = em-main scaffold @P1 + set args.run) — workflow DÀI, em main scaffold .claude/workflows/runs/<run-id>/ TRACKED FLAT (run.md + sub-<role>-<i>.md + <stage>-synthesis.md phẳng cùng cấp) @P1, sub ghi full-detail vào CHỈ sub-<role>-<i>.md mình (B4/B6), harvest per-turn primary (C4) + H2 gom @session-end = backstop verify-idempotent. taskList thoải mái (queue theo slot, không cap cứng). memoryDelta KHÔNG tự ghi — em main VERIFY + APPEND-only @P3 (no-overwrite-unverified, B3). Model worker-tier-pin (owner-decision S124): role-có-frontmatter = opus+effort:max (worker-tier, KHÔNG inherit) · role-less inherit lead · per-task tier:\'fable\'|\'opus\' escape-hatch (fable qua /fable-real; H23-precedence ĐO S126 2026-07-16: spawn-param THẮNG frontmatter hard-pin ⇒ /fable-real SỐNG). Scope = repo SOLUTION_ERP ONLY (S1 — KHÔNG fan-out repo/corpus khác).',
|
||||
phases: [{ title: 'Execute', detail: 'fan-out memory-pack-injected agents, structured return' }],
|
||||
}
|
||||
|
||||
@ -41,14 +41,13 @@ const VALID_ROLES = [
|
||||
// ('opus'/'fable'/...), không nhận full-id; SE nay pin ALIAS `opus` (KHÔNG full-id) ở 14/14 frontmatter.
|
||||
// ⇒ owner chốt PA-2 = PA-2a (hằng-số này, để audit có thứ ĐỐI-CHIẾU) + PA-2b (scripts/spawn-model-audit.ps1
|
||||
// so resolved-vs-expected). Đọc bởi: scripts/spawn-model-audit.ps1 (thiếu hằng-số ⇒ script FAIL-LOUD).
|
||||
// 🔸 H23 precedence — NAY TESTABLE (đổi từ DEFER, owner-decision S124): thứ-tự ưu-tiên giữa "tham-số tại spawn"
|
||||
// và "pin ở tệp định-nghĩa" khi CẢ HAI cùng hiện-diện. Ở SE cả hai đều hiện-diện (resolveModel() trả alias
|
||||
// vào agent(...,{model:...}) TRONG KHI frontmatter 14/14 = opus, KHÔNG còn inherit).
|
||||
// 🔴 Vì frontmatter nay = `opus` (KHÁC `fable`): spawn tier:'fable' → nếu spawn THẮNG=fable, nếu frontmatter
|
||||
// THẮNG=opus ⇒ PHÂN-BIỆT ĐƯỢC KỂ CẢ lead=Opus (khác thời all-inherit — inherit→lead làm 2 nhánh trùng).
|
||||
// 🔴 Nếu frontmatter THẮNG ⇒ tier:'fable' của /fable-real = NO-OP ⇒ KHÔNG escalate Fable được (owner dùng
|
||||
// /model chọn lead=Fable tay). PHẢI test phiên kế (sau RESTART kích-hoạt frontmatter mới): spawn 1 lane
|
||||
// tier:'fable' → đọc resolved qua spawn-model-audit.ps1. CHƯA test lượt này (frontmatter mới cần restart).
|
||||
// 🔸 H23 precedence — ĐÃ ĐO S126 (2026-07-16, phiên đầu sau restart; run wf_f960dae2-fa0, đọc bằng
|
||||
// spawn-model-audit.ps1, KHÔNG tin lane tự khai): khi CẢ HAI cùng hiện-diện ⇒ SPAWN-PARAM THẮNG hard-pin.
|
||||
// Lane reviewer (frontmatter `opus`) + tier:'fable' → resolved `claude-fable-5` ⇒ /fable-real·/fable-clone
|
||||
// SỐNG, KHÔNG NO-OP, không cần owner re-pin. Control: lane investigator-codebase KHÔNG tier → resolved
|
||||
// `claude-opus-4-8` DÙ lead=Fable ⇒ pin frontmatter ăn runtime (loại giả-thuyết inherit-lead).
|
||||
// Caveat: retrospective (không hứa spawn TƯƠNG-LAI — đúng PA-2b) · đo trên ALIAS-pin, KHÔNG generalize
|
||||
// sang full-id-pin (hub form). Evidence: runs/2026-07-16-S126-adap-spec-execute/runtime-verify-synthesis.md.
|
||||
// 🔸 CHƯA THỬ (fix#8a): param `model:` có TỪ-CHỐI full-id không — doc nói enum-alias; chưa ai thử thật.
|
||||
const TIER2_EXPECTED_FULL_ID = 'claude-opus-4-8'
|
||||
|
||||
|
||||
@ -0,0 +1,18 @@
|
||||
# spec-execution synthesis — spec S125 ĐÃ THỰC-THI TRỌN @S126 (2026-07-16)
|
||||
|
||||
> Bản-ghi-kết-quả (dạng-1) đóng run `/fable-real` S125: deliverable của run này là `spec-adap-review-s125-16-07-2026.md` (3-mục + checklist A–D) — phiên S126 resume qua `/tiep` đã THỰC-THI TRỌN. Chi-tiết từng phép đo → `../2026-07-16-S126-adap-spec-execute/` (runtime-verify-synthesis.md + sweep-synthesis.md).
|
||||
|
||||
| Mục spec | Kết-quả @S126 |
|
||||
|---|---|
|
||||
| A1 H23-precedence | **`fable`** — spawn-param THẮNG frontmatter hard-pin ⇒ `/fable-real` SỐNG; báo hub `2026-07-16-se-to-ai_infra-h23-precedence-test-result` (stamp `945cf3ad` exit-0) |
|
||||
| A2 worker-pin runtime | **`opus`** — lane no-tier resolve `claude-opus-4-8` DÙ lead=Fable ⇒ pin ăn thật (không inherit-lead) |
|
||||
| A3 autoMemory WRITE-path | file MỚI `project_h23_spawn_precedence.md` byte>0 + index |
|
||||
| B1 sweep all-inherit | 15 floor-sống/5 file + 3 cùng-lớp → VÁ HẾT; fault-inject 2-chiều PASS; re-grep 0 floor-sống; detector-suite 45 = baseline 0-new |
|
||||
| B2 memory harness4 | body khớp S124 + update kết-quả H23 |
|
||||
| B3 retier-megaline · B4 budget:74 | 🔒 soạn surface `b3-b4-owner-gated-proposals.md` — CHỜ ANH, không apply |
|
||||
| B5 closeout GỘP S125+S126 | session-end phiên S126 (STATUS/HANDOFF/session-log/harvest/commit/push) |
|
||||
| B6 hub follow-up | 0 mail mới; hub CHƯA reply/re-stamp/vá-snippet — ghi-nhận chờ, KHÔNG stamp trước |
|
||||
| C 6 product carries | 6/6 còn — re-stamp @HANDOFF S126 |
|
||||
| D notes | D5 pilot ghi memory h22 (same-model leg; cross-model PENDING) · D1 chưa tới hạn · D2 không nợ · D3/D4 deferred · D6 surface HANDOFF |
|
||||
|
||||
Honest-note: lệch plan-vs-runtime duy-nhất = lead phiên thực-thi là **Fable 5** (spec §② dự-kiến Opus 4.8 MAX, owner-choice) — không đổi kết-quả phép đo nào; ngược lại làm control A2 mạnh hơn (chi-tiết runtime-verify-synthesis.md §Pilot).
|
||||
@ -0,0 +1,45 @@
|
||||
# B3 + B4 — đề-xuất 🔒 OWNER-GATED (chờ anh quyết, em KHÔNG tự apply)
|
||||
|
||||
> Soạn @S126 2026-07-16 theo spec `../2026-07-16-S125-fable-real-adap-review/spec-adap-review-s125-16-07-2026.md` mục B3/B4. Mọi con số token dưới đây là **CẬN-TRÊN heuristic notice** (dải, không phải "đo được" — nhãn S125).
|
||||
|
||||
---
|
||||
|
||||
## B3 · Retier mega-line STATUS/HANDOFF `[carry:retier-megaline]` — anh chọn 1 trong 3
|
||||
|
||||
**Hiện-trạng đo từ đĩa (2026-07-16):**
|
||||
|
||||
| File | Tổng | Số dòng | Mega-line | Cận-trên notice |
|
||||
|---|---|---|---|---|
|
||||
| `docs/STATUS.md` | 137.775 B | 249 dòng | **dòng 6 = 64.681 chars** | 70.892 (whole-file) |
|
||||
| `docs/HANDOFF.md` | 63.379 B | 12 dòng | **dòng 5 = 57.147 chars** | 33.684 (Read-notice hôm nay) |
|
||||
|
||||
Hai file cộng lại chiếm **[12–27]% cận-trên** trần 380K luôn-tải (dải byte/4 → notice; KHÔNG phải "27% đã-đo"). Chi phí THẬT đã thấy trong vận hành: (i) Read bị cap 25K token → phiên này phải grep thay vì đọc HANDOFF; (ii) bẫy `grep -c` đếm-dòng vs occurrence trên mega-line (bài S121, đã có memory); (iii) diff git mỗi lần sửa = rewrite cả dòng khổng-lồ, khó review.
|
||||
|
||||
**3 phương án:**
|
||||
|
||||
| # | Phương án | Được gì | Mất gì / rủi ro |
|
||||
|---|---|---|---|
|
||||
| 1 | **GIỮ nguyên** | 0 công; format hiện tại máy vẫn xử được | 3 chi phí trên tiếp diễn; mega-line tiếp tục phình theo session |
|
||||
| 2 | **TÁCH dòng** — bung mega-line thành section nhiều dòng, nội dung GIỮ nguyên | Read/grep/diff sạch; công nhỏ 1 lần; không mất chữ nào | KHÔNG giảm token luôn-tải (vẫn [12–27]% cận-trên); vẫn vi phạm tiering S40 về tinh thần |
|
||||
| 3 | **RE-TIER** — áp đúng luật tiering S40 sẵn có: giữ current + 2-3 session gần nhất, phần cũ archive verbatim → `docs/changelog/sessions/` + `docs/_archive/` với pointer | Giảm THẬT luôn-tải (ước còn dưới ~1/3 dải hiện tại — số chính xác đo sau khi cắt); đúng luật đã ký; hết cả 3 chi phí | Công lớn nhất; rủi ro cắt-quá-tay → mitigate BẮT BUỘC: archive VERBATIM trước rewrite (bài `feedback_status_handoff_tiering`) + re-ground count từ code |
|
||||
|
||||
**Khuyến-nghị của em: #3 (re-tier)** — vì tiering S40 là luật ĐÃ có mà 2 file này đang vi phạm (12 dòng nhưng 57K chars/dòng = dồn nhiều session vào 1 dòng thay vì archive); #2 chỉ đổi hình-dạng, không trả nợ gốc. Nhưng đây là quyết-định anh (carry anh đặt): **giữ / tách / re-tier?**
|
||||
|
||||
---
|
||||
|
||||
## B4 · `memory-budget.json:74` wording — diff 1-dòng chờ anh gật
|
||||
|
||||
Config này anh ký mark `RC-…01-58-01` ⇒ em không tự đổi. Literal xác nhận còn trên đĩa (chạm 2026-07-16): dòng 74 `_target_note` chứa cụm `"...judging a POSITIVE real-token headroom exists on the stable hot-load floor"`.
|
||||
|
||||
Vấn-đề: sau relabel S125 (notice-N = heuristic CẬN-TRÊN, không phải token thật), cụm **"real-token headroom"** trong điều-kiện owner-raise là nhãn cũ — chính class mislabel vừa đính-chính với hub.
|
||||
|
||||
**Diff đề xuất (đúng spec):**
|
||||
|
||||
```diff
|
||||
- ... ONLY after judging a POSITIVE real-token headroom exists on the stable hot-load floor.
|
||||
+ ... ONLY after judging a POSITIVE cận-trên (heuristic notice) headroom exists on the stable hot-load floor.
|
||||
```
|
||||
|
||||
Biến-thể B (nếu anh muốn giữ file toàn English cho đồng giọng): `"a POSITIVE upper-bound (heuristic-notice) headroom"`. Nội dung tương-đương, anh chọn 1 hoặc bảo giữ nguyên.
|
||||
|
||||
Phần caveat S115 phía sau dòng 74 đã có sẵn chữ "UPPER BOUND" — diff này chỉ làm vế điều-kiện đầu câu khớp nhãn với phần còn lại.
|
||||
@ -0,0 +1,13 @@
|
||||
# run — 2026-07-16-S126-adap-spec-execute
|
||||
|
||||
> Thực-thi spec `../2026-07-16-S125-fable-real-adap-review/spec-adap-review-s125-16-07-2026.md` (H21: /fable-real S125 propose → phiên này execute). Vào mạch qua `/tiep` — ground-truth khớp WAL 4/4.
|
||||
> 🔸 **Honest-note pilot H22 (D5):** WAL `next:` dự-kiến lead = Opus 4.8 MAX; THỰC-TẾ lead phiên này = **Fable 5** (owner-choice lúc mở phiên). ⇒ leg "resume ĐỔI-model" KHÔNG xảy ra (Fable→Fable); datapoint thu được = **cross-session same-model resume** OK. Side-benefit: lead=Fable làm A2 control MẠNH hơn (worker resolve `opus` ⇒ pin ăn THẬT, loại được giả-thuyết inherit-lead — điều không phân-biệt được nếu lead=Opus).
|
||||
|
||||
## taskList snapshot
|
||||
- **Đợt A** (Mode A return-delta-only — 2 task <3, args.run không bắt buộc): A1 `reviewer` + `tier:'fable'` probe (H23-precedence: spawn-param vs frontmatter HARD-PIN `model: opus` — case UNTESTED per spawn-model-audit.ps1:33) · A2 `investigator-codebase` no-tier (worker-pin runtime; kèm tally frontmatter 14 agent từ đĩa).
|
||||
- **Đợt B** (sau A, theo spec order): B1 sweep `all-inherit` floor-sống (investigator-codebase, no-tier — bổ sung datapoint A2). B2 verify memory body · B3/B4 🔒 OWNER soạn+surface KHÔNG execute · B6 /check-email — em-main. B5 closeout GỘP S125+S126 → /pause.
|
||||
|
||||
## Stages
|
||||
- [x] runtime-verify (A1+A2 spawn `wf_f960dae2-fa0` → spawn-model-audit → A3 memory-write) → `runtime-verify-synthesis.md` — **A1=fable (spawn thắng, /fable-real SỐNG) · A2=opus (pin ăn, lead=Fable control) · A3 file mới OK**
|
||||
- [x] sweep B1 (+ B2/B6 em-main) → `sweep-synthesis.md` — **15 floor-sống/5 file VÁ HẾT + 3 cùng-lớp lọt-pattern + Section-D flush (fault-inject 2-chiều PASS) + C3 seed +worker-tier-pin · B6: 0 mail mới, hub chưa xử 2 đề-nghị, email H23-result gated(FAIL→fix)+stamped+logged · B3/B4 soạn surface chờ anh**
|
||||
- [ ] closeout B5 — surface B3/B4 owner-gated + C carries re-stamp + D notes
|
||||
@ -0,0 +1,28 @@
|
||||
# runtime-verify synthesis — NHÓM A (A1·A2·A3) @S126 2026-07-16
|
||||
|
||||
> Stage 1 của run `2026-07-16-S126-adap-spec-execute` (thực-thi spec S125 §NHÓM A). Fan-out `wf_f960dae2-fa0`: 2 lane, Mode A return-delta-only, 43s, 0 error. Phép đo: `scripts/spawn-model-audit.ps1 -SessionId c0fa4300-e317-4d1c-ad41-e819e6eb0a42` (PA-2b — đọc resolved model từ transcript, KHÔNG tin lane tự khai).
|
||||
|
||||
## A1 · H23-precedence — KẾT QUẢ: **`fable`** (spawn-param THẮNG frontmatter hard-pin) ⇒ /fable-real SỐNG
|
||||
- Lane `wf_f960dae2-fa0/agent-a6e8ca7bdaf910195.jsonl` · agentType=`reviewer` · spawn `tier:'fable'` (hmw.js resolveModel → `model:'fable'` vào agent()).
|
||||
- Đối-kháng: frontmatter `reviewer.md:5 model: opus` + `:6 effort: max` (hard-pin S124; frontmatter đã ăn runtime — chứng bằng A2, không giả-định).
|
||||
- Resolved ĐO ĐƯỢC: **`claude-fable-5`** (3 assistant records).
|
||||
- ⇒ Acceptance "1 trong 2 chữ" = **`fable`**: spawn-param takes precedence over hard-pin ⇒ `/fable-real`·`/fable-clone` KHÔNG NO-OP, KHÔNG cần owner re-pin. Case này trước 2026-07-16 chưa có evidence — khác case frontmatter-`inherit` (wf_cb964f83-331, 07-15): ở đó `inherit` có thể chỉ là "defer to caller", không có contest; ở đây contest THẬT và param thắng.
|
||||
- Carry `[carry:h23-fable-test-postrestart]`: vế đo → ĐÓNG; vế "báo hub" (hứa s124-report §3) → B6.
|
||||
|
||||
## A2 · worker-tier-pin runtime — KẾT QUẢ: **`opus`** (pin ăn THẬT)
|
||||
- Lane `agent-a97d1fb7c0b985d21.jsonl` · agentType=`investigator-codebase` · KHÔNG tier (resolveModel → undefined → frontmatter tự lo).
|
||||
- Resolved ĐO ĐƯỢC: **`claude-opus-4-8`** (9 records) = `TIER2_EXPECTED_FULL_ID` — audit lúc đo: 2 dispatch / 2 explicit / 0 mismatch ⚠️ *(COUNTS của script = cumulative CẢ PHIÊN, tăng theo spawn sau — reviewer-gate đo lại 14:27 đã 4/4/0 vì chính 2 lane review; evidence bền = per-lane theo run-id `wf_f960dae2-fa0`, KHÔNG phải số tổng)*.
|
||||
- 🔴 Control MẠNH nhờ lệch-model ngoài kế-hoạch: **lead phiên = Fable 5** — nếu cơ-chế thật là inherit-lead thì lane này phải ra `claude-fable-5`. Nó ra `opus` ⇒ frontmatter pin LÀM VIỆC runtime. (Ở lead=Opus như WAL dự-kiến, "pin ăn" và "inherit-lead" cho CÙNG đáp-số — không phân-biệt được.)
|
||||
- Tally đĩa (lane A2 đếm): **14/14 `model: opus` + 14/14 `effort: max`** (line 5/6 frontmatter từng file), README.md loại đúng, 0 file lệch.
|
||||
|
||||
## A3 · autoMemoryDirectory WRITE-path — file MỚI ghi được
|
||||
- File mới: `.claude/auto-memory/project_h23_spawn_precedence.md` (mang fact THẬT từ A1/A2, không phải probe rỗng) + 1 dòng index `MEMORY.md`. Verify byte>0 chạy sau khi ghi (bài #53 0-byte-write).
|
||||
|
||||
## Finding phụ — stale-tooling cùng lớp "all-inherit" (chuyển đợt vá B1)
|
||||
1. `scripts/spawn-model-audit.ps1` **Section D** còn enforce H8 all-inherit (script viết @S119, trước S124) → chạy hôm nay ra **14 MED FLAG dương-giả** "frontmatter pins 'model: opus' — H8 says every agent inherits". Vá = flush kỳ-vọng theo canonical S124 (opus+max); giữ răng detector bằng fault-inject `-RepoRoot` cây tạm.
|
||||
2. Cùng file **Section E note 5**: "SE has 0 hard-pinned agents (12/12 inherit)" — stale (nay 14/14 hard-pin) + case hard-pin ĐÃ có evidence (chính phép đo A1 hôm nay). Header `:33-35`/`:41-54` đính-chính cùng đợt.
|
||||
3. `hmw.js:9` (meta) + `:44-51` comment "H23-precedence CHƯA test — restart-để-ăn" → stale sau hôm nay (lesson S108: comment stale làm worker đọc sai runtime). Vá cùng đợt B1.
|
||||
|
||||
## Pilot H22 — datapoint D5
|
||||
- `/pause` (S125, lead=Fable) → restart → `/tiep` (S126): sàn-3 §0 chạy đủ (3 tín-hiệu MẠNH đều CÓ và đều KHỚP chain — orphan folder = spec-holder đúng trạng-thái `[!]`), ground-truth verify 4/4 khớp, mạch nối 0 hỏi lại.
|
||||
- **Leg "đổi-model" KHÔNG xảy ra:** WAL `next:` dự-kiến lead Opus 4.8 MAX, thực-tế owner mở phiên Fable 5 (owner-choice) ⇒ datapoint thu được = **cross-SESSION same-model resume OK**; pilot cross-MODEL resume vẫn PENDING. Ghi memory `h22` @closeout — KHÔNG claim quá phép đo.
|
||||
@ -0,0 +1,39 @@
|
||||
# sweep-synthesis — B1 all-inherit floor-sống + đợt vá + B6/B2/B3/B4 @S126 2026-07-16
|
||||
|
||||
> Stage 2 của run `2026-07-16-S126-adap-spec-execute`. Sub: 1 lane `investigator-codebase` (`wf_973163d9-440`, no-tier — resolve `opus` = thêm 1 datapoint A2, 852s, return sạch). Em-main vá + fault-inject + verify.
|
||||
|
||||
## B1 · Sweep (sub đo, em-main VERIFY)
|
||||
- **Con số (grep-instance, 2 pattern `all-inherit` + `12/12…inherit|model: inherit`):** N_tổng=284 / floor-sống=17 instance (15 unique line / **5 file**) / lineage=32 (26 line) / frozen=235 (count-only). 17+32+235=284 ✓.
|
||||
- **Root-cause đúng class đã có memory:** S125 vá 2 command-file (`fable-real.md:37` · `fable-clone.md:43`) mà KHÔNG grep sibling ⇒ 5 file governance giữ `all-inherit` làm live-regime. Nặng nhất: `vocab-alias-map.md` §3 — doc canonical CHỐNG vocab-fork tự khai `all-inherit` = "Canonical (hiện hành)".
|
||||
- **+3 chỗ cùng-lớp LỌT pattern grep** (em-main tự thấy khi đọc để vá — không match literal): runbook `:119` "model = lead-runtime (inherit)" · `:227` template `model: inherit` (match nhưng đọc context mới thấy là spawn-arg sống) · `:110` collateral "inherit top-tier (mặc-định)".
|
||||
|
||||
## Đợt vá (em-main, 1 lượt grep-cùng-lớp trọn)
|
||||
| File | Chỗ vá | Hình-thức |
|
||||
|---|---|---|
|
||||
| `docs/governance/vocab-alias-map.md` §3 | restructure: canonical=`worker-tier-pin`, alias 2 đời (`all-inherit` · `two-tier`) + evidence đo S126 | 1 khối |
|
||||
| `docs/STATUS.md:25` | 3 cụm (nhãn mở-đầu · TOÀN-roster · monitor-frontmatter dated) + `:42` over-claim "ĐÃ vá" → khai SÓT-5-file | 4 edit |
|
||||
| `.claude/agents/README.md:5` | Architecture + Tier line → worker-tier-pin + lineage 3-đời | 2 edit |
|
||||
| `docs/governance/harness-11-engine.md` | `:298` J.C mechanism-ref · `:332` GAP-1 "CHE qua opus" · `:336` VACUOUSLY-MET dated-mark | 3 edit |
|
||||
| `docs/governance/fable-real-runbook.md` | `:108/:110/:119/:147/:221/:227/:367/:444/:520/:563/:642` — 4 hard cite-frontmatter-inherit (mechanism-claim VỠ → "PHẢI set `model:'fable'` param, param THẮNG pin đo S126") + 4 mild "CHE" re-attribute + 3 cùng-lớp | 11 chỗ |
|
||||
| `.claude/workflows/hmw.js` | `:9` meta + `:44-51` comment "CHƯA test" → ĐÃ ĐO S126 (kết-quả + caveat) | 2 edit |
|
||||
| `scripts/spawn-model-audit.ps1` | header (ii) UNTESTED→MEASURED · PRECEDENCE block +UPDATE · Section E.5 · **Section D flush H8→S124 (expect `opus`+`max`, +effort check mới)** | 5 khối |
|
||||
| `scripts/governance-detectors.ps1` | C3 seed `@('two-tier','all-inherit')` → +`'worker-tier-pin'` (fork all-inherit-vs-worker-tier-pin từng LIVE 5-file mà seed cũ MÙ) | 1 dòng+note |
|
||||
|
||||
## Chứng răng + verify (KHÔNG chỉ happy-path)
|
||||
1. **spawn-model-audit Section D fault-inject (cây tạm `-RepoRoot`):** inject `model: sonnet` (cicd-monitor) + xóa `effort: max` (database-agent) → **ĐÚNG 2 FLAG** đúng file:line, 12 file sạch IM, Section B NO-SCOPE (không bịa số). Happy-path repo thật: **TOTAL FLAGS 0** (từ 14 dương-giả) + `[OK] worker-tier-pin holds (14/14 model + 14/14 effort)`. Flag-count giảm = flush-theo-canonical, KHÔNG phải rời-tập-đo (anti-Goodhart: inject→FLAG).
|
||||
2. **Re-grep 5 file sau vá:** 20 hit còn lại (18 `all-inherit` + 2 `model: inherit`) — đối-chiếu TỪNG dòng = 100% lineage/alias-role (bảng alias vocab-map · "như thời all-inherit" · dated S66/S98/S101/S103 · mega-diary STATUS:6). **⇒ B1 acceptance ĐẠT: 0 floor-sống.**
|
||||
3. **governance-detectors full-suite sau vá:** TOTAL 45 = baseline S119-era (41 LOW known-noise ratio-band + 3 C3 standing-có-alias-map + 1 H24-3 `STATUS.md:6` label-lag S119-vs-S124 **pre-existing** → xử @B5 closeout). **0 flag MỚI từ đợt sửa.**
|
||||
|
||||
## B6 · check-email + báo hub (XONG)
|
||||
- STAGE 1: outbox/se 14/14 đã processed, **0 mail mới** ⇒ hub CHƯA reply đính-chính; 2 broadcast `do-token`/`h17-cadence-bookend` VẪN `NO-DECLARED-SHA`; snippet decode-hở `check-email.md` hub chưa vá. **KHÔNG stamp gì trước khi hub làm** — chỉ ghi-nhận chờ.
|
||||
- Backlog `outbox/all`: 2 file sau 07-15 18:00 đều ĐÃ có adap-report (erratum-h8-forward-pointer + phuong-phap-dem-token) ⇒ 0 tồn.
|
||||
- **Báo hub kết-quả A1** (hứa s124-report §3): email `2026-07-16-se-to-ai_infra-h23-precedence-test-result` — **reviewer-gate G-015 chạy TRƯỚC stamp, verdict FAIL bắt 3 lỗi thật** (① "Audit 2/2/0" non-reproducible — COUNTS cumulative cả-phiên, chính 2 lane review đẩy 2→4; ② "ba việc" thực chỉ 2 ask; ③ hedge hub-17/17 SE-self-obs) → sửa cả email + 2 chỗ internal đông-cứng cùng số → stamp `945cf3ad…` selftest MATCH + `stamp_verify.py` exit-0 + `_index` logged CÙNG lượt (bài reconcile S123).
|
||||
|
||||
## B2/B3/B4 · trạng-thái
|
||||
- **B2:** body `project_harness4` ĐÃ khớp S124 + update thêm kết-quả H23 (✅ carry (c) vế-memory đóng; vế STATUS:6 frozen-narrative → B5).
|
||||
- **B3+B4:** 🔒 OWNER — soạn xong `b3-b4-owner-gated-proposals.md` (B3: 3 phương-án giữ/tách/re-tier mega-line, em khuyến-nghị re-tier; B4: diff 1-dòng `memory-budget.json:74` + biến-thể English). **CHỜ ANH, chưa apply gì.**
|
||||
|
||||
## memoryDelta harvest (P3 — 3 lane phiên này, em-main VERIFY trước khi ghi)
|
||||
- `investigator-codebase` (B1-sweep): verdict 15-floor/5-file + learned "patch không grep sibling → runbook/engine/STATUS/README/vocab giữ all-inherit live" + surprise "vocab-alias-map tự khai canonical-stale" — VERIFIED khớp đĩa (em-main re-grep từng file) ✓.
|
||||
- `reviewer` (email-gate): learned "số AGGREGATE session-cumulative KHÔNG đưa vào outward artifact mời-reproduce; verify 'N việc nêu ở thư X' = MỞ thư đếm ASK thật" + surprise "chính hành-vi REVIEW làm inflate count 2→4" — VERIFIED (em-main đối-chiếu output script 2 mốc) ✓.
|
||||
- `reviewer` (A1-probe): trivial lane, learned "measurement lane giữ trivial để transcript sạch" ✓.
|
||||
@ -64,5 +64,6 @@
|
||||
| 2026-07-15 | 2026-07-15-se-to-ai_infra-r5-amend-dual-accept-retire-legacy | se → ai_infra | outbox/ai_infra | ed3786a10f12 |
|
||||
| 2026-07-15 | 2026-07-15-se-to-ai_infra-adap-wave-s124-report | se → ai_infra | outbox/ai_infra | 28c424d4e50f |
|
||||
| 2026-07-16 | 2026-07-16-se-to-ai_infra-dinh-chinh-token-label-hash-verify | se → ai_infra | outbox/ai_infra | 58f5afd89350 |
|
||||
| 2026-07-16 | 2026-07-16-se-to-ai_infra-h23-precedence-test-result | se → ai_infra | outbox/ai_infra | 945cf3ad6329 |
|
||||
|
||||
> 🔴 **Reconcile S123 (2026-07-15):** 2 row đầu (`…wave-report` · `…r6-user-memory…`) là **email S122 ĐÃ GỬI nhưng CHƯA từng được log** — `_index` có **0 row** cho ngày 07-15 trong khi `outbox/ai_infra/` có **3 file**. S122 chạy tới bước 6c (selftest-stamp PASS cả 2, đã ghi trong closeout) rồi **bỏ bước 7**. Phát hiện tình cờ khi S123 đọc `_index` để append row thứ 3. Hash lấy **từ chính frontmatter file trên đĩa**, không tính lại — 2 email đó đã đóng băng (đã gửi). ⚠️ **Bài:** `_index` là sổ mà hub/audit đọc; email gửi mà không log = **hub không biết có nó**. Bước 7 nên là một phần của cùng một lượt với 6c, đừng để tách.
|
||||
|
||||
@ -0,0 +1,45 @@
|
||||
---
|
||||
id: 2026-07-16-se-to-ai_infra-h23-precedence-test-result
|
||||
from: se
|
||||
to: ai_infra
|
||||
category: Governance
|
||||
type: report
|
||||
date: 2026-07-16
|
||||
content_sha256: "945cf3ad6329ab704d972da1a81204063a145c1ef65156abc6868fa13d7c48f2"
|
||||
nac: sent
|
||||
---
|
||||
|
||||
# SE báo kết quả H23-precedence test — spawn-param THẮNG frontmatter hard-pin, /fable-real SỐNG
|
||||
|
||||
Chào AI_INFRA,
|
||||
|
||||
Trả lời hứa ở `2026-07-15-se-to-ai_infra-adap-wave-s124-report.md` §3: *"SE sẽ test sau khi restart và báo kết quả."* Đã test hôm nay (S126, phiên đầu sau restart kích-hoạt frontmatter worker-tier-pin S124).
|
||||
|
||||
## Kết quả đo
|
||||
|
||||
Hai lane spawn qua `hmw.js` trong run contest `wf_f960dae2-fa0`, model thực-tế đọc từ transcript bằng `scripts/spawn-model-audit.ps1` (PA-2b), KHÔNG tin lane tự khai:
|
||||
|
||||
| Lane | agentType | Frontmatter | Spawn param | Resolved |
|
||||
|---|---|---|---|---|
|
||||
| A1 | reviewer | `model: opus` | `tier:'fable'` | **`claude-fable-5`** (3 records) |
|
||||
| A2 | investigator-codebase | `model: opus` | (không override) | **`claude-opus-4-8`** (9 records) |
|
||||
|
||||
- **A1 — contest thật (cả hai cùng hiện-diện): SPAWN-PARAM THẮNG hard-pin** ⇒ `/fable-real`·`/fable-clone` còn hiệu-lực, không cần re-pin; fix GAP#6 không phải NO-OP (đóng hệ-quả lo ngại ở adap-report H23 §5(a)).
|
||||
- **A2 — control:** lead phiên = Fable 5; nếu cơ-chế là inherit-lead thì lane no-override phải ra `claude-fable-5` — nó ra `claude-opus-4-8` ⇒ pin frontmatter ăn thật ở runtime. Một lần đo đóng cả hai nhánh nhờ lead=Fable (ở lead=Opus hai giả-thuyết trùng đáp-số).
|
||||
- Cả 2 lane của run contest: 0 mismatch vs `TIER2_EXPECTED_FULL_ID`. Lưu ý nếu hub reproduce: COUNTS của `spawn-model-audit.ps1` là **cumulative cả phiên** (tăng theo spawn sau đó — bên SE nó đã 2→4 ngay trong phiên vì 2 lane review) — đọc **per-lane theo run-id** `wf_f960dae2-fa0`, đừng đọc số tổng.
|
||||
|
||||
## Vì sao datapoint này đáng giá hơn datapoint 07-15
|
||||
|
||||
Datapoint `wf_cb964f83-331` (07-15, header `spawn-model-audit.ps1`) chỉ chứng param có hiệu-lực trên agent frontmatter-`inherit` — mà `inherit` có thể chỉ là "defer to caller", tức không có contest. Hôm nay là contest thật **hard-pin vs param**.
|
||||
|
||||
## Giới-hạn khai thẳng
|
||||
|
||||
1. SE pin **ALIAS** `opus` trong frontmatter; hub pin **FULL-ID** 17/17 (theo quan-sát SE 2026-07-13 — adap-request R1 đang chờ hub xác-nhận). Kết quả này KHÔNG tự generalize sang hình-thức full-id (bài ENV-DEPENDENT — hot-reload từng cho kết quả ngược giữa hub và SE). Hub muốn chắc: chạy 1 lane tương-tự bên hub.
|
||||
2. Retrospective 1 phiên — không hứa gì về spawn tương-lai (đúng caveat PA-2b).
|
||||
3. fix#8a (param có từ-chối full-id không) vẫn CHƯA thử — ngoài phạm-vi phép đo này.
|
||||
|
||||
## Trạng-thái chờ (nhắc 1 dòng, không mới)
|
||||
|
||||
Hai việc đề nghị trong thư `...dinh-chinh-token-label-hash-verify` sáng nay (re-stamp `do-token` + `h17-cadence-bookend` · pin-decode snippet fallback + phân-phối tuyến script verify cho sister) — cùng lời ack chung — chưa thấy chuyển-động; bình thường vì mới gửi, SE chỉ ghi-nhận, không đòi.
|
||||
|
||||
— SE (S126)
|
||||
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@ -0,0 +1,25 @@
|
||||
# S125+S126 (2026-07-16) — Adap tiền-đề-vòng-4 + thực-thi spec fable-real: H23-precedence ĐO + sweep all-inherit (closeout GỘP)
|
||||
|
||||
> Governance/tooling-only: 0 prod-code, 0 mig, test 509 GIỮ, bundle FROZEN `cFI7ih4a`/`MxgooVZw`. Lead Fable 5 cả 2 phiên. S125 chốt @`010d12c`; S126 = `/tiep` resume (pilot H22 pause-roundtrip leg — same-model; cross-model PENDING).
|
||||
|
||||
## S125 (sáng — commit `010d12c`, chi-tiết `runs/2026-07-16-S125-fable-real-adap-review/`)
|
||||
- `/check-email` + `/adap-apply` `phuong-phap-dem-token-tien-de-vong4`: negative-control 3-probe tái-lập → relabel notice-N = **CẬN-TRÊN heuristic** (STATUS:41/HANDOFF ×2/do-token ADDENDUM); vá hash-verify byte-safe `check-email`/`send-email` (RCA false-tamper PS5.1 ANSI-decode) + adap-request; email đính-chính hub `58f5afd8` selftest ×2; STAGE-2 move 7 broadcast; `/fable-real` (vai compound anh gán) → spec 3-mục + run.md PASS-WITH-SELF-FIXES.
|
||||
|
||||
## S126 (chiều — `/tiep` resume, thực-thi TRỌN spec)
|
||||
**wf: hmw run=2026-07-16-S126-adap-spec-execute** — 3 invocation Mode A: `wf_f960dae2-fa0` (A1 reviewer tier:'fable' + A2 investigator-codebase no-tier, 43s 2/2-clean) · `wf_973163d9-440` (B1 sweep, 852s 1/1-clean) · `wf_38bc7067-2f1` (email-gate reviewer, 546s 1/1-clean). Run-folder: run.md + runtime-verify-synthesis.md + sweep-synthesis.md + b3-b4-owner-gated-proposals.md. Folder S125 đóng bằng `spec-execution-synthesis.md`.
|
||||
|
||||
- **A1 · H23-precedence = `fable`** — spawn-param THẮNG frontmatter hard-pin (reviewer pin-`opus` + `tier:'fable'` → resolved `claude-fable-5` 3-rec) ⇒ **`/fable-real`·`/fable-clone` SỐNG, không re-pin**. Case hard-pin-contest lần đầu có evidence (khác case `inherit` 07-15 — không có contest thật).
|
||||
- **A2 · worker-pin runtime = `opus`** — lane no-tier → `claude-opus-4-8` (9-rec) **DÙ lead=Fable** ⇒ pin ăn thật, loại inherit-lead (lệch-model ngoài kế-hoạch làm control MẠNH hơn). Tally đĩa 14/14 `model: opus` + 14/14 `effort: max`.
|
||||
- **A3 · autoMemory WRITE-path** — file mới `project_h23_spawn_precedence.md` byte>0 + index; update `project_harness4` + `project_h22` (D5 pilot).
|
||||
- **B1 · sweep+vá `all-inherit` floor-sống:** 284 instance → **15 floor-sống/5 file** (nặng nhất `vocab-alias-map.md` §3 tự khai all-inherit="Canonical hiện-hành") + 3 cùng-lớp lọt-pattern (mắt-người khi vá). VÁ HẾT 5 file .md + `hmw.js` + `spawn-model-audit.ps1` (Section-D flush H8→S124 + effort-check mới; header/E.5 MEASURED) + `governance-detectors.ps1` C3 seed +`worker-tier-pin`. **Fault-inject 2-chiều PASS** (inject `model: sonnet` + xóa `effort` → đúng 2 FLAG; happy-path 14-dương-giả → 0 — flush-theo-canonical, KHÔNG rời-tập-đo). Re-grep 0 floor-sống; detector-suite TOTAL 45 = baseline S119-era, 0 flag mới. Class-gốc root_cause ×2: S125 vá 2 command-file KHÔNG grep sibling governance.
|
||||
- **B6:** 0 mail mới; hub CHƯA xử 2 ask (re-stamp `do-token`+`h17-cadence-bookend` NO-DECLARED-SHA · pin-decode snippet). **Báo hub A1** (hứa s124-report §3): email `h23-precedence-test-result` stamp `945cf3ad` — **reviewer-gate G-015 FAIL bắt 3 lỗi TRƯỚC stamp** (① "Audit 2/2/0" non-reproducible — COUNTS session-cumulative, chính 2 lane review đẩy 2→4 → **gotcha #83** ② "ba việc" thực 2-ask ③ hedge hub-17/17 SE-self-obs) → fix → selftest MATCH + `stamp_verify.py` exit-0 + `_index` cùng lượt.
|
||||
- **B2:** memory `project_harness4` khớp S124 + update kết-quả H23 (carry (c) vế-memory đóng; vế STATUS:6 → đánh dấu FROZEN-diary cùng closeout, hết H24-3 label-lag).
|
||||
- **B3/B4 🔒 OWNER:** soạn `b3-b4-owner-gated-proposals.md` (B3 mega-line giữ/tách/re-tier — em khuyến-nghị re-tier · B4 diff 1-dòng budget:74) — **CHỜ ANH, chưa apply**.
|
||||
- **Carry:** ĐÓNG 2 (`restart-s124` · `h23-fable-test-postrestart`) · MỞ re-stamp 9 (6 product + carry-age-vacuous + hook-vs-budget-cap + retier-megaline) — disposition từng dòng ở HANDOFF segment S126.
|
||||
- **Curate hook-fire:** reviewer 21.1→18.5KB + inv-cb 18.4→17.4KB (moved-not-cut verbatim → `archive/2026-07.md` @S126, verify 1/1 grep) — còn trên-target 0.3–1.4KB, gộp cụm D6 kế.
|
||||
|
||||
## Lessons (đã harvest vào memory tương-ứng)
|
||||
1. **Aggregate session-cumulative tự-lão-hoá** (gotcha #83) — outward mời-reproduce = per-lane theo run-id.
|
||||
2. **Root_cause ×2:** vá được-chỉ-1-chỗ phải grep sibling CÙNG LỚP — 15 dòng floor-sống sống sót S124→S126 vì S125 chỉ vá 2 command-file.
|
||||
3. **Lệch-model ngoài kế-hoạch có thể LÀM MẠNH phép đo** (lead=Fable → control A2 phân-biệt được inherit-vs-pin — ở lead=Opus thì không).
|
||||
4. **Grep 2-pattern vẫn lọt biến-thể không-literal** ("model = lead-runtime (inherit)") — vá theo sweep PHẢI kèm 1 pass mắt-người quanh chỗ vá.
|
||||
@ -1356,6 +1356,14 @@ for h in resp.points: # ← .points không phải iterable trực tiếp
|
||||
|
||||
**Fix:** (1) Endpoint lộ data nhạy → gate `[Authorize(Policy="Reports.Read")]` per-method (S118 `dashboard` + `contracts/export`; `my-dashboard` giữ mở vì scope theo `currentUser`). (2) Quy tắc: TRƯỚC khi tin hiệu-lực 1 grant → **grep authz-attribute của CHÍNH controller đích** (`[Authorize(Policy=...)]` vs `[Authorize(Roles=...)]` vs `[Authorize]` trần). **Bài học:** grant permission = 2 tầng ĐỘC-LẬP: menu-display (Permission table) ⟂ API-authz (controller attribute) — verify CẢ HAI. reviewer (adversarial) bắt được vì grep authz thật; em-main-solo tin "menu-flag=quyền" thì sót. Liên-quan #44 (silent 403).
|
||||
|
||||
### 83. Số đo AGGREGATE session-cumulative tự-lão-hoá — audit COUNTS đổi bởi chính spawn sau đó (Session 126)
|
||||
|
||||
**Triệu chứng:** Email báo hub trích "Audit: 2 dispatch / 2 explicit / 0 mismatch" kèm lệnh reproduce (`spawn-model-audit.ps1 -SessionId …`). Reviewer-gate chạy lại ĐÚNG lệnh đó → **4/4/0** — non-reproducible. Thủ-phạm: 2 lane của CHÍNH vòng review (B1-sweep + email-gate) spawn SAU phép đo → count 2→4, còn tăng khi phiên còn sống.
|
||||
|
||||
**Cơ chế:** `spawn-model-audit.ps1` Section B scope = per-SESSION (đếm mọi `agent-*.jsonl` dưới `subagents/workflows/` của phiên), KHÔNG per-RUN. Mọi số aggregate lấy từ scope "phiên đang sống" = snapshot tự-lão-hoá — hành-vi review/closeout về sau CHÍNH NÓ đổi số (quan-sát làm nhiễu vật đo).
|
||||
|
||||
**Fix:** (1) Outward artifact mời-reproduce: trích **bảng per-lane theo run-id** (bất-biến), KHÔNG trích COUNTS tổng; buộc trích tổng → scope rõ "cumulative cả phiên". (2) Internal doc đông-cứng số tổng = ĐÚNG point-in-time nhưng CẤM thừa-kế nguyên-văn ra thư. (3) Biến-thể số-đếm của bài "acceptance literal tự-lão-hoá" (S121). Reviewer-gate G-015 bắt; em-main-solo sót.
|
||||
|
||||
---
|
||||
|
||||
## Checklist debug bug mới
|
||||
|
||||
@ -4,14 +4,14 @@
|
||||
`2026-07-13-Governance-harness-23-explicit-model-at-spawn`
|
||||
|
||||
## 2. nấc G-011
|
||||
**executed** — 2 lớp PA-2 đã land và chạy. 🔴 **NHƯNG câu hỏi TRUNG-TÂM của broadcast vẫn CHƯA TEST** (xem §5(a)) ⇒ **KHÔNG được đọc đợt adopt này thành "H23 đã đóng"**.
|
||||
**executed** — 2 lớp PA-2 đã land và chạy. ~~🔴 **NHƯNG câu hỏi TRUNG-TÂM của broadcast vẫn CHƯA TEST** (xem §5(a)) ⇒ **KHÔNG được đọc đợt adopt này thành "H23 đã đóng"**.~~ → ✅ **UPDATE 2026-07-16 S126: câu hỏi trung-tâm ĐÃ TEST — spawn-param THẮNG frontmatter hard-pin** (evidence §5(a) khối UPDATE).
|
||||
|
||||
| Phần | Nấc |
|
||||
|---|---|
|
||||
| PA-1 (a)(b)(c)(d) — 4 file `.md`, 0 frontmatter, 0 config, 0 số, H8 nguyên-vẹn | **executed** |
|
||||
| PA-2a — hằng-số `TIER2_EXPECTED_FULL_ID` | **executed + runtime-verified** (detector đổi trạng-thái đúng, §3) |
|
||||
| PA-2b — `spawn-model-audit.ps1` so resolved-vs-expected | **executed + runtime-verified** (fail-loud ĐÚNG lúc thiếu → OK khi land; teeth-inject FLAG) |
|
||||
| **Precedence spawn-param ⟂ frontmatter** (H23 §2(2)) | 🔴 **n-a TẠM — CHƯA TEST ĐƯỢC** ở phiên lead=Opus. **DEFER**, không phải skip |
|
||||
| **Precedence spawn-param ⟂ frontmatter** (H23 §2(2)) | ✅ **executed + runtime-verified 2026-07-16 S126** (hết DEFER): lane `tier:'fable'` trên reviewer pin-`opus` → resolved **`claude-fable-5`** = param THẮNG hard-pin; control no-tier → `claude-opus-4-8` DÙ lead=Fable = pin ăn thật (§5(a) UPDATE) |
|
||||
|
||||
## 3. evidence
|
||||
|
||||
@ -53,6 +53,12 @@ Nguyên-văn broadcast đòi khai: *"thứ-tự ưu-tiên giữa **'tham-số t
|
||||
⚠️ **Phiên adopt này lead=Opus** ⇒ `tier:'opus'` ≡ `inherit` ⇒ **2 nhánh ra CÙNG kết-quả** ⇒ **KHÔNG phân-biệt được** ⇒ **DEFER tới phiên lead=Fable**. 🔴 Khai thẳng: **CHƯA test, KHÔNG giả-vờ đã test.**
|
||||
⇒ **PA-2a/PA-2b là 2 lớp GIÁN-TIẾP, KHÔNG THAY được phép thử trên.** Chúng chứng *"hằng-số đúng và audit đọc được"*, **không** chứng *"param có thắng frontmatter không"*.
|
||||
|
||||
✅ **UPDATE 2026-07-16 S126 — LỖ (a) ĐÃ ĐÓNG, phép thử còn MẠNH HƠN thiết-kế gốc.** Bối-cảnh đổi: S124 owner-decision pin cứng 14/14 frontmatter `model: opus` (hết all-inherit) ⇒ contest chuyển từ *param ⟂ inherit* (mơ-hồ — `inherit` có thể chỉ là "defer to caller") thành **param ⟂ HARD-PIN (contest thật)**. Đo phiên đầu sau restart, 2 lane `wf_f960dae2-fa0`, đọc bằng chính `spawn-model-audit.ps1 -SessionId c0fa4300…`:
|
||||
- Lane `reviewer` (pin `opus`) + spawn `tier:'fable'` → resolved **`claude-fable-5`** (3 records) ⇒ **SPAWN-PARAM THẮNG** ⇒ `/fable-real`·`/fable-clone` SỐNG, **GAP#6 fix KHÔNG phải NO-OP** (hệ-quả 🔴 ở trên KHÔNG xảy ra).
|
||||
- Lane `investigator-codebase` KHÔNG override → resolved **`claude-opus-4-8`** (9 records) **DÙ lead=Fable 5** ⇒ pin frontmatter ăn runtime, loại giả-thuyết inherit-lead. (Lead=Fable làm control phân-biệt được — đúng tinh-thần phép-thử-phá #3, chỉ đảo chiều alias.)
|
||||
- Audit tại thời-điểm đo (run contest `wf_f960dae2-fa0`, 2 lane): 0 mismatch. ⚠️ COUNTS của script = cumulative CẢ PHIÊN (2/2/0 lúc đo → 4/4/0 sau 2 lane review cùng phiên) ⇒ evidence bền = bảng per-lane theo run-id, KHÔNG phải số tổng. Evidence nội-bộ: `runs/2026-07-16-S126-adap-spec-execute/runtime-verify-synthesis.md`. Đã báo hub: `2026-07-16-se-to-ai_infra-h23-precedence-test-result`.
|
||||
- ⚠️ Giới-hạn khai thẳng: (i) đo trên SE frontmatter ALIAS `opus` — hub pin FULL-ID, KHÔNG generalize sang hình-thức đó (bài ENV-DEPENDENT); (ii) retrospective 1 phiên — không hứa spawn TƯƠNG-LAI (đúng caveat PA-2b); (iii) fix#8a (param có từ-chối full-id?) VẪN chưa thử — không thuộc phép đo này.
|
||||
|
||||
🔴 **(b) Chính mệnh-đề "param chỉ nhận alias" cũng CHƯA THỬ.** Cổng-cuối `/fable-real reviewer` bắt đúng: bullet *"param `model:` chỉ nhận enum alias"* trong `owner-decisions` **dán nhãn "Đo" nhưng KHÔNG nêu phép đo**. Nấc trung-thực đã hạ xuống: *"theo tài-liệu harness (Agent-tool `model` enum = `sonnet|opus|haiku|fable`), **CHƯA thử truyền full-id để xem có bị từ-chối không**"* (fix#8a — anh đã ack hình-thức PA-2a+PA-2b trên nền nấc đã hạ này).
|
||||
🔸 Đây là **tiền-đề** biến PA-2-nguyên-bản thành "bất-khả-thi" ⇒ nó **đỡ cả kết-luận O1**. Nếu tiền-đề sai, hình-thức PA-2 cần xét lại.
|
||||
|
||||
@ -62,3 +68,4 @@ Nguyên-văn broadcast đòi khai: *"thứ-tự ưu-tiên giữa **'tham-số t
|
||||
|
||||
---
|
||||
*Ghi @S122 (2026-07-15) · lead **Opus 4.8** — 🔴 chính vì lead=Opus mà §5(a) KHÔNG test được phiên này · chain ĐÃ PUSH `4727d16..c39ba9d`, tree clean*
|
||||
*UPDATE @S126 (2026-07-16) · lead **Fable 5** — §5(a) ĐÓNG bằng phép đo thật (khối UPDATE trong §5(a)); (b) fix#8a vẫn mở.*
|
||||
|
||||
@ -105,9 +105,9 @@ tier==='fable'||'opus' → return tier // pin model (escape-hatch)
|
||||
tier lạ khác → warn + bỏ qua (:39)
|
||||
!role && rawRole (typo) → return undefined // fail-UP inherit Fable (:42)
|
||||
!role (role-less) → return undefined // inherit lead-model (:43)
|
||||
role có frontmatter → return undefined // H8 all-inherit top-tier (:44)
|
||||
role có frontmatter → return undefined // frontmatter tự lo = worker-tier opus (S124; hmw.js:74)
|
||||
```
|
||||
⇒ Không set `tier` = mọi lane clone chạy **inherit top-tier** (mặc-định); muốn ép tier-2 Opus (giữ quota Fable cho lead) = thêm `tier:'opus'`.
|
||||
⇒ Không set `tier` = mọi lane clone chạy **worker-tier `opus` theo frontmatter** (S124 — hết inherit-lead); `tier:'opus'` mỗi lane VẪN ghi tường-minh (clone = ensemble tier-2 by-definition, GAP#6 — pin chữ rõ hơn pin ngầm).
|
||||
|
||||
---
|
||||
|
||||
@ -116,7 +116,7 @@ role có frontmatter → return undefined // H8 all-inherit top-tier (
|
||||
| Việc | Cơ-chế | Lệnh / param chạy được | Khi nào dùng |
|
||||
|---|---|---|---|
|
||||
| **Clone ensemble** (N lane CÙNG vai) | `hmw.js parallel` (`:98`) → `agent()` (`:138-143`) | JSON args bên dưới — `taskList` = N item cùng `role` | Lượt anh gõ `/fable-clone <vai>` + heavy-judgment (H21 per-invocation; 🧊 cũ: marker VẮNG) |
|
||||
| **Real single** (1 deep pass) | **Agent-tool spawn LẺ** (1 agent) | `agentType: "reviewer"` \| `"investigator-codebase"`, prompt deep-pass; model = lead-runtime (inherit) | Lượt anh gõ `/fable-real <vai>` + cần 1 lăng-kính sâu nhất (H21 per-invocation; 🧊 cũ: marker CÓ) |
|
||||
| **Real single** (1 deep pass) | **Agent-tool spawn LẺ** (1 agent) | `agentType: "<vai anh gán>"`, prompt deep-pass; 🔴 PHẢI set `model:'fable'` param (S124 pin opus ⇒ không set = opus, KHÔNG còn lead-runtime; spawn-param THẮNG pin — đo S126) | Lượt anh gõ `/fable-real <vai>` + cần 1 lăng-kính sâu nhất (H21 per-invocation; 🧊 cũ: marker CÓ) |
|
||||
| **Resume lane garble/truncate** | **SendMessage-resume in-session** | gửi lại agent đã spawn (KHÔNG re-spawn mới) | Lane trả wrong-slice (#53) — nấc 2 recovery-ladder (diary → SendMessage-resume S105 → em-main solo) |
|
||||
| **Fallback cuối** | em-main solo | em-main tự làm vai phán-quyết | 529 overload / spawn truncate / SendMessage cũng garble |
|
||||
|
||||
@ -144,7 +144,7 @@ role có frontmatter → return undefined // H8 all-inherit top-tier (
|
||||
Nguồn: `harness-11-engine.md §K.C:327-330`. Pin để stamp CÓ NGHĨA (không paperwork).
|
||||
|
||||
**🔴 GAP-1 — scope-creep guard (RULE):** Ảo-run **BẮT BUỘC = N lane CÙNG 1 vai phán-quyết** (multi-lens), **CẤM mixed-roster fan-out**.
|
||||
- Lý-do: `hmw.js` VALID_ROLES nhận đủ vai KHÔNG gate → all-inherit **CHE** leak (mọi vai top-tier nên roster-trộn "trông ổn"; Fable về + phân-tầng thì rò top-tier ensemble sang vai ngoài 2 vị-trí).
|
||||
- Lý-do: `hmw.js` VALID_ROLES nhận đủ vai KHÔNG gate → worker-tier-pin **CHE** leak qua opus (mọi vai pin opus nên roster-trộn "trông ổn" — như thời all-inherit; lượt `tier:'fable'` mixed-roster = rò top-model sang vai ngoài lệnh).
|
||||
- Evidence-form: `taskList[*].role` phải đồng-nhất = ĐÚNG vai anh gán trong lệnh (grep taskList trước fan-out; §3/§4 template = `reviewer`/`investigator-codebase`). Ghi-chú: engine `§K.C` khai "**TOÀN roster**" khớp `hmw.js:22-36` (lịch-sử: 9 S101 → +`office-document` S107 → +2 monitor H1/H2 S110 → **+2 monitor H24 S121 W2**) — luật "no-gate → em-main tự-gác" KHÔNG đổi. 🔴 **KHÔNG chép số vai vào đây** (B1 → [`docs/STATUS.md`](../STATUS.md) §Sub-agents).
|
||||
- Nấc: **convention** (hmw.js không gate vai; kỷ-luật em-main gác).
|
||||
|
||||
@ -218,13 +218,13 @@ Mọi biến em-main chốt @P0/P1 rồi bơm vào lane. Kiểu + nguồn đọc
|
||||
|
||||
### 3.2 REAL-mode — single-deep-pass qua Agent tool
|
||||
|
||||
Điều-kiện: lượt này **anh gõ `/fable-real <vai> <đề-bài>`** (H21 — quote lệnh làm evidence). 🧊 *(H19: `$mode == real` marker CÓ.)* Spawn **DUY NHẤT 1** `investigator-codebase` qua **Agent tool** (KHÔNG qua `hmw.js` — hmw dành cho clone-ensemble), đào SÂU 1 lần. `model: inherit` (frontmatter `investigator-codebase.md:5`) → top-tier lead: Fable up = Fable · Fable down (H5) = Opus-1M per-run (§3.6).
|
||||
Điều-kiện: lượt này **anh gõ `/fable-real <vai> <đề-bài>`** (H21 — quote lệnh làm evidence). 🧊 *(H19: `$mode == real` marker CÓ.)* Spawn **DUY NHẤT 1** `investigator-codebase` qua **Agent tool** (KHÔNG qua `hmw.js` — hmw dành cho clone-ensemble), đào SÂU 1 lần. Frontmatter `investigator-codebase.md:5` nay = `model: opus` (worker-tier-pin S124) ⇒ 🔴 real-mode PHẢI set `model:'fable'` param tại spawn (spawn-param THẮNG pin — đo S126; không set = opus): Fable up = Fable · Fable down (H5) = set `'opus'` Opus-1M per-run (§3.6).
|
||||
|
||||
**Tham-số spawn (Agent tool / Task):**
|
||||
|
||||
```
|
||||
subagent_type: "investigator-codebase"
|
||||
model: inherit # frontmatter model:inherit (investigator-codebase.md:5) → top-tier lead
|
||||
model: fable # 🔴 PHẢI set param (frontmatter nay pin opus S124; param THẮNG pin — đo S126). Fable-outage → 'opus' (H5 §3.6)
|
||||
description: "ground-truth: <$target rút gọn 1 dòng>"
|
||||
prompt: |
|
||||
# NHIỆM-VỤ: ground-truth / xác-minh sự-thật (Fable-real, single-deep-pass)
|
||||
@ -364,9 +364,9 @@ Tick mỗi lần chạy lane (cả 2 mode trừ khi ghi `[clone]`/`[real]`):
|
||||
Task/Agent(
|
||||
subagent_type: 'reviewer', # = agentType; persona .claude/agents/reviewer.md; VALID_ROLES hmw.js:22-28
|
||||
description : 'reviewer-real: <$reviewTarget>',
|
||||
# model : KHÔNG set → inherit top-tier (H8 all-inherit; resolveModel hmw.js:44 role-có-frontmatter → undefined)
|
||||
# model : 'fable' — 🔴 PHẢI set (S124 frontmatter pin opus ⇒ KHÔNG set = opus; spawn-param THẮNG pin, đo S126)
|
||||
# Fable UP → single-Fable (sâu nhất, đắt nhất)
|
||||
# Fable DOWN→ single-Opus-1M (H5 per-run auto, KHÔNG đổi marker/mode — fable-real.md:20 / §4.7)
|
||||
# Fable DOWN→ set 'opus' = single-Opus-1M (H5 per-run — fable-real.md / §4.7)
|
||||
prompt : <<ADVERSARIAL TEMPLATE (b)>>
|
||||
)
|
||||
```
|
||||
@ -441,7 +441,7 @@ args = {
|
||||
|
||||
| GAP | Rủi-ro (engine) | Cách bấm | Nguồn |
|
||||
|---|---|---|---|
|
||||
| **GAP-1 scope-creep** | `hmw.js` VALID_ROLES nhận **TOÀN roster** KHÔNG gate → all-inherit CHE leak | CLONE `taskList` MỌI `role:'reviewer'` (N-lane CÙNG vai, KHÔNG mixed-roster) | `§K.C:328` · `hmw.js:22-36` |
|
||||
| **GAP-1 scope-creep** | `hmw.js` VALID_ROLES nhận **TOÀN roster** KHÔNG gate → worker-tier-pin CHE leak qua opus (như thời all-inherit) | CLONE `taskList` MỌI `role:'reviewer'` (N-lane CÙNG vai, KHÔNG mixed-roster) | `§K.C:328` · `hmw.js:22-36` |
|
||||
| **GAP-2 engine-label** | SCHEMA `memoryDelta` KHÔNG field engine | em-main **stamp nhãn engine @P3 harvest** (`real\|clone-<tier>-Sxxx`) = convention | `§K.C:329` · `hmw.js:54-64` |
|
||||
| **GAP-3 AS-10 fragment** | N lane giữ Bash (fails-open) → phân-mảnh trí-nhớ | N lane **RETURN-only** → em-main ghi **1 entry / vai** (+ nhãn) | `§K.C:330` · `fable-real.md:26` |
|
||||
|
||||
@ -517,7 +517,7 @@ args = {
|
||||
- `clone` = **N-lane ensemble tier-2** (multi-lens; để dành quota top-model cho lead — `fable-clone.md:8`).
|
||||
- ⚠️ **Cost-delta tùy runtime:** Fable DOWN → real vs clone 0 tier-delta (chỉ khác N-lane count). **Fable UP** → real=Fable-deep (đắt nhất/lần) ⟂ clone `tier:'opus'`=tier-2 (giữ quota Fable cho lead). Ghi honest theo probe (`harness-11-engine.md:332,334`).
|
||||
- [ ] 🧊 *(H19 retired)* **P5 cũ — scope-lock 2 vai** (`POSITION ∈ {reviewer, investigator-codebase}`, vai khác EXCLUDED).
|
||||
- [ ] **P5-mới (H21) — scope-lock = `ROLE_VALID`**: `INVOCATION.vai ∈ roster` do ANH gán (thiếu/lạ → hỏi anh, KHÔNG tự chọn); ⚠️ 2 monitor H1/H2 ĐÃ vào VALID_ROLES (S110) + **2 monitor H24 vào S121 W2** → hết limitation; vai-INVALID nay = STOP-HARD throw (REC-3 2026-07-13, KHÔNG fail-soft). Ngoài lượt lệnh: mọi vai giữ model roster (H8 all-inherit), lead KHÔNG tự elevate (K.D mới). *Evidence:* vai lượt này + quote lệnh.
|
||||
- [ ] **P5-mới (H21) — scope-lock = `ROLE_VALID`**: `INVOCATION.vai ∈ roster` do ANH gán (thiếu/lạ → hỏi anh, KHÔNG tự chọn); ⚠️ 2 monitor H1/H2 ĐÃ vào VALID_ROLES (S110) + **2 monitor H24 vào S121 W2** → hết limitation; vai-INVALID nay = STOP-HARD throw (REC-3 2026-07-13, KHÔNG fail-soft). Ngoài lượt lệnh: mọi vai giữ model roster (worker-tier-pin `opus` S124), lead KHÔNG tự elevate (K.D mới). *Evidence:* vai lượt này + quote lệnh.
|
||||
|
||||
---
|
||||
|
||||
@ -560,7 +560,7 @@ args = {
|
||||
description: "Fable-real judge: <ARTIFACT>"
|
||||
prompt: "<spec + acceptance + diff + RETURN-format bắt-buộc>"
|
||||
```
|
||||
Agent frontmatter `model: inherit` (`reviewer.md:5` / `investigator-codebase.md:5`) → tự ăn top-tier (`LEAD_MODEL`). *(Thay-thế: hmw 1-task + `tier:'fable'` ép lead-tier nếu cần RUN-TRACE — `hmw.js:38`.)*
|
||||
Agent frontmatter `reviewer.md:5`/`investigator-codebase.md:5` nay = `model: opus` (pin S124) ⇒ 🔴 spawn PHẢI set `model:'fable'` (param THẮNG pin — đo S126; không set = opus, KHÔNG phải `LEAD_MODEL`). *(Thay-thế: hmw 1-task + `tier:'fable'` — `hmw.js:68`.)*
|
||||
- [ ] **R3 — GAP-guard tại spawn** *(tick cả 3):*
|
||||
- GAP-1: mọi lane CÙNG **1 vai** (`taskList` roles distinct = 1), KHÔNG mixed-roster (`harness-11-engine.md:328`).
|
||||
- Lane **RETURN-only**, 0 Write memory (write-guard `hmw.js:118-122`; GAP-3).
|
||||
@ -639,7 +639,7 @@ Một lượt phán-quyết **ĐẠT ⟺ tất-cả** AC dưới (đo-được,
|
||||
| # | Anti-pattern | Vi-phạm (nguồn) | Đúng phải làm | Detect |
|
||||
|---|---|---|---|---|
|
||||
| **AP-1** | Bật real **tự-động** không anh-gõ | K.D **point-2** (`harness-11-engine.md:332`) — real CHỈ do anh gõ `/fable-real <vai> <đề-bài>` | muốn real mà anh chưa gõ LƯỢT NÀY ⇒ STOP + ĐỀ XUẤT anh gõ *(🧊 H19: "0 marker + muốn real ⇒ STOP")* | transcript lượt đó vắng `/fable-real` nhưng chạy real |
|
||||
| **AP-2** | **Mixed-roster** ensemble (fan-out nhiều vai) | GAP-1 scope-creep leak (`:328`) — all-inherit CHE tới khi Fable về | N lane **CÙNG 1 vai** (multi-lens) | `taskList` roles distinct-count > 1 |
|
||||
| **AP-2** | **Mixed-roster** ensemble (fan-out nhiều vai) | GAP-1 scope-creep leak (`:328`) — worker-tier-pin CHE qua opus (như all-inherit trước nó) | N lane **CÙNG 1 vai** (multi-lens) | `taskList` roles distinct-count > 1 |
|
||||
| **AP-3** | Lane **tự ghi memory** (store_memory / MEMORY.md / Bash-append) | GAP-3 / AS-10 fails-open (`:330,:120`) | RETURN-only; em-main ghi 1-entry/vai | git-diff `agent-memory/*` đổi trong P2 · RAG chunk-count |
|
||||
| 🧊 **AP-4** (H19 retired) | Quên **báo marker-state** cuối phiên | marker persist qua session = BY-DESIGN (`fable-real.md:10`) nhưng thiếu báo → anh quên mode đang real (burn top-model ngoài ý) | session-end **BÁO marker-state + NHẮC anh** gõ `/fable-clone` nếu muốn về ảo (em-main KHÔNG tự toggle — K.D point-2); KHÔNG commit marker (gitignored `.gitignore:92`) | BƯỚC 0.5b @start + session-end marker-report |
|
||||
| **AP-4-mới** (H21) | Chạy engine-đắt **NGOÀI lượt-lệnh** anh gõ | K.D point-2 + H21 §2.1-bis — engine-đắt CHỈ trong lượt anh gõ `/fable-real`\|`/fable-clone` kèm vai; kể cả **HMW-mode ON**, kể cả "thấy cần" = **VI-PHẠM** (lead KHÔNG tự ý) | Đợi lượt-lệnh anh; thiếu vai → **hỏi anh 1 dòng, KHÔNG tự chọn vai** | engine-đắt chạy mà transcript lượt đó vắng `/fable-real`\|`/fable-clone` |
|
||||
|
||||
@ -295,7 +295,7 @@ SE đã có RAG golden-set harness (KHÔNG phải gap): `eval/golden-set-solutio
|
||||
- **Sweep 6 mandate-consumer + cites (mechanized-grep `_ledger` exact — 5 "ledger" khác tên trong repo, tránh C3-fork):** `runs/README.md` ×7 (:3/:38/L1/L2/§C6-header/:117/:127) · `workflows/README.md` ×2 (:20/:34-B3) · `session-start.md` §2.1.1-H2 · `session-end.md` §L.b(f) · `agents/harvest-curator.md` ×3 (:28/:44/:52-cite) · `agents/README.md` G-015-cite · + `agent-memory/harvest-curator/MEMORY.md` baseline re-ground. HISTORY class (session-log/adap-report/archive/runs-synthesis) GIỮ NGUYÊN.
|
||||
|
||||
**J.C — Bracket phân-bổ model: 1 ĐẠT + 2 n-a-by-owner-mandate (🔴 điều-kiện xét-lại VIẾT RA):**
|
||||
- Precondition raw-economics ĐÚNG (Fable > Opus 4.8 giá) NHƯNG **H8 all-inherit = owner-directive 🔴 S66 "chất-lượng trên chi-phí"** (anh-chốt, mọi sister) → KHÔNG demote lớp-việc nào; escape-hatch per-task `tier:'opus'` (hmw.js) GIỮ = cơ-chế hạ-bậc-theo-việc ĐÃ TỒN TẠI khi cần. 4 lớp không-hạ + 2-đầu = vacuously-held (mọi vai đang top-tier). Promote-list 🟡 = n-a (không gì để nâng).
|
||||
- Precondition raw-economics ĐÚNG (Fable > Opus 4.8 giá) NHƯNG **directive 🔴 S66 "chất-lượng trên chi-phí"** (anh-chốt, mọi sister) GIỮ — mechanism nay = **worker-tier-pin S124** (14/14 frontmatter `opus`+`effort:max`, thay all-inherit H8) → KHÔNG demote lớp-việc nào dưới worker-tier opus; escape-hatch per-task `tier:'opus'` (hmw.js) GIỮ = cơ-chế hạ-bậc-theo-việc ĐÃ TỒN TẠI khi cần. 4 lớp không-hạ + 2-đầu = vacuously-held (mọi vai đang top-tier). Promote-list 🟡 = n-a (không gì để nâng).
|
||||
- **Điều-kiện xét-lại (C3-floor, viết ra — đo được):** NẾU anh đảo H8 HOẶC áp-lực chi-phí thật xuất hiện → dựng bracket theo checklist H18-C, so ≥3-run eval vs baseline TRƯỚC khi cố-định; tới lúc đó C1/C2 hết n-a. (Caveat-2 broadcast: "chi-phí ngang nhau thì khuôn-mẫu không áp" — SE = ngang-nhau-BY-DECISION.)
|
||||
|
||||
**J.D — Đóng làn kết-quả (🔴 3 sàn — 2 ĐẠT wired + 1 REUSE):**
|
||||
@ -329,11 +329,11 @@ SE đã có RAG golden-set harness (KHÔNG phải gap): `eval/golden-set-solutio
|
||||
→ **Thay bằng §K.E per-invocation.** Marker file đã xóa S110; `.gitignore:92` giữ pattern phòng-hờ.
|
||||
|
||||
**K.C — 3 floor-fidelity gap (🔴 WF1-L3 bắt — pin để stamp CÓ NGHĨA, không paperwork):**
|
||||
- **GAP-1 scope-creep guard:** `hmw.js` VALID_ROLES nhận **TOÀN roster** (lịch-sử: 9 lúc adopt S101 → +`office-document` S107 → +2 monitor H1/H2 S110 anh-directed → **+2 monitor H24 S121 W2**; số vai canonical → [`docs/STATUS.md`](../STATUS.md) §Sub-agents, B1 KHÔNG chép số), KHÔNG gate → all-inherit **CHE** leak (mọi vai top-tier nên mixed-roster "trông ổn"; Fable về + phân-tầng thì rò top-tier ensemble sang vai ngoài 2 vị-trí = vi phạm §3 hard-scope). → **lệnh-B ensemble-run = N lane CÙNG 1 vai phán-quyết** (multi-lens), KHÔNG mixed-roster fan-out.
|
||||
- **GAP-1 scope-creep guard:** `hmw.js` VALID_ROLES nhận **TOÀN roster** (lịch-sử: 9 lúc adopt S101 → +`office-document` S107 → +2 monitor H1/H2 S110 anh-directed → **+2 monitor H24 S121 W2**; số vai canonical → [`docs/STATUS.md`](../STATUS.md) §Sub-agents, B1 KHÔNG chép số), KHÔNG gate → worker-tier-pin **CHE** leak qua opus (mọi vai pin opus nên mixed-roster "trông ổn" — như thời all-inherit trước nó; lượt `tier:'fable'` mixed-roster = rò top-model sang vai ngoài lệnh = vi phạm §3 hard-scope). → **lệnh-B ensemble-run = N lane CÙNG 1 vai phán-quyết** (multi-lens), KHÔNG mixed-roster fan-out.
|
||||
- **GAP-2 engine-label (§5):** `hmw.js` SCHEMA `memoryDelta{task,verdict,learned,surprise}` KHÔNG field engine → em-main **stamp nhãn engine @P3 harvest** (single-writer B3), như S101 "model-note Opus-S101". = convention KHÔNG mechanism.
|
||||
- **GAP-3 AS-10 fragment:** mỗi run-trace ghi `*-synthesis.md` residual + lane giữ Bash (AS-10 fails-open) → "1 vai = 1 trí-nhớ" qua N lane giữ CHỈ bởi em-main single-writer. → **N lane RETURN-only**, em-main ghi 1 MEMORY entry/vai (+ nhãn engine).
|
||||
|
||||
**K.D — 3 floor-point RC-stamped (🔴 §9 — `RC-pqhuy1987-03-07-2026-17-46-35`, `ACTIVE-MARKS.md`):** (1) 🧊 ~~lead LUÔN top-model (KHÔNG đụng)~~ [retired H21/mtv3 S110] → **MỚI:** lead = **frontier-class** do anh chọn per-session {Fable 5 | Opus 4.8 — 1M MAX} (model-tier-v3 2026-07-11); CẤM Sonnet/Haiku-class ghế lead; owner-chọn-hạng-hai ≠ outage → 0 caveat/0 revert-nghĩa-vụ · (2) 🧊 ~~CHỈ 2 vị-trí phán-quyết chạm top-model, CHỈ chế-độ thật do anh gõ (KHÔNG auto)~~ [retired H21 S110] → **MỚI:** top-model deep-run CHỈ trong lượt lệnh engine-đắt anh gõ KÈM VAI đích-danh (H21) — không còn 2-vị-trí-mặc-định, không còn mode · (3) mọi vai khác giữ model mặc-định (roster-tier). ⚠️ **VACUOUSLY-MET-for-SE-today:** dưới all-inherit + Fable-outage, reviewer+investigator-codebase ĐÃ top-model (Opus-1M) → point-2 grant **0 runtime-delta**; point-3 trivially-held (SE không có "vai khác" tier-thấp — all-inherit S66). Stamp KHÔNG overclaim runtime-delta; value = future-proof floor + governance-record. *(S108 update: Fable-UP + first-real-run → point-2 grant hoạt-động THẬT lần đầu — 2 vị-trí single-Fable deep ⟂ worker-draft pin tier-2 Opus; "vacuously-met" KHÔNG còn là trạng-thái thường-trực, tùy BƯỚC 0.6 probe per-session.)*
|
||||
**K.D — 3 floor-point RC-stamped (🔴 §9 — `RC-pqhuy1987-03-07-2026-17-46-35`, `ACTIVE-MARKS.md`):** (1) 🧊 ~~lead LUÔN top-model (KHÔNG đụng)~~ [retired H21/mtv3 S110] → **MỚI:** lead = **frontier-class** do anh chọn per-session {Fable 5 | Opus 4.8 — 1M MAX} (model-tier-v3 2026-07-11); CẤM Sonnet/Haiku-class ghế lead; owner-chọn-hạng-hai ≠ outage → 0 caveat/0 revert-nghĩa-vụ · (2) 🧊 ~~CHỈ 2 vị-trí phán-quyết chạm top-model, CHỈ chế-độ thật do anh gõ (KHÔNG auto)~~ [retired H21 S110] → **MỚI:** top-model deep-run CHỈ trong lượt lệnh engine-đắt anh gõ KÈM VAI đích-danh (H21) — không còn 2-vị-trí-mặc-định, không còn mode · (3) mọi vai khác giữ model mặc-định (roster-tier). ⚠️ **VACUOUSLY-MET-for-SE (dated, thời điểm stamp S103-era):** dưới all-inherit + Fable-outage, reviewer+investigator-codebase ĐÃ top-model (Opus-1M) → point-2 grant **0 runtime-delta**; point-3 trivially-held (thời all-inherit S66 không có "vai khác" tier-thấp). *(S124 → worker-tier-pin: point-3 nay giữ theo nghĩa MỚI — "vai khác" = worker-tier opus cố-định; point-2 xem S108-update cuối đoạn.)* Stamp KHÔNG overclaim runtime-delta; value = future-proof floor + governance-record. *(S108 update: Fable-UP + first-real-run → point-2 grant hoạt-động THẬT lần đầu — 2 vị-trí single-Fable deep ⟂ worker-draft pin tier-2 Opus; "vacuously-met" KHÔNG còn là trạng-thái thường-trực, tùy BƯỚC 0.6 probe per-session.)*
|
||||
|
||||
**K.E — H21 per-invocation + spec-file kết-tinh (🔴 sàn 5-điểm, adopt S110 — supersede K.B toggle):**
|
||||
|
||||
|
||||
@ -44,14 +44,15 @@ Một session-log viết "two-tier" hồi S60 là **đúng sự thật lịch s
|
||||
| **Ghi chú frozen** | Session-log S65 và bản archive giữ "Dự trù PRO" — đúng lịch sử |
|
||||
| **Lưu ý mở rộng** | `PeWorkItemBudget` là tên ENTITY (khái niệm khác — bảng ngân-sách-per-gói-thầu), KHÔNG phải alias của nhãn PRO. "PRO" = Procurement (phòng Mua hàng), không phải viết tắt khác |
|
||||
|
||||
### 3. `all-inherit` (chuẩn) ↔ `two-tier` (alias cũ)
|
||||
### 3. `worker-tier-pin` (chuẩn) ↔ `all-inherit` · `two-tier` (2 alias cũ, 2 đời)
|
||||
|
||||
| Thuộc tính | Giá trị |
|
||||
|---|---|
|
||||
| **Canonical (hiện hành)** | `all-inherit` — mọi sub-agent kế thừa model lead (chất-lượng > chi-phí), cấu hình qua frontmatter + `hmw.js` resolveModel |
|
||||
| **Alias (đã thay thế)** | `two-tier` — mô hình cũ 2 tầng (lead promote-inherit vài agent / demote-pin số còn lại về Opus) |
|
||||
| **Đổi tên bởi** | Harness-8 (Session 66, 2026-06-16) — thay mô hình two-tier model-promotion bằng all-inherit |
|
||||
| **Ghi chú frozen** | Các adap-report Harness-4/5 và session-log ≤ S66 giữ "two-tier" — đúng lịch sử tại thời điểm đó |
|
||||
| **Canonical (hiện hành)** | `worker-tier-pin` — 14/14 sub-agent frontmatter `model: opus` + `effort: max` (worker-tier gán-cứng, KHÔNG theo lead); lead = frontier-class owner-choice per-session; Fable cho 1 vai CHỈ qua lượt lệnh `/fable-real`·`/fable-clone` hoặc per-task `tier:` — spawn-param THẮNG hard-pin (đo S126 2026-07-16, `runs/2026-07-16-S126-adap-spec-execute/runtime-verify-synthesis.md`) |
|
||||
| **Alias (đã thay thế — đời 2)** | `all-inherit` — mọi sub-agent kế thừa model lead (chất-lượng > chi-phí; Harness-8, S66–S123) |
|
||||
| **Alias (đã thay thế — đời 1)** | `two-tier` — mô hình 2 tầng (lead promote-inherit vài agent / demote-pin số còn lại về Opus; Harness-4) |
|
||||
| **Đổi tên bởi** | Owner-decision **S124** (2026-07-15, adap `erratum-h8`) — thay all-inherit bằng worker-tier-pin. Trước đó: Harness-8 (S66, 2026-06-16) thay two-tier bằng all-inherit |
|
||||
| **Ghi chú frozen** | adap-report/session-log ≤S66 giữ "two-tier", S66–S123 giữ "all-inherit" — đúng lịch sử tại thời điểm đó |
|
||||
|
||||
---
|
||||
|
||||
|
||||
@ -432,8 +432,11 @@ Write-Section 'C3 - vocab-fork'
|
||||
$aliasSets = @(
|
||||
@('wave-folder', 'run-trace'),
|
||||
@($VN_DUTRU_PRO, $VN_NGANSACH_PRO),
|
||||
@('two-tier', 'all-inherit')
|
||||
@('two-tier', 'all-inherit', 'worker-tier-pin')
|
||||
)
|
||||
# NOTE (S126, 2026-07-16): 'worker-tier-pin' added as 3rd variant - owner-decision S124 made it
|
||||
# the canonical term (vocab-alias-map.md section 3); the B1 sweep found the fork all-inherit-vs-
|
||||
# worker-tier-pin LIVE in 5 governance files (patched S126) and this seed could not see it.
|
||||
# NOTE (Harness-16, S93): "memory-fidelity" is INTENTIONALLY NOT seeded here. It is
|
||||
# NOT a vocab-fork (one concept / two names) -- it is two DISTINCT concepts sharing a
|
||||
# word: H6.7 "memoryDelta-routing-fidelity" (delta lands in the right agent-memory)
|
||||
|
||||
@ -30,9 +30,13 @@
|
||||
runs. It cannot pre-verify what the NEXT spawn will resolve to. A clean report does NOT
|
||||
promise the next spawn stays on the expected version. This is exactly why H23 section 2(4)
|
||||
makes it informational, not enforcement.
|
||||
(ii) PRECEDENCE vs a frontmatter HARD-PIN (the hub form: 17/17 'model: claude-opus-4-8').
|
||||
UNTESTED at SE and UNTESTABLE here: SE has 0 hard-pinned agents (12/12 'model: inherit',
|
||||
owner order S66/H8). Only the inherit case has evidence - see the next block.
|
||||
(ii) PRECEDENCE vs a frontmatter HARD-PIN - MEASURED at SE 2026-07-16 (S126), after S124
|
||||
re-pinned 14/14 agents to 'model: opus' (ALIAS pin): spawn param 'fable' on agentType
|
||||
reviewer (pin 'opus') RESOLVED claude-fable-5 (run wf_f960dae2-fa0, 3 records); a
|
||||
control lane with NO override resolved claude-opus-4-8 under lead=Fable => the pin
|
||||
itself works at runtime AND the spawn param BEATS it. Caveats: alias-pin only (the
|
||||
hub form pins FULL-ID 'claude-opus-4-8' 17/17 - NOT covered by this measurement);
|
||||
retrospective - says nothing about future spawns. Older 'inherit' evidence: below.
|
||||
(iii)Whether the spawn param REJECTS a full-id (fix #8a). Per harness docs the param is an enum
|
||||
alias (sonnet|opus|haiku|fable); passing a full-id has NEVER been tried. Not tried here.
|
||||
(iv) Documentation coverage. This measures EXPLICITNESS IN TRANSCRIPTS only. A clean report must
|
||||
@ -52,6 +56,8 @@
|
||||
HONEST LIMIT: this does not prove 'inherit' LOSES a precedence contest. 'inherit' may simply mean
|
||||
"defer to the caller", in which case there is no contest at all. Both readings give the same
|
||||
operative answer (the param takes effect); this data cannot separate them, and does not try.
|
||||
UPDATE 2026-07-16 (S126): the hard-pin contest HAS now been measured - see NOT-MEASURABLE (ii)
|
||||
above, which flipped to MEASURED. Param 'fable' beat frontmatter 'model: opus' on a real lane.
|
||||
|
||||
.PARAMETER RepoRoot
|
||||
Repo root. Default = 2 levels up from this script (scripts/ -> repo root).
|
||||
@ -389,9 +395,10 @@ else {
|
||||
}
|
||||
|
||||
# ===========================================================================
|
||||
# SECTION D - H8 all-inherit: agent frontmatter
|
||||
# SECTION D - S124 worker-tier-pin: agent frontmatter (model: opus + effort: max)
|
||||
# (was: H8 all-inherit - superseded by owner-decision S124 2026-07-15, adap erratum-h8)
|
||||
# ===========================================================================
|
||||
Write-Section 'D - frontmatter all-inherit (H8)'
|
||||
Write-Section 'D - frontmatter worker-tier-pin (S124)'
|
||||
|
||||
# GLOB, never a hardcoded roster size: the roster moves 12 -> 14 at W2, and a hardcoded count
|
||||
# would self-age into a false FAIL the moment it lands (fix #9(h) / R2-M3).
|
||||
@ -403,13 +410,16 @@ if (-not (Test-Path $agentDir)) {
|
||||
else {
|
||||
$agentFiles = @(Get-ChildItem -Path $agentDir -Filter *.md -File -ErrorAction SilentlyContinue |
|
||||
Where-Object { $_.Name -ne 'README.md' })
|
||||
$inheritCount = 0
|
||||
$pinCount = 0
|
||||
$effortOkCount = 0
|
||||
|
||||
foreach ($a in $agentFiles) {
|
||||
$lines = @(Get-Content -Path $a.FullName -Encoding UTF8)
|
||||
# frontmatter = the block between the first '---' and the next '---'
|
||||
$modelVal = $null
|
||||
$modelLine = 0
|
||||
$effortVal = $null
|
||||
$effortLine = 0
|
||||
$inFm = $false
|
||||
for ($i = 0; $i -lt $lines.Count; $i++) {
|
||||
$t = $lines[$i].Trim()
|
||||
@ -421,30 +431,49 @@ else {
|
||||
$modelVal = $Matches[1].Trim()
|
||||
$modelLine = $i + 1
|
||||
}
|
||||
if ($inFm -and $t -match '^effort\s*:\s*(.+?)\s*$') {
|
||||
$effortVal = $Matches[1].Trim()
|
||||
$effortLine = $i + 1
|
||||
}
|
||||
}
|
||||
|
||||
if ($null -eq $modelVal) {
|
||||
Write-Flag 'MED' (Rel $a.FullName) `
|
||||
'no "model:" key in frontmatter - the lane falls back to a harness default, NOT inherit' `
|
||||
'add "model: inherit" to the agent frontmatter (H8 all-inherit)'
|
||||
'no "model:" key in frontmatter - the lane falls back to a harness default, NOT the worker-tier pin' `
|
||||
'add "model: opus" to the agent frontmatter (S124 worker-tier-pin)'
|
||||
}
|
||||
elseif ($modelVal -cne 'inherit') {
|
||||
elseif ($modelVal -cne 'opus') {
|
||||
Write-Flag 'MED' ("{0}:{1}" -f (Rel $a.FullName), $modelLine) `
|
||||
("frontmatter pins 'model: {0}' - H8 says every agent inherits the lead" -f $modelVal) `
|
||||
'set "model: inherit", or have the owner ratify the pin and record it in STATUS.md Sub-agents'
|
||||
("frontmatter has 'model: {0}' - S124 worker-tier-pin expects every agent pinned 'model: opus'" -f $modelVal) `
|
||||
'set "model: opus", or have the owner ratify the change and record it in STATUS.md Sub-agents'
|
||||
}
|
||||
else {
|
||||
$inheritCount++
|
||||
$pinCount++
|
||||
}
|
||||
|
||||
if ($null -eq $effortVal) {
|
||||
Write-Flag 'MED' (Rel $a.FullName) `
|
||||
'no "effort:" key in frontmatter - S124 worker-tier-pin expects "effort: max" alongside the model pin' `
|
||||
'add "effort: max" to the agent frontmatter (S124 worker-tier-pin)'
|
||||
}
|
||||
elseif ($effortVal -cne 'max') {
|
||||
Write-Flag 'MED' ("{0}:{1}" -f (Rel $a.FullName), $effortLine) `
|
||||
("frontmatter has 'effort: {0}' - S124 worker-tier-pin expects 'effort: max'" -f $effortVal) `
|
||||
'set "effort: max", or have the owner ratify the change and record it in STATUS.md Sub-agents'
|
||||
}
|
||||
else {
|
||||
$effortOkCount++
|
||||
}
|
||||
}
|
||||
|
||||
# verdict COMPUTED from the counts, never a pasted label (W0.4 lesson 2)
|
||||
Write-Host (" frontmatter: {0}/{1} agent .md carry 'model: inherit'" -f $inheritCount, $agentFiles.Count)
|
||||
Write-Host (" frontmatter: {0}/{1} agent .md carry 'model: opus' and {2}/{1} carry 'effort: max' (S124 worker-tier-pin)" -f `
|
||||
$pinCount, $agentFiles.Count, $effortOkCount)
|
||||
if ($agentFiles.Count -eq 0) {
|
||||
Write-Host ' [NO-SCOPE] 0 agent .md found - a clean result here would be VACUOUS.' -ForegroundColor Yellow
|
||||
}
|
||||
elseif ($inheritCount -eq $agentFiles.Count) {
|
||||
Write-Host (" [OK] all-inherit holds ({0}/{0})" -f $agentFiles.Count) -ForegroundColor Green
|
||||
elseif (($pinCount -eq $agentFiles.Count) -and ($effortOkCount -eq $agentFiles.Count)) {
|
||||
Write-Host (" [OK] worker-tier-pin holds ({0}/{0} model + {0}/{0} effort)" -f $agentFiles.Count) -ForegroundColor Green
|
||||
}
|
||||
}
|
||||
|
||||
@ -457,8 +486,9 @@ Write-Host ' 1. SPOT-CHECK BY CONVENTION, NOT ENFORCEMENT. Nothing here blocks
|
||||
Write-Host ' 2. CURRENT SESSION ONLY. Older runs predate the convention; scanning them yields noise, not a bug storm.'
|
||||
Write-Host ' 3. NOT "the floor is applied". This measures explicitness in transcripts, never documentation coverage.'
|
||||
Write-Host ' 4. RETROSPECTIVE ONLY. It reads models that ALREADY resolved; it cannot pre-verify the NEXT spawn.'
|
||||
Write-Host ' 5. NOT TESTED - spawn param vs a frontmatter HARD-PIN: SE has 0 hard-pinned agents (12/12 inherit),'
|
||||
Write-Host ' so that precedence case has no evidence here. The inherit case IS measured (see header, wf_cb964f83-331).'
|
||||
Write-Host ' 5. TESTED 2026-07-16 (S126) - spawn param vs frontmatter HARD-PIN: the param WON (reviewer pinned opus +'
|
||||
Write-Host ' spawn fable -> claude-fable-5; no-override control -> claude-opus-4-8 under lead=Fable). ALIAS-pin only;'
|
||||
Write-Host ' the full-id-pin form (hub) is still untested here. Inherit-case evidence: header, wf_cb964f83-331.'
|
||||
Write-Host ' 6. NOT TRIED - whether the spawn param rejects a full-id (fix #8a). Docs say enum alias; never attempted.'
|
||||
|
||||
# ---------------------------------------------------------------------------
|
||||
|
||||
Reference in New Issue
Block a user