[CLAUDE] Docs: S146 closeout — session-model 3 owner-decision + hook 4-path + H24 auto
All checks were successful
Deploy SOLUTION_ERP / build-deploy (push) Successful in 5m25s
All checks were successful
Deploy SOLUTION_ERP / build-deploy (push) Successful in 5m25s
Ap spec-apply-hub-s145-v2 (5 axis, governance-only: 0 prod-code, 0 migration). Workflow S145 chet giua chung -> /tiep §4 relaunch-cat-gon wf_3d803740-41d 3/3 DONE. Owner-decision @S146: - session_ctx_kb = 64 TUONG-MINH (giu nguyen caveat ghost-wire: 0 reader) - session-model: scaffold IDEMPOTENT (tach cap-SO vs tao-THU-MUC) · closed.md WIRE (session-end §6.3-bis) · V2 AUTO (go cong NGUOI, GIU cong NHIP 6/15/3) Landed: C7 §N.8 predicate 4-ve · hook wal-flush.ps1 4 path (+.claude/sessions/) · San-3 tin-hieu ⑤ + ORPHAN-L · D2 KIEM end-only · §L.c completeness-gate co RANG. LIVE-VERIFY hook 4-path PASS repo THAT (da7ee8a). Session-model chay TRON VONG dau tien: pause-S146 -> resume-S146 -> ORPHAN-L can so. H24 force-fire (P=8 pause >= 1, luat auto moi): 2 vai + h24-audit -> 7 FLAG, va het: - sweep-consent sot 6 site (h24-audit.md:4 = frontmatter description) - closed.md wired-but-declared-unwired (ghost-wire CHIEU NGUOC) - owner-decision [7] BI GHI DE do tai-dung slot-index -> mat uy-quyen push 3/3 vai lane-H24 garble #53: ghi-dia-SOM cuu tron, ghi-MUON mat trang. So: orphan run-folder 3->0 · carry 14->20 (co tag [carry:*]) · +E-013 +E-014 error-ledger · +memory feedback_absence_looks_like_clean · .gitignore +lock file. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
@ -36,6 +36,8 @@ const VALID_ROLES = [
|
||||
'harness-eval', 'harness-refine', 'harness-audit', // +S141 bộ-ba đồng-kiểm memory-system (adopt AI_INFRA 2026-07-18 khuôn 5-câu) read-only INFORM-only propose-only;
|
||||
// trục = CHÍNH HỆ MEMORY (độ-giữ·hành-động·đúng-spec) — KHÁC H1 tooling / H2 harvest / H24 lead / reviewer diff;
|
||||
// TUẦN TỰ eval→refine→audit (CẤM song song — audit đọc bản cũ = verdict vô-nghĩa), lead scribe return từng con vào run-folder.
|
||||
'tooling-harvest-audit', // +S145 C4/C4b (adap dot-11, owner-decision [2] TÁCH) — vai-KIỂM ĐỘC-LẬP vòng tooling/harvest: đọc OUTPUT H1(tooling-auditor)+H2(harvest-curator), no-self-exempt ≠ H1/H2. AUTO fire-after-measure @session-end §L.b(g-bis) (KHÁC trio/H24 consent-gated). Vai #1/3 round-KIỂM (h24-audit + sleep-audit land dần incremental).
|
||||
'h24-audit', 'sleep-audit', // +S145 C4/C4b vai #2/3 + #3/3 round-KIỂM (owner-decision [2] TÁCH mỗi-vòng-1-con). h24-audit = KIỂM vòng soi-lead (đọc OUTPUT lead-view+lead-omission, no-self-exempt ≠ chúng, KHÔNG soi lead trực-tiếp) · sleep-audit = KIỂM vòng nén-ngủ (đọc /sleep-recovery gist+Fidelity, tự đo byte). AUTO fire-after-measure, propose-only, NO-OP nếu vòng không đo.
|
||||
]
|
||||
|
||||
// ─── PA-2a — hằng-số kỳ-vọng model tier-2 (H23 model-at-spawn, owner-chốt O1 @S121 W2) ──
|
||||
@ -111,9 +113,24 @@ if (!A || !Array.isArray(A.taskList) || A.taskList.length === 0) {
|
||||
if (A.checkpointApproved !== true) {
|
||||
throw new Error('hmw: checkpointApproved chưa set — em-main BÁO {số agent·vai·task} @inform rồi set args.checkpointApproved=true (guard = anti-accidental-fire).')
|
||||
}
|
||||
// S4 — số task THOẢI MÁI: harness chạy theo slot, dư tự queue, KHÔNG cap cứng (soft notice only).
|
||||
if (A.taskList.length > 16) {
|
||||
log(`hmw: taskList=${A.taskList.length} (>16) → harness queue theo slot (thoải mái, không cap cứng).`)
|
||||
// ─── C8b LOUD-skip trần WIDTH (S144, adap đợt-11 · owner chốt O-7 2026-07-22) ──────────────
|
||||
// LINEAGE (giữ vết, KHÔNG xoá — khuôn `auto-toan-vong:35` "đảo có chủ đích, chủ-ký, ngày, lý do"):
|
||||
// BẢN CŨ: `if (len > 16) log(...)` + comment "số task THOẢI MÁI … KHÔNG cap cứng (soft notice only)".
|
||||
// VÌ SAO ĐẢO: broadcast `depth-axis:40` đòi "clamp trần cứng + assert tổng-lượt ≤ trần";
|
||||
// soft-notice = chạm trần vẫn chạy hết ⇒ không phải clamp. Owner chốt O-7 = **LOUD-skip**.
|
||||
// VÌ SAO KHÔNG THROW: `depth-axis:43` nguyên văn "BỎ đào + báo RÕ (KHÔNG văng lỗi, không
|
||||
// lặng-thầm bỏ)"; và :124-125 dưới đã tự khai throw per-lane có thể bị nuốt thành null =
|
||||
// STOP-SILENT, tệ hơn. Reviewer R2 bắt bản spec v1 đòi THROW = tự mâu thuẫn → đã sửa.
|
||||
// 🔸 Trần 16 = GIÁ TRỊ CŨ ĐÃ CÓ, không phải số mới AI đặt. Đổi số = quyền owner (O-7).
|
||||
const WIDTH_CAP = 16
|
||||
if (A.taskList.length > WIDTH_CAP) {
|
||||
const dropped = A.taskList.slice(WIDTH_CAP)
|
||||
const keptN = WIDTH_CAP
|
||||
log(`hmw: 🔴 VƯỢT TRẦN WIDTH — taskList=${A.taskList.length} > trần=${WIDTH_CAP}.`)
|
||||
log(`hmw: 🔴 CHẠY ${keptN} lane ĐẦU, BỎ ${dropped.length} lane CUỐI (LOUD-skip, KHÔNG throw — depth-axis:43).`)
|
||||
log(`hmw: 🔴 LANE BỊ BỎ: ${dropped.map((t, k) => `[${WIDTH_CAP + k}]${(t && t.label) || (t && t.role) || '(no-label)'}`).join(' · ')}`)
|
||||
log(`hmw: 🔴 Đây KHÔNG phải "đã chạy hết" — em-main PHẢI khai số bỏ trong report @P4.`)
|
||||
A.taskList = A.taskList.slice(0, WIDTH_CAP)
|
||||
}
|
||||
|
||||
// ─── STOP-HARD role-whitelist (DIRECTED 6c32df89 REC-3, 2026-07-13 · S115) ────
|
||||
@ -220,6 +237,25 @@ const results = await parallel(A.taskList.map((t, i) => () => {
|
||||
})
|
||||
}))
|
||||
|
||||
// trả mảng kết quả (lọc null nếu agent lỗi/null — invalid-role đã STOP-HARD up-front; .filter(Boolean) chỉ lọc null-lane do agent lỗi runtime)
|
||||
// về em main → P3 VERIFY + harvest + P4 checklist
|
||||
// ─── C1 LANE-CHẾT-PHẢI-KÊU (S144, adap đợt-11 · repro NGAY trong run sinh ra nó) ───────────
|
||||
// LINEAGE (giữ vết): BẢN CŨ = `return results.filter(Boolean)` + comment "lọc null nếu agent
|
||||
// lỗi/null … .filter(Boolean) chỉ lọc null-lane do agent lỗi runtime" — tức code TỰ KHAI nó
|
||||
// nuốt lane chết, mà KHÔNG phát tín hiệu nào ra ngoài.
|
||||
// VÌ SAO SỬA — bằng chứng ngôi-thứ-nhất `wf_491c05a8-6dc` (2026-07-22): 3/5 lane chết vì cháy
|
||||
// maxTurns; em-main nhận mảng 2 phần tử KHÔNG tín hiệu "chết", chỉ biết nhờ khối <failures> của
|
||||
// HARNESS chứ không nhờ file này. Đúng `depth-cost:53` "Thử-rồi-chết ≠ chạy-rồi-sạch … tầng
|
||||
// tổng-hợp sẽ viết 'tầng-2 không thêm gì' = củng-cố verdict bằng một tầng-2 không tồn tại".
|
||||
// Falsifier hub `depth-cost:59` hỏi "tầng chết thì tầng sau thấy 'chết' hay 'sạch'?" — trước
|
||||
// bản vá này SE trả lời: thấy SẠCH.
|
||||
// 🔴 CỐ Ý KHÔNG throw: :124-125 đã khai per-lane throw bị nuốt thành null = STOP-SILENT.
|
||||
// Fix = THÊM TÍN HIỆU, KHÔNG đổi shape trả về (P3 downstream giữ nguyên hợp đồng).
|
||||
const deadIdx = results.map((r, i) => (r ? -1 : i)).filter(i => i >= 0)
|
||||
if (deadIdx.length > 0) {
|
||||
const nameOf = i => (A.taskList[i] && (A.taskList[i].label || A.taskList[i].role)) || '(no-label)'
|
||||
log(`hmw: 🔴 ${deadIdx.length}/${results.length} lane CHẾT (null) — KHÔNG phải "sạch".`)
|
||||
log(`hmw: 🔴 LANE CHẾT: ${deadIdx.map(i => `[${i}]${nameOf(i)}`).join(' · ')}`)
|
||||
log(`hmw: 🔴 Lane chết = 0 findings, KHÔNG phải "không tìm thấy gì". Em-main @P3 PHẢI khai số chết trong report, và CẤM đọc mảng ngắn thành "đã phủ đủ".`)
|
||||
log(`hmw: 🔴 Recovery: đọc ĐĨA trước (runs/<id>/sub-*.md) — lane có thể đã ghi xong mà return hỏng.`)
|
||||
}
|
||||
// về em main → P3 VERIFY + harvest + P4 checklist (shape GIỮ NGUYÊN: chỉ lane sống)
|
||||
return results.filter(Boolean)
|
||||
|
||||
Reference in New Issue
Block a user