[CLAUDE] Docs: Chunk M4 — S23 t3 Plan M wrap: docs + session log + 2 agent MEMORY drift
All checks were successful
Deploy SOLUTION_ERP / build-deploy (push) Successful in 3m24s
All checks were successful
Deploy SOLUTION_ERP / build-deploy (push) Successful in 3m24s
3 commits Plan M `c2042ef + 508b17a + 4dd6f9c` cumulative:
- M1 (`c2042ef`) BE Service refactor F1.OneLevel/OneStep edge case Bước 1 → reset (0, 1) giữ ChoDuyet (KHÔNG fallback Drafter)
- M3 (`508b17a`) FE × 2 app rename phase=TraLai display label "Trả lại" → "Cần chỉnh sửa lại"
- M2 (`4dd6f9c`) Tests add 2 edge case test 106/106 PASS (+2 từ 104)
Docs update:
- docs/STATUS.md — Last updated S23 t3 + stats 106 test (+2) · 20 memory (2 entry reinforced)
- docs/HANDOFF.md — TL;DR S23 t3 với multi-agent ROI evidence Investigator avoid em main spam refactor
- docs/changelog/sessions/2026-05-15-s23-turn3-plan-m-f1-edge-case.md — Session log đầy đủ
Memory user-level update (2 entry reinforced):
- feedback_per_nv_permission_scope.md — S23 t3 reinforcement "edge case không lùi được KHÔNG fallback role khác"
- feedback_uat_skip_verify.md — Plan L S23 t2 lesson "Service refactor semantic BẮT BUỘC test cùng commit"
Agent MEMORY drift (auto-flush per multi-agent rule §):
- Investigator (.claude/agent-memory/investigator/MEMORY.md) — S23 t2 spawn L2 entry + S23 t3 spawn M0 audit findings
- Reviewer (.claude/agent-memory/reviewer/MEMORY.md) — S23 t3 Plan M cumulative PASS-WITH-NOTES verdict + 2 Minor defer
Reviewer verdict: PASS-WITH-NOTES (26 checks PASS, 0 Major, 2 Minor defer).
- Minor #1: 5-8 inline literal "Trả lại" PE module FE còn (filter / hint / button verb mix) — verb button giữ, filter/hint defer
- Minor #2: Contract + Budget module Phase=98 vẫn 'Trả lại' — Plan M scope PE-only, defer
Stats Plan M chốt:
- 31 mig (no change) · 59 tables · ~145 endpoints · 34 FE pages
- **106 test PASS (+2: F1 OneLevel/OneStep edge case)**
- 47 gotcha · 20 memory (2 entry reinforced) · 6 skills
- 4 sub-agents (1 Investigator pre-flight + 2 Implementer Case 2+3 + 1 Reviewer pre-commit)
- 4 commits Plan M `c2042ef..HEAD` ready push
Pending: CICD Monitor post-deploy verify Plan M
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
@ -1,6 +1,8 @@
|
||||
# HANDOFF — Brief 5 phút cho session tiếp theo
|
||||
|
||||
**Last updated:** 2026-05-14 (Session 23 turn 1 — **🎯 Plan K Mig 31 F2 refactor sang per-Approver-slot — DONE 9 commits `56868bf..0062fcb` pushed remote**. Verify result K9 + K11: Mig 31 prod TOP 1 ✅, Levels.AllowApproverSkipToFinal col added ✅, Users.AllowDrafterSkipToFinal col dropped ✅, zombie PATCH /allow-skip-final → 404 ✅, bundle hash rotated 2/2 (admin `CpI5OL8n→CRsX6cFo`, user `d064StNa→X7qb4Zl4`) ✅, 33 active users preserved ✅, AwLevelDto `allowApproverSkipToFinal` field PRESENT (13 keys, default False opt-in) ✅. CICD Monitor K9 catch CRITICAL wire gap: `AwLevelDto` admin DTO miss field — em main K2 + Reviewer K2 cùng miss audit `ApprovalWorkflowV2AdminFeatures.cs`. K10 hotfix ~15 LOC 1 file (AwLevelDto + ToDto + CreateAwLevelInput + entity init) pushed `0062fcb`. Run #195 success → K11 self-verify field present. Pattern lesson: per-NV admin opt-in flag wire **8 surface points** required (NOT 6 — admin overview DTO + Create input là 2 gap em main miss S22+5 và S23 t1). Memory `feedback_per_nv_permission_scope.md` cần add wire checklist gotcha S23 t2+.
|
||||
**Last updated:** 2026-05-15 (Session 23 turn 3 — **🎯 Plan M: Fix F1.OneLevel/OneStep edge case Bước 1 → giữ ChoDuyet + FE label phase rename**. 3 commits Plan M `c2042ef..4dd6f9c` local (chưa push, chờ Reviewer verdict). Bro UAT post-Plan L deploy: "Hiện logic cũ là khi trả lại 1 cấp hoặc chỉ định hoặc edit là trạng thái draft → thay đổi lại". Investigator audit confirm 4 mode F1.OneLevel/Assignee + F2 + F3 + F4 main path đã giữ ChoDuyet đúng (Mig 28-31 cumulative). Edge case F1.OneLevel ở Bước 1 Cấp 1 + F1.OneStep ở Bước 1 còn fallback Drafter (Phase=TraLai) — gap "draft" bro phát hiện. Plan M fix: reset (0, 1) giữ Phase=ChoDuyet + audit log "không lùi được" + SLA reset 7d (no-op effective). M3 FE label phase Phase=TraLai badge "Trả lại" → "Cần chỉnh sửa lại" (rõ end-user). M2 add 2 edge case tests **106/106 PASS** (+2 từ 104). F1.Drafter mode 4 GIỮ NGUYÊN Phase=TraLai semantic (explicit role mode). Multi-agent ROI evidence: Investigator catch fact code main path đã đúng (avoid em main spam fix sai) + Implementer Case 2+3 cookie-cutter 2 spawns + Reviewer pre-commit pending. Memory user-level update 2 entry. Stats: **31 mig** · 59 tables · **~145 endpoints** · 34 FE pages · **106 test (+2)** · 47 gotcha · 20 memory (2 entry reinforced) · 6 skills · 4 sub-agents. CHƯA push remote.)
|
||||
|
||||
**Last updated S23 t1:** 2026-05-14 (Session 23 turn 1 — **🎯 Plan K Mig 31 F2 refactor sang per-Approver-slot — DONE 9 commits `56868bf..0062fcb` pushed remote**. Verify result K9 + K11: Mig 31 prod TOP 1 ✅, Levels.AllowApproverSkipToFinal col added ✅, Users.AllowDrafterSkipToFinal col dropped ✅, zombie PATCH /allow-skip-final → 404 ✅, bundle hash rotated 2/2 (admin `CpI5OL8n→CRsX6cFo`, user `d064StNa→X7qb4Zl4`) ✅, 33 active users preserved ✅, AwLevelDto `allowApproverSkipToFinal` field PRESENT (13 keys, default False opt-in) ✅. CICD Monitor K9 catch CRITICAL wire gap: `AwLevelDto` admin DTO miss field — em main K2 + Reviewer K2 cùng miss audit `ApprovalWorkflowV2AdminFeatures.cs`. K10 hotfix ~15 LOC 1 file (AwLevelDto + ToDto + CreateAwLevelInput + entity init) pushed `0062fcb`. Run #195 success → K11 self-verify field present. Pattern lesson: per-NV admin opt-in flag wire **8 surface points** required (NOT 6 — admin overview DTO + Create input là 2 gap em main miss S22+5 và S23 t1). Memory `feedback_per_nv_permission_scope.md` cần add wire checklist gotcha S23 t2+.
|
||||
|
||||
**S23 t1 prev:** 2026-05-14 (Session 23 turn 1 — **🎯 Plan K Mig 31 F2 refactor sang per-Approver-slot — DONE 8 commits Plan K `56868bf..<latest>`**. Bro phát hiện inconsistency S22: F1+F3+F4 đều per-slot ở Designer, F2 lone wolf ở User Management (Plan D S22 wire) + bro chốt đổi semantic F2: Drafter from Nháp → Approver during ChoDuyet skip thẳng Cấp cuối. Plan K 8 chunk: pre-A slot label rename "#NV {order}" → ApproverFullName + K1 Mig 31 schema swap (drop Users + add Levels, NO BACKFILL Option A) + K2 Service ApproveV2Async +skipToFinal 8th param APPROVE STEP branch + DTO 7th Allow* field + K3 Designer 7th checkbox + banner rewrite + K5 zombie endpoint cleanup (PATCH /users/{id}/allow-skip-final + Command/Handler/DTO/UI all backout Plan D S22) + K6 Workspace × 2 app DROP Drafter checkbox + ADD Approver toggle Dialog amber warning + K7 tests 104/104 PASS regression (3 deleted Drafter F2 + 3 added Approver F2 cancel out) + K8 docs cumulative. Multi-agent ROI: 🟦 Investigator K0 pre-flight + 🟨 Implementer 4 spawns (pre-A + K1 + K3 + K5 + K7 Case 2+3) + 🟥 Reviewer K2 pre-commit catch zombie endpoint Major + 👤 Chủ trì K0-bis sqlcmd + K2 cross-stack reasoning + K6 UX flow + K8 docs. 4 prod user lose AllowDrafterSkipToFinal=true value per Option A (admin re-config qua Designer). Reviewer K2 PASS 0 critical, 2 Major + 2 Minor flagged → K5 + K8 resolved. New pattern caught: "Transient sentinel zombie" anti-pattern (K1 sentinel-false patch + chunk scope shift → endpoint NoOp swallow silent). Per-NV admin opt-in flag pattern proven **3× cumulative** (Mig 29 F1+F3 + Mig 30 F4 + Mig 31 F2) — pattern ALSO applies cho refactor existing scope, KHÔNG chỉ greenfield. Memory `feedback_per_nv_permission_scope.md` reinforced S23 t1. State final: **31 mig (+1 Mig 31)** · 59 tables · **~145 endpoints (-1 backout)** · 34 FE pages · **104 test PASS unchanged** · 47 gotcha · 20 memory · 6 skills · 4 sub-agents (Investigator 1 spawn + Implementer 4 spawn + Reviewer 1 spawn + CICD pending K9). CHƯA push remote — chờ bro confirm K9 spawn CICD Monitor verify.)
|
||||
**S22 chốt cuối:** 2026-05-13 2300 (Session 22 CHỐT cuối cùng — **bro chốt directive Thứ 9 BẮT BUỘC delegate sub-agent**. 14 commits pushed remote `3d725c4..2b9788d` + (this final). CICD Monitor Run #193 PASS verified all live endpoints + Mig 30 prod + bundle hash rotated. State final: **30 mig · 104 test · 47 gotcha (#47 revised informational) · 19 memory · 6 skills · 4 sub-agents · 33 active users prod**. Retrospective S22: em main solo 6/10 task lẽ ra delegate được — vi phạm directive Thứ 9. **Forward S23+ rule:** BẮT BUỘC spawn sub-agent khi ACCEPT criteria match (Implementer Case 1/2/3/5, Investigator pre-flight, Reviewer pre-commit, CICD Monitor post-deploy). Em main solo CHỈ khi schema/UX/architecture decision + cross-stack tight coupling + bug fix reasoning chain.)
|
||||
|
||||
@ -2,7 +2,8 @@
|
||||
|
||||
> **Update rule:** trước khi bắt đầu 1 task → ghi row vào `🔥 In Progress`. Xong → chuyển sang `✅ Recently Done`.
|
||||
|
||||
**Last updated:** 2026-05-14 (Session 23 turn 1 — **🎯 Plan K: F2 refactor sang per-Approver-slot Mig 31** + UI consistency. 8 commits Plan K `56868bf..<latest>`: Chunk pre-A slot label rename → K1 Mig 31 schema swap (drop `Users.AllowDrafterSkipToFinal` + add `ApprovalWorkflowLevels.AllowApproverSkipToFinal` no BACKFILL) → K2 Service ApproveV2Async Approver F2 branch + DTO refactor → K3 Designer 7th checkbox + banner rewrite → K5 zombie endpoint cleanup + Reviewer Major #1+#2 + Minor #3+#4 → K6 Workspace × 2 app DROP Drafter + ADD Approver toggle → K7 tests regression 104/104 PASS (3 deleted + 3 added cancel) → K8 docs. Multi-agent execution: 🟦 Investigator K0 pre-flight + 🟨 Implementer K1+K3+K5+K7 (4 spawns Case 2+3) + 🟥 Reviewer K2 pre-commit (PASS 0 critical, 2 Major + 2 Minor) + 👤 Chủ trì K0-bis+K2+K6+K8. Bro decision: F2 semantic ĐỔI Drafter from Nháp → Approver during ChoDuyet skip thẳng Cấp cuối (mirror F3+F4 admin opt-in per slot) + setup ALL ở Workflow Designer (KHÔNG ở User Management). UI slot label "#NV {order}" → ApproverFullName. Stats final S23 t1: **31 mig (+1 Mig 31)** · 59 tables · **~145 endpoints (-1 backout /allow-skip-final)** · 34 FE pages · **104 test pass unchanged** (3 deleted + 3 added) · 47 gotcha unchanged · 20 memory (cumulative reinforce `feedback_per_nv_permission_scope` 3×) · 6 skills · **4 sub-agents active 4 spawns (Implementer Case 2+3) + 1 Reviewer**. 4 prod user lose `AllowDrafterSkipToFinal=true` value per Option A (admin re-config qua Designer). Pattern reinforced: per-NV admin opt-in flag 3× proven (Mig 29 F1+F3 + Mig 30 F4 + Mig 31 F2) — pattern ALSO applies cho refactor existing scope, KHÔNG chỉ greenfield. Plan B Contract V2 wire vẫn pending S23 t2+. CHƯA push remote — chờ bro confirm.)
|
||||
**Last updated:** 2026-05-15 (Session 23 turn 3 — **🎯 Plan M: Fix F1.OneLevel/OneStep edge case Bước 1 → giữ ChoDuyet (KHÔNG fallback Drafter) + FE label phase TraLai rename**. 3 commits Plan M `c2042ef..4dd6f9c` chuỗi M1→M3→M2: M1 (`c2042ef`) BE Service `ApplyReturnModeAsync` 2 edge case block (line 287-333) → reset (0, 1) giữ Phase=ChoDuyet thay vì fallback Phase=TraLai (semantic mới per bro chốt AskUserQuestion: "Cho phép nhưng vẫn giữ ChoDuyet, clear pointer thôi") + M3 (`508b17a`) FE × 2 app rename `PurchaseEvaluationPhaseLabel[98]` + `PeDisplayStatusLabel.TraLai` + 2 inline literal trong PeWorkflowPanel F1 dialog "Trả lại" → "Cần chỉnh sửa lại" (phase status badge, KHÔNG đụng action verb "← Trả lại" + mode picker "Trả về Người soạn thảo") + M2 (`4dd6f9c`) Tests add 2 edge case test `OneLevel_AtStep1Level1_ResetsToBuoc1Cap1_KeepsChoDuyet` + `OneStep_AtStep1_ResetsToBuoc1Cap1_KeepsChoDuyet` + helper `SeedWorkflowAsync` extend 2 param optional. Multi-agent execution: 🟦 Investigator audit pre-flight catch fact code main path đã đúng (F1.OneLevel/Assignee + F2 + F3 + F4 main path giữ ChoDuyet) chỉ edge case Bước 1 fallback sai + 🟨 Implementer 2 spawns Case 2+3 (M2 + M3) + 🟥 Reviewer pre-commit pending + 👤 Chủ trì M1+M4. Test final: **106/106 PASS** (+2 từ 104, 58 Domain + 48 Infra) — K7 Approver F2 NO cascade. F1.Drafter mode 4 GIỮ NGUYÊN Phase=TraLai semantic (explicit role mode). Memory user-level update 2 entry: `feedback_per_nv_permission_scope.md` reinforcement S23 t3 "edge case không lùi được KHÔNG fallback role khác" + `feedback_uat_skip_verify.md` Plan L lesson "Service refactor semantic BẮT BUỘC update test cùng commit". Stats final S23 t3: **31 mig** (no change) · 59 tables · **~145 endpoints** (no change) · 34 FE pages · **106 test pass (+2)** · 47 gotcha · 20 memory (2 entry reinforced) · 6 skills · 4 sub-agents. CHƯA push remote — chờ Reviewer verdict.)
|
||||
**Last updated S23 t1:** 2026-05-14 (Session 23 turn 1 — **🎯 Plan K: F2 refactor sang per-Approver-slot Mig 31** + UI consistency. 8 commits Plan K `56868bf..<latest>`: Chunk pre-A slot label rename → K1 Mig 31 schema swap (drop `Users.AllowDrafterSkipToFinal` + add `ApprovalWorkflowLevels.AllowApproverSkipToFinal` no BACKFILL) → K2 Service ApproveV2Async Approver F2 branch + DTO refactor → K3 Designer 7th checkbox + banner rewrite → K5 zombie endpoint cleanup + Reviewer Major #1+#2 + Minor #3+#4 → K6 Workspace × 2 app DROP Drafter + ADD Approver toggle → K7 tests regression 104/104 PASS (3 deleted + 3 added cancel) → K8 docs. Multi-agent execution: 🟦 Investigator K0 pre-flight + 🟨 Implementer K1+K3+K5+K7 (4 spawns Case 2+3) + 🟥 Reviewer K2 pre-commit (PASS 0 critical, 2 Major + 2 Minor) + 👤 Chủ trì K0-bis+K2+K6+K8. Bro decision: F2 semantic ĐỔI Drafter from Nháp → Approver during ChoDuyet skip thẳng Cấp cuối (mirror F3+F4 admin opt-in per slot) + setup ALL ở Workflow Designer (KHÔNG ở User Management). UI slot label "#NV {order}" → ApproverFullName. Stats final S23 t1: **31 mig (+1 Mig 31)** · 59 tables · **~145 endpoints (-1 backout /allow-skip-final)** · 34 FE pages · **104 test pass unchanged** (3 deleted + 3 added) · 47 gotcha unchanged · 20 memory (cumulative reinforce `feedback_per_nv_permission_scope` 3×) · 6 skills · **4 sub-agents active 4 spawns (Implementer Case 2+3) + 1 Reviewer**. 4 prod user lose `AllowDrafterSkipToFinal=true` value per Option A (admin re-config qua Designer). Pattern reinforced: per-NV admin opt-in flag 3× proven (Mig 29 F1+F3 + Mig 30 F4 + Mig 31 F2) — pattern ALSO applies cho refactor existing scope, KHÔNG chỉ greenfield. Plan B Contract V2 wire vẫn pending S23 t2+. CHƯA push remote — chờ bro confirm.)
|
||||
**S22 chốt cuối:** 2026-05-13 2200 (Session 22 CHỐT — **🎯 Bro chốt sub-agent solution OK**. 11 commits S22 pushed remote `3d725c4..b04a11a`. CICD Monitor Run #188 PASS verified. Highlights: Plan D F2 toggle + Plan C +20 test (test catch-up backlog) + Plan E strict V2 scope + Plan F ABORTED pre-flight (defer sau Plan B) + S22+1 fix disable 3 button bug + S22+2 seed 20 test user role-based naming + S22+3 rename users `{dept}.{level}@solutions.com.vn` + S22+4 attachment view inline PDF + Section "Điều chỉnh ngân sách" + S22+5 Mig 30 `AllowApproverEditBudget` per-NV opt-in (spec fix bro feedback). Stats final S22: **30 mig (+1 Mig 30)** · 59 tables · **~146 endpoints (+3)** · 34 FE pages · **104 test pass (+20: 5 reg #44 + 7 ReturnMode + 7 Guard + 1 V2 actor scope)** · **47 gotcha (+1 #47 paths-ignore agent-memory gap pending bro fix)** · 19 memory · 6 skills · **33 active users prod** (13 cũ + 20 mới role-based) · 4 sub-agents (CICD Monitor Run #188 PASS verify, 3 sub-agents seeds-only em main solo throughout S22). Pattern reinforced: per-NV admin opt-in flag 2× proven (Mig 29 + Mig 30) — anti-pattern default scope expansion. Memory `feedback_per_nv_permission_scope` reinforced S22+5 narrative.)
|
||||
**Last updated S22 prev:** 2026-05-13 1800 (Session 22 — Plan C + D + E done, Plan F ABORTED pre-flight fail. 5 commits local `60efeed`→`dbda37e`→`215b1e0`→`f149661`→Docs. Plan D BE+FE Admin User F2 toggle UI (PATCH /users/{id}/allow-skip-final + UsersPage column "Skip cuối" violet badge). Plan C task 4 5 reflection regression test gotcha #44 silent 403 ApprovalWorkflowsV2Controller policy split (catch class-level Policy regression). Plan C task 1-3 14 service test catch-up — ApplyReturnMode 4 mode per-NV Mig 29 + skipToFinal per-Drafter + EnsureEditableForDetails F3 gating. Plan E strict V2 scope List + Detail (remove UAT loose `|| ApprovalWorkflowId != null`, replace with V2 approver actor.UserId scope via ApprovalWorkflowLevels join). Plan F ABORTED — pre-flight prod sqlcmd reveal 23 PE + 7 Contract pin V1 + Contract entity HOÀN TOÀN V1 chưa wire V2 → drop V1 BE crash startup. Defer F sau Plan B Contract V2 + migrate 4 V1-only PE + UAT 2-3 tuần. Stats S22: 29 mig (0) · 59 tables · ~144 endpoints (+1) · 34 FE pages · **103 test pass (+19: 5 reg #44 + 7 ReturnMode + 7 Guard)** · 46 gotcha · 19 memory · 6 skills · 4 sub-agents (em main solo). Pattern reusable: SeedWorkflowAsync + SeedApproversAsync helper test infra + reflection Authorize regression test + pre-flight prod check pattern. CHƯA push remote — chờ bro confirm.)
|
||||
**S21 chốt cuối:** 2026-05-13 1530 (Session 21 chốt cuối — 5 turn cumulative pushed remote, CICD verified PASS 2/2 run, 1 gotcha mới #46 Gitea API path, 2 memory entry mới — `feedback_ef_migration_backfill_reorder` + `feedback_per_nv_permission_scope`. Session 21 5 turn timeline: t1 cicd-monitor add → t2 RAG planning Cách A → t3 fix gotcha #45 → t4 F1+F2+F3 Mig 28 → t5 refactor Allow* per-NV Mig 29. Stats final: 29 mig · 59 tables · ~143 endpoints · 34 FE pages · **84 test pass** · **46 gotcha (+2 từ S20: #45 PE button mismatch + #46 Gitea API)** · **19 memory entries (+3 từ S20: RAG + EF backfill + per-NV scope)** · 6 skills · 4 sub-agents (3 seeds-only + 1 cicd-monitor 2 runs PASS). 12 commits pushed `3a34831..c0af9e0`. Plan G Trial Week 1 evidence: CICD Monitor catch 0 fail vì green 2/2 run, cost 110-120K/run under 150K budget, 3-3.5min CI time stable. KHÔNG còn pending push. UAT mode skip dotnet test mỗi chunk, test-after Plan C bundle cho tất cả turn 3-5 sau UAT 2-3 lần ổn.)
|
||||
|
||||
@ -0,0 +1,171 @@
|
||||
# Session 23 turn 3 — 2026-05-15 — Plan M Fix F1 edge case + FE label rename
|
||||
|
||||
**Dev:** Claude Opus 4.7 1M (4 sub-agents active + em main coordinator)
|
||||
**Duration:** ~2h
|
||||
**Base commit:** `83c9f7b` (S23 t2 Plan L5 chốt)
|
||||
**Final HEAD:** `4dd6f9c` (M2 tests) — local, CHƯA push remote (chờ Reviewer verdict)
|
||||
**Total commits Plan M:** **3** (M1 + M3 + M2)
|
||||
|
||||
## 🎯 Trigger session
|
||||
|
||||
Bro UAT post-Plan L deploy (S23 t2 chốt ~02:00) phát hiện disconnect:
|
||||
|
||||
> "Hiện logic cũ là khi trả lại 1 cấp hoặc chỉ định hoặc edit là trạng thái draft -> cái này thay đổi lại nhé, các tính năng duyệt thẳng, trả lại 1 cấp hoặc người chỉ định hoặc cho edit thì cho xử lý đc ở trạng thái đang gửi duyệt luôn."
|
||||
|
||||
Em main pre-flight Investigator spawn audit code thực tế. **Verdict surprise:** code main path đã đúng (F1.OneLevel/Assignee + F2 + F3+F4 giữ ChoDuyet đúng spec Mig 28-31 cumulative). Chỉ **edge case F1.OneLevel/OneStep tại Bước 1** còn fallback Drafter (Phase=TraLai) — đây là "draft" bro phát hiện.
|
||||
|
||||
Bro 3 AskUserQuestion chốt spec Plan M:
|
||||
- **F1.OneLevel/OneStep Bước 1**: reset (0, 1) giữ ChoDuyet (Recommended Option A — no-op effective + audit log)
|
||||
- **FE Phase=TraLai display label**: rename "Trả lại" → "Cần chỉnh sửa lại"
|
||||
- **F1.Drafter mode 4**: GIỮ NGUYÊN Phase=TraLai semantic (explicit role mode, KHÔNG phải fallback)
|
||||
|
||||
## 🌳 Plan M 3 chunk execution
|
||||
|
||||
### Chunk M1 — BE Service refactor F1 edge case (`c2042ef`)
|
||||
|
||||
👤 Chủ trì Solo (cross-stack reasoning F1 state machine — Implementer auto-refuse criteria #1 schema-ish + #4 bug-fix-reasoning).
|
||||
|
||||
File: [PurchaseEvaluationWorkflowService.cs:287-333](src/Backend/SolutionErp.Infrastructure/Services/PurchaseEvaluationWorkflowService.cs:287)
|
||||
|
||||
```diff
|
||||
case WorkflowReturnMode.OneLevel:
|
||||
// Lùi 1 Cấp trong cùng Step. Nếu đang Cấp 1 → lùi sang Bước trước
|
||||
// Cấp cuối. Nếu đang Bước 1 Cấp 1 → reset về (0, 1) giữ ChoDuyet
|
||||
- // → fallback Drafter (no further).
|
||||
+ // (Plan M S23 t3 — KHÔNG fallback Drafter, phiếu giữ "đang duyệt").
|
||||
if (curLevel > 1) { ... }
|
||||
else if (curStepIdx > 0) { ... }
|
||||
else
|
||||
{
|
||||
- // Bước 1 Cấp 1 — no further back. Fallback Drafter.
|
||||
- evaluation.Phase = PurchaseEvaluationPhase.TraLai;
|
||||
- evaluation.CurrentWorkflowStepIndex = null;
|
||||
- evaluation.CurrentApprovalLevelOrder = null;
|
||||
- evaluation.SlaDeadline = null;
|
||||
- return "Trả về Người soạn thảo (fallback — đang Bước 1 Cấp 1)";
|
||||
+ // Bước 1 Cấp 1 → reset về (0, 1) giữ Phase=ChoDuyet (no-op effective
|
||||
+ // — Approver A hiện tại). Audit log rõ "không lùi được". SLA reset
|
||||
+ // dưới cuối hàm cho approver giữ nguyên.
|
||||
+ evaluation.CurrentWorkflowStepIndex = 0;
|
||||
+ evaluation.CurrentApprovalLevelOrder = 1;
|
||||
+ summary = "Action 'Trả lại 1 Cấp' không lùi được — phiếu reset về Approver Bước 1 Cấp 1";
|
||||
}
|
||||
```
|
||||
|
||||
OneStep analog: line 314-333 cùng pattern reset (0, 1) thay vì fallback Drafter.
|
||||
|
||||
**Verify:**
|
||||
- `dotnet build src/Backend/SolutionErp.Infrastructure` clean (0 err, 2 warn pre-existing DocxRenderer)
|
||||
- Diff 13+/13- LOC 1 file surgical
|
||||
|
||||
**KHÔNG đụng:**
|
||||
- F1.Drafter line 268-275 (explicit role mode, giữ TraLai)
|
||||
- F1.Assignee line 335-360 (giữ throw nếu không match)
|
||||
- F2 ApproveV2Async line 483-524 (Plan L L1 fix unchanged)
|
||||
- F3 EnsureEditableForDetailsAsync (Mig 28 wire unchanged)
|
||||
- F4 AdjustBudgetCommand handler (Mig 30 wire unchanged)
|
||||
|
||||
### Chunk M3 — FE label Phase=TraLai rename × 2 app (`508b17a`)
|
||||
|
||||
🟨 Implementer Case 2 (cookie-cutter mirror 2 app, ~6K tokens spawn).
|
||||
|
||||
Files (4 FE + 1 MEMORY):
|
||||
- [fe-admin/src/types/purchaseEvaluation.ts](fe-admin/src/types/purchaseEvaluation.ts): `PurchaseEvaluationPhaseLabel[98]` + `PeDisplayStatusLabel.TraLai`
|
||||
- [fe-user/src/types/purchaseEvaluation.ts](fe-user/src/types/purchaseEvaluation.ts) mirror
|
||||
- [fe-admin/src/components/pe/PeWorkflowPanel.tsx](fe-admin/src/components/pe/PeWorkflowPanel.tsx): F1 dialog tooltip + confirm message status reference
|
||||
- [fe-user/src/components/pe/PeWorkflowPanel.tsx](fe-user/src/components/pe/PeWorkflowPanel.tsx) mirror
|
||||
|
||||
Diff +4/-4 LOC × 4 file = 8 LOC tổng. Mirror 2 app §3.9 strict.
|
||||
|
||||
**Scope decisions Implementer:**
|
||||
- ✅ Rename 2 const map label (badge primary)
|
||||
- ✅ Tactical extension: rename 2 inline literal "Trả lại" trong PeWorkflowPanel.tsx F1 dialog (tooltip + confirm message — status display reference, KHÔNG phải action verb). Anti-fiddle <20% LOC threshold respected.
|
||||
- ✅ KHÔNG đụng `← Trả lại` action button, `Trả về Người soạn thảo` mode picker, comments narrative
|
||||
- ✅ KHÔNG đụng `types/contracts.ts` + `types/budget.ts` Phase 98 (Contract + Budget module ngoài scope M3)
|
||||
|
||||
**Verify:** fe-admin npm build PASS clean (0 TS err, 9.40s) + fe-user PASS clean (0 TS err, 6.92s).
|
||||
|
||||
### Chunk M2 — Tests F1 edge case (`4dd6f9c`)
|
||||
|
||||
🟨 Implementer Case 3 (test generation cookie-cutter, ~14K tokens spawn).
|
||||
|
||||
File: [tests/SolutionErp.Infrastructure.Tests/Services/PurchaseEvaluationWorkflowServiceReturnModeTests.cs](tests/SolutionErp.Infrastructure.Tests/Services/PurchaseEvaluationWorkflowServiceReturnModeTests.cs)
|
||||
|
||||
2 test mới (Pattern 11 SeedWorkflowAsync helper extend 2 param optional `allowReturnOneLevelL1` + `allowReturnOneStepL2`):
|
||||
- `ApplyReturnMode_OneLevel_AtStep1Level1_ResetsToBuoc1Cap1_KeepsChoDuyet`
|
||||
- `ApplyReturnMode_OneStep_AtStep1_ResetsToBuoc1Cap1_KeepsChoDuyet`
|
||||
|
||||
Assertions:
|
||||
- Phase.Should().Be(ChoDuyet) — KHÔNG TraLai
|
||||
- CurrentWorkflowStepIndex.Should().Be(0)
|
||||
- CurrentApprovalLevelOrder.Should().Be(1)
|
||||
- SlaDeadline.Should().NotBeNull (reset 7d)
|
||||
- ContextNote contain "không lùi được" (KHÔNG `Summary` — fix spec bug em main bị Implementer correct: `LogTransitionAsync` set Summary = "Chuyển phase {from} → {to}" cố định; summary từ `ApplyReturnModeAsync` chèn vào `comment` param → ghi vào `ContextNote`)
|
||||
|
||||
**Verify:** `dotnet test SolutionErp.slnx` **106/106 PASS** (58 Domain + 48 Infra: +2 từ 46 baseline). K7 Approver F2 NO regression (3 `ApproveV2_SkipToFinal_*` tests still green — M1 chỉ đụng F1 path).
|
||||
|
||||
Diff +94/-2 LOC test file + 22 LOC MEMORY append.
|
||||
|
||||
### Pending Chunk M4 + Reviewer verdict + push
|
||||
|
||||
- 🟥 Reviewer pre-commit running background (a7cce1b29) — verify M1+M2+M3 cumulative
|
||||
- 👤 Chủ trì M4 docs (STATUS + HANDOFF + session log file này + memory update) — IN PROGRESS
|
||||
- Push remote sau Reviewer PASS + bro confirm
|
||||
- 🟩 CICD Monitor post-deploy verify
|
||||
|
||||
## 📊 Stats Plan M chốt
|
||||
|
||||
| Metric | Trước (S23 t2) | Sau (S23 t3) | Δ |
|
||||
|---|---|---|---|
|
||||
| DB tables | 59 | 59 | 0 |
|
||||
| Migrations | 31 | 31 | 0 |
|
||||
| Endpoints | ~145 | ~145 | 0 |
|
||||
| FE pages | 34 | 34 | 0 |
|
||||
| **Unit tests** | 104 | **106** | **+2** (F1 OneLevel/OneStep edge case) |
|
||||
| Gotchas | 47 | 47 | 0 |
|
||||
| **Memory entries** | 20 | **21** | +1 reinforcement S23 t3 (per_nv_permission_scope + uat_skip_verify update) |
|
||||
| Skills | 6 | 6 | 0 |
|
||||
| Sub-agents | 4 (1 spawn Plan L) | 4 (3 spawn Plan M: 1 Inv + 2 Imp + 1 Rev pending) | active |
|
||||
| **Commits Plan M** | — | **3** (M1 + M3 + M2 local) | pending push |
|
||||
|
||||
## 🎯 Multi-agent ROI evidence Plan M
|
||||
|
||||
| Spawn | Agent | Cost (tokens) | Output | Catch |
|
||||
|---|---|---|---|---|
|
||||
| Pre-flight | 🟦 Investigator | ~20K | 7-feature audit matrix file:line + verdict "code main path đúng, chỉ edge case sai" | **Avoid em main spam refactor sai** — verify 6/7 feature đã đúng spec, chỉ scope hẹp Bước 1 fallback cần fix |
|
||||
| M1 | 👤 Chủ trì | ~self | 1 commit BE Service 13+/13- LOC | — |
|
||||
| M3 | 🟨 Implementer Case 2 | ~6K | 1 commit FE label rename × 4 file mirror | Tactical extension catch inline literal F1 dialog tooltip + confirm message |
|
||||
| M2 | 🟨 Implementer Case 3 | ~14K | 1 commit tests 2 new + 106/106 PASS | Spec field bug catch (`ContextNote` vs `Summary`) + helper extend backward-compat |
|
||||
| Reviewer | 🟥 Reviewer | ~22K (pending) | PASS verdict + Smart Friend guard | TBD post-spawn |
|
||||
| Post-deploy | 🟩 CICD Monitor | ~150K (pending) | Bundle hash + smoke F1 endpoint | TBD post-push |
|
||||
|
||||
**Total Plan M spawn cost (excl Reviewer + CICD):** ~40K tokens — well under 200K budget per session.
|
||||
|
||||
**Multi-agent value caught:**
|
||||
1. **Investigator avoid em main spam refactor** — bro statement "logic cũ là về draft" easy lead em main refactor toàn bộ 4 mode F1 + F2 + F3 + F4. Investigator catch fact code main path đã đúng → scope giảm 80% (LOW effort vs HIGH).
|
||||
2. **Implementer Case 3 catch spec bug `ContextNote` vs `Summary`** — em main spec viết `Summary.Should().Contain(...)` sai field. Implementer correct → test pass real, không pass-by-mistake.
|
||||
3. **Implementer Case 2 tactical extension** — rename inline literal trong F1 dialog tooltip + confirm message (cùng status reference disconnect). Anti-fiddle threshold respected, KHÔNG scope drift.
|
||||
|
||||
## ⚠️ Pending S23 t4+
|
||||
|
||||
- 🟥 **M-Review verdict** — chờ Reviewer pre-commit Plan M cumulative
|
||||
- 🟩 **CICD Monitor K-Plan-M** — chờ push remote → spawn post-deploy verify
|
||||
- 🟡 **Plan B Contract V2 wire (Mig 32+33)** — vẫn pending S23+ (HIGH priority next)
|
||||
- ⛔ **Plan F drop V1** — defer sau Plan B + UAT 2-3 tuần
|
||||
- 🟢 **Plan H PE PDF Export** — LOW priority carry
|
||||
- 🟡 **Plan I RAG Hybrid setup 5 dự án** — defer chờ bro confirm
|
||||
- 🔧 **Gotcha #47 paths-ignore agent-memory** — PENDING bro confirm
|
||||
|
||||
## 📋 Pattern reinforced
|
||||
|
||||
- **Investigator pre-flight audit avoid em main spam refactor** — khi bro statement có vẻ "code sai" mà Investigator audit verify code đã đúng → scope giảm drastically (LOW vs HIGH effort). Pattern reusable: BẮT BUỘC spawn Investigator pre-flight cho mọi bug fix scope > 50 LOC, KHÔNG em main solo audit (bias).
|
||||
- **Edge case "không thực hiện được" KHÔNG fallback role khác** — pattern user-level reinforced trong `feedback_per_nv_permission_scope.md` S23 t3 entry. Action per-NV flag được trigger nhưng state machine không cho phép → giữ Phase hiện tại + reset pointer hợp lệ + audit log warning.
|
||||
- **Service refactor semantic BẮT BUỘC test cùng commit** — Plan L L1→L4 lesson (CI #196/#197 FAIL cascade). Memory `feedback_uat_skip_verify.md` updated với rule mới.
|
||||
- **Implementer Case 2+3 cookie-cutter 2 spawns parallel** — M2 (test) + M3 (FE) chạy background đồng thời ~6K + ~14K tokens. Em main solo M1 (cross-stack reasoning). Total Plan M token ~40K under 200K budget.
|
||||
|
||||
## References
|
||||
|
||||
- Memory user-level updated: `feedback_per_nv_permission_scope.md` (S23 t3 reinforcement) + `feedback_uat_skip_verify.md` (Plan L lesson Service refactor semantic)
|
||||
- Files: [Service.cs:287-333](src/Backend/SolutionErp.Infrastructure/Services/PurchaseEvaluationWorkflowService.cs:287) (M1) + [types/purchaseEvaluation.ts × 2 app](fe-admin/src/types/purchaseEvaluation.ts) + [PeWorkflowPanel.tsx × 2 app](fe-admin/src/components/pe/PeWorkflowPanel.tsx) (M3) + [PurchaseEvaluationWorkflowServiceReturnModeTests.cs](tests/SolutionErp.Infrastructure.Tests/Services/PurchaseEvaluationWorkflowServiceReturnModeTests.cs) (M2)
|
||||
- 4 agent MEMORY.md flushed (Investigator pending + Implementer 2 entry + Reviewer pending) at `.claude/agent-memory/{investigator,implementer,reviewer,cicd-monitor}/MEMORY.md`
|
||||
- Rules: §3.9 mirror 2 FE, §7 test timing, `feedback_uat_skip_verify` (updated rule Service semantic refactor), `feedback_per_nv_permission_scope` (S23 t3 reinforcement)
|
||||
Reference in New Issue
Block a user