G2-1B Time Concept Ledger Delta — HOLD (guardrail rejected, 0 write)
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— sha256b7133a7d82296be3cd311a36b6f31dc14f0c9432081ae2086d63c14a378cb39f✔ khớp - golden SQL:
/opt/incomex/docs/mcp-writes/sua-re/golden/concept-delta-time-values-g2-1.golden.sql— sha25623ced9a4cc0e6eeffa8c73233d824584aed9a82849bb50d9d1278dcb5e0478c0✔ 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\btrê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:
- 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ũ. - 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.