Files
solution-erp/docs/changelog/sessions/2026-07-12-S112-supplier-import-pe-signoff.md

4.3 KiB
Raw Blame History

S112 — 2 feature SHIP prod: Supplier Excel-import + PE sign-off change (2026-07-12)

em-main-led · lead=Opus 4.8 owner-choice (/model) · HMW-ON · 3 fable-clone ensemble Opus MAX + 8 spawn · 4 commit (2 prod + closeout) · Deploy Run #496 PASS.

Kết quả

  • 2 feature LIVE prod (Gitea Run #496, 5m25s, 458 test PASS):
    • Supplier Excel-import Phase B (e100ef0 — Mig 63): nút "Import Excel NCC" → upload → preview (New/Update/Skip/Error) → confirm all-or-nothing.
    • PE sign-off change (a829d0d — code-only): A1 người-tạo tự ký ô cấp mình + EDGE-5 khóa terminal + opinion-history.
  • bundle admin BVyH-FY7Cixlt_MA / user EDsZebvnBhBOG1dn · Mig 63 prod 2/2-col · smoke all-200 + import-route live.

Owner-directed (số = quyền anh)

  • harness_floor.rounded_up_tokens 30K→100K + measured_token_estimate re-measure 21K→55K. 21K cũ = UNDER-COUNT: S81 đoán tool-schema+framing ~7K, thực ~30-50K; disk-inject đo-thật 57.6KB (~14-19K tok) MỘT MÌNH đã ≈ 21K cũ. Sister-parity ~60-71K. Derived-flush engine §G.1.

Supplier import — pipeline

invest wf_e2f23a84 (30-col messy header row-4, #REF!, 4 NCC) → anh chốt 5 decision (Code=col4 · +2 field Mig63 · A-scoped-layout · fill-nulls-SAFE · Type-lạ→NhaCungCap) → BE (dedup OrdinalIgnoreCase preview+confirm chống unique-violation CI-collation · all-or-nothing · parser header-fingerprint absolute-cell-index #REF!-null NAS-backslash-raw) + FE 2-app byte-identical + 10 test có-RĂNG (SQLite BINARY → dedup ở SERVICE) → close-review wf_75d6149b GO-WITH-ADJ → adjust: bake 30 real-token RealFileHeaderTokens (byte-verify em-main) + .Normalize(FormC) de-risk NFD.

PE sign-off — pipeline

invest wf_fd8f2bferoot = ApplyDrafterBypassOnSubmitAsync (S60-feature) tự-ký-hộ ô creator bằng comment-canned + advance-qua → creator mất ô comment thật → anh Kiệt 6 decision: A1 (bypass CHỈ NV cấp dưới, creator ký tay, giữ skip-NV S60) · no-finalize-guard (theo quyền AllowApproverFinalize) · EDGE-5 hard-lock · 1-nút · opinion-history · phiếu-mới-only → close-review wf_7df56b89 GO-WITH-ADJ (🔴 L2-catch: EDGE-5-guard phải ĐỈNH-METHOD TransitionAsync mới chặn admin-override :290 [spec bỏ sót] · A1 MỞ CEO-skip MỚI qua finalize-flag) → oQ reconcile: finalize-theo-quyền accept + EDGE-5 !isAdmin && !isSystem admin-exempt ("Admin đầy-đủ-nhất") → BE (A1 minOwn+pointer-stop · EDGE-5 guard-top · history log-cũ→PurchaseEvaluationChangelog trước overwrite) + test 4-update→A1 + 8-new → reviewer GO 0-must-fix.

Lessons

  • #53-garble ×3 (invest + reviewer + cicd — chủ yếu Opus reasoning-lane) → recover: SendMessage-resume (2/2 clean lần 2) + em-main byte-verify (token-diff prod-curl) — KHÔNG tin verdict garble, tự verify ground-truth.
  • A1 "bám đúng quy trình" = thay-đổi tối-thiểu (chỉ gate bypass, 0 refactor engine) = an-toàn deploy prod live.
  • close-review > investigation: L2 bắt EDGE-5-guard-placement + A1-CEO-skip mà investigation nói "đã tồn tại" (imprecise).
  • NFC/NFD: header-fingerprint file Excel thật có thể NFD → .Normalize(FormC) cả 2 phía.
  • fill-nulls-safe: re-import KHÔNG sửa field đã-có (anh chốt "an toàn").

UAT heads-up anh Kiệt

  • A1 bỏ auto-terminal-on-submit: phiếu 1-bước creator-là-cấp-cuối nay cần bấm Duyệt (đúng ý, KHÔNG lỗi).
  • Upload file "Database NCC" THẬT trên DEV/prod xác nhận LayoutValid=true trước dùng (structure scout khớp + NFC handled, file-thật end-to-end chưa test; báo "Sai layout" → hộp đỏ FE có "Header nhận được" copy sửa 1 vòng, KHÔNG hỏng data).

Defer (non-blocking follow-up)

  • FE-Import-guard Suppliers/CreateAdmin,CatalogManager role-gate (user-thường thấy nút→403, BE-safe) 2-app.
  • 2 stale-comment (best-guess→baked) + test NormalizeJoin +.Normalize(FormC).
  • harvest run-trace 3 ensemble @full session-end (agents self-updated diary; em-main stamp [engine: fable-clone-ensemble · Opus-S112]).

State

Mig 63 · 89 bảng · 458 test (45D+413I) · gotcha 79 · menu 54 · bundle admin Cixlt_MA/user BhBOG1dn (Run #496) · prod 21 NCC/17 user.