Nen cho tinh nang "xoa phieu PE o man duyet" (UAT: phieu bam sai goi thau dang
an luy ke). Dot 1 lam NEN, dot 2 moi lam nut xoa.
Vi sao phai lam nen truoc: phieu dang chay pin ApprovalWorkflowId va doc workflow
SONG theo Id do. Moi POST tao workflow moi = Id MOI, nen tick co tren ban moi
KHONG BAO GIO toi duoc phieu dang treo. Phai co lenh sua-tai-cho giu nguyen Id.
- Domain: ApprovalWorkflowLevel + AllowApproverDelete (F6, per-NGUOI) + Mig
20260727033522_AddPeAllowApproverDelete (AddColumn bit default false, no new table)
- Application: UpdateAwDefinitionCommand + Validator + Handler
- 2 phep thu: (T1) khung khong doi - Order tung row bat bien
(T2) luat choi khong doi - cam CeoApprovalThreshold, AllowApproverFinalize,
Code, ApplicableType => 409 bao tao ban moi
- diff theo Level.Id (CAM delete-then-insert: no FK Restrict + mo coi LevelOpinion)
- guard 2 tang chu ky: tang 1 chu ky tren ho so CON SONG; tang 2 chu ky CON LUU
(cha xoa mem hoac opinion xoa mem) - ca hai deu CHAN, khong xoa cung
- purge chi khi ho so cha KHONG CON ROW; boc transaction (ExecuteDelete tu commit)
- KHONG tang Version, KHONG dung IsActive, KHONG doi Id
- Api: PUT /api/approval-workflows-v2/{id} + [Authorize(Policy="Workflows.Create")]
- Infra: message 403 in TEN NGUOI thay GUID tran
- FE: Designer tach "Sua tai cho" (PUT) vs "Tao phien ban moi" (POST) + o tick F6
- Tests: +21 (551 tong, 0 fail) - gom F12 chung minh phieu dang chay nhan thay doi ngay
Review: 14 FLAG, 3 HIGH da va (ExecuteDelete ngoai transaction / purge xoa cung
chu ky phieu xoa mem / endpoint khong co day FE goi toi).
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Lead nhét _backfill_S148 (string) vào counts{} nơi chỉ được có int → consumer đọc
map số sẽ vấp (chính filter -ge 3 của lead vừa in nó ra như một 'class chạm JUMP').
Chuyển note lên cấp cha class_repeat. counts{} nay 8 key, toàn int.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
- gap-owner-specifics 0 -> 4: lead đọc lướt FLAG-list rồi ước lượng 'S148 không tái hiện',
nhưng FLAG-3 của chính vai đó class ĐÚNG LÀ gap-owner-specifics. Vai đã đưa bảng tally
4 dòng có nguồn; lead không đối chiếu từng dòng. Sửa + ghi vết trong history.
- 3 class chạm/vượt jump_on_class_repeat=3: gap-owner-specifics 4 · gap-decision-sunk 3
· gap-carry-dropped 3
- HANDOFF +#20: _end đóng băng SAI đơn vị — §6.3-bis ghi _end ở MỌI closeout, thiếu điều
kiện 'phiên-LOGIC thực sự khép' => mô hình 1-logic-nhiều-window không thành hiện thực.
Mâu thuẫn với chính câu owner phát biểu @S148 và với NEXT anh #11.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
H24 force-fire (P=1 wal:pause gộp vào closeout) — AUTO, không consent:
- Cả 2 vai garble #53 (×27). lead-view GHI DIARY trong lúc làm → vớt trọn từ đĩa;
lead-omission KHÔNG ghi → SendMessage-resume. Đúng bài học S123.
- 9 FLAG (lead-view 5 + lead-omission 4), lead verify độc lập từng cái trước khi vá.
CANONICAL-POISON (nặng nhất):
- STATUS:448 ô canonical Tests ghi 528 (45D+483I) trong khi STATUS:6 + session-log S147
ghi 532 (45D+487I). dotnet test chạy tươi: 45 + 487 = 532, 0 fail → ô canonical SAI, đã vá.
- Hệ quả: detector đọc canonical=528 nên mọi flag test đo bằng thước sai; và
"canonical matches disk" chỉ cross-check mig+gotcha, KHÔNG cross-check test.
- Cặp bất-đối-xứng NGƯỢC CHIỀU cùng file: STATUS:6 "gotcha 82" vs row 83 vs anchor 83. Đã vá.
Counter backfill:
- .session-counter.json THIẾU entry S146 → last_audit + class_repeat đứng yên
→ tick S147 và S148 đều đọc sổ tiền-S146 → S148 kết luận "2<3 không jump" là SAI:
JUMP đã chạm từ S146 (gap-owner-specifics 2→3). Backfill + sửa tally + light_at 17→22.
Sổ (chống bốc hơi khi §6.4 reset WAL):
- 2 việc owner giao mà lead TỪ CHỐI (17 dòng _index · 51 file legacy) + lý do → HANDOFF
- 3 khoản owner-gated O-2/O-3/O-7 câm 5 nhãn phiên → kéo lên bảng số #17-#19
_end ĐẦU TIÊN của SE (session-2) — form hub khớp từng file với AI_INFRA/session-104
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>