All checks were successful
Deploy SOLUTION_ERP / build-deploy (push) Successful in 10m12s
Phiên governance thuần, 0 code product. Bookend @close chạy trọn 1 lượt (YC-018/YC-027). 14 vai: H1 8 FLAG · H2 GATE-FAIL 6 · cặp H24 deep (10+7 FLAG) · trio 3/3 (MIXED 38 trục → 4 action/18 BÁC → 50Đ/5T/15KC trên 70 claim) · ring1 41Đ/5T/19KC · ring2 15Đ/0T/2KC · ring5 1Đ/2 xoá-án/1KC · ctx-audit TRUOT 6 FLAG · tầng-2/3 chấm. Vá đã land: - 3 ô SỐ canonical STATUS: Mig 73→74 · test 697→699 (45+654) · gotcha 92→93; bổ 3 ô vào ledger WAL TRƯỚC khi vá; lan Mig 74 sang CLAUDE.md + docs/CLAUDE.md. - CG-1 attempt #1: cứu front-end-reviewer-style 1.192→5.913 B (clobber-rot, 4 chứng; harness-audit xác nhận md5 nối thuần, 0 mất). - Trả nợ harvest S188 4 vai/42.975 B; đóng orphan S194 bằng synthesis hồi-tố. - Vá gốc dòng rách so-yeu-cau:58-59 => máy đổi muc 28→29, hội tụ đếm tay. - Đính chính tiền-đề SAI reinject-ledger:70 cho CẢ HAI vai (matcher DÍNH-vs-TÁCH). - MIND-4 => mind-check --closed từ exit 1 sang exit 0. 3 RCA lỗi của lead: FAKE-VERDICT-S195 (verdict bịa cho vai chưa chạy) · RITUAL-ECHO-S195 (tái phạm lần 3) · SCORE-T1-S195 (đọc hụt số máy). #53 nổ 10 lần, cứu 10/10 bằng resume-in-session. 4 vai tự phát hiện thước hỏng của chính mình — không có bước tự-falsify thì lượt này có >=7 cáo buộc oan. completeness-gate S195: vong 4/5 chuc-nang (khong-nhip: V4) | phep DAT 3 / TRUOT 1 Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
27 lines
5.7 KiB
Markdown
27 lines
5.7 KiB
Markdown
# database-reviewer-style Agent — Persistent Memory
|
||
|
||
- **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; MÀY là con THIỆT NẶNG NHẤT vì hình-dạng công-việc:** trước S179 luật gọi mày neo vào `git diff --name-only origin/main...HEAD -- '*Persistence*'`. Mày là gate **PRE-commit**, mà `git diff` **mọi dạng** đều mù file **chưa commit + untracked**.
|
||
🔴 **Vì sao chí mạng với riêng mày:** một migration mới sinh ra là **3 file UNTRACKED** (Migration + Designer + ModelSnapshot) — tức **đúng cái dạng thước cũ mù 100%**. ⇒ thước cũ nghĩa là **3-file-rule KHÔNG BAO GIỜ được soi trước khi commit**, mà migration **đã apply prod thì không rút lại được**: bảng/cột đặt lệch quy-ước sẽ sống mãi và mọi thứ sau phải sống chung với nó. Fault-inject @S179 chứng thẳng: thả `Persistence/Migrations/__probe_mig__.cs` untracked → thước cũ **0 hit**, thước mới **bắt**; dọn probe → mới **im**.
|
||
Thước mới: `{ git diff --name-only origin/main..HEAD; git status --porcelain | cut -c4-; } | sort -u | grep -i 'Persistence/'`
|
||
🔸 Lọc bằng `grep -i 'Persistence/'` **chứ không phải** pathspec `-- '*Persistence*'`, vì `git status --porcelain` không nhận pathspec của `git diff`.
|
||
🔴 **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) ⇒ vế đổi dấu chấm **KHÔNG sửa 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/SolutionErp.Infrastructure/Persistence/**` (EF `Configuration` + `Migrations`) + tên bảng/cột/index/FK. Soi **ĐỒNG-NHẤT QUY-ƯỚC ĐẶT TÊN + hình-dạng migration**, **KHÔNG** soi thiết-kế schema đúng/sai (FK strategy · index perf · concurrency = `database-agent`) · KHÔNG soi logic (`reviewer`). Trục **ĐẮT NHẤT = 3-file rule** (Migration + Designer + ModelSnapshot) — thiếu 1 file là hỏng prod, và đây là lỗi **HÌNH-DẠNG** nên đúng việc của mày.
|
||
🔴 **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"* — ở tầng DB luật này **mạnh hơn mọi tầng khác** vì migration đã apply prod thì không rút lại được.
|
||
🔸 Quy-ước để đối chiếu: schema `dbo` single · table **PascalCase tiếng Anh** · PK `Id` (Guid) · FK `{Entity}Id` · audit `CreatedAt/UpdatedAt/CreatedBy/UpdatedBy` · soft-delete `IsDeleted/DeletedAt/DeletedBy`.
|
||
|
||
Tag `[s179, sinh-so-do-SUA-5a, chua-spawn-probe, migration-la-3-file-untracked, 3-file-rule, 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|database-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`
|
||
|
||
## S194 — YC-032 chấm Mig `AddContractSealedAt` + seed template [LEAD SEED ON-BEHALF]
|
||
|
||
- `PASS-WITH-FINDINGS`. 3-file rule **ĐỦ 3/3** (Migration + Designer + ModelSnapshot `+6/−0`), tên khớp khuôn `Add<Entity><Feature>`, cột khớp họ 11 cột `*ByUserId` đã chạy prod, `Down()` reversible thật (2 `DropColumn`, 0 `Sql()`), và **tự chạy `has-pending-model-changes`** đối chứng thay vì tin số lead khai.
|
||
- 🔴 **F-1 bắt được BUG LEAD VỪA TẠO CÙNG PHIÊN**: vòng reconcile template lead thêm để "tự hội tụ cờ `IsActive`" quét **TOÀN BỘ 8 template** — mà **XOÁ mẫu ở admin cài bằng `IsActive=false`** (`FormFeatures.cs:307`), KHÔNG phải `IsDeleted` ⇒ **hồi sinh mẫu admin vừa xoá ở MỖI lần khởi động**, và hàm chạy NGOÀI rào `demoSeedDisabled` nên ăn cả prod (đúng lớp #75/#76). Lead vá: thu hẹp còn đúng 2 FormCode.
|
||
- 🔴 Bài của chính vai (đáng nhớ hơn finding): **idempotent ≠ an toàn**. Chạy lại ra cùng kết quả vẫn có thể là *kiên trì ghi đè writer khác*. Tính chất cần kiểm là **quyền sở hữu cột** — phải đọc **đường ghi ĐỐI DIỆN** (Update/Delete handler), không chỉ kiểm chính mình chạy đúng.
|
||
- Thước untracked-aware chứng giá trị lần nữa: **2/3 file migration là UNTRACKED** ⇒ `git diff` thuần = 0 hit.
|