KB-56F7

G2-1B′ R2 Time Concept Ledger Delta — APPLIED

10 min read Revision 1
sua-reg2-1b-r2time-concept-deltaappliedsr-sualaws-new2026-07-07

G2-1B′ R2 Time Concept Ledger Delta — APPLIED

Ngày: 2026-07-07. Nhiệm vụ: G2-1B′ — apply golden SQL r2 (G2-1A′) qua dot-pg-atomic-apply, kèm bổ sung bắt buộc A–F.

1. Verdict

APPLIED

Apply COMMIT thành công qua gateway, affected-count đúng nguyên văn 4 dòng kỳ vọng, verify read-only sau apply PASS toàn bộ (kể cả bổ sung C/D).

2. Gate

  • GO_APPLY_G2_1B_R2_TIME_CONCEPT_DELTA received — yes. Owner phát nguyên văn ở lượt riêng; lượt nhận task card (chuỗi gate chỉ trong mô tả) đã HOLD 0 hành động trước đó — đúng kỷ luật G1-2B/G2-1A/G2-1A′.
  • 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.
  • Input reports đã đọc: G2-1A′ r2 (verdict READY_FOR_AUDIT ✔), G2-1B HOLD cũ, G2-1A gốc, G1 final proof (SEALED).
  • Bổ sung A–F nhận đủ và thực thi cùng prompt.

3. Files

  • change-scope: /opt/incomex/docs/mcp-writes/sua-re/change-scope/g2-1-time-concept-delta.jsonl — sha256 b7133a7d82296be3cd311a36b6f31dc14f0c9432081ae2086d63c14a378cb39f ✔ khớp, không sửa.
  • golden r2: /opt/incomex/docs/mcp-writes/sua-re/golden/concept-delta-time-values-g2-1r2.golden.sql — sha256 ef74898d16364c88880fde48293d94041e742c646c90cec5b102e0755c389a0f ✔ khớp, không sửa.
  • apply r2: /opt/incomex/dot/sql/sua-re/concept-delta-time-values-g2-1r2.sql — copy từ golden, sha256 ef74898d… ✔ khớp.
  • diff -u golden r2 / apply r2: rỗng ✔.
  • Old inert: apply file cũ concept-delta-time-values-g2-1.sql (sha 23ced9a4…) + old golden không đụng, không xóa ✔. Không dùng sha cũ, không dùng relpath cũ ✔.

4. DOT / atomicity / guardrail

  • Script: /opt/incomex/dot/bin/dot-pg-atomic-apply (sha256 cf90611d2c762f26865781f585e61bc4225ab39a6c60255e2f6cc199d180cd62 — ghi lần đầu để đối chiếu sau).
  • Single transaction: PASS — dòng thực thi docker exec -i postgres psql -U workflow_admin -d directus -v ON_ERROR_STOP=1 -1 -f - < file (-1 bọc toàn file 1 transaction) — đọc lại nguyên văn trước apply.
  • Guardrail inventory re-check: script CHƯA ĐỔI so với inventory G2-1A′ — 17 regex trích máy từ script live == 17 regex bản replicate G2-1A′ (diff rỗng, so sánh programmatic); thứ tự 4 lock nguyên (path allowlist → manifest → sha256 → static guardrail).
  • R2 clean: PASS — fetch lại r2 từ VPS (sha khớp ef74898d…), scan bằng bản replicate 17 pattern → CLEAN toàn bộ, không false-positive trong comment/header. Lock (4) của gateway lúc apply thật in guardrail: PASS — xác nhận cuối bằng chính script.

5. Manifest

  • Relpath r2: sua-re/concept-delta-time-values-g2-1r2.sql
  • Action: appended đúng 1 dòng TAB-separated (ef74898d…<TAB>relpath r2) — relpath r2 chưa tồn tại trước đó.
  • Manifest line count: 9 → 10. Xác nhận TAB bằng cat -A.
  • Old inert line 9 (23ced9a4…<TAB>sua-re/concept-delta-time-values-g2-1.sql) giữ nguyên ✔.

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

