Phiên governance thuần, 0 code product. Bookend @close chạy trọn 1 lượt (YC-018/YC-027).
14 vai: H1 8 FLAG · H2 GATE-FAIL 6 · cặp H24 deep (10+7 FLAG) · trio 3/3
(MIXED 38 trục → 4 action/18 BÁC → 50Đ/5T/15KC trên 70 claim) · ring1 41Đ/5T/19KC
· ring2 15Đ/0T/2KC · ring5 1Đ/2 xoá-án/1KC · ctx-audit TRUOT 6 FLAG · tầng-2/3 chấm.
Vá đã land:
- 3 ô SỐ canonical STATUS: Mig 73→74 · test 697→699 (45+654) · gotcha 92→93;
bổ 3 ô vào ledger WAL TRƯỚC khi vá; lan Mig 74 sang CLAUDE.md + docs/CLAUDE.md.
- CG-1 attempt #1: cứu front-end-reviewer-style 1.192→5.913 B (clobber-rot, 4 chứng;
harness-audit xác nhận md5 nối thuần, 0 mất).
- Trả nợ harvest S188 4 vai/42.975 B; đóng orphan S194 bằng synthesis hồi-tố.
- Vá gốc dòng rách so-yeu-cau:58-59 => máy đổi muc 28→29, hội tụ đếm tay.
- Đính chính tiền-đề SAI reinject-ledger:70 cho CẢ HAI vai (matcher DÍNH-vs-TÁCH).
- MIND-4 => mind-check --closed từ exit 1 sang exit 0.
3 RCA lỗi của lead: FAKE-VERDICT-S195 (verdict bịa cho vai chưa chạy) ·
RITUAL-ECHO-S195 (tái phạm lần 3) · SCORE-T1-S195 (đọc hụt số máy).
#53 nổ 10 lần, cứu 10/10 bằng resume-in-session.
4 vai tự phát hiện thước hỏng của chính mình — không có bước tự-falsify thì
lượt này có >=7 cáo buộc oan.
completeness-gate S195: vong 4/5 chuc-nang (khong-nhip: V4) | phep DAT 3 / TRUOT 1
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
CI run #489 ĐỎ sau 2m42s ở test-gate Infrastructure — nhưng lỗi thật ở BUILD, không phải test:
Microsoft.NET.Publish.targets(851,9): error MSB4186: Invalid static method invocation syntax:
"[MSBuild]::MakeRelative($(MSBuildProjectDirectory), …nhan cong, vat tu.docx)". Method not found.
MSBuild property-function tách tham số bằng DẤU PHẨY ⇒ đường dẫn chứa ", " biến lời gọi
2-tham-số thành 3 ⇒ không có overload ⇒ MSB4186, chặn ngay ở build nên test chưa kịp khởi động.
🔴 LOCAL KHÔNG TÁI HIỆN ĐƯỢC: global.json để rollForward=latestFeature ⇒ CI nhảy SDK 10.0.202
còn local 10.0.104. Đo: grep -c "MakeRelative" trong Publish.targets của SDK local = 0
(control dương "ContentWithTargetPath" = 8 ⇒ thước sống) — dòng mã gây lỗi KHÔNG TỒN TẠI trên
máy dev. "Local 699 PASS" là đúng-với-local, không phải đo ẩu.
Vá: đổi tên 2 file bỏ phẩy ("nhan cong, vat tu" → "nhan cong va vat tu"), sửa 2 chuỗi seed
DbInitializer + 4 chú thích nguồn trong lib/contractBody. Control: 4 template cũ cùng thư mục
không có phẩy ⇒ CI xanh nhiều tháng; 2 file mới có phẩy ⇒ đỏ ngay run đầu; biến duy nhất = phẩy.
+ gotcha #93 + luật khắc tại chỗ trong DbInitializer: tên file dưới wwwroot CẤM chứa dấu phẩy.
Đo lại sau vá: build 0 error (bin/obj dọn sạch trước) · test 699 PASS · 0 file wwwroot còn phẩy
· 2 cặp file body002_0*.ts vẫn trùng sha256.
🔸 CHƯA vá lớp gốc (SDK drift CI⟂local): siết rollForward sang latestPatch/disable sẽ đóng cả
lớp NHƯNG runner đang có 10.0.202 — pin về 10.0.1xx mà runner không cài thì CI chết hẳn thay vì
đỏ một run. Phải đo SDK trên runner trước; quyết định của chủ dự án.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Owner YC-032/033/034/036 — 4 vế:
1. TÁCH LOẠI: +2 ContractType (HopDongThauPhuVatTu=8 / HopDongThauPhuThietBi=9),
họ HD-TP-VT / HD-TP-TB, menu 01A./01B. (giữ 02.-07. nguyên, loại cũ =1 legacy).
Bịt 5 nhánh câm nuốt loại mới: WorkflowPolicy (mất trạm CCM), ContractCodeGenerator
(sai mã RG-001, không hồi tố được), ContractDetailsFeatures x2 (bundle rỗng HTTP 200),
SeedWorkflowDefinitions (Designer V1 rỗng). ContractDetailsHelpers.ThauPhuFamily —
3 loại chung bảng ThauPhuDetails ⇒ 0 migration cho vế này.
2. THÂN DOCUMENT-VIEW: ContractBodyView.tsx + lib/contractBody/ (002.02 = 36 ô/2 bảng/5 điều ·
002.03 = 46 ô/6 bảng/6 điều · PHẦN 2 dùng chung 5 điều read-only gắn CUỐI theo YC-034).
Lưu vào Contract.DraftData lược đồ {schemaVersion,kind,body,paymentTerms}.
Gỡ draftData:null hardcode 4/4 site — trước đây mỗi lần Lưu là xoá trắng thân HĐ.
3. PRE-FILL: cầu KHKK đổ 17 ô (Bên B · chủ đầu tư · gói thầu · số HĐ · giá trị) — 17/17 khớp
slot.key. Địa điểm lấy pe.DiaDiem (0% rỗng) thay Project.Location (93% rỗng). Vá regression
cầu KHKK đánh rơi PaymentTerms + BypassProcurementAndCCM so với cầu PE cũ.
4. KHOÁ BẢN CỨNG MỘT CHIỀU (YC-033 "giấy trắng mực đen"): Mig AddContractSealedAt
(+SealedAt +SealedByUserId), set ??= (upload lần 2 không đè mốc đầu), rào 2 cửa —
xoá đính kèm bản cứng ⇒ 409, sửa HĐ ⇒ chặn. Test-before 2 ca.
+ print CSS in trình ký (ô điền in ra thành đường kẻ, không phải khung input).
Template: 002.02/002.03 convert .doc→.docx vào wwwroot + trỏ đúng 2 loại mới (trước cùng trỏ
loại cũ ⇒ dropdown Mẫu sẽ rỗng) + reconcile IsActive giới hạn 2 FormCode (bản đầu quét toàn bộ
sẽ hồi sinh mẫu admin đã xoá mỗi restart — database-reviewer-style bắt).
Đo: build 0 error · test 697→699 PASS (+2 seal) · has-pending-model-changes = No changes ·
tsc --noEmit exit 0 x2 app · mọi cặp file 2-app sha256 trùng · Menu keys 120→122 · Policies 480→488.
NỢ ĐÃ-BIẾT (owner cố ý hoãn, không phải bỏ sót): VAT (chưa VAT, để sau) · bảng tóm tắt PHẦN 1
trỏ "xem ĐIỀU 8/12" mà 002.04 chỉ có 5 điều ⇒ con-trỏ chết · phân quyền upload bản cứng ·
12 điều PHẦN 2 không có trong tài liệu. Chưa soi: 2 vai style FE/BE (lane không tạo được artifact).
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Root-cause 2 ca trắng màn prod (S189 #486, S191 #600): deploy.yml xoá package-lock.json
rồi npm install => mỗi run resolve lại cây theo semver range => cùng commit ra bundle khác
nhau tuỳ registry lúc build. CI vẫn exit 0 + byte-match CI-prod + smoke 200 vì mọi phép đo
đều đo FILE, không đo CHƯƠNG TRÌNH CHẠY.
- lockfile tái sinh từ cây lành đang chạy prod (thiếu @microsoft/signalr + 9 transitive
vì lockfile cũ có từ 23/04, trước khi dự án thêm SignalR — nên 'xoá cho lành' từng hợp lý)
- npm install -> npm ci (deterministic theo lockfile) + check exit code từng bước
- GUARD-92: chặn build khi React trùng bản (đúng cơ chế useState null). Fault-inject 4 ca
bắt được dương-giả lucide-react khớp regex trước khi push; đã neo lookbehind.
- Bundle verify runtime trên prod trước khi commit: eoffice CR538vZx + admin C10ta-wB,
console 0 lỗi, cùng byte với bản lành (1.700.709 / 1.780.807).
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>