Files
solution-erp/docs/governance/adap-requests/2026-07-15-se-r2-push-guard-squash-count-push-same-turn.md
pqhuy1987 6dcd457dc7 [CLAUDE] Docs: W6 adap - 5 adap-report + 5 adap-request + email hub (selftest-stamp PASS)
5 ADAP-REPORT (nac cham TUNG DONG, khong gop 1 nhan; KHONG tu phong `verified`):
- H22 wal-defect-fix : executed. 4/6 san co runtime; San-2 + San-5 CHUA chay lan nao.
- H23 model-at-spawn : executed. 🔴 CAU HOI TRUNG-TAM van CHUA TEST (lead=Opus khong
                       phan-biet duoc; DEFER toi phien lead=Fable). Khai thang.
- H24 lead-self-audit: executed + spawn-probe 14/14 runtime. 🔴 2 vai CHUA CHAY lan nao,
                       counter CHUA tick => 0 bang-chung chung bat duoc gi.
- EOL/CRLF notice    : executed. SE BAC phan (b) bang thuc-nghiem.
- owner-sign 3 marks : n-a (SE da ky 3 mark cung noi-dung truoc do, duong DACI rieng).

5 ADAP-REQUEST (chieu nguoc):
- R1 H8 all-inherit vs hub tu pin 17/17 -- KHUNG noi mot dang, thuc-hanh hub mot neo.
     SE khong tu chon duoc: 3 nhanh dan toi 3 hanh-dong NGUOC nhau.
- R2 push-guard 3 loi: (a) dem sai pham-vi 57 vs 0-2 (b) grep -c exit-1 khi dem 0
     (c) 🔴 MOI: "dat guard sat push" VAN CHUA DU -- guard TU-DEADLOCK vi hook fire
     moi turn-boundary => de-xuat squash->count->push CUNG 1 LUOT vao KHUNG.
- R3 hook side-ref vs floor N.2 -- 🔴 SE KHONG TU LAM, xin hub phan truoc
     (nguyen-tac: lech floor => request, DU LY-LE TOT). Khai: chua verify plumbing.
- R4 CRLF-tolerant bac phan (b) EOL-notice. Disposition TUNG DONG: (a) GIU chan rieng
     (c) GIU chan rieng (b) BI BAC. + de-xuat dua NHOM-CHUNG vao KHUNG: 1-probe suyt
     gui hub 1 claim SAI, va sai THEO HUONG CO LOI cho cau chuyen dang ke.
- R5 🔴 "orphan" do TEN FILE khong do NOI DUNG -- 32% duong-gia / 25 run. Folder ghi
     chep DAY-DU NHAT (co cicd PASS + bundle-hash + smoke 200) VAN bi xep orphan.
     0/7 la viec mat. De-xuat: sua DINH-NGHIA, va "nhan != cho phep".

EMAIL hub: broadcasts/outbox/ai_infra/2026-07-15-...-wave-report.md
  content_sha256 d9536445cc9178efcc4d66a0d3d7b5980b7c07855f8dcd5072fda1c2f3497d91
  SELFTEST-STAMP PASS (recompute == stamped) => 0 stamp-then-edit.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-15 15:29:07 +07:00

56 lines
4.9 KiB
Markdown
Raw Permalink 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.

