83 lines
9.0 KiB
Markdown
83 lines
9.0 KiB
Markdown
# sub-reviewer — GATE Fidelity (Phase 3b) /sleep-recovery-memory-l2 — S170
|
||
|
||
> Anti-#53: file này ghi TỪNG MỤC ngay khi có kết luận (flush liên tục). Đọc từ trên xuống = tiến độ thật.
|
||
> Vai: GATE (lead KHÔNG tự chấm Fidelity — G-001). Verdict-only, KHÔNG sửa draft.
|
||
> Run: `2026-08-01-S169-bookend-open` · 16 draft đã qua gate (a) coverage-diff 16/16.
|
||
|
||
## Trạng thái
|
||
|
||
- [x] P1 — FIDELITY-FLAG 4 cờ (`implementer-backend--2026-05-q3`) → **FLAG ĐÚNG nhưng CHƯA ĐỦ (2 MAJOR + 2 MINOR)**
|
||
- [x] P2a — cicd-monitor--2026-05-runs → **PASS-WITH-FIXES** (3 câu hỏi lead đều ĐẠT; 1 con-trỏ CHẾT + 1 keep-vs-drop MAJOR)
|
||
- [ ] P2b — test-specialist--baseline-history
|
||
- [ ] P2c — implementer-frontend--2026-H2
|
||
- [ ] P2d — investigator-codebase--2026-05-q1
|
||
- [ ] P3 — chấm subsection `### Bổ-sung coverage @P3-gate S170`
|
||
|
||
---
|
||
|
||
## P1 — FIDELITY-FLAG 4 tên cờ (`implementer-backend--2026-05-q3.gist.draft.md`)
|
||
|
||
**Verdict: nhãn `⚠️ FIDELITY-FLAG … đừng cite như fact` là ĐÚNG và CẦN, nhưng CHƯA ĐỦ.** Phải sửa thêm 2 điểm MAJOR + 2 MINOR trước khi chốt draft.
|
||
|
||
### 1. Sự thật trên đĩa (đo hôm nay, 2 dụng cụ độc lập)
|
||
|
||
Đọc thẳng thân 4 file migration (`src/Backend/SolutionErp.Infrastructure/Persistence/Migrations/`):
|
||
|
||
| Mig | Tên file thật | Cột thật do migration này tạo | Bảng đích |
|
||
|---|---|---|---|
|
||
| 28 | `20260513114505_AddAdvancedOptionsToApprovalWorkflows` | `AllowApproverEditDetails` · `AllowDrafterSkipToFinal` · `AllowReturnOneLevel` · `AllowReturnOneStep` · `AllowReturnToAssignee` · `AllowReturnToDrafter` (6 cột) | `ApprovalWorkflows` |
|
||
| 29 | `20260513130144_RefactorAdvancedOptionsToPerLevelAndDrafterUser` | dời 5 cột sang `ApprovalWorkflowLevels`; riêng `AllowDrafterSkipToFinal` sang **`Users`** | Levels + **Users** |
|
||
| 30 | `20260513160703_AddAllowApproverEditBudgetToLevels` | `AllowApproverEditBudget` — **đúng 1 cột duy nhất** | `ApprovalWorkflowLevels` |
|
||
| 31 | `20260514160124_RefactorSkipToFinalToApproverLevel` | ADD `AllowApproverSkipToFinal` (Levels) + DROP `AllowDrafterSkipToFinal` (Users), **no-backfill** | Levels ← Users |
|
||
|
||
Dụng cụ 1 — `grep -rl <tên> src/Backend` (đã trừ `/obj/` + `/bin/`): 4 tên = **0 / 0 / 0 / 0**; control dương `AllowApproverSkipToFinal` = **54**; control âm `AllowXyzKhongTonTai` = **0**. Khớp draft.
|
||
|
||
Dụng cụ 2 (tôi thêm) — `git log --all --oneline -S "<tên>" -- src fe-admin fe-user`: `AllowDrafterEdit` · `AllowApproverEditSection1` · `AllowEarlyApprove` · `AllowDelegate` = **0 commit trong TOÀN BỘ lịch sử**; control dương `AllowApproverSkipToFinal` = **5 commit** (`15349e8` `0779f2d` `50e6d8c` `df52fa0` `a8027c0`), `AllowApproverEditBudget` = **5 commit** ⇒ dụng cụ có răng. Kết luận nâng cấp từ "nghi" lên **chốt: 4 tên này chưa từng tồn tại trong mã, kể cả thoáng qua rồi bị đổi tên**.
|
||
|
||
### 2. Phán từng tên (draft gộp 4 làm một — sai lớp)
|
||
|
||
| Tên trong verbatim | Phán | Đối-ứng thật |
|
||
|---|---|---|
|
||
| `AllowDrafterEdit` (gán Mig 29) | **tên viết sai — lai ghép 2 cờ thật** | phần "per-NV" thật = `AllowDrafterSkipToFinal` (bảng `Users`); phần "Edit" thật = `AllowApproverEditDetails` (Levels, và là **approver** chứ không phải drafter) |
|
||
| `AllowApproverEditSection1` (gán Mig 30) | **tên viết sai — trôi từ vựng UI** | `AllowApproverEditBudget` |
|
||
| `AllowEarlyApprove` (gán Mig 31) | **tên viết sai nhưng CÓ đối-ứng ngữ nghĩa 1-1** | `AllowApproverSkipToFinal` ("duyệt vượt thẳng tới cấp cuối" = "duyệt sớm") |
|
||
| `AllowDelegate` (gán Mig 31) | **KHÔNG có đối-ứng nào — hạng nặng nhất** | Mig 31 chỉ ADD đúng 1 cột; toàn `src/Backend` không có khái niệm uỷ-quyền duyệt (chỉ `RequestDelegate`/`RequestHandlerDelegate` của framework, 3 file) |
|
||
|
||
⇒ Trả lời câu hỏi lead: **3/4 là tên viết sai của cờ thật (drift từ vựng), 1/4 (`AllowDelegate`) không có bất kỳ đối-ứng nào — không phải "kế hoạch bị bỏ" vì pickaxe cho 0 commit, tức nó chưa từng được viết ra dòng nào.** Cả 2 lớp đều thoả "đừng cite như fact", nên nhãn không sai — nhưng nó che mất chỗ nguy hiểm nhất.
|
||
|
||
### 3. MAJOR-1 — nhãn không phủ CON SỐ "4×", mà con số mới là thứ mang tải
|
||
|
||
Câu trong verbatim (`archive/2026-05-q3.md:16`) là: *"Pattern 7 … **đã proven 4× — strong candidate Layer B promote khi unfreeze**"*, đặt cạnh luật ngay trên nó: *"Pattern proven ≥ 2× qualifies Layer B nominate"*. Nghĩa là **con số 4 là thứ kích hoạt một quyết định**, và nó được suy ra bằng cách đếm chính 4 cái tên vừa bị bác. Một tên là ma, ba tên còn lại đổ về ~3 migration ⇒ "4×" không có chứng độc lập.
|
||
|
||
Nặng hơn: draft dòng 10 tự kê đơn *«ý an-toàn để giữ: "Pattern 7 đã áp 4 lần qua Mig 29/30/31" bỏ tên cờ»*. Đơn này **giữ nguyên khẳng định và vứt đi đúng những token cho phép kiểm lại nó** — sau khi "làm sạch", câu đó thành bất-khả-bác. Thêm nữa nó tự vênh số học: 4 lần qua 3 migration. Con số này cũng đã lan sang `implementer-backend/archive/2026-06.gist.md:53` và `archive/_INDEX.md:38` dưới dạng dữ kiện trần.
|
||
|
||
**Phải sửa:** nhãn FIDELITY-FLAG nêu rõ **"4×" cũng chưa kiểm**; và bỏ/viết lại câu "ý an-toàn để giữ" ở dòng 10 — nếu muốn giữ ý thì giữ dạng không mang số, ví dụ "Pattern 7 lặp qua chuỗi Mig 28→31 (số lần chưa kiểm)".
|
||
|
||
### 4. MAJOR-2 — nhãn nêu "0-hit" nhưng KHÔNG nêu tên cờ THẬT
|
||
|
||
Draft liệt 4 **tên file migration** thật, nhưng người đọc sau cần **tên cột** thật mới có neo dùng được, và chúng chỉ cách 1 lệnh grep (đã liệt ở bảng §1). Ở dạng hiện tại, gist đóng vai trò "cảnh báo có lỗ" thay vì "vá lỗ". Trớ trêu: file gist đời cũ `implementer-backend/archive/2026-05.gist.md:11` đã ghi đúng 1 trong các tên thật (`AllowApproverSkipToFinal`) — tức bản gist MỚI, bản đi cảnh báo sai, lại nghèo thông tin hơn bản cũ.
|
||
|
||
**Phải sửa:** thêm vào nhãn danh sách cột thật kèm bảng đích (tối thiểu 4 cột: `AllowApproverEditDetails` · `AllowDrafterSkipToFinal`→`Users` · `AllowApproverEditBudget` · `AllowApproverSkipToFinal`).
|
||
|
||
### 5. MINOR-1 — gộp sai `AllowEarlyApprove` với `AllowDelegate`
|
||
|
||
Draft viết *"riêng `AllowEarlyApprove`+`AllowDelegate` chưa có đối-ứng nào ở Mig 31 (thật = `AllowApproverSkipToFinal`)"*. Sai: `AllowEarlyApprove` **có** đối-ứng 1-1 chính là `AllowApproverSkipToFinal`; chỉ `AllowDelegate` là không có gì. Gộp 2 ca khác lớp làm mất dấu đúng mục đáng ngờ nhất.
|
||
|
||
### 6. MINOR-2 — số control dương "54 file" không khai bộ lọc
|
||
|
||
Đo lại: `grep -rl AllowApproverSkipToFinal src/Backend` = **86**; **54** chỉ khi trừ `/obj/` + `/bin/`; **12** khi trừ thêm `*.Designer.cs` + `ModelSnapshot`. Cả ba đều là "phép đo" — 54 chỉ tái lập được với bộ lọc chưa được khai. Kết luận 0-hit vững dưới cả 3 bộ lọc (0/0/0) nên verdict không đổi, nhưng số nằm trong sổ trí nhớ phải đi kèm thước, không thì người sau đo ra 86 và tưởng ghi chú sai.
|
||
|
||
### 7. Điểm draft làm ĐÚNG (giữ nguyên, không được hạ)
|
||
|
||
- Có **control âm** (`AllowXyzKhongTonTai`) cạnh control dương ⇒ chứng minh phép đo còn răng, không phải 0-hit do thước hỏng. Đây là chỗ draft vượt chuẩn.
|
||
- Nhãn được **nhân đôi đúng chỗ**: §TỔNG-HỢP (dòng 10) + đầu §Entries (dòng 14) + §Phụ-lục (dòng 46, 50, 53) ⇒ không có đường trích dẫn nào thoát khỏi cảnh báo.
|
||
- Không lén "sửa đẹp" tên cờ trong thân bài: trích dẫn verbatim giữ nguyên chữ sai, đúng nguyên tắc chép-nguyên-văn.
|
||
- Draft anh em `implementer-backend--2026-05-q1.gist.draft.md` **không mang tên bịa** (diễn đạt trung tính "cờ admin bật riêng (thành Mig 30)") ⇒ không lan sang bản đồng lứa. Đã đo: 4 tên chỉ xuất hiện ở q3 draft, 3 dòng, tất cả trong ngữ cảnh nhãn.
|
||
|
||
### 8. Ghi chú lây nhiễm (ngoài phạm vi draft — việc của em-main)
|
||
|
||
Từ vựng bịa đã sống sẵn trong 4 hiện vật trí nhớ: `implementer-backend/archive/2026-05-q1.md:19` · `archive/2026-05.gist.md:11` · `archive/2026-06.gist.md:53` (số "4×") · `archive/_INDEX.md:15`.
|
||
🔴 **Cảnh báo khi dọn:** `_INDEX.md:15` dùng tên sai **bên trong con trỏ** `substring:"30 migrations** (+1 Mig 30 AllowApproverEditSection1"`. Con trỏ đó trỏ vào văn bản nguồn, nên **sửa chính tả ở đây sẽ giết con trỏ**. Luật dọn: vá chỗ **khẳng định**, không đụng chỗ **trích để định vị** (use ⟂ mention).
|
||
|
||
---
|