# back-end-reviewer-style Agent — Persistent Memory

- **S187 (2026-08-10) 🔴 LƯỢT SPAWN RUNTIME ĐẦU TIÊN — nấc lật `file-land` → `spawn-probe ALIVE` `[LEAD SEED ON-BEHALF @/pause khi mày ĐANG CHẠY — verdict PENDING, đọc đĩa khi nối]`:** anh chỉ định `/fable-real review lại style` trong YC-023 ⇒ lead gán mày (persona mang luật "ĐÃ DEPLOY = CHUẨN", BE nặng nhất) — spawn `subagent_type=back-end-reviewer-style, model=fable` **THÀNH CÔNG** lúc ~15:47: registry PHIÊN NÀY đã nạp mày (vế "cần restart CLI" của slot (73) thoả với phiên mới — 2 dòng seed S179 dưới khai "spawn-probe CHƯA CÓ" nay HẾT HIỆU LỰC vế đó, giữ làm lineage). Đề bài: style-review 2 bản invest module Duyệt-HĐ GĐ3 (`runs/2026-08-10-S187-duyet-hd-tu-khkk/sub-invest-{be,fe}-fable.md`). **VỀ CLEAN @16:0x ngay trong lúc /pause: `STYLE-REVIEW: PASS_WITH_FLAGS — 7 flag`**, thân `sub-style-review-fable.md` `== HẾT ==`, return chuẩn 0-garble (khác 2 con invest). Nặng nhất: FLAG-1 mâu-thuẫn 2-lens phân xử BẰNG CODE (FE mang tiền-đề S156 "inbox legacy", đĩa `ContractFeatures.cs:530-593` V2-aware ⇒ F3 hạ verify-only — đúng nghề "đối chiếu CODE THẬT thay vì tin chữ") · FLAG-2 wave MỒ CÔI (FE F1/F2 khai BE-blocker DTO mà wave-list BE không có wave DTO — lỗ ghép 2 lens chỉ lộ khi đọc CHÉO) · FLAG-4 claim "0 key mới" vs khuôn KHKK deploy kèm 8 key `AwV2_KhkkN*`+32 policy (`MenuKeys.cs:123-134`) — đề "mirror hay bỏ phải quyết tường minh" · FLAG-3 FE cứng trục 7-type khi BE#1 treo trục · 5/6/7 nit (R-6 no-regex + comment `:363` cùng edit · mã họ ASCII khớp validator `:274-276` · gom 4 cửa pin về 1 nhà guard). Chấm §2d theo tiền-lệ: **PA-A đúng khuôn V2-deploy nhất** (điều kiện W1 gỡ 2 bom S182) · PA-B tổ-tiên chỉ ở V1 · PA-C khớp style nhưng không đạt YC-023 — KHÔNG quyết thay owner. Spot-check neo BE 9/9 + FE 4/4 khớp. Tag `[s187, spawn-probe-alive-lan-dau, fable-real, pass-with-flags-7, phan-xu-2-lens-bang-code, wave-mo-coi]`
- **S179 (2026-08-07) SINH SỔ — dir này ra đời do SỬA-5a, KHÔNG phải do mày chạy `[LEAD SEED ON-BEHALF; mày CHƯA chạy lần nào — nguồn = đĩa + spec SỬA-6]`:** mày sinh @**S176** (anh chốt đội STYLE 3 vai, lý do đo được: *"mày cứ làm đi làm lại hoài"*), nhưng **3/3 vai style thiếu dir `agent-memory/<vai>/`** suốt từ đó ⇒ **vô hình với mọi máy đo** (`measure-agent-memory.ps1` enumerate DIRECTORY rồi mới đọc `MEMORY.md` — không dir thì không sinh dòng nào, và **thiếu-vắng trông y hệt sạch**). Vá @S179 = SỬA-5a.
  🔴 **Nấc THẬT: `file-land`, spawn-probe CHƯA CÓ** — registry no-hot-reload, cần **restart CLI** (anh OK @S179 item-6). Đừng đọc dir này thành "đã chạy rồi".

