4.3 KiB
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.
- Supplier Excel-import Phase B (
- bundle admin
BVyH-FY7→Cixlt_MA/ userEDsZebvn→BhBOG1dn· Mig 63 prod 2/2-col · smoke all-200 + import-route live.
Owner-directed (số = quyền anh)
harness_floor.rounded_up_tokens30K→100K +measured_token_estimatere-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_fd8f2bfe → root = 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/Create→Admin,CatalogManagerrole-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.