[CLAUDE] Scripts Docs: Chunk R — Cleanup destructive prod database (52 rows + ~600 cascade child)
All checks were successful
Deploy SOLUTION_ERP / build-deploy (push) Successful in 3m27s
All checks were successful
Deploy SOLUTION_ERP / build-deploy (push) Successful in 3m27s
Bro UAT confirm Plan P+Q wire OK + chỉ thị cleanup test data: > "OK Tao thấy tạm ổn rồi đấy, mày xóa hết các phiếu test cũ đi nhé, > các quy trình cũ ko ghim cũng xóa hết đi. Cho gọn đẹp." Investigator pre-flight audit prod DB ~64K spawn confirm scope: - 35 PE rows total (28 active + 7 soft-deleted) - 17 ApprovalWorkflowsV2 (15 IsUserSelectable=false + 2 ghim+active) - 4 PurchaseEvaluationWorkflowDefinitions V1 (2 IsActive=false + 2 active) Critical gotchas: 1. PE.ApprovalWorkflowId FK Restrict → soft-delete KHÔNG release FK, hard-DELETE PE first 2. ApprovalWorkflow extend BaseEntity (NO soft-delete) → hard DELETE only 3. Filtered indexes Mig 29+ require SET QUOTED_IDENTIFIER ON 4. SQL Express constraints: NO BACKUP COMPRESSION + RESTORE VERIFYONLY require sysadmin (vrapp KHÔNG có) Execute via scripts/plan-r-*.sql upload scp + sqlcmd -i workflow: Step 1+2 — BACKUP DATABASE: - C:\Backup\SolutionErp_pre_cleanup_2026-05-15.bak (18.5MB, 2249 pages) - Verified via Get-Item file size Step 3-5 — 3 separate transactions DELETE: - 28 PE active + 7 soft-deleted → cascade 446 child rows (42 Details + 49 Suppliers + 64 Approvals + 238 Changelogs + 10 Attachments + 43 LevelOpinions) - 15 V2 workflows unghim → cascade ~140 Steps+Levels - 2 V1 workflows inactive → cascade ~37 Steps+Approvers Total: 52 rows direct + ~600 cascade child = ~650+ rows wiped. Step 6 — Verify post-cleanup state: - PE total: 35 → 0 ✓ - V2 workflows: 17 → 2 (QT-DN-V2-001 v16 + QT-DN-PA-V2-001 v2 ghim+active) - V1 workflows: 4 → 2 (QT-DN-A v3 + QT-DN-B v1 active, PE pin protected) Step 7 — BE smoke verify alive post-cleanup: - /api/auth/login → 200 - /api/purchase-evaluations → 200 - /api/approval-workflows-v2 → 200 - /api/pe-workflows → 200 → KHÔNG crash startup (Plan F precedent avoid được) Multi-agent ROI: Investigator save em main hard-delete blind without backup + catch SQL Express constraint + catch FK Restrict gotcha. Pattern reinforced: - Destructive operation prod BẮT BUỘC pre-flight audit + backup + verify - scp + sqlcmd -i workflow cho complex SQL trên prod (avoid shell escape hell qua SSH PowerShell) - Plan F precedent: KHÔNG drop active workflow (PE pin → BE crash) Stats final S23 t8: - 31 mig · 59 tables · ~145 endpoints · 34 FE pages · 111 test unchanged - 47 gotcha · 20 memory · 6 skills · 4 sub-agents - **0 PE phiếu test + 4 workflow ghim/active** — UAT clean slate - Backup rollback ready: vietreport-vps:C:\Backup\SolutionErp_pre_cleanup_2026-05-15.bak Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
@ -0,0 +1,167 @@
|
||||
# Session 23 turn 8 — 2026-05-15 — Plan R Cleanup destructive prod database
|
||||
|
||||
**Dev:** Claude Opus 4.7 1M (em main solo execute, 1 Investigator pre-flight spawn)
|
||||
**Duration:** ~30 phút
|
||||
**Base commit:** `108268a` (Plan Q FE banner fix)
|
||||
**Final HEAD:** `<pending>` (Plan R scripts + docs)
|
||||
|
||||
## 🎯 Trigger session
|
||||
|
||||
Bro UAT confirm Plan P+Q deploy wire OK (Run #203+#204 PASS) + chỉ thị cleanup:
|
||||
|
||||
> "OK Tao thấy tạm ổn rồi đấy, mày xóa hết các phiếu test cũ đi nhé, các quy trình cũ ko ghim cũng xóa hết đi. Cho gọn đẹp."
|
||||
|
||||
→ 2 cleanup destructive trên prod database SolutionErp:
|
||||
- **Scope A:** Phiếu test cũ (PurchaseEvaluation rows tất cả)
|
||||
- **Scope B:** Quy trình cũ không ghim (ApprovalWorkflowsV2 với IsUserSelectable=false + PurchaseEvaluationWorkflowDefinitions V1 với IsActive=false)
|
||||
|
||||
## 🔍 Investigator pre-flight audit (~64K spawn)
|
||||
|
||||
🟦 Investigator sqlcmd prod audit confirm scope cụ thể:
|
||||
|
||||
**Scope A — 35 PE rows total:**
|
||||
- 28 active (Phase 3:1 / Phase 6:1 / Phase 7:4 / Phase 10 DaDuyet:20 / Phase 98 TraLai:1 / Phase 99 TuChoi:1)
|
||||
- 7 soft-deleted (IsDeleted=1 carry from prior sessions)
|
||||
- Pin scheme: 25 BOTH V1+V2 / 3 V1-only / 0 None
|
||||
- Cascade khi DELETE PE: 42 Details + 49 Suppliers + 64 Approvals + 238 Changelogs + 10 Attachments + 43 LevelOpinions = **446 child rows**
|
||||
|
||||
**Scope B — 17 V2 + 4 V1 workflows:**
|
||||
|
||||
| Type | Total | Keep | Delete |
|
||||
|---|---|---|---|
|
||||
| ApprovalWorkflowsV2 | 17 | 2 (`QT-DN-V2-001 v16` + `QT-DN-PA-V2-001 v2` ghim+active) | 15 (IsUserSelectable=false v2..v15 + PA v1) |
|
||||
| PurchaseEvaluationWorkflowDefinitions (V1) | 4 | 2 (`QT-DN-A v3` + `QT-DN-B v1` active + PE pinned) | 2 (`QT-DN-A v1` + `v2` inactive) |
|
||||
|
||||
**Critical gotcha findings:**
|
||||
- PE.ApprovalWorkflowId FK **Restrict** ([PurchaseEvaluationConfiguration.cs:40](src/Backend/SolutionErp.Infrastructure/Persistence/Configurations/PurchaseEvaluationConfiguration.cs:40)) → soft-delete PE KHÔNG release FK → phải HARD DELETE
|
||||
- ApprovalWorkflow extend `BaseEntity` (KHÔNG `AuditableEntity`) → hard DELETE only, no IsDeleted flag
|
||||
- Filtered indexes (Mig 29+) require `SET QUOTED_IDENTIFIER ON` cho DELETE statement
|
||||
- LevelOpinion FK Restrict to ApprovalWorkflowLevel → KHÔNG cascade khi DELETE workflow → phải DELETE PE first
|
||||
|
||||
**Backup constraint discoveries:**
|
||||
- SQL Express KHÔNG support `BACKUP DATABASE WITH COMPRESSION`
|
||||
- `RESTORE VERIFYONLY` require sysadmin permission (vrapp KHÔNG có) → verify qua file size + Get-Item
|
||||
|
||||
## 🌳 Plan R 7-step execution
|
||||
|
||||
### Step 1+2 — BACKUP DATABASE + verify file existence
|
||||
|
||||
File: `scripts/plan-r-backup.sql` upload qua scp → sqlcmd -i
|
||||
|
||||
```sql
|
||||
BACKUP DATABASE SolutionErp
|
||||
TO DISK = 'C:\Backup\SolutionErp_pre_cleanup_2026-05-15.bak'
|
||||
WITH INIT, STATS = 20,
|
||||
NAME = 'SolutionErp Plan R pre-cleanup 2026-05-15',
|
||||
DESCRIPTION = 'Backup before destructive cleanup: 28 PE + 15 V2 unghim + 2 V1 inactive workflows';
|
||||
```
|
||||
|
||||
Output: `Processed 2249 pages in 0.099 seconds (177.413 MB/sec)`. File size: **18,506,240 bytes (~18.5MB)** verified via `Get-Item`.
|
||||
|
||||
### Step 3-5 — DELETE 3 transaction commits
|
||||
|
||||
File: `scripts/plan-r-cleanup.sql` 3 separate BEGIN/COMMIT TRANSACTION blocks + TRY/CATCH rollback per step.
|
||||
|
||||
```sql
|
||||
SET QUOTED_IDENTIFIER ON; -- filtered indexes require
|
||||
SET ANSI_NULLS ON;
|
||||
|
||||
-- Step 3: DELETE 28 active + 7 soft-deleted PE (cascade 446 child rows)
|
||||
DELETE FROM PurchaseEvaluations WHERE IsDeleted = 0; -- 28 rows
|
||||
DELETE FROM PurchaseEvaluations WHERE IsDeleted = 1; -- 7 rows
|
||||
|
||||
-- Step 4: DELETE 15 V2 workflows unghim (cascade ~140 Steps+Levels)
|
||||
DELETE FROM ApprovalWorkflows WHERE IsUserSelectable = 0;
|
||||
|
||||
-- Step 5: DELETE 2 V1 workflows inactive (cascade ~37 Steps+Approvers)
|
||||
DELETE FROM PurchaseEvaluationWorkflowDefinitions WHERE IsActive = 0;
|
||||
```
|
||||
|
||||
Execute output:
|
||||
```
|
||||
PE active rows deleted: 28
|
||||
PE soft-deleted rows deleted: 7
|
||||
V2 workflows deleted: 15
|
||||
V1 workflows deleted: 2
|
||||
```
|
||||
|
||||
**Total: 52 rows direct + ~600 cascade child = ~650+ rows wiped clean.**
|
||||
|
||||
### Step 6 — Post-cleanup verify
|
||||
|
||||
```
|
||||
PE total (expect 0) 0 ✅
|
||||
V2 workflow total (expect 2 ghim) 2 ✅
|
||||
V2 ghim remaining 2 ✅
|
||||
V1 workflow total (expect 2 active) 2 ✅
|
||||
V1 active remaining 2 ✅
|
||||
```
|
||||
|
||||
Remaining V2 workflows:
|
||||
- `QT-DN-PA-V2-001 v2` (ApplicableType=2) — ghim + active
|
||||
- `QT-DN-V2-001 v16` (ApplicableType=1) — ghim + active
|
||||
|
||||
Remaining V1 workflows:
|
||||
- `QT-DN-A v3` (EvaluationType=1) — active
|
||||
- `QT-DN-B v1` (EvaluationType=2) — active
|
||||
|
||||
### Step 7 — BE smoke verify alive post-cleanup
|
||||
|
||||
Plan F precedent (S22): drop V1 workflow → BE crash startup vì PE pin V1 không có V2 fallback. Plan R KHÔNG đụng V1 active (`QT-DN-A v3` + `QT-DN-B v1`) → BE expect healthy.
|
||||
|
||||
```bash
|
||||
curl -X POST /api/auth/login → HTTP 200 (admin token len 468)
|
||||
curl /api/purchase-evaluations → HTTP 200
|
||||
curl /api/approval-workflows-v2?applicableType=1 → HTTP 200
|
||||
curl /api/pe-workflows → HTTP 200
|
||||
```
|
||||
|
||||
→ 3/3 endpoints 200, BE healthy post-cleanup. KHÔNG crash.
|
||||
|
||||
## 📊 Stats Plan R chốt
|
||||
|
||||
| Metric | Trước (S23 t7) | Sau (S23 t8) | Δ |
|
||||
|---|---|---|---|
|
||||
| **PE rows** | 35 (28 active + 7 soft) | **0** | -35 |
|
||||
| **ApprovalWorkflows V2** | 17 | **2** | -15 |
|
||||
| **PE Workflow Definitions V1** | 4 | **2** | -2 |
|
||||
| **Total entity rows deleted** | — | **52 + ~600 cascade** | -650+ |
|
||||
| Migrations | 31 | 31 | 0 |
|
||||
| Endpoints | ~145 | ~145 | 0 |
|
||||
| FE pages | 34 | 34 | 0 |
|
||||
| Unit tests | 111 | 111 | 0 |
|
||||
| Backup file | — | `SolutionErp_pre_cleanup_2026-05-15.bak` 18.5MB | rollback ready |
|
||||
|
||||
## 🎯 Multi-agent ROI evidence Plan R
|
||||
|
||||
| Spawn | Agent | Cost | Output | Catch |
|
||||
|---|---|---|---|---|
|
||||
| Pre-flight audit | 🟦 Investigator | ~64K | 4 SQL queries enum 35 PE + 17 V2 + 4 V1 + FK Restrict gotcha + soft-delete vs hard-delete decision tree + 3 Option compare | **Saved em main hard-delete without backup risk** + catch SQL Express constraint (no COMPRESSION) + catch QUOTED_IDENTIFIER filter index requirement |
|
||||
| Execute | 👤 Chủ trì | ~self | 2 SQL script files upload qua scp + sqlcmd -i + post-cleanup smoke verify | Iterated 2× SQL constraint fix (COMPRESSION + QUOTED_IDENTIFIER) |
|
||||
|
||||
**Total Plan R cost:** ~64K Investigator + em main solo execute. Multi-agent value: avoid em main hard-delete blind without backup → bro production data loss risk.
|
||||
|
||||
## 📋 Pattern reinforced cross-project
|
||||
|
||||
1. **Destructive operation prod BẮT BUỘC pre-flight audit + backup mandatory** — KHÔNG em main solo blind execute. Investigator catch SQL constraint + FK gotcha + Option compare.
|
||||
2. **SQL Express limitations** — KHÔNG support BACKUP COMPRESSION + RESTORE VERIFYONLY require sysadmin. Workaround: verify backup file size via Get-Item.
|
||||
3. **SET QUOTED_IDENTIFIER ON + ANSI_NULLS ON** required cho DELETE statement nếu schema có filtered indexes (Mig 29+).
|
||||
4. **FK Restrict gotcha** — soft-delete KHÔNG release FK reference. Hard DELETE only nếu cần unblock cascade.
|
||||
5. **Plan F precedent learn** — KHÔNG drop V1 active workflow (PE pin → BE crash). Plan R giữ V1 active `QT-DN-A v3` + `QT-DN-B v1` → BE healthy.
|
||||
6. **scp + sqlcmd -i workflow** cho complex SQL trên prod — clean local file upload + execute remote, avoid shell escaping hell qua SSH PowerShell.
|
||||
|
||||
## ⏭ Pending S23 t9+
|
||||
|
||||
- 🟢 **Bro UAT test workflow mới fresh** — admin Designer tạo workflow mới (nếu cần) + Drafter NV Test tạo phiếu mới test cumulative Plan K → P + Q fix
|
||||
- 🟡 **Plan B Contract V2 wire (Mig 32+33)** — HIGH priority next, PE V2 pattern proven 4 plan
|
||||
- 🔍 Discovery #4 ASP.NET enum body deserialization — LOW priority polish (register JsonStringEnumConverter)
|
||||
- 🔍 Discovery #3 anomaly CI trigger docs-only — 3× reinforced, recommend Investigator follow-up
|
||||
- 🔧 Gotcha #47 paths-ignore agent-memory — pending
|
||||
|
||||
## References
|
||||
|
||||
- Scripts:
|
||||
- [scripts/plan-r-backup.sql](scripts/plan-r-backup.sql) — BACKUP DATABASE
|
||||
- [scripts/plan-r-cleanup.sql](scripts/plan-r-cleanup.sql) — DELETE 3 transactions
|
||||
- Backup file: `vietreport-vps:C:\Backup\SolutionErp_pre_cleanup_2026-05-15.bak` (18.5MB)
|
||||
- Rules: §destructive operation discipline (pre-flight + backup + verify), `feedback_drastic_refactor_scope`
|
||||
Reference in New Issue
Block a user