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

APPLIEDUPDATE 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 30review.co_tu_dong — note: "Owner deferred: chờ chốt trục automation / cờ agent tự động của bước."
  • usage_id 24candidate.lien_ket_me — note: "Owner deferred: chờ chốt type relation / quan hệ 4 Mẹ."
  • usage_id 25candidate.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, relpath sua-re/owner-decision-keep-pending-g1-4.sql chưa tồn tại trước đó; backup .bak-g1-4 trướ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 view sua_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ế.