KB-516A

G2-1B Time Concept Ledger Delta — HOLD (guardrail rejected, 0 write)

6 min read Revision 1
sua-reg2-1btime-concept-deltaholdguardrail-rejectedlaws-new2026-07-07

G2-1 Time Concept Ledger Delta — G2-1B APPLY = HOLD

Ngày: 2026-07-07. Nhiệm vụ: G2-1B — apply golden SQL G2-1A qua dot-pg-atomic-apply.

1. Verdict

HOLD — HOLD_GUARDRAIL_REJECTED_APPLY_NOT_EXECUTED.

Static guardrail của dot-pg-atomic-apply TỪ CHỐI file TRƯỚC khi chạm psql: pattern (?i)\bTRUNCATE\b khớp từ "TRUNCATE" nằm trong comment tự-kiểm dòng 25 của chính golden SQL ("Cấm trong file này (tự kiểm khi audit): ON CONFLICT; DELETE/TRUNCATE/DROP/…"). Guardrail quét destructive keywords trên TOÀN BỘ nội dung file (kể cả comment) — by design, có ghi chú thiết kế trong script. Không có transaction nào được mở, 0 write, DB nguyên vẹn pre-state. Đây KHÔNG phải rollback và KHÔNG phải partial commit — file bị chặn ở lock (4) trước execution.

2. Gate

  • G2-1A report: knowledge/dev/laws-new/kestra/sua-re/nhap-ui/g2-1a-time-concept-ledger-delta-ready-for-audit-2026-07-07.md — verdict READY_FOR_AUDIT, tồn tại ✔
  • GO_APPLY_G2_1_TIME_CONCEPT_DELTA: received — yes, Owner phát nguyên văn khi được hỏi trực tiếp (đúng kỷ luật G1-2B/G2-1A: không tự suy từ task card).
  • 4 Owner decisions confirmed cùng GO: ① tạo field.tong_phut_congdon; ② sửa ranh_gioi field.so_phut; ③ remap id=13 SR-SUA; ④ defer field.tong_thoigian_nhaptay.
  • Pre-check mục 3: 13/13 PASS (schema, baseline 13/31/30/30, 27-2-1, keep_pending 24/25/30, concept absent, so_phut pre-state, id=13 pre-state, new item_key absent, golden self-check, atomicity, no BEGIN/COMMIT).

3. Atomicity check

  • Path: /opt/incomex/dot/bin/dot-pg-atomic-apply
  • Evidence: script chạy docker exec -i postgres psql -U workflow_admin -d directus -v ON_ERROR_STOP=1 -1 -f - < file-1 = single transaction, ON_ERROR_STOP=1. 4 locks: allowlist path, manifest membership, sha256 exact, static guardrail.
  • Result: PASS (xác nhận trước apply).

4. Files

  • change-scope: /opt/incomex/docs/mcp-writes/sua-re/change-scope/g2-1-time-concept-delta.jsonl — sha256 b7133a7d82296be3cd311a36b6f31dc14f0c9432081ae2086d63c14a378cb39f ✔ khớp
  • golden SQL: /opt/incomex/docs/mcp-writes/sua-re/golden/concept-delta-time-values-g2-1.golden.sql — sha256 23ced9a4cc0e6eeffa8c73233d824584aed9a82849bb50d9d1278dcb5e0478c0 ✔ khớp
  • apply SQL: /opt/incomex/dot/sql/sua-re/concept-delta-time-values-g2-1.sql — ĐÃ copy, sha256 khớp golden ✔
  • diff -u golden/apply: rỗng

5. Manifest

  • Relpath: sua-re/concept-delta-time-values-g2-1.sql
  • Action: appended đúng 1 dòng TAB-separated (relpath chưa tồn tại trước đó).
  • Manifest line count: 8 → 9.

6. Last-chance check (ngay trước apply)

5/5 PASS: so_phut old ranh_gioi = 1; id=13 current + concept so_phut = 1; new item_key = 0; field.tong_phut_congdon = 0; slot vi phạm 1-current = 0.

