84fa638006
[CLAUDE] Docs: check-email — pull NAMGROUP UI design conventions (namgroup→se, verify ✓, processed)
...
Harness 3 inbound: 2026-06-09-namgroup-to-se-ui-design-conventions. Whole-file + body SHA256 both PASS (0140b81f). Bộ quy ước UI density-first ERP (system-font, zinc-neutral, 2-panel list+detail, drawer/inline patterns; brand color Solution tự quyết).
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com >
2026-06-09 11:06:30 +07:00
ed5a239212
[CLAUDE] Docs: S55 closeout — master data import từ Excel (Run #377 ) + Mig 47→48 + ef-core skill
...
62 dự án + 71 hạng mục + 3 NCC real loaded prod (SeedRealMasterDataAsync ungated). Mig 48 AddProjectMasterFields. STATUS/HANDOFF/session log + CLAUDE.md root mig count + ef-core SKILL migration table. 2 agent return truncated (BE+reviewer) → em main disk/runtime-recover lesson.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com >
2026-06-09 09:45:30 +07:00
69cb3937bb
[CLAUDE] Master: nạp master data thật từ Excel (62 dự án + 71 hạng mục + 3 NCC) + Project +4 cột (Mig 48)
...
Deploy SOLUTION_ERP / build-deploy (push) Successful in 4m33s
Nạp master data công ty từ file Excel 'HẠNG MỤC CÔNG VIỆC DỰ ÁN':
- 62 Projects (Mã + Năm; tên/CĐT/địa điểm/gói thầu cho ~6 dự án có chi tiết)
- 71 WorkItems: Vật tư 16 · Thầu phụ 30 · MEP 9 · Thiết bị 16
- 3 Suppliers (TRUONGGIANG/TANPHU/TGN)
Mig 48 AddProjectMasterFields: Project +4 cột nullable (Year/Investor/Location/Package) + ProjectFeatures DTO/Create/Update + ProjectsPage form ×2 app (SHA256 mirror).
SeedRealMasterDataAsync per-code idempotent, UNGATED → reaches prod (coexist demo). FLOCK01 collision → skip (demo wins).
Verify: build 0-err · test 216 PASS · runtime Dev proof (data landed, Investor col populates). Provenance: scripts/master-import-data.generated.md.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com >
2026-06-09 09:27:04 +07:00
f8640d6f18
[CLAUDE] Docs: S54 closeout — IT ticket reassign cross-stack (Run #376 ) + harvest reconcile + monitor GATE PASS
...
- STATUS/HANDOFF: S54 IT-staff reassign (ca4b602 , test 216, bundle rotate cả 2), user-mem re-ground 20, Phase 9 Ops scope cho NEXT
- Session log 2026-06-08-S54 + cicd-monitor MEMORY (Run #376 , H2-gap post-deploy lag)
- H2 harvest GATE PASS 5/5 (residual reconcile verified) + H1 tooling 4-mặt stable
- flag monthly 2026-07-01: sys.tables 93-vs-92, STATUS re-tier S50..S38
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com >
2026-06-08 16:28:53 +07:00
ca4b60277b
[CLAUDE] Office: IT staff tự reassign ticket — authz Admin-OR-IT + capability endpoint (S54)
...
Deploy SOLUTION_ERP / build-deploy (push) Successful in 4m17s
- BE: GetAssignableItStaffQuery {canReassign,staff} capability endpoint + AssignItTicketHandler authz Admin-OR-dept-IT (Forbidden) + assignee-must-IT (Conflict); controller /assign hạ [Authorize(Roles=Admin)]→[Authorize] (handler enforce fine-grained data-driven)
- FE: fe-admin + fe-user ItTicketsPage SHA256-identical (reverse S53 divergence), nút gate by canReassign, dropdown từ /assignable-staff (không /users)
- Test: +13 authz guard (203→216 PASS), reviewer PASS (role-string Admin chain-verified real)
- No migration (DepartmentId reuse), no menu change
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com >
2026-06-08 16:12:14 +07:00
18d397f095
[CLAUDE] Docs: S53 H1-gate residual fixes — ef-core Mig 44-47 table rows + count stragglers + database-agent verified-runtime flip
...
Session-end H1 tooling-chốt (formal monitor gate on /session-end re-trigger) caught 4 residuals em-main self-check missed:
- ef-core-migration/SKILL.md: added Mig 44/45/46/47 table rows + totals 91->92 bang / last Mig 43->47 (header said 47 but body stopped at 43 — internal contradiction).
- dependency-audit-erp/SKILL.md:153 gotcha 56->57.
- agents/README.md:155 'All 10 agent'->11 (RAG-MCP grant line straggler).
- database-agent.md: SELF-CHECK [x] verified-runtime S53 + nac reword (honest: DB1/DB10 exercised, DB2-DB11 per-task).
H2 harvest gate PASS 5/5 (separate run). Tree was clean before this; this closes the H1 residual loop.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com >
2026-06-08 15:34:02 +07:00
d8cd111532
[CLAUDE] Docs: S53 closeout — gotcha #57 EXT Master (Mig 47) + P11-D/E + database-agent verified-runtime + doc-drift
...
Session 53 closeout (HMW-mode ON, 'làm hết' full close). Code already shipped in 44b9e54 (Mig 47, Run #260 ) + dbf6648 (C+D, Run #261 ), both prod-verified.
- STATUS/HANDOFF: S53 entry (mig 46->47, test 200->203, menu +Off_AttendanceReport, bundle admin DfCfHUE9, database-agent verified-runtime).
- Doc-drift E (H1 top-5): ef-core skill 43->47, agents/README roster 10->11 + plugin nac, CLAUDE.md root 45->47 mig + 186->203 test, docs/CLAUDE.md 56->57 gotcha + 91->92 ERD.
- adap-report: database-agent executed-file -> verified-runtime (spawn-test caught Mig 46-unapplied-local).
- session log 2026-06-08-S53 + 4 agent diaries (S53 work).
- Memory: +project_database_agent_verified_local_drift (user-memory, outside repo).
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com >
2026-06-08 15:24:45 +07:00
dbf66489a9
[CLAUDE] Office: P11-D ItTicket admin reassign-UI + P11-E AttendanceReport menu-key
...
Deploy SOLUTION_ERP / build-deploy (push) Successful in 4m21s
Task C - ItTicket admin reassign-UI (fe-admin only):
- Per-card reassign dialog on ItTicketsPage kanban (admin override of round-robin auto-assign).
- Reuses existing PUT /it-tickets/{id}/assign (Admin-only) + GET /users picker. No new BE endpoint.
- fe-admin intentionally diverges from fe-user (read-only) — admin-management action.
Task D - AttendanceReport menu-key (P11-E promote, no migration):
- MenuKeys.OffAttendanceReport 'Báo cáo chấm công' leaf under Văn phòng số (order 8), Admin-perm auto via All[].
- DbInitializer idempotent seed + fe-admin menuKeys.ts/Layout staticMap -> existing /attendance/report route.
Pipeline: implementer-backend -> implementer-frontend -> reviewer (PASS, 0 issues). dotnet+npm builds clean. Tests 203 (unchanged - no new BE logic/schema).
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com >
2026-06-08 15:00:30 +07:00
44b9e542fb
[CLAUDE] Infra: gotcha #57 EXT Master filtered-unique Department/Supplier/Project (Mig 47)
...
Deploy SOLUTION_ERP / build-deploy (push) Successful in 4m15s
Extend gotcha #57 filtered-unique fix to 3 Master catalogs (4th/5th/6th cumulative after Holiday Mig 43 S45 + HRM x3 Mig 45 S51).
Root cause: app-level dup-check db.X.AnyAsync(Code==req) runs through HasQueryFilter(!IsDeleted) so it ignores soft-deleted rows, but the bare .IsUnique() DB index counted them -> admin delete+re-add same Code = reachable 500. Fix aligns index with query filter via .HasFilter("[IsDeleted] = 0").
- Department/Project/Supplier Configuration: unique Code index + .HasFilter (Supplier Type index untouched)
- Mig 47 FilterMasterCatalogUniqueIndexesByIsDeleted (Up: 3x DropIndex+CreateIndex filtered; Down reversible)
- test-before MasterCatalogFilteredUniqueTests (3 RED->GREEN, delete+re-add same Code)
- Tests 200 -> 203 (58 Domain + 145 Infra)
Pipeline: test-specialist -> implementer-backend -> reviewer (PASS, 0 issues).
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com >
2026-06-08 14:28:04 +07:00
f440c194a8
[CLAUDE] Docs: S52 closeout — Phase 11 D+E+F deployed + database-agent + session-limit recovery
...
STATUS/HANDOFF S52 (Phase 11 product COMPLETE, test 200, Mig 46, roster 11, bundle DYfjnpY0/_3S0BPJ2). Session log. Proxy-append implementer-backend + test-specialist diaries (Wave 2 agent killed by session-limit truoc MEMORY step).
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com >
2026-06-08 13:38:12 +07:00
dcf76f8a9f
[CLAUDE] Office: P11-D ItTicket auto-assign round-robin + SLA timer (Wave 2, Mig 46)
...
Deploy SOLUTION_ERP / build-deploy (push) Successful in 4m17s
Mig 46 AddSlaFieldsToItTicket (SlaDueAt/SlaWarnedSent/SlaBreached). CreateItTicketHandler: round-robin least-loaded assign cho IT staff (dept Code=IT, tie-break Id) + SlaDueAt theo Priority (Urgent 4h/High 8h/Medium 24h/Low 72h). ItTicketSlaJob background (breach+warning notify, KHONG auto-transition). PUT /{id}/assign admin override. DbInitializer seed dept IT + 2 sample staff (nv.cao/nv.truong). FE ItTicketsPage +MaTicket+assignee+SLA badge (2 app SHA256 mirror). +9 test (191->200). Self-review PASS (seed<->query dept-code verified; em main solo review do session-limit kill reviewer-spawn).
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com >
2026-06-08 13:23:45 +07:00
6a664298fa
[CLAUDE] Office: P11-E AttendanceReport+Excel+OtPolicy + P11-F MaTicket codegen (Wave 1)
...
Deploy SOLUTION_ERP / build-deploy (push) Successful in 4m10s
P11-F: MaTicket gen-on-create qua WorkflowAppCodeGen (IT/2026/NNN Serializable atomic, kanban no-workflow). P11-E: GetAttendanceReportQuery monthly aggregate (day-type weekday/weekend/holiday OT x OtPolicy multiplier in-memory) + AttendanceReportExcelExporter (ClosedXML) + 2 endpoint Admin-only + fe-admin AttendanceReportPage. Migration-free. +5 test (186->191). reviewer PASS (gotcha #44 role-string verified, 0 blocker).
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com >
2026-06-08 12:34:48 +07:00
e9ee97fb3b
[CLAUDE] Docs: adopt database-agent (DB1-DB11 read-advisory) — roster 10->11 + adap-report
...
AI_INFRA broadcast 2026-06-08-Agent-database-codebase-agents. database-agent STRONG-FIT (DB11 RowVersion va lost-update gap S43); READ-advisory tier (implementer-backend van author). codebase-agent SKIP n-a (investigator cover + csharp-lsp Windows no-op). Nac executed-file -> verified-runtime CHO CLI restart.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com >
2026-06-08 12:33:52 +07:00
3b67a2bd19
[CLAUDE] Docs: S51 session-end closeout — error-ledger §L + monitor spawn-records + root counts
...
§L.a/b: E-002 RESOLVED (gotcha #57 LeaveType/Shift/OtPolicy filtered Mig 45) + NEW E-007/AS-11 (parallel-fan-out FE<->BE contract mismatch, reviewer-caught pre-commit) + Active-Guards (#57 guard 2->3 verified + reviewer cross-stack guard). H2 GATE PASS 5/5 + H1 CHOT 4-mat spawn-records appended (both wrote 0 files - E-006 backstop held). CLAUDE.md root counts 43->45 mig / 91->92 tables / 181->186 test. HANDOFF: database-agent /adap-apply recommend next-session + doc-drift backlog coords. CI-skip (docs/.md only).
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com >
2026-06-08 11:44:39 +07:00
68c6bfea77
[CLAUDE] Docs: S51 P11-C Vehicle+Driver + gotcha #57 (3 HRM catalog) closeout
...
STATUS/HANDOFF S51 (Mig 43->45, tables 91->92, test 181->186, bundle Cg9mvltU/YgqDvsqr, P11-C DONE) + gotchas #57 ext (2->3 HRM catalog Mig 45 + Master ext backlog Mig 46 worktree) + session log 2026-06-08-S51. Agent-memory flush (impl-be/fe + test + cicd + investigator self-write; reviewer em-main proxy [return truncated gotcha #53 ]). CI-skip (docs/.md only).
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com >
2026-06-08 10:52:25 +07:00
30a99aa03f
[CLAUDE] Hrm: P11-C Vehicle+Driver catalogs (Mig 44) + gotcha #57 filtered-unique 3 HRM catalog (Mig 45)
...
Deploy SOLUTION_ERP / build-deploy (push) Successful in 4m18s
P11-C: extend HrmConfigs +2 kind (Vehicle/Driver) declarative. Mig 44 AddVehicleAndDriverCatalogs (2 table filtered-unique Code, tables 91->93). Domain entity + EF config (filtered day-1) + 2 DbSet + HrmConfigFeatures Region5/6 CRUD + Controller +2 route-group (GET public / write Roles=Admin) + MenuKeys +2 +All (auto Admin perm) + DbInitializer 2 menu leaf + idempotent seed 2 veh/2 drv. FE declarative KIND_CONFIG +2 kind x2 app (SHA256 mirror) + 4-place (types/page/menuKeys/Layout staticMap), :kind-driven no new route.
gotcha #57 (bundled; OtPolicy missed in backlog, caught via grep) - Mig 45 FilterHrmCatalogUniqueIndexesByIsDeleted: LeaveType+ShiftPattern+OtPolicy bare .IsUnique() -> .HasFilter([IsDeleted]=0) (recreate-on-soft-deleted-slot 500 fix, mirror Holiday Mig 43). Tests +5 HrmConfigFilteredUniqueTests (181->186 PASS) test-before RED->GREEN. Reviewer caught FE<->BE Driver required-field mismatch -> fixed.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com >
2026-06-08 10:32:28 +07:00
f8179c5fbd
[CLAUDE] Docs: S50 Harness 1·2·3 verified-runtime closeout + AS-10 autonomous-write finding (E-006)
...
- Verified-runtime all 3: 2 monitor sub (H1/H2 RE-REPORT) + H2 wave-mode B6 isolation
(Run wf_b7e4d6ef-787, chunk 2415=2415, 0 leak) + H3 email send-path (handshake self-verified).
- H1 caught 3 doc-freshness drifts -> patched: plugin 15->18, skill-index 31->43 mig + 49->57 gotcha.
- gotcha #57 exact coords confirmed: LeaveTypeConfiguration.cs:19 + ShiftPatternConfiguration.cs:19.
- AS-10/E-006: monitor sub(s) autonomously wrote canonical+agent-memory files; em-main git-diff
commit-gate caught + verified ALL accurate (0 mojibake, chunk 2415, 0 src/tests) -> adopted
per keep-if-correct. Process gap flagged for monitor tool-grant review.
- Test 181 PASS unchanged (0 .cs). CI-skip (all .md).
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com >
2026-06-08 00:25:00 +07:00
31629a196c
[CLAUDE] Docs: error-ledger E-005 (AS-1 git add -A) + AS-10 (sub-write-despite-R1) + 2 guards verified (session-end S49)
...
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com >
2026-06-07 23:26:26 +07:00
0647b4c620
[CLAUDE] Docs: fill adap-report + session-log commit-sha e27d877 (Harness 1/2/3 S49)
...
Deploy SOLUTION_ERP / build-deploy (push) Successful in 4m13s
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com >
2026-06-07 23:19:30 +07:00
e27d877172
[CLAUDE] Infra: adopt AI_INFRA Harness 1/2/3 — monitor subs (roster 8->10) + wave-folder isolation + email channel (S49)
...
Harness 1 (Self-observability): NEW tooling-auditor (H1 tooling/docs-freshness 4-faceted) + harvest-curator (H2 harvest-integrity 5-axis) INFORM-only monitor subs, TACH BIET per anh-mandate -> roster 8->10. Wire session-start Phase 2.1.1 RE-REPORT + session-end L.b 6->7-step (H2 5-axis GATE + H1 chot + B5 wave-gom). H3 plugin/skill = gop-vai doc, 0 new agent.
Harness 2 (wave-folder isolation): hmw.js WAVE-MODE (subMdPath + tool-aware writeGuard) + .gitignore wave-*/ + agent-teams/ (B6 git-check-ignore verified) + NEW workflows/README convention. Harness 3 (email channel): broadcasts/ (6+6 folder + 13 .gitkeep + _index + inbox/README, committed) + send/check-email cmd (self=se) + adap-apply base-path fix outbox/all/.
HMW-mode ON: recon fan-out 4 read-only agent -> em main single-writer WRITE -> reviewer PASS all 3. Containment: git-diff 1 benign self-MEMORY + chunk-count 2414=2414 (0 RAG-write). Nac executed-file, verified-runtime PENDING CLI restart. 3 adap-reports + session log. Test 181 unchanged (no product code). CI runs (hmw.js/.gitignore/.gitkeep not path-ignored) but no bundle/migration change.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com >
2026-06-07 23:18:43 +07:00
b8378148df
[CLAUDE] Docs: fill adap-report commit-sha cf908f5 (HMW-governance S49)
...
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com >
2026-06-03 13:15:29 +07:00
cf908f5276
[CLAUDE] Infra: adopt AI_INFRA HMW-governance broadcast — ultra-on/off toggle + hmw.js checkpoint-gate + memory-safety (S49)
...
adap-apply 2026-06-03-Agent-ultracode-hmw-mem-governance (reviewer_gate PASS).
PROJECT-FIT=ADOPT tailored: SE 8-agent roster. nac=executed-file (verified-pending restart+spawn-test).
- T1/T2 toggle: .claude/commands/ultra-on.md + ultra-off.md; marker .claude/hmw-mode.on gitignored (T2 non-negotiable).
- T3: session-start BUOC 0.5 reads marker -> reports ON/OFF.
- S2/S3/S4: .claude/workflows/hmw.js P2 fan-out — checkpointApproved throw (mechanized), args JSON.parse-guard, role-whitelist fail-soft, VALID_ROLES=8 SE agents, sub-no-spawn-sub, return schema findings+memoryDelta 4-field (R1).
- M1-M5: B1 slice-inject / M2 return-delta-only / B3 single-writer append-only / B2 harvest-lien / M5 store_memory-strip re-verified intact (0 tools-grant).
- agents/README.md +HMW governance section (VALID_ROLES source-of-truth) + adap-report 5-field LOCK.
Test 181 unchanged (no .cs/.tsx). CI-skip (all .md/.js/.gitignore).
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com >
2026-06-03 13:15:03 +07:00
e2fcabea00
[CLAUDE] Docs: S48 post-deploy sync — cicd Run #369 PASS (login a11y live)
...
- STATUS bundle hash admin DPPTx2Kw / user CjoUEsoV (rotated) + S48 verdict
- HANDOFF next-(a) marked done · session log cicd spawn-record + verdict
- cicd-monitor MEMORY flush (Run #369 + bundle baseline)
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com >
2026-06-03 00:13:48 +07:00
350b2bfb28
[CLAUDE] FE-Admin/FE-User: login subtitle contrast a11y fix (slate-500 -> 600)
...
Deploy SOLUTION_ERP / build-deploy (push) Successful in 4m12s
FD2 spawn-test outcome — login subtitle contrast ~4.6 -> ~7.5:1 over translucent
card (FD5 WCAG-AA floor). On-scale token, no layout shift. Mirror x2 app.
Build x2 PASS, 0 TS error. Test 181 unchanged (FE-only, no .cs).
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com >
2026-06-03 00:06:18 +07:00
009dd94f22
[CLAUDE] Docs: S48 adap-* verify closure post-restart + Gov-v2 error-ledger + §L.b
...
- store_memory strip VERIFIED-runtime (registry 0/8 subs) — adap-report updated
- frontend-designer FD2 loop VERIFIED-RAN (first spawn) — adap-report updated
- Gov-v2 delta CLOSED: NEW docs/governance/error-ledger.md (blameless RCA + Active-Guards
index + AS-1..AS-9 deterministic-detect + 3-ledger triad) + session-end.md Phase 1.5 §L.b 6-step
- STATUS/HANDOFF S48 + session log + frontend-designer MEMORY flush (FD2 rig + Tailwind-v4 fact)
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com >
2026-06-03 00:05:39 +07:00
72bbfa56a5
[CLAUDE] Infra: adopt AI_INFRA adap-* channel + store_memory strip + frontend-designer (S47)
...
- Install 3 federated adoption slash-commands (/adap-apply|report|request) in .claude/commands/ (read AI_INFRA outbox read-only, apply own repo, write adap-report; AI_INFRA /adap-audit reads cross-repo)
- Broadcast #1 (Memory-store-memory-strip-global): strip store_memory from all 8 sub-agents -> lead = sole RAG-writer; 4 RAG-read retained; agents/README synced + G-015 note
- Broadcast #2 (Agent-frontend-designer-floor): frontend-designer 8th agent (pink) -- forked AI_INFRA canonical FD1-FD10 visual-verification floor, tailored SE stack + use-existing-DS + boundary vs implementer-frontend; memory seed; roster doc 7->8
- Broadcast #3 (Governance-gov-v2): already-applied S44 -- delta report (gap: no formal error-ledger/L.b checklist)
- 3 adap-reports (5-field LOCK) in docs/governance/adap-reports/ + adoption-ledger row
- All nac executed-file/verified-pending (restart + spawn-test). 0 agents spawned. No product code. Test gate 181 unchanged. CI-skip (all .md).
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com >
2026-06-02 23:34:07 +07:00
aecd96b1cd
[CLAUDE] Docs: S46 memory integrity repair — sync STATUS/HANDOFF
...
Rebuild empty MEMORY.md index (S45 0-byte) + repopulate feedback_background_spawn_visibility + new feedback_session_end_memory_write_verify (memory files live outside repo). Fix stale user-memory count 27->14. Tier HANDOFF S43->pointer.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com >
2026-06-02 23:00:57 +07:00
7fbe05a19c
[CLAUDE] Docs: S45 session-end — test-gap + Mig 43 sync
...
STATUS/HANDOFF S45 (154->181 test, Mig 43) + gotcha #57 (soft-delete UNIQUE must filter [IsDeleted]=0) + session log + root CLAUDE counts + ef-core skill Mig 43 row + flush 3 agent MEMORY (test-specialist proxy after #53 truncation + cicd Run #368 + investigator P11-C recon).
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com >
2026-06-01 14:49:28 +07:00
0c5a014ebe
[CLAUDE] Infra: Mig 43 filter Holiday UNIQUE (Year,Date) by IsDeleted (S45)
...
Deploy SOLUTION_ERP / build-deploy (push) Successful in 4m19s
Fix drift surfaced by S45 Holiday coverage tests: DB UNIQUE (Year,Date) was unfiltered while handler checks !IsDeleted -> recreating a holiday on a soft-deleted slot threw DbUpdateException(500). Add .HasFilter("[IsDeleted] = 0") matching the 13x project filtered-unique pattern (Catalogs/Contract/PE/Proposal/Budget/WorkflowApps). Soft-deleted slot now reusable per app intent. Flipped Case 7 to assert success-on-reuse. 181 test PASS.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com >
2026-06-01 13:43:32 +07:00
051b62bc2f
[CLAUDE] Tests: close 3 HRM coverage gaps (S45)
...
Gap1 (CRITICAL) Holiday composite UNIQUE (Year,Date): Create/Update guard, self-update no false-positive, soft-delete exclusion. Gap2 EmployeeSatellite: 5x FK-invariant parent guard + soft-delete + cascade semantics + EF model cascade config. Gap3 gotcha #44 authz regression: HrmConfigsController (bare [Authorize] + writes Roles=Admin) + EmployeesController (class Policy Hrm_HoSo.Read + per-action). 154 -> 181 PASS (+27, Infra 96->123).
Surfaced drift (test-locked current behavior, fix pending): Holiday DB UNIQUE (Year,Date) NOT filtered by IsDeleted -> recreating on soft-deleted slot throws DbUpdateException(500) vs app-level !IsDeleted intent. Inconsistent with PE/Contract LevelOpinions filtered-unique pattern.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com >
2026-06-01 13:38:05 +07:00
dbbed1534d
[CLAUDE] Docs: S44 session-end — HANDOFF tier (add S44 + fold S41)
...
Add S44 brief (monthly drift audit + AI_INFRA 06-01 adopt, 2-way VERIFIED,
chain ae30f8f->5dbcad3); fold S41 RAG-cleanup into older-pointer (tiering 2-3).
STATUS + governance ledger already updated in-session.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com >
2026-06-01 13:09:53 +07:00
5dbcad3f2d
[CLAUDE] Docs: AI_INFRA bundle 06-01 VERIFIED 2-way — RT3 confirmed close
...
AI_INFRA re-verified chain ae30f8f->071c25c independently (Gitea, tree clean) ->
NAC VERIFIED-self -> VERIFIED (2-way confirmed). Permanent ledger both sides.
SE = sister thu 2 tron vong doi adoption loop.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com >
2026-06-01 13:03:42 +07:00
071c25c8b4
[CLAUDE] Docs: finalize §E adoption report — evidence chain + carry-over resolved
...
Update BROADCAST-OUT-06-01 SERVER-VERIFIABLE line: chain ae30f8f -> 5b8736d ,
tree 100% clean, no carry-over remaining (closes the S44 loop for AI_INFRA double-check).
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com >
2026-06-01 12:53:01 +07:00
5b8736d07c
[CLAUDE] Docs: resolve S40 carry-over — BROADCAST-2 feedback + gitignore local .mcp.json
...
- BROADCAST-OUT-...-05-29.md: commit parallel-session "BROADCAST 2 — Infra Feedback"
addition (MCP fragility / rag.json slug / search_code corpus gap / re-index ask;
RAG chunk fe64e725). Legit governance trail; AI_INFRA 06-01 bundle partly responds to it.
- .mcp.json: gitignore (rag-unified stdio, machine-specific absolute paths, no secrets,
reconstructable local env glue — not shared).
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com >
2026-06-01 12:51:55 +07:00
ae30f8f5e2
[CLAUDE] Docs: S44 monthly drift audit + AI_INFRA bundle 06-01 adopt
...
Cadence audit (2026-06-01), docs-only -> CI-skip. investigator-codebase
drift scan (ground-truth from disk) -> em main patch. No code touched,
154 test unchanged.
Drift fixes (42 count corrections): 40->42 mig, 84/59/55/47->91 tables,
130/111->154 test, 52/49->56 gotcha across CLAUDE.md, docs/CLAUDE.md,
ef-core-migration + dependency-audit skills, schema-diagram, database-guide.
schema-diagram migration table extended Mig 17-42; ef-core history Mig 27-42;
detailed-section gap (Mig 27-42 modules) flagged explicit (deferred, not silent).
AI_INFRA bundle 06-01 (federated, full scope):
- A: RAG T1/T2 auto-ack
- C: hygiene 7/7 agent-mem L1 <=16KB; "25KB"->"~30KB tiered" wording x7
- D: #4 self-sustaining adoption-report step -> /session-end Phase 6.3
- E/F: report + ledger -> docs/governance/
Carry-over .mcp.json + BROADCAST-05-29 left untouched (concurrency rule).
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com >
2026-06-01 12:39:56 +07:00
197c72f352
[CLAUDE] Docs: S42-S43 close-out — Phase 11 P11-A+P11-B session log + HANDOFF tier + gotcha #56
...
- Session log S42-S43 (P11-A WorkflowApps ApproveV2 + P11-B LeaveBalance, 8 commit chain)
- HANDOFF tiering: +S43 +S42, trim S40-S38 → session logs
- gotcha #56 CWD-drift stray memory (cd trước spawn → agent ghi nhầm fe-user/.claude, 3× S42-S43)
- STATUS gotchas 55→56
- cicd-monitor MEMORY (Run #367 P11-B verdict)
User memory: +feedback_high_to_max_multiagent_quality (High lọt 2 bug, Max 0 bug; WIRE FE
đọc reference proven + FK-invariant-at-write-doors + Max re-review cross-stack).
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com >
2026-06-01 12:04:34 +07:00
efc5f5f657
[CLAUDE] Docs: STATUS Phase 11 P11-B done — Mig 42, 91 tables, 154 test, bundle Krjvg_3j/6sNStgxa
...
P11-B LeaveBalance deployed + verified prod (Gitea #367 ). Mig 42 applied,
LeaveBalances UNIQUE+FK Restrict, /leave-balances/my 200 lazy-default 5 LeaveType.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com >
2026-05-30 11:26:14 +07:00
82d7fcff4d
[CLAUDE] Workflow: LeaveBalance business logic — trừ phép khi duyệt + số dư (Phase 11 P11-B)
...
Deploy SOLUTION_ERP / build-deploy (push) Successful in 4m8s
Số dư phép theo (User × LeaveType × Year) + trừ tự động khi đơn nghỉ duyệt cuối.
Policy: cho phép vượt số dư (âm) + cảnh báo (anh main chốt), tích hợp vào trang đơn nghỉ.
Schema (Mig 42 AddLeaveBalances — pure additive, 1 bảng):
- LeaveBalance: UserId + LeaveTypeId + Year + EntitledDays + UsedDays + AdjustmentDays.
UNIQUE (UserId,LeaveTypeId,Year), FK LeaveType Restrict, decimal(5,2).
Remaining = Entitled + Adjustment − Used (computed, không store).
Deduction hook (ApproveLeaveRequestHandler nhánh terminal DaDuyet — exactly-once):
- Upsert LeaveBalance(RequesterUserId, LeaveTypeId, StartDate.Year), auto-create từ
LeaveType.DaysPerYear, UsedDays += NumDays. Guard Status!=DaGuiDuyet chặn re-approve.
FK invariant guard (em main thêm sau test reveal FK risk):
- Create + UpdateDraft validate LeaveTypeId tồn tại (AnyAsync) → ConflictException.
Đóng cửa vào — bogus type không thể tới deduction FK insert (tránh 500 kẹt đơn).
CQRS LeaveBalanceFeatures.cs: GetMy (self, lazy merge active LeaveType) + GetUser (admin)
+ AdjustLeaveBalance (admin upsert carry-over). Controller [Authorize] + admin Roles=Admin.
Embed: GetLeaveRequestByIdHandler trả balance NGƯỜI TẠO (approver xem thấy đúng).
FE: WorkflowAppDetailPage ×2 — block "Số dư phép" + cảnh báo vượt khi kind=leave (SHA256 identical).
Tests (+11, 130→154 PASS): deduction single/multi-level/accumulate/negative-allowed/
reject-return-no-deduct + lazy-merge + adjust upsert + Create guard bogus→Conflict.
Cũng repair 2 test S42 terminal FK-fail (template BuildLeave +seed LeaveType).
Verify: build 0 error · 154 test · FE ×2 · reviewer Max PASS (deduction exactly-once +
FK invariant fully closed, 2 minor concurrency/comment defer).
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com >
2026-05-30 11:10:44 +07:00
0db5e1fdc9
[CLAUDE] Docs: STATUS final bundle hash + ProposalCreate fix prod-verified (S42)
...
Final build (e47ef1d ProposalCreatePage fix + ffb2062 docs) deployed.
Bundle live: admin BU8FTBRi / user tepE4jvR (both rotated, stable).
Auth-verified prod: GET /approval-workflows-v2?applicableType=4 trả {types}
shape đúng + QT-DX-V2-001 selectable=true → ProposalCreate dropdown populated.
All S42 P11-A work (wire + 2 picker bug fix + ProposalCreate fix) live + verified.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com >
2026-05-30 10:34:36 +07:00
ffb20627b7
[CLAUDE] Docs: update STATUS bundle hash + run-id reconcile (S42 P11-A fix deploy)
...
Deploy SOLUTION_ERP / build-deploy (push) Successful in 3m52s
- Bundle hash live → admin 6D4k-aRi / user DkME-974 (Gitea #365 , verified post-fix)
- Reconcile Gitea task id: #364 (e7b66cd P11-A) + #365 (75df04e picker fix);
"Run #250 " cũ là cicd-monitor memory truncated ghi sai → Max re-verify sửa
- Note fe-user re-rotate pending e47ef1d (ProposalCreatePage chip task deploy riêng)
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com >
2026-05-30 10:23:43 +07:00
e47ef1d4ee
[CLAUDE] FE-User: fix ProposalCreatePage workflow dropdown shape (latent S37 bug)
...
Follow-up cho bug flagged trong 75df04e . ProposalCreatePage (fe-admin + fe-user)
fetch /approval-workflows-v2 expect flat array, nhưng endpoint trả AwAdminOverviewDto
{types:[{applicableType, history:[...]}]} → workflows.data.map chạy .map trên object
→ TypeError/dropdown rỗng. Latent vì create-with-workflow chưa exercise UAT.
Fix: mirror pattern proven của ContractCreatePage + WorkflowAppDetailPage —
res.data.types.find(t=>t.applicableType===4)?.history.filter(isUserSelectable).
WorkflowDto +isUserSelectable. Render .map giữ nguyên (data giờ là array đúng).
Verify: tsc -b + vite build ×2 PASS (exit 0) · fe-admin/fe-user SHA256 identical
(91565D47...7697C771).
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com >
2026-05-30 10:19:17 +07:00
75df04ec82
[CLAUDE] Workflow: fix workflow picker 2 bug (P11-A Max re-review) + SetWorkflow endpoint
...
Deploy SOLUTION_ERP / build-deploy (push) Successful in 4m5s
Double-check chất lượng P11-A ở Max (agents trước chạy High + truncate 3×) →
phát hiện 2 bug THẬT trong workflow-picker FE của WorkflowAppDetailPage (core
approve/reject/return ĐÚNG, chỉ sub-flow chọn quy trình hỏng):
Bug #1 (HIGH) — pinWorkflow PUT /{id} chỉ gửi {approvalWorkflowId} → UpdateDraft
validator (Reason NotEmpty, NumDays>0...) fail → 400. Nút "Lưu quy trình" vỡ.
Bug #2 (HIGH) — fetch workflow expect flat array nhưng endpoint trả
AwAdminOverviewDto {types:[...]} → picker rỗng/crash. FE copy nhầm pattern hỏng
của ProposalCreatePage thay vì PE/Contract proven.
Fix:
- BE: thêm endpoint chuyên dụng PUT /{id}/workflow + Set{Module}WorkflowCommand/Handler
cho 4 module — chỉ set ApprovalWorkflowId trên draft Nhap/TraLai (verify ApplicableType
per module), KHÔNG validate field khác. Single-responsibility, bulletproof.
- FE: sửa fetch mirror PE/Contract (data.types.find(t=>t.applicableType===X)?.history
.filter(isUserSelectable)) + pin gọi endpoint mới. fe-admin+fe-user SHA256 identical.
- Test: +3 SetWorkflow (happy no-status-change / wrong ApplicableType Conflict / submitted
guard) → 141→144 PASS.
Verify: BE build 0 error · 144 test PASS · FE build ×2 · SHA256 identical.
Bonus phát hiện: ProposalCreatePage (S37) có bug #2 có sẵn (latent, chưa exercise UAT)
→ flag spawn task riêng, KHÔNG fix trong commit này.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com >
2026-05-30 10:14:34 +07:00
e7b66cd52b
[CLAUDE] Workflow: wire ApproveV2 + LevelOpinions cho 4 WorkflowApps module (Phase 11 P11-A)
...
Deploy SOLUTION_ERP / build-deploy (push) Successful in 4m6s
Wire full approval workflow V2 cho Leave/OT/Travel/Vehicle — cookie-cutter
mirror Proposal (Mig 38). Trước đây skeleton Phase 1 (Create+List), giờ
ApproveV2 advance-level + UPSERT LevelOpinion + atomic codegen.
Schema (Mig 41 WireWorkflowAppsApprovalV2 — 84→89 tables, pure additive):
- 4 bảng {Leave,Ot,Travel,Vehicle}LevelOpinions (UNIQUE composite + Cascade
parent + Restrict Level — mirror ProposalLevelOpinion)
- 1 bảng WorkflowAppCodeSequences (shared atomic MaDonTu, Prefix-keyed)
- 4 cột RejectedFromStatus (smart return tracking)
- enum ApprovalWorkflowApplicableType.TravelRequest = 9
Application (LeaveOt + TravelVehicle ApprovalFeatures.cs — 30 handler):
- GetById detail (Include LevelOpinions + JOIN Step/Level) · UpdateDraft
- Submit (gen MaDonTu + DaGuiDuyet + level=1, verify ApplicableType per module)
- Approve (verify actor==ApproverUserId OR Admin, UPSERT opinion latest-write-wins,
advance level OR terminal DaDuyet, empty comment → placeholder)
- Reject (→TuChoi) · Return (→TraLai + RejectedFromStatus)
Api: 4 controller +6 route mỗi cái (GET/{id}, PUT/{id}, submit/approve/reject/return)
Infra: DbInitializer seed 4 workflow V2 mẫu (QT-NP/OT/CT/XE-V2-001) → UAT test ngay
FE: WorkflowAppDetailPage.tsx declarative 4-kind (fe-admin+fe-user SHA256 identical)
— workflow status + opinion timeline + action buttons; gỡ banner skeleton + row nav
Tests: +11 WorkflowAppApproveV2Tests (130→141 PASS) — state machine + UPSERT
invariant + guards + codegen + forbidden + placeholder (Leave full + Ot smoke)
Verify: build 0 error · 141 test PASS · FE build ×2 · reviewer checklist
(ApplicableType per-module + cross-module DbSet + [Authorize] — no copy-paste bug)
Known-minor (unreachable): Reject/Return actor-check skip nếu CurrentApprovalLevelOrder
null — nhưng DaGuiDuyet luôn có set (defer hardening).
ItTicket KHÔNG đụng (kanban, no workflow V2).
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com >
2026-05-30 09:44:00 +07:00
ad1dea9349
[CLAUDE] Docs: S41 close-out — record RAG corpus cleanup (3080->2406, 5/5 store_memory preserved)
...
STATUS + HANDOFF: S41 episode — exclude **/-anchor fix + AI_INFRA re-bootstrap +
store_memory reconcile (3 broadcast twin + audit-response twin + catch-up promoted-to-disk).
RAG chunks 3076->2406. SE post-verify PASS. Next S42 = product focus (Phase 11 / test gaps / Ops).
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com >
2026-05-29 23:30:50 +07:00
e8cbbe5c75
[CLAUDE] Docs: S41 promote-to-disk S37-S40 RAG catch-up chunk (twin-safe before re-bootstrap)
...
Per AI_INFRA unified at-risk rule (HOLD bootstrap): store_memory chunk 0307141b
(source docs/STATUS.md#s37-s40-catchup) is a synthesized cross-session summary whose
info is scattered across 2 session logs + STATUS but is NOT a clean single twin.
Promote-to-disk verbatim so replace-mode re-bootstrap reproduces it from a corpus file.
5/5 store_memory accounted: 3 broadcasts (disk-twinned) + 16a6b6db (RAG-AUDIT-RESPONSE
twin-safe) + 0307141b (this file, promoted). No data loss on re-bootstrap.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com >
2026-05-29 23:23:05 +07:00
282cbd0c7b
[CLAUDE] Docs: S41 RAG audit response — exclude **/-anchor fix + retire stale _decision_log + AI_INFRA signal
...
Deploy SOLUTION_ERP / build-deploy (push) Successful in 4m7s
- rag.json exclude_paths root-anchored -> **/-anchored (defeats gotcha #10 :
node_modules/** + docs/_archive/** were not matching nested paths)
- _decision_log: retire stale "+321% / LIVE 11,922" -> real status
(LIVE ~3080 ~= registry 3076, drift closed 2026-05-28)
- New docs/governance/RAG-AUDIT-RESPONSE-2026-05-29.md: SE-side prep done +
corrections (store_memory at-risk = 3 disk-backed broadcasts, NOT ~27) +
re-bootstrap ask for AI_INFRA + post-bootstrap verify checklist
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com >
2026-05-29 22:18:33 +07:00
885c794ce8
[CLAUDE] Docs: S40 session-end — HANDOFF full S40 brief + session log
...
- HANDOFF S40 section: full session (bulletin 4/4 + RAG recovery + concurrency warning + slash commands live)
- Session log 2026-05-29-S40 created
- Explicit git add (not -A) to avoid touching concurrent session's uncommitted BROADCAST 2 + untracked .mcp.json
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com >
2026-05-29 20:55:24 +07:00
37536fdd5c
[CLAUDE] Docs: S40 broadcast-out infra retrospective + proposals to AI_INFRA
...
- Candid retro sau RAG MCP outage: SPOF/disk-full, no in-session reconnect, slug bug undetected 10 sessions, auto_reindex not firing, registry drift, MCP flapping
- 5 proposals: prioritize MCP->web-hosted, disk alert, bootstrap corpus-path validation, verify auto_reindex hook, registry auto-sync
- Fair credit AI_INFRA fast response. store_memory chunk e7703fb0 (real-time) + persistent file
- Stance: SE focus product, infra = user-only per charter v2
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com >
2026-05-29 20:46:23 +07:00
e052db596c
[CLAUDE] Docs: S40 mark broadcast store_memory DONE (RAG MCP recovered)
...
- RAG MCP rag-unified reconnected (fresh quit+relaunch + trust .mcp.json approve per AI_INFRA runbook)
- store_memory broadcast chunk 1b7a28fc indexed; search_memory rerank 0.96 (self) + cross_project_search rerank 0.91 (TOP across all 7 projects -> AI_INFRA discoverable)
- BROADCAST-OUT record updated: pending -> DONE
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com >
2026-05-29 20:26:54 +07:00
894eb681bc
[CLAUDE] Docs: S40 broadcast-out record to AI_INFRA (bulletin 4/4 adoption + findings)
...
- Persistent broadcast record docs/governance/ (RAG store_memory deferred — MCP disconnected)
- Format per bulletin section 116: checkmark [SOLUTION_ERP] adopted MUC X (commit)
- 4/4 adoption + rag.json extra_corpus bug-fix finding + 3 standing items for AI_INFRA
- Discoverable via cross_project_search after AI_INFRA re-index (docs/**/*.md in corpus)
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com >
2026-05-29 19:03:01 +07:00