KB-2B12
G1-4 Owner Decision — KEEP_PENDING
4 min read Revision 1
sua-reg1-4owner-decisionkeep-pendingapplieddot-pg-atomic-applylaws-newpa32026-07-07
G1-4 Owner Decision — KEEP_PENDING
1. Verdict
APPLIED — UPDATE 3, exit 0, COMMIT qua dot-pg-atomic-apply. Verify read-only sau apply 9/9 PASS.
2. Gate
- GO_G1_4_KEEP_PENDING_ALL_3 received: yes — Owner xác nhận tường minh trong phiên (qua câu hỏi trực tiếp, đúng kỷ luật G1-2B: không tự suy GO từ chuỗi trong phần mô tả gate của prompt).
- G1-3 report:
knowledge/dev/laws-new/kestra/sua-re/nhap-ui/g1-3-review-candidate-report-2026-07-07.md(READY_FOR_OWNER_DECISION, baseline 8/8 PASS).
3. Target rows
- usage_id 30 —
review.co_tu_dong— note: "Owner deferred: chờ chốt trục automation / cờ agent tự động của bước." - usage_id 24 —
candidate.lien_ket_me— note: "Owner deferred: chờ chốt type relation / quan hệ 4 Mẹ." - usage_id 25 —
candidate.lien_ket_me— note: "Owner deferred: chờ chốt type relation / quan hệ 4 Mẹ."
Pre-check trước apply: 7/7 PASS (usage=30, concept=13, match_status matched 27 / candidate 2 / review 1, đúng 3 dòng target tồn tại, cả 3 is_current=true + concept_id/owner_concept_id/owner_decision NULL, 0 dòng nào toàn bảng có owner_decision trước đó, WHERE chính xác dự kiến chạm đúng 3 dòng).
4. SQL file
- Path:
/opt/incomex/dot/sql/sua-re/owner-decision-keep-pending-g1-4.sql - sha256:
59c95e398f1712638858c724f3e2a5c2a47eb7a29f254b129f4e38d3b99cc1a9(local == VPS, xác nhận bằng sha256sum hai phía) - Nội dung: đúng 1 statement UPDATE trên
public.sua_re_ui_khai_niem_nhap, SET chỉ 4 cột quyết định (owner_decision, decision_note, decision_by, decision_at), WHERE tuple exact match 3 dòng + đủ 5 guard (is_current, concept_id NULL, owner_concept_id NULL, owner_decision NULL, match_status IN review/candidate). Self-check 9/9 PASS (1 statement, 0 INSERT/DELETE/DROP/TRUNCATE/ALTER/CREATE, SET không chạm match_status/concept_id/owner_concept_id/cột bảo vệ). - Manifest action: append 1 dòng mới vào
/opt/incomex/dot/sql/approved-sql-manifest.tsv(6→7 dòng, relpathsua-re/owner-decision-keep-pending-g1-4.sqlchưa tồn tại trước đó; backup.bak-g1-4trước khi append; guard chống trùng).
5. Apply result
dot-pg-atomic-apply /opt/incomex/dot/sql/sua-re/owner-decision-keep-pending-g1-4.sql:- manifest match: PASS; guardrail: PASS
- execution:
docker exec -i postgres psql -U workflow_admin -d directus -v ON_ERROR_STOP=1 -1 -f - - affected rows: UPDATE 3
- transaction status: exit 0, COMMIT thành công (single transaction)
- UPDATE allowed by guardrail: YES — guardrail tĩnh của cổng (chặn DROP/DELETE FROM/TRUNCATE/txn-control/meta-cmd) không chặn UPDATE; đây là lần đầu cổng chạy UPDATE thật, PASS sạch.
6. Verify read-only
9/9 PASS:
- 3 dòng target: owner_decision='keep_pending', decision_by='Owner', decision_at=2026-07-07 09:11:00.212106+00 (cùng timestamp transaction cả 3), decision_note NOT NULL đúng từng dòng.
- 0 dòng ngoài id 24/25/30 có owner_decision (decided_total=3, decided_outside_target=0).
- match_status group vẫn matched 27 / candidate 2 / review 1 (GENERATED không đổi).
- concept_id của 3 target vẫn NULL; owner_concept_id vẫn NULL.
- usage count vẫn 30; concept count vẫn 13.
- Đúng 2 bảng
sua_re_%, 0 viewsua_re_%, 0 trigger trên bảng usage; không tạo DOT mới (file-only + chạy cổng, không đăng ký gì). - slot_key/item_key/raw_label/purpose/location/dedupe_key của 3 target khớp nguyên văn pre-state (so sánh full-text trước/sau).
- is_current vẫn true cả 3.
7. Next gate
G1-5: test sửa-rẻ 1 slot thật (bắt đầu delta/scan; nhớ GHIM QT-B: UPDATE is_current=false bản cũ TRƯỚC rồi INSERT bản mới do ux_sruk_slot_current).
8. Caveat
Không có blocker kỹ thuật. Ghi chú vận hành: cột date_updated không tồn tại trên bảng usage (schema chỉ có date_created) — decision_at là dấu thời gian quyết định duy nhất, đúng thiết kế.