# _context-s-2 — SESSION-MODEL narrative durable

<!-- SCAFFOLD-META: sID=2 | ts-moc=2026-07-23T17:47:37+07:00 | nguon-ts=git log -1 --format=%cI @ 5815442 | generator=NONE (viet tay @S148 — SE chua port scripts/session_scaffold.py) -->

> **sID (LOGIC-session) = 2.** 1 phiên-logic trải nhiều window vật-lý nối bằng `/pause` + `/tiep`. Window = 0-ID governance; **sID = đơn-vị LOGIC**. Folder pin: `.claude/sessions/session-2/`.
> ts-mốc khởi-tạo = **2026-07-23T17:47:37+07:00** (nguồn: `git log -1 --format=%cI @ 5815442` — mốc git-committer, KHÔNG phải wall-clock tuỳ-tiện).
>
> 🔴 **CẤM rewrite / tự-tóm block FLOW** (chống self-summary lossy). FLOW = append-only @`/pause`-only; vượt cap `session_ctx_kb` → distill SECTION CŨ thành pointer/gist, TUYỆT ĐỐI KHÔNG sửa entry verbatim đã ghi.

> 🧊 **KHAI THẬT — file này RETRO-CONVERT @S148 (2026-07-24), không sinh lúc phiên chạy.** SE trước đó dùng form riêng (`pause-S<nn>-<ts>.md` mang cả narrative). Owner chốt @S148 *"đối ứng đúng chính xác như hub"* ⇒ tách: **marker** → `_pause-<i>.md`/`_tiep-<i>.md` (5 trường) · **narrative** → file này. Nguồn narrative = `pause-S147-20260723T1744.md` + `resume-S148-...md` — 🔴 **cả hai ĐÃ GỠ khỏi thư-mục** (không phải "giữ tại chỗ" như bản đầu của dòng này viết): để lại thì **cùng một sự-kiện bị Sàn-3 đếm HAI lần** (`p=2 r=2` thay vì `p=1 r=1`) — vô-tình cân nên trông ổn, nhưng là cân giả. **Vết thật nằm ở git history**, không cần bản sao trong cây làm việc.
> 🔴 **Trường không tái-dựng được thì KHAI, KHÔNG BỊA:** `_pause-1.jsonl-hint` = `unknown-retro-converted-S148` (uuid transcript cửa-sổ S147 không còn truy được); tin-nhắn VERBATIM của anh ở PAUSE-1 **không được ghi lại lúc đó** ⇒ mục `> anh:` dưới ghi rõ là **THIẾU**, không dựng lại từ trí nhớ.

---

## (a) STOCK-map — reference-not-copy

> Bảng pointer tới nguồn durable. **KHÔNG copy nội-dung** (chống drift).

| Tên | Path | 1-dòng |
|---|---|---|
| WAL | `.claude/WAL.md` | mạch-việc-dở máy-state (H-22) — nối bằng `/tiep` |
| AI-context | `CLAUDE.md` | AI agent context SOLUTION_ERP (scope + quick-rules) |
| Trạng-thái hiện-tại | `docs/STATUS.md` | canonical mọi con-số (mig · bảng · test · roster) |
| Bàn-giao + backlog | `docs/HANDOFF.md` | brief 5 phút + bảng số chờ-anh + carry |
| Sổ đếm H24 | `.claude/governance/.session-counter.json` | counter + nhịp lead-self-audit |
| Sổ thư cross-project | `broadcasts/_index.md` | INBOUND directed (`outbox/se`) — fan-out `outbox/all` KHÔNG vào đây |

---

## (b) FLOW — append-only @pause-only

> 🔴 **CẤM rewrite FLOW.** Mỗi `/pause` APPEND đúng 1 entry. Entry cũ = immutable. FLOW = SOURCE durable của "đang-đến-đâu"; bảng-đầu-việc = VIEW derive từ đây.

FLOW-START

### PAUSE-1 2026-07-23T17:44:00+07:00

