[CLAUDE] Infra: gate SeedDemoMasterData sau DemoSeed:Disabled (chống resurrect NCC demo go-live)
All checks were successful
Deploy SOLUTION_ERP / build-deploy (push) Successful in 5m10s

Sau wipe 18 NCC demo (scripts/s91-wipe-golive.sql, go-live anh Kiệt FDC 26/06), phát hiện
SeedDemoMasterDataAsync chạy UNGATED + per-code idempotent (skip-if-code-exists else Add) ->
mỗi restart / IIS recycle TỰ ADD lại 18 NCC demo (NCC-VLXD / CDT-VIN / Sun Group ...) ->
undo danh sách NCC sạch anh Kiệt vừa chốt.

Fix: gate SeedDemoMasterDataAsync (Supplier + Project DEMO) sau cờ DemoSeed:Disabled, mirror
cách Contracts/PE/Workflow demo đã gated. Prod hiệu lực Disabled=true (appsettings.json deployed;
appsettings.Production.json render từ .example KHÔNG có DemoSeed -> fallback appsettings.json=true,
đúng fallback đã giữ contracts/PE gated nhiều tháng). -> SKIP -> wipe BỀN qua restart. Dev
Disabled=false -> vẫn seed demo local. Master data THẬT (SeedRealMasterDataAsync: 62 dự án + 71
hạng mục + 3 NCC) ungated -> KHÔNG ảnh hưởng.

User test (38) đã an toàn từ S89 (gỡ khỏi mảng SeedDemoUsers). Build slnx OK 0 warn / 0 err.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
pqhuy1987
2026-06-26 10:53:25 +07:00
parent ba42c59430
commit 55494ad477

View File

@ -71,11 +71,11 @@ public static class DbInitializer
// - SeedDemoPurchaseEvaluationsAsync ([DEMO] PE 4 sample)
// - SeedSampleApprovalWorkflowsV2Async (V2 sample mẫu UAT cho type B)
// - SeedSampleContractWorkflowV2Async (V2 sample mẫu UAT cho Contract — Mig 32 Plan B Chunk A2)
// GIỮ: SeedRoles, SeedAdmin, SeedDepartments, SeedDemoUsers (30 user UAT),
// SeedMenuTree, SeedAdminPermissions, SeedDemoMasterData (Supplier/Project
// master), SeedContractTemplates (file template), SeedCatalogs, backfill
// helpers. Production UAT clean slate: bro toàn quyền setup workflow mới
// qua Designer.
// GIỮ (ungated): SeedRoles, SeedAdmin, SeedDepartments, SeedDemoUsers (chỉ user THẬT
// — S89 đã gỡ user test khỏi mảng), SeedMenuTree, SeedAdminPermissions,
// SeedContractTemplates (file template), SeedCatalogs, SeedRealMasterData (62 dự án +
// 71 hạng mục + 3 NCC thật). [S91 2026-06-26] SeedDemoMasterData (Supplier/Project
// DEMO) ĐÃ chuyển sang GATED — prod skip để không resurrect 18 NCC demo đã wipe go-live.
var config = sp.GetRequiredService<IConfiguration>();
var demoSeedDisabled = config.GetValue<bool>("DemoSeed:Disabled");
if (demoSeedDisabled)
@ -108,7 +108,14 @@ public static class DbInitializer
await SeedMeetingRoomsAsync(db, logger);
await SeedMenuTreeAsync(db, logger);
await SeedAdminPermissionsAsync(db, roleManager, logger);
await SeedDemoMasterDataAsync(db, logger);
// [S91 2026-06-26 — anh Kiệt FDC go-live] GATE demo master (Supplier/Project demo)
// sau cờ DemoSeed:Disabled. Trước đây ungated → SeedDemoMasterDataAsync per-code
// idempotent RESURRECT 18 NCC demo (NCC-VLXD/CDT-VIN/Sun Group…) mỗi restart sau khi
// đã wipe (scripts/s91-wipe-golive.sql). Prod Disabled=true → SKIP → giữ wipe BỀN;
// Dev Disabled=false → vẫn seed demo local. Master data THẬT (62 dự án + 71 hạng mục
// + 3 NCC) đến từ SeedRealMasterDataAsync (ungated, dưới) — KHÔNG ảnh hưởng.
if (!demoSeedDisabled)
await SeedDemoMasterDataAsync(db, logger);
await SeedContractTemplatesAsync(db, logger);
if (!demoSeedDisabled)
{