Files
solution-erp/docs/STATUS.md
pqhuy1987 5f61b038e4
All checks were successful
Deploy SOLUTION_ERP / build-deploy (push) Successful in 5m24s
[CLAUDE] Docs: S94 nâng cap lead 220K→380K (anh-directed) + re-tier STATUS/HANDOFF mega-line
- Cap lead_tokens 220K→380K (memory-budget.json canonical; SE-override, lead KHÔNG còn AI_INFRA-parity, subs giữ 60K/50K). Mark H-15 v4-delta RC-pqhuy1987-29-06-2026-23-25-50. Flush 3 derived echo (ACTIVE-MARKS · session-start §2.1.6 · engine §G adopt-delta).
- Re-tier mega-line (fix Read-25K/call OOM + token-cost): STATUS 389→89 dòng (mega-line 59.6K→7.1K char) · HANDOFF 732→12 dòng. Live 332KB→34KB (−90%). Session ≤S90 → docs/_archive/STATUS-HANDOFF-tier-S94 (0 byte-loss: new+archive = orig + 995B pointer).
- Verify: detector 27=baseline (0 broken-pointer mới) · canonical mig59/test434/gotcha76/table88 intact · MFE live-read 380K · conservation spot-check PASS.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-29 23:46:04 +07:00

27 KiB
Raw Blame History

STATUS — Snapshot hiện tại

Update rule: trước khi bắt đầu 1 task → ghi row 🔥 In Progress. Xong → ✅ Recently Done. Tiering rule (S40): chỉ giữ state hiện tại + 3 session gần nhất ở file này. Session cũ hơn → docs/changelog/sessions/. Full history pre-S40 → docs/_archive/STATUS-preS40-fullhistory.md. (Tránh over-context — xóa double, không cắt nội dung.)