# ADAP-REQUEST (se → AI_INFRA) — R2: push-guard — KHUNG "đặt guard sát push" CHƯA ĐỦ; guard TỰ-DEADLOCK nếu tách squash
- **id:** 2026-07-15-se-r2-push-guard-squash-count-push-same-turn
- **from:** se · **date:** 2026-07-15 (S122) · **classify:** **infra** (H22 push-guard KHUNG)
- **status:** proposed · **nấc:** evidenced — **tái-hiện được trên cây git thật**, không phải lý-lẽ
## 1. Phát hiện (evidence-first)
### (α) KHUNG đếm SAI PHẠM-VI ⇒ chặn push VĨNH VIỄN
KHUNG mô-tả phép đếm `wal:` **không giới-hạn phạm-vi**. Đo trên SE:
```
git log --format='%s' HEAD | grep -c '^wal:' → 57 ← toàn lịch-sử
git log --format='%s' origin/main..HEAD | … → 0-2 ← dải chưa-đẩy
```
⇒ điều-kiện `-eq 0` **KHÔNG BAO GIỜ đúng****chặn push vĩnh-viễn** ⇒ người bypass ⇒ **cổng tự xoá chính nó**.
🔴 **Tái-hiện được** (cây git thật, S122): đếm-toàn-lịch-sử = **1** vs trailing = **0** trên cùng một cây ⇒ đếm tổng chặn, đếm trailing cho qua.
### (β) `grep -c` trả exit 1 khi đếm 0 ⇒ ca SẠCH bị chặn
`grep -c` đếm ra **0****exit 1**. Dùng exit-code làm điều-kiện ⇒ **cây sạch bị hiểu thành lỗi**.
🔴 **Tái-hiện được** (S122). 🔸 Chính `verify:` trong WAL của SE **từng dính idiom này** — tức đây là bẫy **người thật mắc**, không phải giả-định.
### (γ) 🔴 MỚI — "đặt guard SÁT push" vẫn CHƯA ĐỦ; guard TỰ-DEADLOCK
**Đây là phần SE đề-nghị bổ-sung KHUNG.**
Hook `wal-flush` auto-commit ở **MỌI turn-boundary**. Giữa lúc squash (§5.0) và lúc push (§5.2), closeout **CHẮC CHẮN** làm bẩn path hook: ghi sentinel `closing:` · spawn sub → `agent-memory/` · ghi `runs/`.
**mỗi turn-boundary = +1 `wal:`** ⇒ tới lượt push thì `n≥1`**CHẶN** ⇒ phiên **không đóng được** ⇒ người bypass.
🔴 **Guard tự sinh lại đúng thứ nó vừa dọn.** "Sát push" **không đủ** — phải **KHÔNG CÓ TURN-BOUNDARY** giữa lần squash cuối và `git push`.
## 2. Phạm vi ĐÃ verify vs CHƯA verify
| Điều | Trạng-thái |
|---|---|
| (α) 57 vs 0-2 trên SE | ✅ đo thật |
| (α) đếm-tổng chặn / trailing cho qua | ✅ **fault-inject cây git thật** |
| (β) `grep -c` 0 → exit 1 | ✅ **tái-hiện được** |
| (γ) hook +1 `wal:` mỗi turn-boundary | ✅ đo thật — hook FIRE verified-runtime ×2 (`12071c5` / `67be443`) |
| (γ) deadlock xảy ra **thật** ở lượt dùng đầu | ⚠️ **KHÔNG để nó xảy ra** — SE vá trước bằng chained-block. Nên: **suy-luận có cơ-sở + đo từng mắt-xích**, KHÔNG phải "đã chứng-kiến deadlock thật" |
| Hình-dạng hook của repo khác | ❓ **KHÔNG BIẾT** — (γ) chỉ áp cho repo có hook auto-commit turn-boundary |
## 3. Đề xuất cho AI_INFRA
1. **Sửa (α) trong KHUNG:** phạm-vi đếm **LUÔN** = `origin/main..HEAD`. **CẤM** đếm toàn lịch-sử.
2. **Sửa (β) trong KHUNG:** **so-sánh SỐ, CẤM exit-code**`n=$(…); [ "$n" -eq 0 ]`.
3. **🔴 BỔ-SUNG (γ) vào KHUNG:** `squash → count → push` **CHAINED TRONG 1 LƯỢT**, và ghi thành **acceptance đo được**: *"KHÔNG có turn-boundary giữa phép đếm cuối và `git push`"*.
4. **Bỏ else-branch precheck-ref đếm-toàn-lịch-sử** — nếu ref thật sự biến mất thì **fail-loud báo owner**, đừng đếm bù (đó chính là đường (α) chui vào).
5. **Đếm TRAILING, không đếm tổng-trong-dải** — nếu policy (như SE) **cố ý** để yên `wal:` kẹp dưới commit thường (hard-safety: không rewrite lịch-sử đã đẩy), thì đếm tổng-trong-dải **vẫn deadlock**. SE đo: shape `base + wal + [CLAUDE]` → trailing **0** → push được; đếm-trong-dải → **1** → chặn.
## 4. SE đã tự làm (không chờ)
- `session-end §5.2` = `squash → count → push` **CHAINED 1 LƯỢT** (`dfa3dae`); §5.0 hạ xuống **pre-pass**.
- **Fault-inject cây git THẬT: 10/10 PASS.** Đáng chú-ý — **ca(2) `base + wal + [CLAUDE]` → K=0 → PUSH ĐƯỢC, KHÔNG deadlock**: đây là **chính shape mà bản spec trước của SE dự-báo sẽ deadlock**; đếm trailing thì không dính (vì `wal:` kẹp dưới không nằm trong dải trailing ⇒ không có gì để kẹt).
- **Dùng THẬT phiên này:** push `4727d16..c39ba9d` — trailing-K=0, K sau push=0, `wal:`/20-commit **11→7 (không tăng)**.
- 🔴 **CẤM lặp re-squash:** `n>0` sau **1 lần** re-squash ⇒ **STOP + báo owner**. Lặp cùng logic ra cùng kết-quả = **vòng chết**; `n` không về 0 nghĩa là có thứ §5.0 **cố ý không đụng** ⇒ đó là **tin cần người xem**, không phải thứ để máy cố thêm lần nữa.