7/7 PASS (gồm bổ sung B):

  • field.so_phut id=5, status active, old ranh_gioi nguyên văn = 1 row ✔
  • usage id=13 is_current=true + joined concept_key=field.so_phut = 1 ✔
  • new item_key = 0 rows ✔
  • field.tong_phut_congdon = 0 rows ✔
  • slot vi phạm 1-current = 0 ✔
  • apply file sha = ef74898d…
  • manifest r2 đúng 1 dòng sha+relpath ✔

7. Apply result

  • Command: /opt/incomex/dot/bin/dot-pg-atomic-apply /opt/incomex/dot/sql/sua-re/concept-delta-time-values-g2-1r2.sql
  • manifest match: PASS; guardrail: PASS (khác hẳn G2-1B cũ — file r2 qua lock 4).
  • Transaction: COMMIT thành công, exit 0.
  • Affected-count đúng nguyên văn, đúng thứ tự:
    1. INSERT 0 1 (concept field.tong_phut_congdon)
    2. UPDATE 1 (ranh_gioi field.so_phut)
    3. UPDATE 1 (usage id=13 → is_current=false)
    4. INSERT 0 1 (usage mới current)
  • Không mismatch → không kích hoạt mục 8; không SQL nào khác được chạy.

8. Verify read-only

8.1 Counts — PASS

concept = 14; usage total = 32; current = 30; current distinct slot_key = 30; total distinct slot_key = 30; mỗi slot đúng 1 current (0 vi phạm); current match_status matched 27 / candidate 2 / review 1 (không đổi — dòng mới matched thay đúng chỗ dòng 13 hạ history).

8.2 Concept mới — PASS

field.tong_phut_congdon đúng 1 row, id=14: ten Tổng phút cộng dồn; concept_kind field; mo_ta + ranh_gioi khớp nguyên văn golden (boolean check true); aliases khớp jsonb đúng 5 mục; match_policy auto (default); status active. 7/7 boolean check true.

8.3 Concept field.so_phut — PASS (bổ sung D)

Đúng 1 row: id vẫn = 5 ✔; concept_key field.so_phut ✔; ten Số phút thực hiện không đổi ✔; mo_ta không đổi (Thời lượng ước tính của MỘT task, đơn vị phút.) ✔; status active ✔; ranh_gioi đã đổi đúng text mới: Thời lượng của MỘT task riêng lẻ, đơn vị phút. Không dùng cho tổng phút cộng dồn từ nhiều task, và không dùng cho tổng thời gian quy trình nhập tay.

8.4 Usage id=13 history — PASS

is_current = false; item_key …::scan_0, slot_key …code_marker:qv-tot, raw_label/purpose/location/location_anchor giữ nguyên; joined concept_key cũ = field.so_phut; match_status matched.

8.5 Usage mới current — PASS (bổ sung C)

Tìm bằng item_key master-list-quy-trinh-v1::code_marker:qv-tot::scan_g2_1_time_concept_001 → đúng 1 row, id=32 (PG tự sinh): is_current=true; scan_id scan_g2_1_time_concept_001; slot_key giữ nguyên; raw_label Tổng phút (dòng tổng); purpose Tổng thời lượng cả quy trình — giá trị TÍNH từ các task.; location master-list.js · qv-tot; location_anchor code_marker:qv-tot; anchor_quality strong; dedupe_key field.tong_phut_congdon; concept_id = 14 = id concept mới (boolean check true); joined concept_key = field.tong_phut_congdon; match_status = matched do PG GENERATED (SQL không ghi cột này); owner_concept_id IS NULL ✔; near_concepts = '[]'::jsonb ✔; owner_decision/decision_note/decision_by/decision_at đều NULL ✔ (6/6 boolean check true).

8.6 Không đụng ngoài phạm vi — PASS