Last updated: 2026-06-29 (S93 — (1) PE cây Duyệt NCC node Dự án hiện MÃ dự án thay tên dài (anh Kiệt FDC) prod-verified Run #473 8ee8f3e: BE thread ProjectCode (DTO + 3 projection List/Inbox/ListApproved + search) + FE 2-app SHA-mirror (render projectCode||projectName+tooltip+sort) NO-MIG; grep bắt construction-site#3 thoát replace_all (cardinality-grep-all-consumer); build 3× + test 434; bundle admin xz8FdmLNCDn40vpV/user CA8Rla2wCoPmPBg7. (2) adopt Harness-16 MFE (memory-fidelity-EVAL) 2-workflow PASS, 0 production code 9580098: WF1 wf_4c63e1bd (ground-truth + bắt BLOCKING vocab-fork: memory-fidelity = H6.7 memoryDelta-routing ≠ H16 coverage-eval → đặt MFE + alias-map §H KHÔNG seed $aliasSets) + WF2 wf_13e3d35a 3-lane PASS (code-gate denom-29-re-derived to-the-digit + READ-ONLY-budget proof 1-write-op + honesty 5-floor + leading-verb-trap adversarial-probed-DEFEATED); scripts/mfe-eval.ps1 deterministic NO-API ASCII#30 (LEAD coverage-FIT 29-item/220K=1.5% + age-band-flag-not-cut + Goodhart strikes-21/RCA-9 · SUB per-role ĐO-THẬT impl-backend 94%/impl-frontend 85%/reviewer 88% · prose-role→N/A KHÔNG 0%) + judge-SCAFFOLD-only (honest: số chưa-nghĩa tới khi age-mature+independent-judge) + budget:mfe config + eval/mfe/ seed-12-stable-id + engine §H + artifact-row + C3-comment + wire session-start §2.1.6/session-end §L.b(c) opt-in + agents/README S93 + adap-report ×2 + email AI_INFRA hash da768330. AS-10 2nd-fire dogfood: WF1 3-agent (return-only) residual agent-memory caught+reverted (E-006 recurrence, guard HELD); WF2 explicit-return-only-prompt → 0 residual (instruction-fix). #53 recover-from-disk (WF1 sub return-rỗng nhưng ghi diary trước). user-MEMORY compact 23.7→7.8KB (hook). Lessons: cardinality-change-grep-all-consumer · vocab-collision-check-on-adopt (2-workflow review bắt, 1-workflow trượt) · AS-10-instruction-fix (prompt override frontmatter + git-diff net) · MFE đóng-vòng detector-D1-OOM-đầu-phiên. State THẬT: Mig 59 · 88 bảng · 434 test (45D+389I) · gotcha 76 · menu 54 · bundle admin CDn40vpV/user CoPmPBg7 · prod 17 user/7 NCC. 🔴 NEXT anh: restart CLI (MFE opt-in + wire session-start/end + agents/README no hot-reload) · UAT eoffice node Dự án hiện mã. NEXT em: monthly 2026-07-01 (2 ngày) GẤP re-tier STATUS/HANDOFF mega-line (detector D1 OOM do bloat = tooling vỡ, STATUS line 61K-char/HANDOFF 46K-char KHÔNG Read/Edit) + ef-core SKILL Mig→59 + docs/CLAUDE Budget-removed + 3 vocab-fork alias-map + curate test-specialist/FD L1 WATCH. Pending product: Section B cột Dự-án wire · Ngưỡng giá CEO Mig 54 Designer UAT · "C" chuyển phiếu→dự án chờ spec. → log 2026-06-29-S93-pe-projectcode-harness16-mfe.md) · Prev S92 (S92 — Ẩn 5 nhóm menu (Hợp đồng + Danh mục + Nhân sự + Văn phòng số + Cá nhân) CHỈ Admin thấy trên eoffice — em-main-led verify+review+deploy, 1 commit prod-verified 1408d4e, BE-only no-migration, HMW-mode ON: anh /session-start thấy WIP S92 uncommitted (dated hôm nay) → AskUserQuestion chốt "verify + hoàn thiện + deploy". RevokeTemporarilyHiddenModulesAsync mở rộng predicate +Contracts/Ct_* +Master/Suppliers/Projects/Departments/Catalog* (cộng dồn S58 Hrm*/Off*/Personal) + TẮT 2 re-grant public (S65 HRM + S69 Office) → revoke = bước permission CUỐI trong SeedAdminPermissionsAsync (ungated, durable mỗi restart, gotcha #75) + thu hẹp InReviewScope→chỉ Pe_. PE giữ nguyên cho user (Pe_ không match predicate; master-data GET any-auth → form PE vẫn chọn Dự án/NCC/Hạng mục dù menu Danh mục ẩn). +AdminOnlyModulesRevokeTests 3 (non-Admin revoked 4 cờ / Admin untouched / PE preserved). Verify chain: test 431→434 (45D+389I, full-suite 0 fail) · seed-chain-order verified (revoke last + prod-durable) · predicate coverage verified (5 nhóm đủ; Forms/Reports/PurchaseEvaluations sibling top-level giữ-hiện đúng; no over-match) · reviewer PASS (5 attack vector A-E independ re-derive, 15/15 trên 3 class, 0 blocking). FYI intended-by-spec, 0 live impact: role CatalogManager (hiện 0 user — S89 xóa hết test user) cũng bị thu Danh mục; re-enable cần carve-out predicate. State THẬT: Mig 59 · 88 bảng · 434 test (45D+389I) · gotcha 76 · menu 54 · bundle admin xz8FdmLN/user CA8Rla2w (JS rotate #69, CSS frozen) · prod 17 user/7 NCC. cicd Run #358 PASS prod-verified (sqlcmd: non-Admin 0 leak / Admin 5 giữ / Pe_* 120 untouched; ship-proof = dll-mtime + w3wp-recycle 08:04Z). 🔴 NEXT anh: UAT eoffice login user non-admin → xác nhận KHÔNG còn thấy Hợp đồng/Danh mục/Nhân sự/VP số/Cá nhân (chỉ Duyệt NCC + Dashboard) · ⚠️ restart CLI (carry budget v3 + /user-mark-* + cadence). NEXT em: monthly audit 2026-07-01 (2 ngày) re-tier STATUS/HANDOFF mega-line + flush ef-core/Budget docs + vocab alias-map. → log 2026-06-29-S92-admin-only-modules.md) · Prev S91 (S91 — buổi go-live LỚN em-main-led, 4 commit prod-verified + backup local — go-live chính thức 26/06 anh Kiệt SOL-IT Phase-01 PRO+CCM. #1 159b69d guide Word bỏ "Từ chối" 2 chỗ + fix 12 caption Hinh→Hình [app gỡ Từ chối S60, guide đã phát công ty stale; unpack→XML→repack giữ 13 ảnh, verify python-docx]. #2 ba42c59 wipe go-live scripts/s91-wipe-golive.sql: xóa 16 PE+16 PeWorkItemBudgets+94 notif+19 NCC demo, GIỮ 7 NCC thật+17 user+master, reset PeSeq→A/001 [backup SolutionErp_S91_pregolivewipe.bak + 2 guard PE>16-abort/NCC≠19-rollback + AskUserQuestion scope]. #3 55494ad gate SeedDemoMasterData sau DemoSeed:Disabled — root-cause: seed ungated per-code resurrect 18 NCC demo mỗi restart → prod skip → verify demo_codes=0 qua 2 restart [gotcha #75]. #4 e81e87f user tự đổi mật khẩu: BE ChangePasswordCommand + POST /auth/change-password [Identity verify pass-cũ, fail-PasswordMismatch→field CurrentPassword] + FE 2-app ChangePasswordDialog/TopBar + 10 test; fix CS0104 ValidationException ambiguous [FluentValidation vs custom]. + backup local backups/SolutionErp_golive_clean_2026-06-26.bak 21MB + accounts.txt 17 tk [.gitignore +backups/+*.bak]. State THẬT: Mig 59 · 88 bảng · 431 test [45D+386I, +10 ChangePassword] · gotcha 76 [+#75 seed-resurrect +#76 deploy-config-từ-.example] · menu 54 · bundle admin DgQyuG7f/user BmbQon23 · prod 17 user/7 NCC/70 dự án/71 hạng mục/0 PE-HĐ. Lessons: wipe-không-bền-nếu-không-gate-reseed [#75 root>symptom] · deploy render Production.json từ .example KHÔNG file-gitignored [#76] · em-main-led security-feature báo-trước + test-specialist + build/test gate thay fan-out [#53 cicd garbled-return→em-main self-verify-prod; test-specialist độc-lập bắt CÙNG CS0104] · Chrome-MCP screenshot kẹt SPA-SignalR document_idle [carry #74, guide-ảnh defer — anh "tự check"]. 🔴 NEXT anh: ⚠️ restart CLI · review guide docx Word · đóng 2 tab eoffice em mở. NEXT em: curate test-specialist L1 OVER [carry] · monthly 2026-07-01 [re-tier mega-line + ef-core Mig→59 + Budget-removed docs/CLAUDE]. → log 2026-06-26-S91-golive-wipe-changepw-backup.md) · (session ≤S90 đã tách → docs/_archive/STATUS-HANDOFF-tier-S94-2026-06-29.md + docs/changelog/sessions/; re-tier S94)


🎯 CURRENT STATE (verified S40)

Metric Value Note
Migrations 59 +S87: Mig 58 AddPeMultiWinnerAndLevelFinalize (PurchaseEvaluationSupplier +IsWinner bit multi-winner backfill từ SelectedSupplierId + ApprovalWorkflowLevel +AllowApproverFinalize bit cấp-KẾT-THÚC-quy-trình AUTO; 2 AddColumn + 1 backfill, no new table) + Mig 59 AddCcmBudgetPeriodToPurchaseEvaluation (PE +CcmBudgetPeriodAmount decimal(18,2)? — NS kỳ-này cột CCM cho Section B 3-cột; 1 AddColumn nullable, no backfill, no new table). +S77: Mig 57 AddPeSuggestedPriceNotes (PE +ProSuggestedPriceNote +CcmSuggestedPriceNote nvarchar(1000) — ô ghi chú giá đề xuất PRO/CCM giải-thích Min/Max · additive-nullable, 0 backfill, no new table; absolute-set role-gate mirror Mig 54/55). +S76: Mig 56 AddProBudgetSplitToPeWorkItemBudget (PeWorkItemBudget +ProInitialAmount+ProAdjustmentAmount decimal(18,2)? — cột PRO "Ban hành lần đầu"+"V0/hiệu chỉnh" mirror CCM Initial/Adjustment; AddColumn additive + Sql() data-migrate ProInitial=ProEstimate 4 rows prod gotcha #64; no new table). +S74: Mig 55 AddCcmNoteToPeWorkItemBudget (PeWorkItemBudget +CcmNote nvarchar(1000) — "Ghi chú từ CCM" mirror ProNote · additive-nullable, 0 backfill, no new table). +S73: Mig 54 AddPeSuggestedAndApprovedPrice (PE +5 cột giá đề xuất PRO Min/Max + CCM + giá chốt ApprovedPriceAmount/Source — additive-nullable, 0 backfill, prod-verified Run #313). +S69: Mig 53 AddPeUrgentAndCeoApprovalThreshold (PE +IsUrgentByPro/Ccm cờ gấp + ApprovalWorkflow +CeoApprovalThreshold ngưỡng CCM duyệt-final · 3 AddColumn no new table). Prev S65: Mig 51 AddDepartmentParentId (Department.ParentId loose-Guid no-FK — org-tree) + Mig 52 AddHoSoLinkToPurchaseEvaluation (PE HoSoLink nvarchar(1000) hyperlink NAS) — cả 2 AddColumn-only, no new table (tables giữ 88). Prev Mig 50 ReplaceBudgetModuleWithPeWorkItemBudgets (bảng PeWorkItemBudgets per-gói-thầu + DROP module Budget cũ + backfill BudgetManual→BudgetPeriod TRƯỚC DropColumn + DROP PE/Contracts.BudgetId; gotcha #63/#64). Prev Mig 49 PE WorkItemId (S57bis)
SQL tables 88 re-ground S62 (cicd sys.tables Run #286 — Mig 50 XÓA module Budget (drop nhiều bảng) + CREATE PeWorkItemBudgets → net 93→88)
Master data (prod) 71 WorkItems PMH-only S59 62 Projects + WorkItems = ĐÚNG 71 mã PMH (S59: wipe 15 demo + rename format anh Kiệt MAT-1..16/SUB-1..30/MEP-SUB-1..9/MEP-EQU-1..16, Name "STT nhóm tên") + Suppliers 22 (3 real + demo; POST mở any-auth S59 quick-add). Transactional testing data wiped S59 (PE/HĐ/Notif = 0 baseline, phiếu thật từ A/001). Provenance scripts/master-import-data.generated.md
API endpoints ~253 +1 S54 GET /it-tickets/assignable-staff (capability endpoint); +3 S52 (attendances/report + report/excel + it-tickets/{id}/assign)
FE pages 68 unchanged S54 (ItTicketsPage reassign = in-place 2 app); +1 S52 AttendanceReportPage
Menu keys 54 +1 S69 Off_Dashboard (landing Văn phòng số). Prev re-ground S61 (MenuKeys.cs const — Mig 50 gỡ 4 Bg_* Budget menu cũ). Prev 57 (S58)
Tests 434 PASS 45 Domain + 389 Infra · 0 fail / 0 skip · S92 +3 (AdminOnlyModulesRevokeTests ẩn 5 nhóm menu chỉ Admin — non-Admin revoked-4-cờ / Admin untouched / Pe_* preserved) · S91 +9 (ChangePassword self-service BE+test) · S89 +3 (PeDraftVisibilityTests IDOR nháp riêng-tư) · S88 +17 (D1 financials/CEO-notify/HoSoLink null-safe +11 · D2 create-contract multi-winner +6) · S87 +25 (Mig 58 net +18: PeMultiWinnerTests sum + PeSelectWinnerClearTests multi-update + PeSubmitGuardAndBypass budget=0 + PeApproverFinalizeTests 5 auto-finalize [từng 7, 2 khi opt-in→auto rework] + PeCcmThresholdFinalize/PeWorkItemBudget collateral; Mig 59 +7 PeCcmBudgetPeriodSetterAuthzTests role-gate Admin
Gotchas 76 +2 S91 (#76 deploy render config từ .example KHÔNG phải file-gitignored → prod thiếu setting tới khi điền tay · #75 seed ungated per-code RESURRECT data đã-wipe mỗi restart → gate sau env-flag DemoSeed:Disabled + verify-by-restart-thật). +1 S90 (#74 Chrome-MCP screenshot kẹt SPA-SignalR document_idle → PowerShell CopyFromScreen + Win32 lọc-process-chrome.exe). +2 S85 (#72 lệch giờ +7h — DateTime lưu UTC nhưng serialize thiếu 'Z' → FE new Date()=local → UtcDateTimeJsonConverter global ép UTC-with-Z · #73 UpdateDraft absolute-set CLEAR field SÓT khỏi pattern null-safe = bug-class S42 → guard if (request.X is not null)). +1 S78 #71 (thêm enum value vào entity DÙNG-CHUNG → pollute UI/guard phân-loại theo PROXY-predicate supplierId===null thay vì enum tường minh; file-khi-duyệt purpose=5 lẫn "Bảng so sánh" + false-pass submit-guard → grep mọi field-proxy predicate loại value mới + build-verify TỪNG app; em-main grep no-leak bắt trước deploy). +1 S76 #70 (FE absolute-set echo field anh-em từ server-snapshot + invalidate() fire-and-forget → cửa-sổ stale-echo mất-dữ-liệu khi lưu 2 ô liên-tiếp; guard useIsFetching gate nút Lưu tới khi refetch land; reviewer workflow bắt, impl self-review sót). +1 S72 #69 FE bundle-hash non-deterministic + deploy.yml rebuild-FE-unconditional → bundle rotate kể cả commit governance (SPA-fallback-200 trap; cicd Run #312). +2 S69: #67 Tailwind v4 accent palette thiếu stop (teal/violet/amberx/greenx chỉ 50/100/500/600/700; dùng -300 → teal/violet rơi DEFAULT Tailwind sai-hệ, amberx/greenx drop hẳn — build PASS, phải soi dist CSS) · #68 IDE TS diagnostic giữa background-agent/workflow = snapshot dở-dang (TS server bắn mỗi save), chỉ tin build SẠCH sau-cùng (2× session này: re-skin + PE-FE đều false-alarm). Prev +1 S68 #66 Tailwind v4 rule element thô h1-h4{color:#0b1220} viết NGOÀI @layer thắng utility text-white → heading render đen; fix ĐIỂM text-white! (important, grep dist confirm), KHÔNG move @layer (load-bearing ~30+ heading toàn app). Prev +1 S65 #65 build csproj con (vd SolutionErp.Api.csproj) ≠ dotnet build SolutionErp.slnx (gồm tests) → miss test-compile khi đổi chữ ký record command (CreateDepartmentCommand +ParentId) → CI CS7036 FAIL-gated Run #291 (deploy chặn, prod nguyên — test-gate làm đúng việc). Fix: build full slnx trước push BE signature-change. Prev +2 S61: #63 EF scaffold tự sinh RenameColumn SAI-semantics khi drop+add cùng type (test xanh không bắt — SQLite EnsureCreated không replay migration) · #64 dotnet ef database update áp Design-DB 0-rows ≠ Dev-DB → data-migrate Sql() chạy thật lần đầu trên prod. Prev +2 S59 (#61 sqlcmd -f 65001 · #62 rename natural-key UPDATE trước deploy)
User memory 31 +S84 feedback_derived_flush_execution (derived→canonical flush = em-main execution KHÔNG gate user-confirm; monitor INFORM-only ≠ cần-anh-duyệt; chỉ ĐỔI-con-số/policy = quyền anh). +S79 feedback_canonical_spec_over_broadcast (adap pull canonical-command/§P đừng phỏng-theo broadcast + report-before-stamp dogfood + residual own-diary OK). +S75 feedback_harness11_engine (engine governance tự-bảo-trì + gotcha #30-via-Edit + multi-workflow-verify + git-add-specific lesson). re-ground S71 (H1 disk-count: 25 feedback_* + 3 project_*; STATUS "21" stale từ S64). +S71 feedback_harness10_run_trace (run-trace + 3 lesson). Prev +1 S64 feedback_harness7_outward_writing_quality; re-grounded S54 base 19
Skills 6 3 domain + 3 ops
Sub-agents 11 all-inherit top-tier (Harness-8 S66 06-16 — thay thế two-tier H4): em main Fable 5 (1M) Max (fallback Opus 4.8 1M, Fable suspended H5) · cả 11 sub model: inherit (7 demoted claude-opus-4-8 flip S66; SE không có helper/gopher rẻ → cả 11 lên top-tier) · effort Max. 9 product/quality + 2 monitor INFORM-only. Nấc H8 = executed-file VERIFIED-pending-restart. Prev two-tier H4 runtime-verified S57bis (spawn-test 2 chiều).
RAG chunks 2429 re-verify S80 (list_projects — alive, +6 vs S63's 2423). Stale last_indexed 05-29 (S42-S62 via store_memory stopgap; full re-index = AI_INFRA op cần VOYAGE_API_KEY).

Bundle hash live (prod): admin aKuNip19 · user BUsL0HeQ (S85 — Run #341 49ac086 lệch-giờ TZ serialize UTC-with-Z; FE frozen #339+#341 BE-only. Chuỗi ~10 deploy #334→#341 buổi UAT anh Kiệt CV PRO: #334 5a61254 batch CV PRO 6-fix → #335-#338 6 vòng UAT → #339 1263c0d workflow-preserve bug-class S42 → #341 49ac086 TZ; #342 d4f6021 docs+cicd BE-frozen, bundle giữ-nguyên gotcha #69-REFINE). Prev S78 — admin CsJetgZH · user BVS0ApIm (S78 — Run #330 7886fd0 PE attach-file khi duyệt; bundle ROTATE từ S77 BqKD3Y23/Cn-i349D dù NO migration enum-only — gotcha #69 non-determ rebuild; cicd ship-proof byte-stable + fake-hash control). Prev S77 — admin BqKD3Y23 · user Cn-i349D (S77 — Run #329 e823694 banner Trả-lại; cuối chuỗi 10 deploy #320→#329 cùng ngày, cicd PASS each: #320 pill DsSg6RRz-era → #321 focus → #322 revert → #323 Mig57+notes CPm4LTqm/BWJUAqEI → #324 số-âm-đỏ C6fx-0ea/N3sW4Div → #325 indent BhnNMucS/B1VebpXc → #326 cờ-gấp-asymmetric DwXqn37C/COXMCv7E → #327 decouple B0gboSAg/DbDg7pM- → #328 notify (BE-only, FE frozen) → #329 banner BqKD3Y23/Cn-i349D). Prev S76 — admin jOqxW4-p · user DbsznVvR (S76 — Run #319 21d1f4e bảng lưới <table> ngân sách viền-ô; chuỗi S76 cùng ngày: #318 e33481e feature ma-trận-3-cột + badge quyền-NS BhFDF9IJ/BAkuRl3C → #319 jOqxW4-p/DbsznVvR, cicd PASS each, smoke 3×200, Mig 56 applied prod #318). Prev S74 — admin BYF5vIMJ · user CB-tiRxd (S74 — Run #315 8655ebf Mig 55 CcmNote, cicd PASS ~4m54s: Mig 55 applied prod CcmNote nvarchar(1000) nullable · sys.tables 88 · smoke 4×200 · 0 regression). Prev S73 — admin Bv3jUCNo · user BWlMBQz6 (Run #314 6aa4dcb FE empty-candidates guard fix; chuỗi 2 deploy: #313 1d86abc feature OlNyG9OD/DSzSLVtL → #314 Bv3jUCNo/BWlMBQz6, cicd PASS each). Prev S72 — admin fc_xkNpJ · user DP-tBcg0 (Run #312 governance commit 18fced6; bundle ROTATE do non-deterministic hash + deploy rebuild-FE-unconditional (gotcha #69) — 0 FE source change, prod state/DB GIỮ NGUYÊN). Prev S69 — admin BgNCjwsG · user CBvh0vtf (Run #308 PE cờ gấp + ngưỡng CCM; chuỗi 4 deploy session: #305 Văn phòng số foundation → #306 re-skin 10 page → #307 Office golive (BE-only) Wt54PHYl/B99fMU6X → #308 BgNCjwsG/CBvh0vtf). Prev S68 — admin CNUv1jxY · user CpOskeS1 (S68 — Run #304 37752eb fix tên đen→trắng; chuỗi #303 6983609 D532XZKG/CuFaBoWt → #304 CNUv1jxY/CpOskeS1, cicd PASS each). Prev S67 — admin CcrZqfht/user DniDFUB_ (S67 — 6 deploy Run #297→#302; admin rotate chuỗi #298xkSz9BfE→#300PxiZQkaw→#301I1fpLeYw→#302**CcrZqfht** · user #297BumgrwCJ→#300B36hGoKd→#301DrQYkzh0→#302**DniDFUB_**; #299 tests BE-only cả 2 frozen, cicd PASS each). Prev S65 — admin BDwV5d0X/user DbVv6rsf (Run #293-295). Prev S62 admin 0xKYGhhf/user C81ZdG9G (Run #286). Prev S59: admin B1DtNT9C · user D6uF3Mln (Run #282 792c030 FINAL — bỏ nút Thêm hạng mục; ships kèm 80b64dd gỡ Điều khoản TT, #281 cancelled-benign ancestor-verified). Chuỗi S59 cùng ngày: #280 69997da (BKy_8OO9/XcZ6PRyA, ships kèm f21c55d table-fixed #279-cancelled) · #278 9c330d2 self-approve+quick-add-NCC (BSh2fG2X/D22KfpPc, authz probe 4/4) · #277 faed59f SearchableSelect (ex7Tc92G/DzUeSk96) · #276 c869d26 rename 71 PMH (BBA0KSWu/DzdTI18G) · #275 bbd1554 dọn demo WorkItems (FROZEN BE-only) · #274 0eafcd3 tree 4 tầng (DuU7OTym/DWyeTzf3) · #273 56882ac wipe + tree v1 (R9uGRxvw/DikfX1RD). Prev S58: Run #386 3ebaf84 admin DMm9rtNA/user BUkOMn_Y (chi tiết session log S58). Phase: Phase 10 COMPLETE · Phase 11 product backlog ĐÓNG TRỌN · Văn phòng số (E-Office) golive S69 (foundation PURO + re-skin 10 page + public read+create 16-key allow-list mọi role) prod-verified · PE cờ gấp PRO/CCM + CCM duyệt-final theo ngưỡng (Mig 53 S69) prod-verified · PE ngân sách MA TRẬN 3 cột Dự án/PRO/CCM (bảng lưới <table>) + badge quyền-NS theo role trong Workflow Designer & flow Duyệt NCC (Mig 56 S76) prod-verified · PE UX batch S77 (10 deploy) — cờ GẤP pill mọi danh sách+inbox · focus/inline+overlay decouple+"Xem mở rộng" · ô ghi chú giá đề xuất PRO/CCM (Mig 57) · số phân cách + số-âm-đỏ-ngoặc + indent mục con · cờ gấp GẮN=NV/GỠ=Trưởng phòng · chuông báo người duyệt · banner Trả-lại — prod-verified · PE đính kèm file khi DUYỆT (S78, Run #330) — người duyệt tải file lên lúc duyệt thay vì Trả lại; migration-free reuse-enum ApprovalAttachment=5 — prod-verified · 🚫 Phase 9 Ops blocked (anh main coordinate — anh dừng).

⚠️ Count drift fixed S40: endpoints ~223→211, FE pages 53→65, menu keys 85→~53. Tables 84 confirmed correct (DbSet 77 + Identity 7). 3 số "khó fake" (mig/gotcha/git) luôn đúng. Cause: số "incremented mỗi session" over/under-count optimistic — re-ground định kỳ.


🔥 In Progress (S94)

Task Owner Status
S94 — re-tier STATUS/HANDOFF mega-line + nâng cap lead 220K→380K (anh-directed) — trim 2 mega-line (unblock Read-25K/call OOM) + archive session ≤S90 → _archive ; cap v4-delta RC-pqhuy1987-29-06-2026-23-25-50 👤 em main 🔥 in-progress

Recently Done (newest on top — 3 session; cũ hơn → session logs)

Chi-tiết 3 session gần nhất (S93/S92/S91) = mega-line đầu file. Detail S75↓ đã tách (re-tier S94) → docs/_archive/STATUS-HANDOFF-tier-S94-2026-06-29.md + bản đầy-đủ docs/changelog/sessions/.


🎯 Next up

Phase 11 — Polish/wire skeleton (COMPLETE S52)

  • P11-A wire ApproveV2 + LevelOpinions 4 module — DONE S42 (prod).
  • P11-B LeaveBalance business logic — DONE S43 (Mig 42, prod).
  • P11-C Vehicle+Driver catalog — DONE S51 (Mig 44/45, prod).
  • P11-D ItTicket round-robin assign + SLA timer — DONE S52 (Mig 46, dcf76f8, prod). Dept-IT pool + ItTicketSlaJob no-auto-transition. Follow-up minor: reassign-UI defer (endpoint /assign sẵn).
  • P11-E AttendanceReport + Excel + OtPolicy multiplier — DONE S52 (6a66429, prod). Admin-only, weighted-OT-hours (no salary field → quy-đổi-giờ not pay, MVP). Follow-up: menu-key promote (hiện via button).
  • P11-F CodeGen atomic MaTicket — DONE S52 (6a66429, prod). gen-on-Create IT/2026/NNN.

🔧 Maintenance backlog

  • RAG re-ingest solution_erp S42-S43 content (store_memory stopgap live; full re-index = AI_INFRA op)
  • gotcha #57 LeaveType+ShiftPattern+OtPolicy filtered-unique DONE S51 (Mig 45, 3 HRM catalog — OtPolicy bị bỏ sót khỏi backlog "2 catalog", bắt được via grep + test-before 5 case). EXT (worktree session, Mig 46): Department/Supplier/Project (Master, confirmed-reachable via global query-filter quirk); ContractClause/MeetingRoom/EmployeeProfile = SKIP (audit-verified not-reachable).
  • Skill + doc drift audit cron — 2026-06-01 DONE (S44) — 42 count-drift fixes + AI_INFRA bundle adopt; next 2026-07-01

🚫 Phase 9 Ops (blocked — anh main coordinate)

  • SMTP email outbound · Rotate prod creds · SQL auto-backup (backup-sql.ps1 ready, chờ Task Scheduler register) · UAT 2-3 user 1 tuần

🚨 Blockers / risks

  • ⚠️ Email SMTP chưa có — blocker notification outbound
  • ⚠️ Credentials trong chat — rotate trước go-live thật
  • ⚠️ SQL backup chưa auto — risk data loss (script ready, chờ register)
  • ⚠️ UAT real user chưa chạy — risk edge-case bug
  • ⚠️ Cert api.solutions.com.vn expire ~2026-07-23 (auto-renew ~06-23)

🔑 Credentials + URLs

Prod login: admin@solutions.com.vn / Admin@123456   (⚠️ rotate sau login đầu)
  • API prod https://api.solutions.com.vn (/health/live + /health/ready) · dev http://localhost:5443 (/swagger)
  • Admin FE prod https://admin.solutions.com.vn · dev :8082
  • User FE prod https://eoffice.solutions.com.vn · dev :8080
  • Gitea https://git.baocaogiaoduc.vn/vietreport-admin/solution-erp · SSH ssh vietreport-vps
  • SQL prod .\SQLEXPRESS / SolutionErp · dev (localdb)\MSSQLLocalDB / SolutionErp_Dev

Session history: S0→S39 full detail trong docs/changelog/sessions/ + docs/_archive/STATUS-preS40-fullhistory.md. File này chỉ giữ state hiện tại + 3 session gần nhất.