> anh: **(THIẾU — không ghi lại lúc đó.** Form SE cũ không có trường verbatim; retro-convert @S148 CẤM dựng lại từ trí nhớ. Từ PAUSE-2 trở đi bắt buộc chép nguyên văn.**)**

**Quyết-định đã CHỐT trong cửa này (S147 — product/UAT):**
- **① Bug đính-kèm "Bảng so sánh" khi phiếu Trả lại:** gate nút xoá/tải theo `(isAdmin||isDrafter) && isEditablePhase(phase)` THAY `readOnly` màn-hình; cắm `:2013` KHÔNG `:421` (tránh HoSoLink bleed); descope `SupplierAttachmentsCell` (giữ Mig28 F3 carve-out); KHÔNG thêm BE guard (giữ S78). Cả 2 app.
- **② Chuẩn-hoá mã dự-án:** owner chốt "chỉ cắt đầu/cuối" cho LƯU (Trim); lead thêm kiểm-trùng bỏ-dấu-cách chặn tái-phát (KHÔNG đổi cách lưu). +4 test guard.
- **② Gom dự-án trùng trên PROD:** giữ bản no-space, ẩn mềm bản dấu-cách; owner chọn (B) *"có sẵn đường SQL máy vào điều chỉnh luôn"* → qua `ssh vietreport-vps` integrated-auth `-E` (không chạm password). Owner dặn *"sau này sẽ chạy tối ưu kỹ lại chỗ này"* = first-pass, KHÔNG phải tối-ưu cuối.
- **Push deploy:** owner *"OK làm đi"* → 2 commit + push, CI #407 PASS.

**Delta còn SỐNG:**
- 🟢 KHÔNG có mạch dở. Cả 2 việc DONE + deploy live + verified 2-nguồn + closeout pushed.
- ⏳ UAT nghiệm-thu ① (bạn kia mở phiếu **Trả lại** → màn "Danh sách" → "Bảng so sánh giá" → nút X + tải lên hiện lại).
- ⏳ ② tối-ưu kỹ lại chuyện gom dự-án — owner hẹn sau (future, KHÔNG phải việc đang dở).
- 🔵 20 carry governance S146 + NEXT items VẪN MỞ.

**Con-trỏ:** code `7d39d8d` (① FE 2-app) + `4510cea` (② BE+test) · closeout docs `5f6c3be` · script gom `docs/changelog/data-fixes/2026-07-23-merge-duplicate-projects.sql` · log `docs/changelog/sessions/2026-07-23-1730-S147-pe-attach-fix-project-dedup.md` · bundle admin `B2j1LQ-v` / user `C3wbJegk` · state Mig 67 · 89 bảng · 532 test.

---

### TIEP-1 2026-07-24T00:10:00+07:00 *(cửa-sổ 2 — nhãn phiên S148)*

> 🔸 Ghi ở đây để FLOW liền mạch; marker máy ở `_tiep-1.md`. Hub form không đòi entry TIEP trong FLOW — **SE thêm có chủ đích** vì `/tiep` là nơi ground-truth-reconcile xảy ra, và kết-quả reconcile là thứ cửa sau cần đọc.

- Sàn-3 5/5: ⑤ ORPHAN-L kêu đúng (bàn-giao pause→tiep), đóng bằng biên-nhận.
- `verify:` **KHỚP 3/3, 0 lệch** (`rev-list 0 1` · origin `5f6c3be` · eoffice 200) ⇒ KHÔNG sửa WAL.
- H24 tick S147→S148: counter **21→22 CLEAN** (`5f6c3be` còn reachable, exit 0 — khác `squash-benign` của S147). `NHIP-NO: light 5/6 · deep 5/15 ok`.
- Việc cửa này: re-stamp HANDOFF khớp đĩa (#1 ĐÓNG · #3 chốt-(a) · #2 đổi trục) · wire `/check-email` 4 cửa 2 chế-độ · STAGE-2 10 thư fan-out · migrate session-model sang form hub.
