Files
solution-erp/.claude/workflows/runs/2026-07-28-S158-day-wake-probe-first/spec-day-wake-probe-first-28-07-2026.md
pqhuy1987 33e7f68890
Some checks failed
Deploy SOLUTION_ERP / build-deploy (push) Has been cancelled
[CLAUDE] Docs: S158 closeout - adap /day probe-first (nac agreed) + bookend-close 5 vong
Phien-LOGIC L7 window 5, vao bang /tiep. Governance/adap-only: 0 prod-code,
0 migration, 0 test moi. Test do tuoi 562 PASS (45D+517I). Counter 31->32.

VIEC
- /tiep recovery tron: San-3 5 tin-hieu MANH deu keu DUNG (corroborate WAL),
  verify: 5/5 PASS 0 lech, bien-nhan _tiep-4.md (window-ordinal 5).
- /check-email AI_INFRA: verify bang NOI DUNG - 22/22 file outbox/se co trong
  inbox, cmp 0 byte-drift => se=0 that + khong co stamp-then-edit (H18).
- /adap-apply day-wake-probe-first qua /fable-real investigator-codebase:
  nac AGREED (0 file co-che bi sua). Spec 3-muc + adap-report + 4 phan-bien
  gui nguoc hub + 1 datum dogfood (hub tu khai co 0).
  Engine BAC 2 tien-de cua lead: mo-coi 0/8 (khong phai "co squash => co mo-coi")
  va probe PHAI dung phep-2 - chung bang cua S158 noi 2 phep cho verdict NGUOC NHAU.
- Ra 6 HIGH lens-wave spec KHKK: 4 phu tron, 2 con ho (H5 W3 N chua pin =>
  N=0 van PASS; H6 §2.4:224 giu co-che IsVisible da bi chinh file do do-dia bac).
- Bookend-close 10 spawn / 5 vong. V4 nen-ngu KHONG-NHIP (shard 15/15 => IM).

VA TRONG PHIEN
- STATUS:459 RAG khai "alive" -> lat DOWN (3 phep do doc-lap: chunk_count=0
  cho ca 7 project + shared_global; canonical tu mau thuan voi :473 cach 14 dong,
  song 5 nhan phien).
- STATUS:461 bundle hash prod da chet -> 8-QYcMOg/DptYR4wL (control-am 900/876 B).
  Hai that: cicd-verify:58 dung chinh o nay lam baseline.
- STATUS:6 4->5 cua-so, counter 31->32; M-1 nhet lai nguyen van owner
  "da xong buoc thu 6 tuc CEO duyet" (ring2: grep = 0/STATUS + 0/HANDOFF).
- WAL:5 + WAL:21 tick; HANDOFF segment S155->S158 + slot (42)...(48).
- GATE 5-ANCHOR di-tru khoi WAL sang HANDOFF NEXT-em TRUOC khi §6.4 reset xoa no
  (lead-gap FLAG-4, han chot = cua ke).
- ef-core-migration SKILL: va CAU TRUC (frontmatter thoi khai bang la nguon
  "moi nhat") thay vi them row - ring1: day la lan 3 cung class.
- contract-workflow:371 "Contract V2 chua" SAI ~2,3 thang -> dinh chinh
  (ring1 thach-CLEAN thung H1).
- C12: +3 dong run= hoi-to S155/S156/S157. 2 orphan run-folder -> synthesis dang-1.
- M9 seed on-behalf 3 diary: ctx-verifier, investigator-codebase, ctx-audit.

#53 x8 - DOI-CHUNG NOI-PHIEN SACH DAU TIEN
Ep-ghi-dia KHONG giam garble (3/3 vai bi ep van garble) nhung dua thiet-hai ve 0
(2.818/5.354/7.957 B nam san); 4 vai khong ep MAT TRANG phai resume.
=> chong #53 = thiet-ke ARTIFACT, khong phai PROMPT (xac nhan lan 5).
So #53 ghi bu sau 5 nhan phien dung yen: 66 can-duoi qua S158.
+2 sub-class moi: skeleton-ruot-rong nac-2 (byte>0 ma ruot rong) va
engine-process-exit (0 delta dia).

