KB-146F

G1-5 Delta One Slot — APPLIED

6 min read Revision 1
sua-reg1-5g1-5bdelta-one-slotappliedqt-blaws-newpa32026-07-07

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_nhap chỉ xuất hiện trong 2 subquery SELECT 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 1INSERT 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 NULL trả 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:

  1. số phút từng task;
  2. tổng phút cộng dồn từ task;
  3. tổng thời gian quy trình nhập tay.

9. Caveat

  • dot-pg-atomic-apply khô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.