wal: flush 20260712T1812
This commit is contained in:
@ -7,9 +7,10 @@ chain:
|
||||
[x] fable-clone invest ensemble 5 lane (wf_e7896ca6-901) — 4/5 structured + lane visibility garble#53 → em-main-solo recover
|
||||
[x] synthesize → ghi spec-file 3-mục (runs/2026-07-12-S113-supplier-import-v2-invest/spec-supplier-import-v2-12-07-2026.md) + 30 token thật extract
|
||||
[x] anh Kiệt CHỐT: D1=A(Mã NCC=Code) · D2(Code=cổng public, MST=cảnh-báo-mềm, existing-public giữ, import-scope) · D3(nới quyền cập-nhật-danh-mục, không admin-only) → spec §DECISIONS updated
|
||||
[!] HMW Opus implement — implementer-backend (Mig 64+dedup-MST+PublishCmd+template+authz-loosen+re-bake-token) ⟂ implementer-frontend (2-app: badge+publish+filter+template-btn+editable-Code+MST-warn) — ĐANG spawn parallel
|
||||
[ ] test-specialist ≥15 test + reviewer + build + commit + deploy + cicd verify
|
||||
[x] FE (implementer-frontend) DONE — npm×2 PASS, 2 dialog+2 page SHA256-identical (badge+Công-bố+filter+file-mẫu+Mã-editable+MST-warn)
|
||||
[!] BE (implementer-backend) #53-GARBLE+INCOMPLETE — scaffold OK (Mig 64+entity/config/DTO/queries/2-folder/interface) NHƯNG SupplierExcelImportService.cs=0-marker(service-core CHƯA)+controller+seed CHƯA → build VỠ → SendMessage-resume afffdc4f2abacfd74 finish service-rewrite/controller/seed ĐANG chạy nền
|
||||
[ ] BE-resume về → em-main build slnx 0/0 + test-specialist ≥15 + reviewer + commit + deploy + cicd
|
||||
|
||||
next: 2 implementer về → em-main verify contract khớp + build slnx + npm×2 → test-specialist → reviewer → commit → deploy
|
||||
verify: spec-file §DECISIONS + §API-CONTRACT chốt; session chết → /tiep đọc WAL → spec có sẵn + decisions chốt → check 2 implementer done? (agent-memory diary) → tiếp test/review (KHÔNG re-invest, KHÔNG re-ask decisions)
|
||||
wf: implementer-backend+frontend | HMW-implement-parallel | BE⟂FE-disjoint | SPAWNING | resume=verify-contract→test→review→deploy
|
||||
next: chờ BE-resume → build slnx verify → test-specialist → reviewer → BÁO anh review → deploy
|
||||
verify: BE landing verify bằng git + grep service markers (IsPublic/NormalizeMst/BuildTemplate) — 0=chưa xong; session chết → /tiep check service-markers+build TRƯỚC khi tin BE done (KHÔNG re-invest, KHÔNG re-ask decisions, FE đã DONE đừng làm lại)
|
||||
wf: implementer-backend(resume) | HMW-implement | BE-service-core-finish | RESUMING | resume=build-slnx→test→review→deploy
|
||||
|
||||
@ -6,6 +6,14 @@
|
||||
|
||||
---
|
||||
|
||||
## 🆕 S113 (2026-07-12) — Supplier import v2 FE ×2 app (anh Kiệt owner; BE done ∥ impl-backend). Build PASS ×2
|
||||
3 file×2app: 2 SHA-pair (dialog+page byte-identical) + types DIVERGED (Department.parentId only S65 → edit-identical KHÔNG cp).
|
||||
- **types/master:** Supplier +`isPublic:boolean` (anchor `// Tình trạng`+status; git-diff = CHỈ `parentId`, isPublic ∉ diff = mirror khớp).
|
||||
- **SupplierImportDialog `78403bd8…`:** +"Tải file mẫu" (Download icon, blob `GET /suppliers/import/template`→`a.download='Mau-Database-NCC.xlsx'`, pattern PeDetailTabs:3273 useMutation) dưới drop-zone · cột "Mã" `<td>{r.code}`→`<Input value={r.code??''} onChange updateRow(rowIndex,{code})>` (updateRow=setPreview map-patch) · type +`mstMissing:boolean` → amber "⚠️ Chưa có MST, có thể bị trùng" cột Thông báo · helper blue draft. **3.d disabled ĐÃ đúng SẴN** (`errorCount>0||pending`, btn hidden khi !layoutValid — KHÔNG chặn blank-code) → NO change.
|
||||
- **SuppliersPage `9947b121…`:** +cột "Trạng thái" badge emerald "Đã công bố"/slate "Nháp (ẩn)" full-class-literal(P14) · Công bố(Globe emerald)/Ẩn(EyeOff) action-btn guard Update → publish mut `POST /suppliers/{id}/publish {maNcc||undefined, publish}` (KHÔNG qua UpdateSupplier #73) · publish Dialog sm (Mã NCC Input, gate `!maNcc.trim()`) · filter Select `published`(''=omit/'true'/'false' → axios undef/true/false) queryKey+ · actions w-32→w-40 (3 icon).
|
||||
- **NO 4-place mirror** (dialog+page trên page ĐÃ routed → no route/menuKey/Layout). **NO BE/test touch** (src/Backend/** = impl-backend ∥, tôi Read-only DTO). Build: admin 1950mod `index-CWBEeKi5.js` 8.48s / user 1939mod `index-JpoDnukv.js` 1.54s, 0 TS err; pre-existing warn @import+>500KB+realtime dynamic.
|
||||
- **DEVIATION flagged:** "Tải file mẫu" đặt CHỈ trong dialog (② canonical + ③ acceptance "ImportDialog nút mẫu"; ③ SuppliersPage= badge+Công bố+filter+guard, KHÔNG list nút mẫu) — parent 2.d loosely list page-btn nữa → 1-line ask nếu muốn thêm page-level template btn. Tag `[s113, supplier-publish-draft, isPublic, template-blob-download, ma-editable-grid, mst-missing-warn, publish-not-update, sha256-2pair, type-diverge-edit-identical]`.
|
||||
|
||||
## 🆕 2026-07-12 — Supplier import Excel FE (Phase B Approach A) ×2 app byte-identical (lead chốt UX; BE done+450 tests)
|
||||
NEW `components/master/SupplierImportDialog.tsx` (folder `master/` MỚI cả 2 app) + wire `pages/master/SuppliersPage.tsx` (nút "Import Excel NCC" outline cạnh "Thêm NCC" trong PageHeader actions flex + render dialog). KHÔNG 4-place mirror — dialog trên page ĐÃ routed → no new route/menuKey/Layout.
|
||||
- **Flow:** .xlsx → POST `/suppliers/import/preview` multipart field `file` → preview. `layoutValid===false`→alert đỏ+warnings, ẩn nút xác nhận. Else: badge counts (New/Update/Skip/Error) + warnings amber + `<table>` raw (Dòng·StatusBadge·Mã·Tên·Loại·Thông báo). "Xác nhận nhập" disabled `errorCount>0` → POST `/import/confirm` body `{rows}` = echo `preview.rows` VERBATIM. committed→toast+`invalidateQueries(['suppliers'])`+close; !committed→alert `errors[]`.
|
||||
|
||||
Reference in New Issue
Block a user