- STATUS/HANDOFF S97 mega-line: +fix-3 endsBeforeCeo; State → Mig 60 / 89 tables / gotcha 78 / bundle DR9q2VUy+Bgz8u4E5 (Run #482) - gotcha #78: display-flag CONFIG-vs-RUNTIME (nói dối khi instance lệch config; nặng sau opt-in flip) - session-log Part 2: endsBeforeCeo root-cause + fix + verify (test 440 + reviewer PASS 0-issue + cicd #482 bug-fixed-LIVE) - Memory harvest: test-specialist + reviewer + cicd-monitor (#482 verdict recover từ diary — #53 return-garble lần-5, root-cause structural noted) Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
38 KiB
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-07-01 (S97 — PE finalize 3-fix UAT anh Kiệt FDC (buổi live) — em-main-led, prod-verified Run #481+#482. (1) badge cấp-sau-finalize "không trình tới"→"Kết thúc tại {finalizeLevelName}" (render-động → hiện "Kết thúc tại CCM"; fallback finalizeStepName/'cấp trên') + tooltip template-literal. (2) đảo default checkbox "Cấp này KẾT THÚC quy trình" opt-out→opt-in (useState(true→false) init + reset onSuccess + helper text reword + comment S96-"default checked"-drift fix) — mặc định TRÌNH TIẾP CEO, tick mới KẾT THÚC tại cấp. FE-only mirror 2-app SHA-identical PeWorkflowPanel.tsx (bcf812fd), 0 BE/mig/test (BE service if(AllowApproverFinalize && applyLevelFinalize) tôn trọng cờ FE; param default true giữ làm fallback caller non-FE, FE luôn POST tường minh). Workflow wf_0e01fdba-209: implementer-frontend (8 hunk 4×2, build×2 PASS) → reviewer (PASS 0-issue; verify comment-L121+handler-L664 giữ, logic non-break). Commit 1c8fb6a. cicd Run #481 PASS ~5m10s byte-level #77: JS rotate admin COYAX-yQ→Cf0o8dx8/user 0MU-kb4N→x8rppRAK (CSS frozen Bbtesa6B/BmuPz_Dy #69-REFINE logic-only; real-size 1.64/1.54MB anti-SPA-trap) · NEW Kết thúc tại+helper Mặc định…TRÌNH TIẾP PRESENT / OLD không trình tới+Đã BỎ tick ABSENT (fix shipped byte-level → UI-cũ=cache→incognito, KHÔNG deploy-fail) · Mig 59/88-table frozen · smoke api+admin+eoffice 200×3 + PE-list 200 items[]-valid. Lessons: #53 return-garble tái-diễn lần-4 (cicd trả prose-curate-memory "18.7KB above target" thay verdict dù instruction "return-verdict" → recover-from-diary S97-#481-entry KHÔNG re-spawn per feedback_agent_return_garble_recover; instruction-fix giảm-không-100%) · BE-honors-explicit-flag → đảo-default chỉ sửa FE useState (BE param=fallback, FE luôn POST tường minh) = zero BE/test-churn zero-prod-risk · comment-drift cleanup trước commit. impl MEMORY compaction giữa-spawn (23.8→11.5KB, archive S76-79→2026-H1.md verify no-loss). (3) endsBeforeCeo config→RUNTIME (Mig 60 8037fa0 #482 — cross-stack, reviewer PASS 0-issue): phiếu có cấp finalize nhưng approver opt-out → lên CEO thật + CEO duyệt, nhưng sơ đồ báo sai "kết thúc tại CCM, không qua CEO" + làm-mờ Bước CEO (endsBeforeCeo suy CONFIG). Fix: field runtime EndedByLevelFinalize (set CHỈ nhánh level-finalize) → EndsBeforeCeo cho phiếu DaDuyet đọc runtime; 4 projection (detail/List/Inbox/ListApproved) + FE gate làm-mờ 2-app + backfill marker; test 440 (repro peFinButWentCeo config-finalize+field-false→false) + reviewer 6-điểm PASS + cicd #482 bug fixed LIVE (PE-detail 31faef0d endsBeforeCeo=False phase=7, EF-ternary SQL-Server 200-NOT-500) → gotcha #78 (display-flag CONFIG-vs-RUNTIME). State: Mig 60 · 89 bảng · 440 test · gotcha 78 · menu 54 · bundle admin DR9q2VUy/user Bgz8u4E5 (Run #482) · prod 21 NCC/17 user. 🔴 NEXT anh: UAT incognito phiếu "8 MEP Sub Hệ thống solar" xác nhận: (a) sơ đồ hết báo "không qua CEO" + Bước 3 CEO KHÔNG còn mờ [fix-3 mới], (b) badge "Kết thúc tại CCM" + checkbox default-unchecked [fix 1-2] (+ vụ cũ "lỗi phân quyền vào phiếu": cho số-phiếu+user). NEXT em: monthly re-tier mega-line pending (giờ 5-blurb S97-S93). → log 2026-07-01-S97-pe-finalize-wording-default-flip.md) · Prev S96 (S96 — buổi UAT LỚN anh Kiệt/chị Trà/anh Chương live + monthly-audit — 5 commit prod-verified, em-main-led (HMW-mode ON; 1 prep-workflow monthly-audit + spawn-lẻ, chủ-yếu solo). (1) Monthly drift audit 881783c (docs-only CI-skip): ef-core SKILL Mig→59 + bảng rows 57/58/59 + Mig 14/Phase-7 Budget-DROPPED annotate · skills/README Mig 55→59 + gotcha #69→76 · docs/CLAUDE Budget REMOVED Mig 50 strike-through · docs/governance/vocab-alias-map.md MỚI (3 fork run-trace/Ngân-sách-PRO/all-inherit + $ExcludeExact anti-self-match) · re-tier STATUS/HANDOFF mega-line 5→3 blurb (S92/S91→archive, conservation delta=0 BOM-preserved) + hoist 3 UAT-carry→blockers · FD memory distill (H17 strike-1 CLEARED: L1 26129→21492B, 5 war-story→archive/_INDEX/gist, Lessons value-protect lên L1). Workflow wf_2d687d27 4-cluster draft→verify (reviewer bắt #74-paraphrase-drift + AS-10 residual reverted). detector 27→25. (2) Import NCC DONGDUONG ba4b8e0 (Excel anh Kiệt "Database NCC" 4 NCC/30-field): 3 NCC đã seed sẵn (TRUONGGIANG/TANPHU/TGN) → chỉ +DONGDUONG vào SeedRealMasterDataAsync (ungated idempotent, pack extras→Note, no-mig); prod 20→21 NCC (Run #477). Backlog 15-18 field "note-lại-từ-từ-tính"→Next-up. (3-5) 3 PE bug-fix UAT: e657faa ô "Cấp này KẾT THÚC quy trình" (AllowApproverFinalize S89-auto) → opt-out bỏ-tick-được (2-tier: Designer=cấp-quyền / phiếu=chọn kết-thúc-hay-trình-CEO; +param applyLevelFinalize default-true BE + FE 2-app, Run #478) · 36cbf8b chuông tự sạch noti "cần duyệt" cũ khi phiếu rời cấp (LogTransitionAsync mark-read Generic+RefId ExecuteUpdate BE-only, Run #479) · 0c2f9f6 khóa sửa giá đề xuất PRO/CCM sau gửi-duyệt ("duyệt là fix" — Mig 54 "KHÔNG-ràng-Phase" ĐẢO → non-admin chỉ sửa Nháp/TraLai + Admin-override; BE+FE 2-app+4 test, Run #480). Test 434→440. Delete-sau-duyệt = ĐÃ chặn sẵn (FE nút Xóa chỉ DangSoanThao + BE guard, không cần sửa). Checkbox "ko-được" = browser-cache (verify byte-level: prod bundle 0MU-kb4N CHỨA fix + "✅-static" cũ đã mất; index.html no-cache đúng-chuẩn + no-service-worker) → incognito = golden-test. State: Mig 59 · 88 bảng · 440 test (45D+395I) · gotcha 77 · menu 54 · bundle admin COYAX-yQ/user 0MU-kb4N (Run #480) · prod 21 NCC/17 user. Lessons: verify-deployed-artifact-byte-level (cache≠deploy; incognito golden — gotcha #77) · #53-return-garble tái-diễn ×3 (investigator + cicd×2 trả text-memory-curation thay verdict → recover từ agent-memory; instruction-fix "return-verdict" ăn lần-3) · 2-tier-permission (grant-vs-exercise) · spec-change→update-test-cũ (SeedPeAsync ChoDuyet→DangSoanThao). 🔴 NEXT anh: UAT incognito checkbox + cho số-phiếu/user vụ "lỗi phân quyền vào phiếu" để em soi config-workflow. NEXT em: cicd-monitor S-tag-drift S97/S98→S96 reconcile (closeout này) · monthly re-tier mega-line (giờ 4-blurb S96/S95/S94/S93). → log 2026-07-01-S96-uat-pe-fixes-monthly-audit.md) · Prev S95 (S95 — Harness-17 adopt (Vòng tự-cải-thiện bộ-nhớ Đo→Tinh-chỉnh→Kiểm) — governance-only 0 prod code, em-main-led + 3-workflow fan-out (HMW-mode ON). /check-email AI_INFRA (0 directed mới; H16 đã áp trọn S93) → /adap-apply H17 (2 broadcast hash-MATCH · reviewer_gate:PASS). 10/10 mục 🔴 sàn ĐẠT: REUSE-cite A2=§H MFE/C3=D9/CG-2=value_protect/archive=§A; build mới scripts/memory-selfimprove-audit.ps1 (C1 spec-audit NO-API exit-0, runtime-verified bắt frontend-designer over-cap GAP thật) + .claude/governance/reinject-ledger.md (B2 CG-1 N=3, tách khỏi budget.json) + engine §I codify + session-start §2.1.7/session-end §L.b(c) wire + HCV alias no-seed (coverage 3-nghĩa, detector vẫn 27). 3-workflow (run-id bằng-chứng): WF1 wf_f085d7c4-d78 ground-truth + WF2 wf_8e73c1d6-ee6 3-lane review PASS 0-blocking + WF3 wf_6f44eddf-680 deep-reverify (fault-injection 13-inject chứng-răng-thật + integration + cross-doc, 0 application-defect). 2 commit: 18a17f5 (adopt — cicd Run #476 PASS prod 200×3, bundle rotate admin 0T6vVJST/user BGXEVZO6, Mig 59 unchanged) + 65b434a (deep-reverify docs-only CI-skip). adap-report + 2 email AI_INFRA (hash 54789e19 adopt + 8c94fa34 deep-reverify-update). Dogfood C3 4-fire: AS-10 WF1+WF3 self-write reverted (git-diff net = backstop THẬT; instruction-fix NOT 100% — WF3 explicit-return-only STILL self-wrote → E-006 recurrence S95, guard HELD 4/4, 0 escape; cicd-monitor diary KEPT = normal-spawn legit). Lessons: fault-injection-via--RepoRoot-temp chứng checker-teeth (không chỉ happy-path PASS) · Lane B #53 empty-return → em-main self-gate recover · workflow-agent persona-write stochastic → git-diff mandatory. State GIỮ NGUYÊN: Mig 59 · 88 bảng · 434 test · gotcha 76 · menu 54 · prod 17 user/7 NCC. NEXT em: frontend-designer distill (WATCH strike-1 = H17 loop's live finding) · monthly re-tier mega-line + ef-core SKILL Mig→59 + 3 vocab-fork (2026-07-01 due). → log 2026-07-01-S95-harness17-adopt.md) · Prev S94 (S94 — (1) anh-directive nâng cap lead 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 · MFE verified live-read 380K). (2) re-tier 2 mega-line (fix Read-25K/call OOM + token-cost ~169K/220K): 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-2026-06-29.md 0 byte-loss (new+archive=orig+995B pointer) · backup git+scratchpad · detector 27=baseline 0-broken-pointer · conservation spot-check PASS. (3) MFE eval-all baseline (đầu phiên): LEAD coverage-FIT 29-item/380K=0.92% · age-band 0-cut · Goodhart strikes-21/RCA-9 flat=no-lie · SUB per-role ≥85% (cicd/test-spec/FD 100% · impl-backend 94% · impl-frontend 85% · 3 prose-role N/A) · judge-scaffold-only honest. (4) nạp full Phase-1 read-set (budget 380K cho phép): +PROJECT-MAP +workflow-contract +migration-todos. commit 5f61b03 pushed docs-only CI-skip. Lesson: trần budget ⟂ harness Read-25K/call = 2 khóa ĐỘC-LẬP — cap-raise KHÔNG unblock mega-line Read (cần re-tier); mega-LINE = tooling-breaker (ưu-tiên) vs mega-FILE nhiều-dòng = chỉ token-cost; re-tier = archive-không-cắt + assert head+tail==orig 0-loss. em-main solo (governance single-writer, 0 sub, 0 fan-out). State GIỮ NGUYÊN: Mig 59 · 88 bảng · 434 test · gotcha 76 · menu 54 · bundle admin CDn40vpV/user CoPmPBg7 · prod 17 user/7 NCC. → log 2026-06-29-S94-cap-380k-retier-megaline.md) · Prev S93 (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 xz8FdmLN→CDn40vpV/user CA8Rla2w→CoPmPBg7. (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) · (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 | 60 | +S97: Mig 60 AddPeEndedByLevelFinalize (PE +EndedByLevelFinalize bit NOT NULL default 0 — cờ RUNTIME "phiếu ĐÃ kết thúc sớm bằng level-finalize", set-true CHỈ nhánh finalize service; +Sql() backfill Phase=7-marker→=1; EndsBeforeCeo display đọc runtime thay config → phiếu-lên-CEO hết báo sai "không qua CEO" [gotcha #78]; AddColumn no new table, prod-verified Run #482 PE-detail endsBeforeCeo=False live). +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 | 89 | re-ground S97 (cicd sys.tables is_ms_shipped=0 Run #482 LIVE = 89, pre==post Mig 60 no-new-table; "88" từ S62 STALE). Prev net 93→88 S62 (Mig 50 drop Budget + create PeWorkItemBudgets) |
| 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 | 440 PASS | 45 Domain + 395 Infra · 0 fail / 0 skip · S96 +6 (PE PeApproverFinalizeTests +2 [#6 finalize-opt-out→advance-CEO · #7 stale-noti-clear ExecuteUpdate] · PeSuggestedPriceSetterAuthzTests +4 [price-lock phase-guard after-submit — PRO/CCM ChoDuyet/DaDuyet→Conflict, Admin-override; +sửa SeedPeAsync default ChoDuyet→DangSoanThao spec-change]) · 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 | 78 | +1 S97 (#78 display-flag suy CONFIG thay RUNTIME → nói dối khi instance lệch config: endsBeforeCeo từ "workflow CÓ cấp finalize" thay "phiếu NÀY finalize" → phiếu lên CEO báo sai "không qua CEO"; nặng sau S97 default-flip opt-in; fix field runtime EndedByLevelFinalize Mig 60. Flag = "instance ĐÃ làm-gì" KHÔNG "config CÓ THỂ"). +1 S96 (#77 SPA deploy bundle cache-lag: team thấy UI CŨ dù đã deploy + Ctrl+F5 — index.html no-cache ĐÚNG-chuẩn + JS hash-immutable nhưng browser giữ tab-SPA-mở/cache-local → verify bundle prod BYTE-LEVEL (curl + grep string-fix trong /assets/index-<hash>.js) phân-biệt cache-vs-deploy; incognito = golden-test; no-service-worker nên clear-site-data đủ). +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 DR9q2VUy · user Bgz8u4E5 (S97 — Run #482 8037fa0 endsBeforeCeo config→RUNTIME [Mig 60 EndedByLevelFinalize]: Mig 60 applied prod (history-top + col-default-0 EXISTS + backfill=0 UAT-no-marker + sys.tables 89 pre==post); EF-ternary SQL-Server LIVE-confirmed GET /purchase-evaluations 200 items=9 + PE-detail 31faef0d 200 endsBeforeCeo=False phase=7 = runtime-path chạy = bug fixed LIVE (NOT 500); JS rotate 2-app PeWorkflowPanel gate-diff, CSS frozen #69-REFINE; byte-#77 endsBeforeCeo PRESENT in-bundle; smoke 200×3. reviewer PASS 0-issue + test 440. Prev #481 — admin Cf0o8dx8 · user x8rppRAK (S97 — Run #481 1c8fb6a PE finalize 2-fix [badge "không trình tới"→"Kết thúc tại {cấp}" + đảo default checkbox opt-in]; JS rotate real-FE 2-app PeWorkflowPanel diff, CSS frozen Bbtesa6B/BmuPz_Dy #69-REFINE logic-only; byte-level #77 NEW Kết thúc tại+helper PRESENT / OLD không trình tới+Đã BỎ tick ABSENT; real-size 1.64/1.54MB; Mig 59/88-table frozen; smoke 200×3. FE-only mirror SHA bcf812fd, 0 BE/mig/test). Prev S96 — admin COYAX-yQ · user 0MU-kb4N (S96 — Run #480 0c2f9f6 price-lock; chuỗi 3 PE deploy #478 e657faa checkbox-opt-out → #479 36cbf8b chuông-stale-clear (BE-only) → #480 0c2f9f6 khóa-giá-sau-duyệt, cicd PASS each ~5m; FE JS rotate THẬT (PeWorkflowPanel #478 + PeDetailTabs #480, 2-app) real-size 1.64/1.54MB vs 919b SPA-trap, CSS frozen #69-REFINE; Mig 59 frozen 0-mig; +Run #477 ba4b8e0 NCC seed no-mig prod 21 NCC. Verify byte-level: prod 0MU-kb4N CHỨA checkbox-fix ("BỎ tick"/"Đã BỎ tick") + "✅-static" cũ MẤT → checkbox "ko-được" = browser-cache KHÔNG deploy-fail). Prev S95 — admin 0T6vVJST · user BGXEVZO6 (S95 — Run #476 18a17f5 H17 governance-only deploy; bundle rotate benign #69 CSS-frozen, prod 200×3, Mig 59 unchanged; cicd re-snapshot LIVE — pre-deploy CkZ1MjC1/_-gpX7_Y, mega-line S93 CDn40vpV/CoPmPBg7 đã bị deploy trung-gian rotate từ S94). Prev S85 — 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 (S97)
| Task | Owner | Status |
|---|---|---|
S97 — PE finalize 3-fix UAT anh Kiệt (1: badge "không trình tới"→"Kết thúc tại CCM" · 2: đảo default checkbox opt-out→opt-in [1c8fb6a #481] · 3: endsBeforeCeo config→RUNTIME [Mig 60 EndedByLevelFinalize 8037fa0 #482] — phiếu lên CEO hết báo sai "không qua CEO", bug fixed LIVE) — ✅ DONE, test 440 + reviewer PASS 0-issue; chi-tiết mega-line + log 2026-07-01-S97-* |
👤 em main (workflow + spawn-lẻ) | ✅ done (S97 closeout) |
| PE "lỗi phân quyền vào phiếu" (anh Kiệt UAT báo) — chờ số-phiếu + user để soi config workflow (nhiều khả năng user chưa được gán approver Cấp phiếu đang chờ — config, không phải code-bug) | 👤 em main | ⚪ pending (chờ anh specifics) |
✅ 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 +ItTicketSlaJobno-auto-transition. Follow-up minor: reassign-UI defer (endpoint/assignsẵ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-CreateIT/2026/NNN.
🔧 Maintenance backlog
- RAG re-ingest
solution_erpS42-S43 content (store_memory stopgap live; full re-index = AI_INFRA op) - ⬜ Supplier schema mở-rộng (anh Kiệt "note lại từ từ tính", S96): form Excel "Database NCC" ~30 field, entity
Supplierhiện chỉ 9. S96 import 4 NCC (option-3: 9 field + gói extras vàoNote). 15-18 field CHỜ thêm khi anh chốt: GÓI THẦU (có thể → WorkItem/category) · ĐỊA CHỈ VP · FAX · SỐ TK+NGÂN HÀNG (tách field) · SỐ TK PHỤ · NGƯỜI ĐẠI DIỆN PL + CHỨC VỤ · GIẤY ỦY QUYỀN (số/ngày/người) · Link GUQ/GPKD/HSNL (nvarchar(1000) mirror HoSoLink) · CHỨC VỤ LH · SĐT contact riêng · ĐỊA CHỈ GỬI THƯ · NGƯỜI NHẬN THƯ · NGUỒN GT · PMH · TÌNH TRẠNG (enum active/blacklist) · NGÀY/NGƯỜI CẬP NHẬT. Additive-nullable → 1 migration khi làm. EnumSupplierTypecần thêm "Cả hai" (NTP+NCC) nếu gặp. - ✅ 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
- ⏳ UAT-confirm chờ anh sign-off (carry S91/S92, hoist khi re-tier S96): (1) eoffice non-admin ẩn 5 nhóm menu [S92 · Run #358 sqlcmd 0-leak] · (2) đổi mật khẩu self-service [S91 · +10 test] · (3) NCC demo không sống-lại sau restart [S91 · #75 gate verified 2 restart] — cả 3 code/prod-verified server-side, chỉ chờ anh xác nhận UAT (blurb đầy đủ S91/S92 →
docs/_archive/STATUS-HANDOFF-tier-S94-2026-06-29.md). - ⚠️ Cert
api.solutions.com.vnexpire ~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) · devhttp://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· SSHssh 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.