- **S179 — SỬA-1 vá thước dispatch; với MÀY đây là chuyện sống-chết hơn 2 con kia:** trước S179 luật gọi mày neo vào `git diff --name-only origin/main...HEAD`. Mày là gate **PRE-commit**, mà `git diff` **mọi dạng** đều mù file **chưa commit + untracked** ⇒ thước rỗng đúng lúc cần gọi ⇒ **0 spawn, 0 `SKIP-CO-KHAI`, chết CÂM**. Đo thật: cửa-sổ S178 có **12 file** đúng địa-phận cả 3 vai mà **0 con được gọi**.
  Thước mới (4/4 site): `{ git diff --name-only origin/main..HEAD; git status --porcelain | cut -c4-; } | sort -u`
  🔴 **Vì sao đắt hơn ở mày:** BE **0 máy style nào gác** — 0 `.editorconfig`, 0 analyzer, 0 `dotnet format --verify-no-changes` trong CI (đo S176). FE còn có ESLint đỡ lớp cơ-học; mày **không có gì cả**. ⇒ thước mù nghĩa là **KHÔNG CÒN LỚP NÀO** soi file BE trước khi commit.
  🔴 **Bài học NGƯỢC ĐƠN THUỐC:** đơn cũ ghi *"đổi ba-chấm → hai-chấm ∪ porcelain"*. Đo @S179: hai-chấm và ba-chấm cho **md5 Y HỆT** (`origin/main` là ancestor của HEAD ⇒ merge-base = origin/main) ⇒ vế đổi dấu chấm **KHÔNG sửa được gì**; răng nằm **TRỌN** ở vế `∪ porcelain`. Chỉ swap dấu chấm thì thước nghiệm-thu vẫn xanh mà đội **vẫn mù nguyên** = Goodhart.
  🔴 **Citation-trap:** dòng `CẤM origin/main...HEAD` trong persona **chứa chính mẫu bị cấm** ⇒ thước cũ đọc thành dương-giả. Thước đúng phân biệt **use ⟂ mention**: `grep -rn 'git diff [^|]*origin/main\.\.\.HEAD'` → 0.

- **Địa-phận + ranh (từ persona, ghi lại để khỏi drift):** ĐÓNG = `src/Backend/**` **TRỪ** `Persistence/**` (EF config + migration = `database-reviewer-style`). Soi **ĐỒNG-NHẤT STYLE + phân-tầng** (.NET 10 Clean Arch: `Api → Application ← Domain` + `Infrastructure → Application`; CQRS + MediatR + FluentValidation + AutoMapper), **KHÔNG** soi logic/nghiệp-vụ (đó là `reviewer`) · KHÔNG soi thiết-kế schema (`database-agent`). Gộp trục clean-code TRONG địa phận — anh chốt **3** vai, bỏ con clean-code thứ 4 vì phủ chồng.
  🔴 **LUẬT LÕI anh giao:** *"các tính năng đã deploy thành production rồi thì sẽ là chuẩn, trừ khi tao có điều chỉnh lại lần nữa"*. Repo **auto-deploy `main`** ⇒ mọi thứ còn trên `origin/main` = đã production = CHUẨN; việc của mày là **đi tìm anh em ĐÃ CHẠY THẬT** rồi đối chiếu, không tự nghĩ ra chuẩn mới.

Tag `[s179, sinh-so-do-SUA-5a, chua-spawn-probe, 0-may-style-gac-BE, nguoc-don-thuoc-2cham-vo-dung, citation-trap-use-mention]`

- **S182 (lead-seed, C2 /pause):** registry-probe BƯỚC 0.6b — spawn THẬT lần đầu sau restart, trả `ALIVE|back-end-reviewer-style` 0-tool đúng lệnh (tool_uses=0 khác #53 vì không bịa việc). Slot (73) đóng 5/5. → `runs/2026-08-07-S182-bookend-open/spawn-probe-registry.md`

- **S190 (lead-seed, C2 /pause):** B4 style-review BE (be2 sạch, be1 chết-non #53 → be2 phủ anchor chồng lấn 9/9). Đóng góp load-bearing: (1) **style-list tự đánh nhau spec v2.1** — SB-13/14/18+C10/C13 còn đòi gắn policy sau khi spec đã bỏ ⇒ worker cầm 2 mệnh-lệnh ngược = ship regression; LẬT. (2) **BS-3 đo SỐ THẬT LocalDB** `Contracts` 12/13 role CanDelete=0 (Drafter=0), control KHKK Drafter=1 ⇒ chứng policy-403 khoá oan. (3) ca "V1-nháp-2" TRÙNG DangSoanThao(2) → thay phase-3 legacy. (4) **ghost-wire** comment `ContractChangelog.cs:10-12` "AuditBehavior tự ghi" — file KHÔNG tồn tại, changelog GHI TAY. (5) 2 shape controller-authz song song CÓ CHỦ ĐÍCH (test khoá "không ép về 1 kiểu"). Bài: **khuôn được-chỉ-mirror có thể THIẾU đúng nấc T-matrix đòi** (KHKK owner-check `:1763` thiếu null-guard → chép nguyên là bẫy T-9). Tag `[s190, style-list-danh-nhau-spec, bs3-so-that, ghost-wire-comment, chep-nguyen-khuon-la-bay]`
