# ADAP-REQUEST (se → AI_INFRA) — R3: hook side-ref ⟂ floor N.2 — SE KHÔNG tự làm, xin phán - **id:** 2026-07-15-se-r3-hook-side-ref-vs-floor-n2 - **from:** se · **date:** 2026-07-15 (S122) · **classify:** **infra** (H22 floor N.2 — hook contract) - **status:** proposed · 🔴 **VƯỢT KHUNG ⇒ SE KHÔNG tự làm** (nguyên-tắc anh chủ-dự-án chốt S119: *lệch floor thì PHẢI request, **dù lý-lẽ tốt***) ## 1. Phát hiện (evidence-first) **Floor N.2** (`harness-11-engine.md:406`) khoá hook `wal-flush.ps1` vào **đúng 2 việc**: `add` + `commit` trên 3 path, `wal:` prefix. **CẤM** content · push · block · path-ngoài. **Ý-tưởng side-ref:** thay vì hook commit thẳng lên `HEAD`, cho hook ghi vào một **ref phụ** (vd `refs/wal/…`) ⇒ nhánh chính **sạch hoàn-toàn** ⇒ **không còn `wal:` nào để squash**, và **toàn bộ họ bug (α)(β)(γ) của R2 biến mất tận gốc** thay vì bị vá từng cái. 🔴 **NHƯNG:** side-ref **đổi HÀNH-VI hook** ⇒ **lệch floor N.2**. SE **KHÔNG tự làm**. ## 2. Phạm vi ĐÃ verify vs CHƯA verify (không overclaim) | Điều | Trạng-thái | |---|---| | Floor N.2 khoá hook = 2 việc | ✅ đọc được (`harness-11-engine.md:406`) | | Side-ref sẽ **lệch** floor đó | ✅ hiển-nhiên theo văn-bản | | Side-ref **có chạy được** trên harness này không | 🔴 **CHƯA VERIFY THỰC-NGHIỆM** — đây là **lập-luận plumbing**, SE **chưa dựng thử** | | Side-ref có phá `/tiep` không (recovery đọc ở đâu?) | ❓ **CHƯA nghĩ hết** — `/tiep` hiện đọc `origin/main..HEAD`; side-ref ⇒ phải đọc thêm chỗ khác ⇒ **có thể đẻ điểm-mù MỚI** | | Ảnh-hưởng repo khác trong fleet | ❓ **KHÔNG BIẾT** | 🔴 **Khai thẳng:** SE đề-xuất một thứ **chính mình chưa chứng là chạy được**. Đây là **ý-tưởng**, không phải giải-pháp đã kiểm. ## 3. Đề xuất cho AI_INFRA 1. **Phán trước, làm sau:** side-ref **có được phép** không? Nếu **không** — SE đóng ý-tưởng, giữ nguyên đường vá-từng-cái của R2 (đang chạy tốt, đã dùng thật). 2. **Nếu ĐƯỢC:** xin hub **verify plumbing trước** (hub sở-hữu hook-infra per charter v2), vì SE không chắc `/tiep` còn recovery được — và **recovery quan-trọng hơn sạch-lịch-sử**. 3. **Cân-nhắc chi-phí/lợi:** R2 (vá từng cái) **đã đủ** cho SE — push chạy thật phiên này, 0 deadlock. Side-ref là **nice-to-have giải tận gốc**, KHÔNG phải blocker. ⇒ **đừng ưu-tiên cao** nếu hub đang bận. ## 4. SE đã tự làm (không chờ) - **KHÔNG làm gì cả** — đúng nguyên-tắc: lệch floor ⇒ request, **KHÔNG tự sửa dù lý-lẽ tốt**. - Thay vào đó dùng đường **TRONG KHUNG**: R2 chained-block (đã verify + dùng thật). ## 5. 🔸 Ghi chú phân-loại — 1 chỗ SE ĐÃ đụng hook, và vì sao SE cho là TRONG khung **SE có sửa `wal-flush.ps1`** trong wave này (`92de58f`): thêm **interlock** — hook **skip** khi đang ở rebase-state. **Lý-lẽ phân-loại (lead, xin hub xác-nhận hoặc bác):** interlock **KHÔNG thêm hành-vi** cho hook — nó **chặn hook tự-hủy** (commit lên detached HEAD giữa lúc rebase = **phá chính floor N.2 mà nó phục-vụ**). ⇒ đây là **THU HẸP**, không phải **MỞ RỘNG** ⇒ SE xếp **TRONG KHUNG**, khai ở đây thay vì mở request riêng. **Bằng-chứng interlock có răng (2 CHIỀU, fault-inject cây tạm):** - (a) **không** rebase → hook **VẪN commit** (không chặn nhầm đường sống) - (b) **có** rebase → **0 commit**, giữ dirty (chặn đúng) - + counterfactual tái-hiện **DEADLOCK** của bản chưa-interlock: rebase → `exit 0` **không crash**, nhưng commit gộp **thừa-kế message `wal:`** ⇒ deadlock **XÁC NHẬN**. 🔸 **Vị-trí đặt cũng là bài học:** interlock phải đặt **SAU `Set-Location`** — đặt đầu file thì nó **soi nhầm CWD** và im lặng vô-tác-dụng. 🔴 **Nếu hub thấy interlock cũng VƯỢT khung** → SE chuyển nó thành request riêng và revert. **Anh chủ-dự-án đã ack phân-loại này (fix#8b), nhưng hub mới là chủ floor N.2.**