id=31 vẫn current joined field.so_phut ✔; id=12 vẫn current joined field.so_phut ✔; id 24/25/30 vẫn keep_pending nguyên ✔; field.tong_thoigian_nhaptay = 0 rows ✔; pg_class sua_re%: vẫn đúng 2 bảng + 2 sequence + 0 view + 0 trigger + 10 index (nguyên như G1) ✔; không có cột date_updated/backlog_note ✔; không UI/source/shadow file nào bị sửa (phiên chỉ cp golden→apply + append manifest + chạy gateway) ✔.

Hardcoded id guard (bổ sung E)

  • Golden r2 statement (2) dùng hardcoded WHERE id = 5 (kèm guard concept_key/status/mo_ta/ranh_gioi nguyên văn).
  • Pre-check xác nhận field.so_phut id=5 (boolean id_is_5=true) trước copy/apply.
  • Last-chance check xác nhận lại id=5 + old ranh_gioi ngay trước apply (1 row khớp đủ điều kiện).
  • Sau apply xác nhận field.so_phut vẫn id=5 và ranh_gioi đã cập nhật đúng text mới.
  • Không xảy ra HOLD_FIELD_SO_PHUT_ID_MISMATCH.

New usage decision fields (bổ sung E)

Dòng usage mới id=32: owner_concept_id NULL; near_concepts []; 4 decision fields (owner_decision/decision_note/decision_by/decision_at) đều NULL — kiểm bằng boolean check trong SELECT, 6/6 true. Không kích hoạt VERIFY_FAIL_NEW_USAGE_DECISION_FIELDS.

9. Sửa-rẻ proof — concept level

  • Thêm 1 concept mới (field.tong_phut_congdon, id=14) — INSERT 0 1.
  • Sửa ranh giới 1 concept cũ (field.so_phut) — UPDATE 1, không đụng ten/mo_ta/status.
  • Remap 1 usage bằng lịch sử (SR-SUA): id=13 thành history, id=32 thành current cùng slot_key — UPDATE 1 + INSERT 0 1.
  • Current rows vẫn 30; mỗi slot đúng 1 current (DB-enforced ux_sruk_slot_current).
  • Không scan/re-scan; không UI patch; không tạo concept type-3 rỗng; không match lại 30 dòng; 29 slot khác không đổi current row.
  • Chi phí sửa 1 drift khái niệm = 1 change-scope (cũ, giữ nguyên) + 1 golden SQL 4 câu lệnh + 1 dòng manifest. Sửa-rẻ concept-level chứng minh end-to-end.

10. Baseline impact

APPLIED → G1 sealed baseline (concept 13 / usage 31) đã LỖI THỜI THEO THIẾT KẾ (đúng ghi chú g1-final-proof mục 8). Cần chạy G2-SEAL để tạo sealed baseline mới: concept 14, usage 32, current 30. G2-SEAL KHÔNG chạy trong bước này (ranh giới cấm) — chờ gate riêng.

11. Next gate

Đề xuất Owner mở G2-SEAL (seal baseline mới + readonly checklist mới thay bản G1). Backlog còn lại của G2: field.tong_thoigian_nhaptay (defer, chưa có usage — bài riêng khi cần).

12. Caveat

  • Guardrail-clean pre-check dùng bản replicate 17 pattern (script không có dry-run mode); xác nhận cuối là lock (4) của chính gateway lúc apply thật — đã PASS in log. Không còn khoảng hở.
  • Script gateway sha cf90611d… ghi lần đầu tại đây — card sau có thể so sha thay vì diff pattern thủ công.
  • Dòng manifest 9 (relpath cũ, sha cũ) + apply file cũ vẫn nằm trên đĩa làm audit trail; file cũ nếu chạy lại gateway vẫn bị guardrail chặn — inert, vô hại. Chưa dọn theo quyết định Owner trước đó.
  • match_status của dòng mới do PG GENERATED sinh ra 'matched' vì concept_id NOT NULL — đúng thiết kế, không phải SQL ghi.
Back to Knowledge Hub knowledge/dev/laws-new/kestra/sua-re/nhap-ui/g2-1b-r2-time-concept-ledger-delta-applied-2026-07-07.md