BAY CHAN DUOC
Moi-ngam neo bang SO DONG trong file append-o-TREN da nen 3 lan. Dong 99 hom nay
la van-de MO THAT (luat nen ho) => spawn ctx-audit ma khong xu = hoac DAT-ao,
hoac dan nhan "bay cai san" len dung cau dang trinh owner. Lead khoi phuc tu git,
pin bang NOI DUNG. ring2 chung them: neo SAI NGAY TAI COMMIT SINH RA NO
(stale-at-birth), khong phai troi-do-nen.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-07-28 20:50:58 +07:00

149 lines
11 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# SPEC — Lệnh DẬY-NHẸ probe-first cho SOLUTION_ERP (adap `2026-07-28-Governance-day-wake-probe-first-resume`)
> Engine: `/fable-real investigator-codebase` (Fable, single deep-pass, propose-only) — anh GÁN vai @S158.
> Pipeline H21 ①: engine propose → **lead verify** → **lead ghi (file này)** → worker thực-thi theo spec.
> Propose đầy đủ: `sub-invest-day-1.md` (25.440 B, cùng run-folder). File này = bản lead ĐÃ VERIFY.
> 🔴 **CHƯA THI CÔNG.** 3 chỗ chạm canonical cần anh gật — xem §③ cuối.
---
## ① TÍNH-NĂNG / ĐỀ-BÀI
Thêm **một đường dậy RẺ** cho vòng đời tạm-dừng/nối-lại: khi máy **chứng minh được 0-delta** kể từ điểm dừng,
mở cửa sổ mới **không phải trả giá `/tiep` trọn** (nạp-nền + spawn vai kiểm-lúc-đọc). Mọi trường hợp khác **tự nâng**
về `/tiep` đầy đủ. Kèm **guard chống-trùng** ở bước-0 của `/pause` + `/tiep`, và **marker dậy đếm-được từ đĩa**.
**Vì sao SE cần:** SE fit hạng cao nhất của thư (có ĐỦ nền 17-07 kit phiên-logic + nền 25-07 vòng-canh 3-vai
+ `tiep_reload`) ⇒ khoản tiết-kiệm lớn nhất của F1 áp dụng trọn.
**Giá đo được ở SE (engine đo tươi, đơn-vị BYTE — 🔴 CẤM quy ra token, thư nói rõ token nằm trong dải mở):**
| Nguồn `tiep_reload` | Byte |
|---|---|
| `docs/STATUS.md` (2 đoạn khoanh) | 3.295 + 56.210 |
| `docs/HANDOFF.md` (segment mới nhất) | 4.352 |
| `.claude/WAL.md` | 5.369 |
| `_mind-s-7.md` | 30.305 |
| `_context-s-7.md` | 22.584 |
| **Tổng** | **122.115 B** |
Cửa CLEAN sẽ **SKIP 86.441 B (70,8%)** + **1 spawn `ctx-verifier`**.
🔸 So hub: hub 439.328 B / 8 file — **nền SE nhẹ hơn 3,6×**, nên lợi tuyệt-đối nhỏ hơn hub. Khai thẳng, đừng mượn số hub.
**🔴 Datum dogfood SE có mà hub KHÔNG có** (thư tự khai *"dogfood: 0 phiên"*) — đo TRƯỚC khi đọc thư:
chính cửa `/tiep` @S158 này probe ra **CLEAN** (anchor `6c263dd` = HEAD, cây sạch, 0 sentinel) ⇒ **lẽ ra đi đường dậy-nhẹ**,
mà lead đã trả giá full. **1 điểm dữ-liệu, KHÔNG phải bộ số.**
---
## ② CÁCH IMPLEMENT (per-khoản F1-F4, tailor FORM theo SE)
### 🔴 Câu khó nhất — đã có phán quyết CÓ BẰNG CHỨNG: **DỰNG PHÉP-2, KHÔNG tái dùng Sàn-3**
Lead vào cửa này **nghiêng về tái dùng Sàn-3** (sợ 2-nguồn-sự-thật, B1). **Engine bác, và bác đúng** — bằng chứng
lấy từ CHÍNH cửa S158 này, nơi hai phép cho **verdict NGƯỢC NHAU**:
- **Sàn-3 tín-hiệu ②: HIT** — `origin/main..HEAD` có 2 commit non-`wal:` (`d7eaece` spec · `3b6fabc` dọn nợ sổ). *(lead tự đo @§0, độc lập.)*
- **anchor-delta: 0 ⇒ CLEAN** — `_pause-4` head-sha `d7eaece` → carrier `6c263dd` = HEAD. *(lead tự đo, độc lập.)*
⇒ Hai phép trả lời **hai câu KHÁC NHAU**: Sàn-3 hỏi *"có tồn-tại việc dở không?"* (neo `origin/main`) ⟂ probe hỏi
*"có gì ĐỔI so với điểm dừng không?"* (neo marker pause). **Khác câu hỏi thì khác nguồn sự-thật là hợp lệ — B1 không cấm.**
**4 ràng hygiene BẮT BUỘC kèm theo** (thiếu là thủng):
1. Sentinel `closing:` **GỌI CHUNG** tín-hiệu ③ của Sàn-3 (con-trỏ, không chép logic).
2. Mọi verdict DELTA **đổ về `/tiep`**`/tiep §0` giữ độc quyền là nhà DUY NHẤT phán chữ "sạch".
3. **CẤM dùng từ-vựng "sạch"** trong `/day` (dùng `CLEAN-delta`) — chống người đọc nhầm thành phán quyết Sàn-3.
4. `/tiep §0` ⑤(b) ORPHAN-L: **r-set phải cộng `_day-*`** — thiếu thì phiên có `/day` sẽ **kêu oan**; và **RE-RUN fault-inject** block đó.
### F1 — probe rẻ, chỉ-đọc
- **NEW** `.claude/commands/day.md` — 2 nhánh, bước probe đứng **TRƯỚC**.
- **EXTEND** `scripts/session_ctx.py` + sub-command `day-probe` (`--json`). Tái dùng `_TS_KEY_RE` sẵn có
(`:48-55` đã đón trước reader loại này). 🔴 Glob **phải lọc theo TÊN FILE** kẻo ăn nhầm `_mind-s-<N>.md`.
- Chọn marker cuối bằng **dấu-thời-gian GHI TRONG file**, KHÔNG dùng mtime (Dropbox chạm lại mtime — SE chạy trong Dropbox).
- **Khoá `day_wake`** trong `memory-budget.json`, có **allowlist dirty**. 🔴 Bắt buộc gồm `.claude/governance/.session-counter.json`
— nó dirty NGAY lúc probe chạy (tick fire ở cửa vào) ⇒ thiếu allowlist thì F1 **chết nửa số ca**.
- CLEAN → nạp lõi (WAL + `_mind` mới nhất), **SKIP** nạp-nền + **SKIP** spawn `ctx-verifier`.
- Nghiêng an-toàn: probe lỗi / nghi ngờ ⇒ coi là **DELTA**.
### F2 — guard chống-trùng ở HAI lệnh cũ
- `pause.md` **§0**: marker cuối đã là `_pause-*` + probe CLEAN ⇒ **no-op**, 0 marker/0 commit/0 spawn.
🔴 **Răng thật, không phải lý thuyết:** double-pause hiện đốt **1 spawn `ctx-curator`** (~100K floor theo config).
- `tiep.md` **§-1**: probe CLEAN ⇒ route sang `/day`.
- Cửa thoát cưỡng chế `--full` ở cả hai để anh ép chạy trọn.
### F3 — anchor: **SE-form MẠNH HƠN hub**
- **Bẫy-một XÁC NHẬN 4/4 THẬT ở SE:** mỗi `_pause-i` head-sha → commit kế tiếp **chính là** `wal: pause` của nó
(`8d4075a` · `976945c` · `73166c5` · `6c263dd`) ⇒ đếm thô từ head-sha ra **DELTA-giả 100%**.
- **SE-form:** anchor = **carrier-commit** `git log --diff-filter=A -1 -- <marker>` (commit ĐẦU TIÊN thêm chính file marker).
Đo **8/8 resolve được**; **sống-sau-squash by construction**; và **nuốt luôn bẫy-một** (không cần bước resolve riêng).
`head-sha` trong marker hạ xuống làm **fallback**, guard đúp.
- **Bẫy-hai (sha mồ-côi): 0/8 ở SE hôm nay — tiền-đề của lead SAI, đã bác.**
Squash `session-end` §5.0/§5.2 **chỉ gọt trailing-`wal:` CHƯA push**; 6/8 sha đã push nên bất khả mồ-côi.
*(lead re-đo độc lập: `cat-file -e` + `is-ancestor` → **sống 8 / mồ-côi 0**.)*
🔴 **Guard VẪN BẮT BUỘC**, 3 lý do: (i) tiền lệ **S127** `f9fa77d6` dangling có thật — và nó chứng luôn rằng
`cat-file -e` **một mình THỦNG** (object còn, ancestor mất) ⇒ **phải kèm `is-ancestor`**; (ii) `6c263dd` (đang là
anchor `_pause-4` **và** `last_ticked_head`) nằm trong vùng fold-able; (iii) 🔴 **chính feature `/day` tự đẻ điều kiện
orphan** — chuỗi cửa-nhẹ Q&A sản xuất trailing-`wal:` thuần, đúng thứ squash gọt.
- Mồ-côi ⇒ verdict `anchor-lost` **khai TO** trong report + tự nâng. Hỏng-an-toàn nhưng **phải CÓ TIẾNG**.
### F4 — marker dậy đếm-được
- `_day-<i>.md` **7 trường**, khuôn `_pause-<i>`/`_tiep-<i>`. **0 commit riêng** — hook `wal-flush.ps1` path ④
(`.claude/sessions/`) chở miễn phí ⇒ **KHÔNG nới hook****KHÔNG đẻ điểm mù mới** cho Sàn-3.
- **Falsifier 2 chiều** cho tầng audit: *CLEAN-giả* (marker ghi CLEAN mà có commit thật giữa anchor và ts ⇒ FLAG)
· *luôn-DELTA* (mỗi lần tự nâng phải khai signals/`anchor-lost` ⇒ chuỗi tự-nâng dài bất thường là soi được).
- **Drift F4 SE-local đo được (gửi hub — đúng shape s109 hub kể):**
**`_snapshot` 3/4 vs contract auto-snap `pause.md §2.6(D)`** — PAUSE-4 **thiếu vết snapshot**. *(lead re-đo: snapshot 3, pause 4.)*
`_context` PAUSE **4/4 khớp**. 🔸 Hai thứ KHÔNG tính là drift: `_tiep` 3-vs-4 (write-order benign) ·
WAL "window 4" / STATUS "counter 31" (by-design ghi tại pause cửa trước).
### Phản-biện / SKIP (engine nêu, lead nhận)
1. **Không quy token** — chỉ báo byte. Đây chính là lỗi làm thư hub trượt vòng r1 (dán nhãn "token tự đo" lên proxy ký-tự).
2. **Không tái dùng Sàn-3** làm probe (đã luận ở trên).
3. **Không nới hook** để chở `_day-*` — path ④ có sẵn.
4. Lợi tuyệt-đối SE **nhỏ hơn hub 3,6×** — đừng bán bằng số hub.
### 🔎 2 phát hiện NGOÀI đề-bài (engine tự nêu — lead xác nhận cả 2)
- 🔴 **`docs/HANDOFF.md` segment mới nhất = S153**, không có segment cho S155-S157 ⇒ **nguồn-2 của `tiep_reload`
đang nạp brief cũ 3 nhãn phiên**. *(Lead đụng đúng chỗ này ở §2.6 cửa này: đọc HANDOFF thấy "Last updated: 2026-07-26 (S153)".)*
- `_tiep-1.md` head-sha ghi **7 ký tự** trong khi 7 marker còn lại ghi đủ 40 ⇒ **form drift trong cùng một loại marker**
(nếu probe so sánh chuỗi thay vì gọi git thì sẽ vấp).
---
## ③ CHECKLIST — acceptance ĐO ĐƯỢC (A1-A8, mỗi phép CÓ ĐƯỜNG TRƯỢT)
> 🔴 Sàn: phép mà **implement sai vẫn PASS** là phép **0-bit**. Thư này bị chính reviewer của hub đánh trượt **2 vòng**
> vì lỗi loại đó ⇒ mỗi dòng dưới phải nêu rõ **trượt khi nào**.
| # | Phép đo | TRƯỢT khi |
|---|---|---|
| **A1** | Chu trình `/pause` sạch → `/day` ⇒ CLEAN; `day-probe --json` in **cả `anchor` lẫn `head-sha` field** và chỉ ra chúng KHÁC nhau | Ai đó cài đếm-thô từ `head-sha` ⇒ DELTA-giả ⇒ FAIL |
| **A2** | Cây tạm: inject marker mang sha **dangling** ⇒ verdict `anchor-lost` + tự nâng | Chỉ dùng `cat-file -e` (không `is-ancestor`) ⇒ lọt ⇒ FAIL — **đúng shape S127** |
| **A3** | `/pause` sạch rồi gõ `/pause` lần 2 ⇒ **số file marker + `git log -1` bất biến** | Sinh thêm marker / commit / spawn `ctx-curator` ⇒ FAIL |
| **A4** | `/tiep` trên nền sạch ⇒ report khai **SKIP nạp-nền + SKIP `ctx-verifier`**; đĩa sinh **đúng 1 `_day-*`, 0 `_tiep-*` mới** | Vẫn nạp nền, hoặc sinh `_tiep` ⇒ FAIL |
| **A5** | Inject (a) dirty 1 byte ngoài allowlist · (b) 1 commit thường ⇒ **DELTA cả 2 chiều** | Một trong hai vẫn CLEAN ⇒ FAIL |
| **A6** | Đếm `_day-*` = N; **falsifier PHẢI FLAG** ca inject CLEAN-giả (marker CLEAN + có commit thật giữa anchor và ts) | Falsifier im ⇒ FAIL (lớp *vắng-mặt trông giống ổn*) |
| **A7** | Sau khi có `_day-*` trên đĩa, `/tiep §0` ⑤(b) ORPHAN-L **im đúng**; rồi **RE-RUN fault-inject** block ⑤(b) 2 chiều | Quên cộng `_day-*` vào r-set ⇒ ORPHAN-L **kêu oan** ⇒ FAIL |
| **A8** | `grep` report `/day`: **0 hit** con số gắn nhãn token | Có số token đơn lẻ ⇒ FAIL (lỗi r1 của hub) |
**Vai + deliverable**
- **Thi công = lead tự tay** (KHÔNG giao implementer): 3 chỗ chạm **canonical**, sai một chỗ là hỏng nghi-thức đang chạy tốt.
- **REVIEW = workflow RIÊNG** — Harness-9 mandate (adap = 2 workflow: IMPLEMENT ⟂ REVIEW độc lập) + report hub kèm run-id.
- **Dogfood 2 cửa** trước khi báo hub — hub tự khai 0 phiên, SE đừng lặp lại lỗi đó.
### 🔴 3 chỗ chạm CANONICAL — CHỜ ANH GẬT, lead KHÔNG tự làm
1. **`tiep.md §0` ⑤(b)** — sửa r-set ORPHAN-L (đụng **nhà canonical của Sàn-3**).
2. **`CLAUDE.md`** — câu *"nối lại DUY-NHẤT bằng `/tiep`"* nay có ngoại lệ `/day` ⇒ phải sửa, nếu không là **ghost-wire chiều ngược**
(chạy thật mà khai chưa — đúng lớp H18 mà `lead-stale-auditor` bắt @S146).
3. **`check-email.md`** — nhịp "4 CỬA PHIÊN" thành **5 cửa** nếu `/day` cũng dò thư.
<!-- END · 4 KHOAN F1-F4 · 8 ACCEPTANCE A1-A8 · 4 PHAN-BIEN · 2 PHAT-HIEN-NGOAI-DE · 3 CHO-ANH-GAT -->