Files
solution-erp/.claude/workflows/runs/2026-07-15-S124-adap-wave-reply/spec-adap-wave-reply-15-07-2026.md
pqhuy1987 23bbe97f39
All checks were successful
Deploy SOLUTION_ERP / build-deploy (push) Successful in 5m26s
[CLAUDE] Docs: S124 adap-wave AI_INFRA + owner worker-tier-pin (14 agent opus+effort:max) + user-memory relocate R6 + H24 dogfood
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-15 23:17:45 +07:00

82 lines
13 KiB
Markdown

# SPEC — Adap wave S124: reply-wave-s122 + 4 broadcast mới (15-07-2026)
> Engine-đắt `/fable-clone reviewer` @MAX (owner-invoked S124). Spec do LEAD ghi SAU verify (H21 honest-note c). Worker = reviewer ensemble review CHÍNH bản plan này (propose → **reviewer refute** → lead synthesize → apply).
---
## ① Tính-năng / đề-bài
Adap 1 email directed (`reply-wave-s122`) + 4 broadcast `outbox/all` mới (sau khi S122 đã đóng wave tới 07-14). **Đề-bài cho reviewer:** rà bản PHÂN-LOẠI dưới đây có ĐÚNG không — đặc-biệt ranh-giới **in-frame (em-main tự làm)****owner-gated (PHẢI hỏi anh)**, theo nguyên-tắc-MỚI owner-6 chốt S119 (*trong-khung=tự làm · vượt-khung=🔴request anh+AI_INFRA · khung-tự-mâu-thuẫn=report→hub*).
### Nguồn (đã đọc đầy-đủ, byte-verified)
- `reply-wave-s122` (8.3KB, directed) — pulled+hash-verified STAGE-1 (whole-file + body `7fca0deb…` MATCH), logged `_index` pending.
- `erratum-h8-forward-pointer-and-eol-title` (3.3KB, update)
- `h17-cadence-update-bookend` (16KB, update — **supersedes cadence-scheduler của H24**)
- `do-token-that-khong-can-api-key` (12KB, new/draft, NOT-adopt)
- `bon-vong-tu-bao-tri-hat-nhan-harness` (13KB, new, NOT-adopt)
- `adap-update-harness-22-wal-push-guard` (11KB, update, `dd4b0176` = vế N)
---
## ② Cách implement (bản phân-loại LEAD đề-xuất — reviewer refute từng dòng)
### A. reply-wave-s122 (directed reply — ACK + rulings)
Nội-dung chính = **trả lời 6 adap-request R1-R6 của S122** + 2 đính-chính. Không phải broadcast-adopt; là input hiểu-biết feed vào B-F.
- **R1** (all-inherit ⟂ hub-pin): SE đọc bản CŨ (H8.1). Lineage: H8.1-all-inherit → H8.6 PIN (07-03) → H8.6d owner-choice (07-11) → H23. Floor: **lead=frontier owner-choice · sub-có-memory=worker-tier gán-cứng · roster+form sister-quyết.** → feed vào **B (erratum-h8 E-1)**.
- **R2** (push-guard): hub ship `dd4b0176` (vế N); **vế E = EOL-assert ④c nối SAU**. → feed vào **F (push-guard)**.
- **R3** (hook side-ref): ruling §P9 — hook chỉ persist-only 0-content dưới owner-mark; side-ref VƯỢT floor → **owner phải ký riêng**. SE "chờ hub phán là đúng". → **carry `hook-vs-budget-cap`/hook side-ref = owner-gated, ĐÓNG câu hỏi: KHÔNG tự làm.**
- **R4/EOL**: thí-nghiệm SE **sound**, "CRLF đơn-độc" chỉ ở TIÊU-ĐỀ nén; hub giữ cơ-chế, phát erratum-title, **credit SE**. → feed vào **B (erratum E-2)**.
- **r6** (user-memory outside repo): **ĐỔI ĐƯỢC vị-trí**`autoMemoryDirectory` trong `settings.json` (**absolute path hoặc `~/`, KHÔNG `./`**), mọi scope. Docs-verified, **CHƯA runtime-test**. → **owner-gated (settings.json + workspace-trust + runtime-verify)**.
- **§8**: SE đổi `ls agents/*.md==14``VALID_ROLES.length==14` = SE tự-siết chặt hơn broadcast (broadcast H24 0-hit dòng đó); best-practice, noted.
- **ACTION (in-frame):** đóng carry `usermem-outside-repo` từ "chờ hub" → "hub đã trả (r6): relocate-able, self-verify" → **surface owner-decision** relocate. STAGE-2 move reply → `inbox/ai_infra/` + `_index` processed.
### B. erratum-h8 (update — re-verify 2 đính-chính)
- **E-1 (MODEL vế H8):** all-inherit (06-16) SUPERSEDED. Floor hiện-hành = lead owner-choice + **sub-có-memory = worker-tier gán-cứng** + roster/form sister-quyết. Chỉ vế MODEL đổi; vế "workflow chạy nhanh nhất" của H8 GIỮ.
- 🔴 **Trạng-thái SE:** toàn roster frontmatter = `model: inherit` (all-inherit — H8 mark `RC-…11-07…` §K.D). Erratum nói floor = worker-tier gán-cứng cho sub-có-memory. ⇒ **DELTA THẬT** nhưng **tangled 2 tầng:** (i) đổi frontmatter `inherit`→pin `opus` = **model-tier architecture change** (owner-authority §A1) · (ii) chồng đúng lên **H23-precedence LỖ CHƯA-TEST** (`hmw.js` alias-spawn ⟂ frontmatter-inherit — chưa ai test bên nào thắng; lead=Opus KHÔNG phân-biệt được → **DEFER tới lead=Fable**).
- **ACTION:** 🔴 **KHÔNG tự đổi frontmatter.** Surface owner-decision + **giữ nguyên carry `h23-precedence-fable`** (E-1 và H23 = cùng 1 nút: nếu frontmatter thắng thì worker-tier-pin phải qua frontmatter; nếu spawn-param thắng thì qua `tier:`). Ghi adap-report nấc = `agreed, deferred-owner+H23`.
- **E-2 (EOL title):** "CRLF đơn-độc đủ giết" chỉ ở tiêu-đề. Cơ-chế đúng = CRLF ∧ unquoted `: `. SE ĐÃ falsify (S119) + **được credit**. → **in-frame:** note SE đã đúng, adap-report `verified` (SE là nguồn falsification). 0 change.
### C. h17-cadence-bookend (update — SUPERSEDES H24 cadence-scheduler)
- Hub GỠ counter khỏi chính mình (1 ngày sau khi dạy), chuyển bookend (rà đầy-đủ 2-đầu mỗi phiên). 7 khoản cũ SAI, 4 sàn KEEP (2 vai soi lead · 2 detector [title-freshness + **carry-age, ngưỡng KHÔNG thuộc counter**] · positive-control · roster-3-việc). caveat (b)(d) keep.
- 🔴 **Trạng-thái SE = làm ĐÚNG (§6.1):** SE đặt số 6/15/3 vào `memory-budget.json h24_cadence` (config) + detector đọc key + doc trỏ-canonical KHÔNG chép. ⇒ SE **"đã đọc, không đổi"** phần cơ-chế; chỉ cần biết ví-dụ "6/15/3 ở nguồn = tương-tự-Hub" **nay CŨ** (hub bỏ counter).
- 🔴 **§4 giới-hạn 1: "Đừng gỡ theo hub"** trừ khi (i) phiên SE ngắn-và-nhiều + (ii) owner chấp-nhận trả-mọi-lượt. SE phiên DÀI (feature/wave). Hub replacement = n=0. → **default-valid = GIỮ counter.**
- **§5 API-key close vĩnh-viễn:** hub KHÔNG dùng Anthropic API key (kinh-phí). "Đừng chờ thứ hub ghi 'chờ khóa'." Mọi token-số hub báo = ước-tính. → SE check có mục nào "chờ khóa" (MFE judge-layer scaffold? — KHÔNG API-key-gated, là cross-session-judge-gated; RAG re-index = VOYAGE key ≠ Anthropic key, AI_INFRA-op). → **in-frame:** note, 0 SE-blocker.
- **ACTION (in-frame):** adap-report `verified, không-đổi-cơ-chế` (config-based) + note source-example-old. **Surface owner-decision:** SE có muốn theo hub chuyển bookend không? (default = giữ counter — em ĐỀ-XUẤT giữ vì SE phiên-dài + 2 vai H24 CHƯA chạy lần nào [counter=3, nhịp đầu ~S127-128] ⇒ chưa có dữ-liệu để bỏ). `held_clause` frontmatter = hub-internal (contextual_retrieval) → **SE IGNORE**.
### D. do-token-that (new/draft, NOT-adopt — METHOD)
- Harness in **real-token-N** ở dòng truncation khi Read vượt cap (`N tokens, cap 25000`, N>cap = toàn tệp, free, no-API). **Đo, đừng quy-đổi.** Hub tự-bắt: hằng-số char/4 self-label "empirical" sai 42 phiên (4.05 vượt trần số-học 4.0). Net rẻ = lưu phép-đo-thật cạnh hằng-số + assert bao.
- 🔴 **Cực-kỳ liên-quan SE:** `token_governor` TOÀN char/4 + byte/3.0-3.5 (honest_caveat tự ghi). `harness_floor.measured_token_estimate=55K` = ước. Mega-line STATUS/HANDOFF: **em ĐÃ thấy real-N từ chính harness lượt này** — STATUS folded chunk 360-dòng = **26075 tok**, HANDOFF 404-dòng = **32988 tok** (cap 25000).
- **ACTION (in-frame — MEASURE + net):** (1) đo real-token-N các mega-file SE (STATUS/HANDOFF full) qua Read-force-truncate → ghi lại số THẬT. (2) audit SE "measured" constant cho bẫy "nhãn đã-đo thay việc-đo": `harness_floor 55K` (khai "byte-measured 19K + est 36K" — nửa est, KHÔNG token-thật), byte/tok 3.0-3.5 range. (3) ĐỀ-XUẤT net "assert constant bao real-measure" nếu owner muốn.
- 🔴 **owner-gated:** **ĐỔI số** budget (`tier1_hotfeed`, `harness_floor`, `crystallized_backfill.target`) = quyền anh (`role_boundary_note` + mark `RC-…01-58-01`). Em CHỈ đo + báo %, KHÔNG auto-tune. → **surface: real-token đo được vs budget cap → anh quyết có re-tier/đổi-số không.**
### E. bon-vong-tu-bao-tri (new, NOT-adopt — spirit + evidence)
- 4 vòng tự-bảo-trì (hub-specific, "đừng chép số 4"). Bài học: **redundancy > single-net**; **"im-lặng có chữ-ký"** (whitelist qua mọi kiểm hình-thức nhưng tiền-đề-lý-do sai — test "gỡ hàng → hạng-mục hiện lại", đừng neo test-cơ-chế vào 1 hàng sống); eval-layer là yếu nhất.
- 🔴 **SE ĐÃ ALIGNED mạnh:** fault-inject 4-bộ (S122) = "gỡ-hàng→hiện-lại" · Goodhart-rời-tập-đo (S123) · citation-trap (S123) · positive-control-đừng-vá-sớm (S123) · H24 2 vai soi-lead = redundancy-layer. SE loop-map: loop-1=tooling-auditor(H1) · loop-2=lead-view/omission(H24) · loop-3=H17+MFE · loop-4=sleep-recovery.
- **ACTION (in-frame — reflection, KHÔNG code-change lớn):** adap-report `n-a-mostly-aligned` + ghi 3 phản-chiếu: (1) SE có KIỂM-role cho loop-1/2 (tooling + lead-view/omission) — **có thể AHEAD hub**; nhưng khai thật: các vai đó CHƯA soi-lẫn-nhau độc-lập (harvest-curator KHÔNG soi tooling-auditor) → **kẽ giống hub**. (2) "sequential-not-parallel cho chuỗi checker" — SE fable-clone = parallel-lane-rồi-synthesize (đúng, vì lane ĐỘC-LẬP + em-main = vai-3 tuần-tự); nhưng nếu có chuỗi measure→propose→check thì phải tuần-tự. (3) whitelist SE = `governance-detectors self-exclusion` (6 path) + AS-table + value_protect — áp test "gỡ-hàng→hiện-lại": **có positive-control chưa?** (S119 positive-control permission-matrix suýt bị giết = đúng ca này).
### F. push-guard dd4b0176 (update, vế N) + presence-not-age-reinject
- **push-guard vế N:** SE **ĐÃ adopt S122** (mark `RC-…15-32-20` §5.2 squash→count→push 1-LƯỢT + fault-inject 10/10). 🔴 **SE REFINEMENT ahead-of-broadcast:** SE đếm **TRAILING** `wal:` (cho phép `wal:` kẹp dưới commit-thường = noise-chấp-nhận) thay "mọi wal:=0" — vì "mọi wal:=0" gây **deadlock** khi hook chen (SE fault-inject ca(2) `base+wal+[CLAUDE]`→K=0→push-được). 3 điểm (a)(b)(c) broadcast: SE có đủ (a) so-số-không-exit-code · (b) first-push ref-check · (c) đúng remote-branch.
- **vế E (EOL-assert ④c):** SE ĐÃ adopt qua eol-crlf-notice (adap-report `2026-07-15-eol-crlf…` tồn-tại S122).
- **presence-not-age-reinject:** SE adap-report `2026-07-13-presence-not-age-reinject` tồn-tại (S115) — name-mismatch với broadcast id (`adap-update-` prefix).
- **ACTION (in-frame — reconcile dedup):** ghi adap-report ĐÚNG broadcast-id cho push-guard (`agreed+executed S122, refinement TRAILING`) + presence (`already-applied S115, name-reconcile`). Đóng kẽ dedup exact-id (S119 lesson: naive-diff false-pending).
---
## ③ Checklist (reviewer ensemble @tier:opus @MAX — deliverable + acceptance ĐO-ĐƯỢC)
**3 lane reviewer, đa lăng-kính, RETURN-only (em-main single-writer synthesize):**
| Lane | Lăng-kính | Acceptance ĐO-ĐƯỢC |
|---|---|---|
| **L1 — SCOPE/authority** | Ranh-giới in-frame ⟂ owner-gated ĐÚNG chưa? Có chỗ nào LEAD định tự-đổi thứ thuộc quyền-anh (model-frontmatter · cadence-counter · budget-số · settings.json) không? | Liệt-kê từng item B-F: verdict `in-frame-ĐÚNG` / `owner-gated-SÓT` / `over-reach`. ≥1 over-reach = FAIL. |
| **L2 — FIDELITY-source** | Mỗi broadcast đọc ĐÚNG chưa? Bẫy: treat `type:new NOT-adopt` (do-token/bon-vong) thành adopt-order? treat already-done (push-guard/presence) thành new? claim TRAILING-refinement ĐÚNG? | Mỗi item: `read-faithful` / `misread:<chỗ>`. Verify claim "push-guard adopted S122 §5.2" bằng grep session-end. ≥1 misread = FAIL. |
| **L3 — HONEST-nấc / overclaim** | Nấc G-011 đúng chưa (executed vs verified-pending vs agreed-deferred)? do-token real-token-N dùng đúng chưa (N>cap logic)? Có overclaim "đã đo" khi chỉ est? Có tự-mâu-thuẫn (meta-count S119-lesson)? | Mỗi adap-report-đề-xuất: nấc-đúng / nấc-sai. Bắt mọi "verified" mà thật là "docs-only/deferred". |
**Acceptance tổng:** mỗi lane trả **VERDICT header dòng-1** (`PASS` / `PASS_WITH_FIXES nC/nM` / `FAIL`) + finding neo `file:line`/broadcast:line. Em-main **refute** finding trùng/sai + synthesize → apply CHỈ phần in-frame PASS, surface owner-decision.
**Owner-decision surface (KHÔNG apply, chờ anh):**
1. **E-1 model-tier:** all-inherit → worker-tier-pin? (tangled H23-precedence-defer).
2. **C h17:** giữ counter (em đề-xuất, default-valid) hay theo hub chuyển bookend?
3. **D do-token:** real-token đo được → có re-tier mega-line / đổi budget-số không?
4. **r6 relocate:** set `autoMemoryDirectory` absolute-path per-repo (settings.json + workspace-trust + runtime-verify)?