G1-5 Delta One Slot — APPLIED
G1-5 Delta One Slot — APPLIED
Ngày: 2026-07-07. Nhiệm vụ: G1-5B — apply delta test 1 slot qua dot-pg-atomic-apply, sau audit G1-5A. Pre-check 17/17 PASS trước khi append manifest và apply.
1. Verdict
APPLIED
2. Gate
- G1-5A report:
knowledge/dev/laws-new/kestra/sua-re/nhap-ui/g1-5a-delta-one-slot-ready-for-audit-2026-07-07.md— verdict READY_FOR_AUDIT, xác nhận tồn tại trước apply. - GO_APPLY_G1_5_DELTA_ONE_SLOT received: yes — Owner phát lệnh nguyên văn ngày 2026-07-07 (lượt trước đó không có lệnh → đã HOLD đúng quy tắc, 0 hành động).
3. Files
- change-scope:
/opt/incomex/docs/mcp-writes/ui-preview/change-scope/master-list-quy-trinh-v1.g1-5-demo.jsonl - change-scope sha256:
2088f4c4aec02ecca54693a5e2f8a4843129cb88c5fcf7cd8c28da265b4e835e— khớp expected. - golden SQL:
/opt/incomex/docs/mcp-writes/sua-re/golden/delta-g1-5-demo.golden.sql - apply SQL:
/opt/incomex/dot/sql/sua-re/delta-g1-5-demo.sql - SQL sha256 (cả golden lẫn apply):
2a770815ea011c8bea08bf9bb23e3d6f20e6ad38e0faf88018936c95267298ba— khớp expected. - diff golden ↔ apply: BYTE_IDENTICAL (diff exit 0, 0 dòng khác).
- Kiểm nội dung SQL trước apply: đúng 2 statement (UPDATE trước, INSERT sau); không INSERT match_status; không ON CONFLICT; chỉ WHERE id=11 (không đụng 24/25/30); không backlog_note; bảng concept
sua_re_khai_niem_nhapchỉ xuất hiện trong 2 subquerySELECT id ... WHERE concept_key='field.so_phut'(read-only); không concept tổng phút cộng dồn / tổng thời gian nhập tay.
4. Manifest
- manifest:
/opt/incomex/dot/sql/approved-sql-manifest.tsv - relpath:
sua-re/delta-g1-5-demo.sql - action: appended — trước đó relpath chưa tồn tại (grep = 0 dòng); append đúng 1 dòng TAB-separated tại dòng 8, kết thúc newline; sau append grep -c = 1.
5. Apply result
- Lệnh:
/opt/incomex/dot/bin/dot-pg-atomic-apply /opt/incomex/dot/sql/sua-re/delta-g1-5-demo.sql(đường dẫn tuyệt đối vì binary không có trong PATH ssh non-interactive; vẫn là đúng DOT, đúng file). - Gate output: sha256 khớp, manifest match PASS, guardrail PASS.
- Execution:
docker exec -i postgres psql -U workflow_admin -d directus -v ON_ERROR_STOP=1 -1 -f -(single transaction). - Transaction status: COMMIT thành công, exit code 0.
- Affected rows: UPDATE 1 và INSERT 0 1 — đúng kỳ vọng.
6. Verify read-only (sau apply, PASS toàn bộ)
Counts tổng:
- concept count = 13 (không đổi).
- usage total rows = 31 (30 + 1 dòng mới).
- current usage rows = 30.
- current distinct slot_key = 30.
- total distinct slot_key = 30 (không slot mới).
- current match_status group: matched 27 / candidate 2 / review 1 (không đổi).
Target old row (id 11): item_key ...::scan_0, scan_id scan_0, is_current false, raw_label "Số phút của task", purpose "Thời lượng ước tính của MỘT task, đơn vị phút.", match_status matched, concept_id 5 = field.so_phut. ĐÚNG.
Target new row (id 31): item_key master-list-quy-trinh-v1::config_key:MASTER_CONFIG.items[].steps[].items[].min::scan_g1_5_demo_001, scan_id scan_g1_5_demo_001, is_current true, raw_label "Thời lượng task (phút)", purpose "Thời lượng dự kiến của MỘT task, tính bằng phút.", match_status matched (PG GENERATED tự sinh, SQL không ghi), concept_id 5 = bằng dòng cũ (field.so_phut), owner_decision/decision_note/decision_by/decision_at đều NULL. ĐÚNG.
Non-target unchanged:
- Toàn DB chỉ có đúng 1 dòng is_current=false, đó là id 11 → 29 slot còn lại không đổi current row.
- Truy vấn
owner_decision IS NOT NULLtrả về đúng 3 dòng: id 24, 25, 30 = keep_pending — không dòng nào khác có owner_decision. - pg_class
sua_re%trong public: đúng 2 bảng + 2 sequence + 4 index như G1-1, không bảng/view/trigger/DOT mới (SQL cũng không chứa DDL, guardrail PASS). - information_schema: 2 bảng sua-re không có cột date_updated, không có backlog_note.
7. Sửa-rẻ proof
- Chỉ 1 slot đổi:
master-list-quy-trinh-v1::config_key:MASTER_CONFIG.items[].steps[].items[].min. - slot_key giữ nguyên — dòng mới cùng slot_key với dòng cũ.
- item_key đổi theo scan mới:
::scan_0→::scan_g1_5_demo_001. - Lịch sử giữ lại: old row (id 11) is_current=false vẫn nằm trong bảng; new row (id 31) is_current=true.
- current rows vẫn 30 — bức tranh hiện hành không phình.
- Không scan lại toàn UI (chỉ 1 change-scope 1 slot).
- Không match lại 30 dòng (29 dòng kia không bị đụng).
- Không đụng bảng concept (13 concept nguyên vẹn; chỉ SELECT concept_key trong subquery).
- Không đụng 3 dòng keep_pending (24/25/30 nguyên trạng).
- match_status của dòng mới do PG tự sinh (GENERATED) = matched, chứng minh pipeline match không cần chạy tay.
Chi phí sửa 1 nhãn UI = 1 change-scope + 1 SQL 2-statement + UPDATE 1/INSERT 1. Đây là bằng chứng mô hình QT-B sửa-rẻ hoạt động end-to-end.
8. Backlog sau G1-5
Sau G1-5, cần mở bài sửa-sổ-khái-niệm riêng về 3 giá trị thời gian:
- số phút từng task;
- tổng phút cộng dồn từ task;
- tổng thời gian quy trình nhập tay.
9. Caveat
dot-pg-atomic-applykhông nằm trong PATH của phiên ssh non-interactive; phải gọi bằng đường dẫn tuyệt đối/opt/incomex/dot/bin/dot-pg-atomic-apply. Không phải blocker, chỉ ghi nhận cho các lần apply sau.- Không có blocker kỹ thuật nào khác. 0 kiến trúc mới.