7. Apply result

  • Command: /opt/incomex/dot/bin/dot-pg-atomic-apply /opt/incomex/dot/sql/sua-re/concept-delta-time-values-g2-1.sql
  • Manifest lock: không tới (guardrail chạy sau manifest — thực tế manifest PASS vì script chạy tuần tự và dừng ở guardrail)
  • Guardrail: FAIL — "TỪ CHỐI: guardrail violation — vi phạm pattern: TRUNCATE (destructive)", exit 1.
  • Transaction: KHÔNG ĐƯỢC MỞ — psql không chạy, 0 statement thực thi.
  • Affected-count: không có (không phải INSERT/UPDATE nào chạy).
  • Phân loại: KHÔNG phải PARTIAL_COMMIT_DETECTED, KHÔNG phải ROLLED_BACK — là GUARDRAIL_REJECTED trước execution.

8. Verify read-only sau sự cố

DB xác nhận nguyên vẹn pre-state (đúng sealed G1): concept 13; usage total 31; current 30; new_concept 0; new_itemkey 0; id=13 vẫn is_current=true concept_id=5; so_phut ranh_gioi vẫn bản cũ nguyên văn; 0 slot vi phạm 1-current. id 24/25/30 keep_pending không đụng.

9. Root cause & phạm vi

  • Golden SQL của G2-1A đưa danh sách từ khóa cấm vào comment header để phục vụ audit; guardrail cố ý quét naive \bTRUNCATE\b trên full content (comment ghi trong script: "STILL BLOCKED: … TRUNCATE") → false-positive tự gây.
  • Đã grep toàn file: "TRUNCATE" xuất hiện đúng 1 lần (dòng 25, comment). Không có trigger guardrail nào khác (DROP-object/DELETE FROM/meta-command/COPY PROGRAM/ALTER SYSTEM/forbidden names đều sạch; BEGIN/COMMIT check là statement-position nên chữ "commit" trong comment không dính).
  • G1-5B từng apply thành công vì SQL đó không chứa từ cấm trong comment.

10. Baseline impact

G1 sealed baseline VẪN CÒN HIỆU LỰC — không có write nào xảy ra. KHÔNG chạy G2-SEAL.

11. Next gate — cần Owner quyết

Trong ranh giới G2-1B (cấm sửa golden, cấm render lại) không thể tự khắc phục. Phương án đề xuất cho Owner:

  1. G2-1A′ (re-render tối thiểu): render lại golden SQL với comment header bỏ/né các từ khóa cấm (vd viết "DELETE-FROM/TRUNC./DROP-object" hoặc bỏ hẳn dòng liệt kê), 4 statement SQL GIỮ NGUYÊN BYTE — sha mới → change-scope cập nhật sha → card G2-1B′ apply lại. Manifest sẽ có relpath cũ với sha cũ: cần Owner cho phép dùng relpath mới (vd sua-re/concept-delta-time-values-g2-1r2.sql) hoặc cho phép thay dòng manifest cũ.
  2. Hoặc Owner sửa guardrail (KHÔNG khuyến nghị — guardrail note ghi rõ naive TRUNCATE scan là chủ đích).

Dư tồn trên đĩa (inert, không gây hại, guardrail sẽ tiếp tục chặn đúng file này): apply file đã copy + dòng manifest thứ 9. Chờ Owner quyết giữ/dọn trong card kế tiếp.

12. Caveat

  • Caveat thật duy nhất: dòng manifest 9 và apply file tồn tại nhưng file không thể chạy qua gateway (guardrail chặn vĩnh viễn với nội dung hiện tại). Không có caveat nào về dữ liệu — DB chưa từng bị chạm trong phiên này ngoài SELECT read-only.
  • Bài học ghi sổ: golden SQL không được chứa từ khóa cấm của guardrail kể cả trong comment — thêm vào self-check của mọi card render (G-*A) sau này.
Back to Knowledge Hub knowledge/dev/laws-new/kestra/sua-re/nhap-ui/g2-1-time-concept-ledger-delta-applied-2026-07-07.md