KB-5818

G1 Final Proof — SUA-RE

12 min read Revision 1
sua-reg1g1-closefinal-proofsealedbaselineregression-checklistdieu-30dieu-31laws-newpa32026-07-07

G1 Final Proof — SUA-RE

Ngày: 2026-07-07. Nhiệm vụ: G1-CLOSE — seal G1 baseline + regression checklist. Read-only với PG (chỉ SELECT). 0 ghi PG, 0 DDL/DML, 0 append manifest, 0 chạy dot-pg-atomic-apply. Chỉ tạo 2 file protection trong mcp-writes + báo cáo KB này.

1. Verdict

SEALED

Toàn bộ verify read-only mục 4 dưới đây PASS 100%, không mismatch. Sealed baseline JSON + readonly checklist SQL đã tồn tại trên VPS, sha256 xác nhận hai phía (local shasum + VPS sha256sum).

2. Scope

G1 chứng minh sửa-rẻ tối thiểu cho UI concept ledger: sửa 1 nhãn UI chỉ tốn 1 change-scope + 1 SQL 2 câu lệnh (UPDATE old + INSERT new), không scan lại UI, không match lại 30 dòng, lịch sử giữ nguyên. G1-CLOSE đóng gói kết quả đó thành sealed baseline + checklist chống hồi quy.

G1-CLOSE KHÔNG phải enforcement tự động của Điều 30/31. Nó là sealed baseline, proof report, checklist read-only, và vật liệu để sau này có thể đăng ký vào scanner/measurement nếu cần. Cơ chế bảo vệ thật hiện tại là: Owner gate; golden SQL; manifest allowlist; guardrail của dot-pg-atomic-apply; apply atomic; verify read-only sau apply; KB report.

3. Completed steps

Bước Report path (knowledge/dev/laws-new/kestra/sua-re/nhap-ui/) Result DB write Artifact chính Bằng chứng chính
G1-1 create core g1-1-create-core-2026-07-07.md APPLIED CÓ — DDL: 2× CREATE TABLE + 6× CREATE INDEX, COMMIT create-core.sql (golden=apply, sha 2839def8…) manifest 4→5 dòng; verify: 2 bảng, match_status GENERATED ALWAYS, ux_sruk_slot_current tồn tại, rows 0/0
G1-2 import seed (G1-2A render + G1-2B apply) g1-2a-render-seed-ready-for-audit-2026-07-07.md → g1-2-import-seed-2026-07-07.md G1-2A READY_FOR_AUDIT → G1-2B APPLIED CÓ — 43× INSERT 0 1 (13 concept + 30 usage), COMMIT import-seed-master-list.golden.sql + seed-map (sha e17cae62… / 4cce468a…) GO_APPLY_G1_2; pre-check 17/17 PASS; verify 14/14 PASS; 13/30/30, status 27/2/1; manifest 5→6
G1-3 owner report g1-3-review-candidate-report-2026-07-07.md READY_FOR_OWNER_DECISION KHÔNG — SELECT read-only báo cáo 3 dòng chờ Owner (usage_id 30/24/25) baseline check 8/8 PASS; default keep_pending
G1-4 owner decision g1-4-owner-decision-keep-pending-2026-07-07.md APPLIED CÓ — UPDATE 3 (4 cột decision, 5 guard), COMMIT owner-decision-keep-pending-g1-4.sql (sha 59c95e39…) GO_G1_4_KEEP_PENDING_ALL_3; verify 9/9 PASS; UPDATE đầu tiên qua gate được guardrail CHO PHÉP; manifest 6→7
G1-5 delta one slot (G1-5A render + G1-5B apply) g1-5a-delta-one-slot-ready-for-audit-2026-07-07.md → g1-5-delta-one-slot-applied-2026-07-07.md G1-5A READY_FOR_AUDIT → G1-5B APPLIED CÓ — UPDATE 1 + INSERT 0 1, COMMIT delta-g1-5-demo.sql (sha 2a770815…) + change-scope JSONL (sha 2088f4c4…) GO_APPLY_G1_5_DELTA_ONE_SLOT; self-check 34/34; pre-check 17/17; verify PASS: 31 rows/30 current, id 11→false, id 31 mới current; manifest 7→8

4. Final DB baseline at G1 seal

Verify read-only 2026-07-07 (qua MCP query_pg — READ ONLY transaction, read-only role) trên DB directus, bảng public.sua_re_khai_niem_nhap + public.sua_re_ui_khai_niem_nhapPASS toàn bộ:

  • concept count = 13
  • usage total rows = 31 ✓; current rows = 30
  • current distinct slot_key = 30 ✓; total distinct slot_key = 30
  • current match_status: matched 27 / candidate 2 / review 1 ✓ (không có pending)
  • target slot master-list-quy-trinh-v1::config_key:MASTER_CONFIG.items[].steps[].items[].minđúng 2 dòng tại seal ✓
  • id 11 = history tại seal: item_key …::scan_0, is_current=false, raw_label "Số phút của task", purpose "Thời lượng ước tính của MỘT task, đơn vị phút.", concept_id=5, concept_key field.so_phut, match_status matched ✓
  • id 31 = current tại seal: item_key …::scan_g1_5_demo_001, is_current=true, raw_label "Thời lượng task (phút)", purpose "Thời lượng dự kiến của MỘT task, tính bằng phút.", concept_id=5 (bằng dòng cũ), match_status matched, owner_decision/decision_note/decision_by/decision_at đều NULL ✓
  • owner_decision: đúng 3 dòng — id 24/25/30 = keep_pending, decision_by='Owner', không dòng nào khác ✓
  • tại seal chỉ id 11 có is_current=false ✓; 29 slot còn lại không đổi current row ✓
  • không có cột date_updated, không có cột backlog_note trong PG ✓
  • match_status vẫn GENERATED ALWAYS (CASE trên concept_id/dedupe_key) ✓
  • pg_class sua_re%: đúng 2 bảng + 2 sequence + 4 index; 0 view, 0 trigger ✓; pg_indexes trên 2 bảng: đúng 10 index như G1-1, gồm ux_sruk_slot_current UNIQUE (slot_key) WHERE is_current
  • 13 concept không có concept nào về tổng phút cộng dồn hoặc tổng thời gian nhập tay ✓

Ghi rõ: id=31 là current TẠI THỜI ĐIỂM G1 seal, không phải current vĩnh viễn. Nếu có delta hợp lệ sau này, id=31 có thể trở thành is_current=false và dòng mới hơn trở thành current.

5. Sửa-rẻ proof

  • Chỉ 1 slot đổi (target slot ở trên); slot_key giữ nguyên; item_key đổi theo scan (scan_0scan_g1_5_demo_001).
  • Old row (id 11) giữ nguyên làm lịch sử; new row (id 31) thành current tại seal — đúng khuôn QT-B: UPDATE old current=false trước, INSERT new current=true sau (bị ux_sruk_slot_current chặn nếu làm ngược).
  • 29 slot khác không đổi current row; không scan lại UI; không match lại 30 dòng; không đụng concept table; match_status tự sinh (SQL không ghi cột này).
  • Chi phí sửa 1 nhãn = 1 change-scope JSONL + 1 file SQL 2 câu lệnh → UPDATE 1 + INSERT 0 1. Mô hình sửa-rẻ QT-B chứng minh end-to-end.

6. Regression/integrity checklist — Điều 30/31 interpretation

Đây là checklist vận hành dựa trên tinh thần Điều 30/31, KHÔNG phải enforcement tự động. G1-CLOSE chưa đăng ký measurement/scanner chính thức cho Điều 31.

Cơ chế bảo vệ thật hiện tại: Owner gate; golden SQL; approved manifest; dot-pg-atomic-apply guardrail; atomic transaction; read-only verify; KB report.

6.1 Điều 30 — Regression principles

Agent sau không được gây các hồi quy sau:

  • xóa history rows;
  • tạo 2 current rows cho cùng slot_key;
  • tạo 0 current rows cho slot đang tồn tại;
  • đổi công thức slot_key (ui_id || '::' || location_anchor);
  • ghi match_status tay;
  • rerun seed/delta G1 như write mới;
  • xóa owner_decision 24/25/30 nếu chưa có Owner decision mới;
  • đổi concept_id nếu chưa có approved concept delta.

Không được coi "id=31 phải mãi current" là invariant. Invariant đúng là mỗi slot có đúng 1 current (DB-enforced bởi ux_sruk_slot_current), và delta hợp lệ có thể supersede current cũ.

6.2 Điều 31 — Integrity principles

Trước mọi future write liên quan sua_re, agent phải:

  1. Đọc g1-final-proof này hoặc sealed baseline mới nhất.
  2. Chạy read-only checklist phù hợp với baseline mới nhất (g1-sealed-readonly-check-2026-07-07.sql khi G1 còn là baseline mới nhất).
  3. Nếu lệch không có giải thích từ approved later delta → HOLD.
  4. Render SQL vàng trước.
  5. Dừng audit trước apply.
  6. Chỉ apply sau Owner GO.
  7. Apply qua /opt/incomex/dot/bin/dot-pg-atomic-apply (đường dẫn tuyệt đối).
  8. Verify read-only sau apply.
  9. Ghi KB report.
  10. Nếu muốn Điều 31 canh tự động, mở bài riêng đăng ký measurement/scanner.

7. Protected/sealed artifacts

Các file JSON/SQL trong protection là vật liệu kiểm tra thủ công/agent, KHÔNG phải enforcement tự động.

Protection (mới tạo trong G1-CLOSE, sha256 xác nhận local + VPS):

  • /opt/incomex/docs/mcp-writes/sua-re/protection/g1-sealed-baseline-2026-07-07.json — sha256 4a410cf61c9ce05de6897cd3367c24b910d42fe17900d0d96d3a8ea588c3ba07 (4759 B)
  • /opt/incomex/docs/mcp-writes/sua-re/protection/g1-sealed-readonly-check-2026-07-07.sql — sha256 7de67384a65dde1c3fda3cbe5728316dfa2e8661b5c8ac1a66432715fa5cd955 (6677 B; chỉ SELECT; KHÔNG nằm trong /opt/incomex/dot/sql; KHÔNG đưa vào manifest)

SQL đã apply (golden = apply, byte-identical, đã qua gate):

  • /opt/incomex/dot/sql/sua-re/create-core.sql = /opt/incomex/docs/mcp-writes/sua-re/golden/create-core.golden.sql — sha256 2839def83d054407a922e189eb4887c03a1172340cda98f08726038f8c109d0a
  • /opt/incomex/dot/sql/sua-re/import-seed-master-list.sql = …/golden/import-seed-master-list.golden.sql — sha256 e17cae62240a8d73a28bcccf79718dbe714d54ebf9209894a94b7199ba730d5c
  • /opt/incomex/dot/sql/sua-re/owner-decision-keep-pending-g1-4.sql — sha256 59c95e398f1712638858c724f3e2a5c2a47eb7a29f254b129f4e38d3b99cc1a9
  • /opt/incomex/dot/sql/sua-re/delta-g1-5-demo.sql = …/golden/delta-g1-5-demo.golden.sql — sha256 2a770815ea011c8bea08bf9bb23e3d6f20e6ad38e0faf88018936c95267298ba

Change-scope / seed / nguồn:

  • /opt/incomex/docs/mcp-writes/ui-preview/change-scope/master-list-quy-trinh-v1.g1-5-demo.jsonl — sha256 2088f4c4aec02ecca54693a5e2f8a4843129cb88c5fcf7cd8c28da265b4e835e (chứa backlog_note phan_dinh_3_gia_tri_thoi_gian)
  • /opt/incomex/docs/mcp-writes/sua-re/golden/import-seed-master-list.seed-map.golden.json — sha256 4cce468a139f3bc589e40e01feaa4b23c39ea5c9bbfb16ffd2f5a00332e1aa77
  • /opt/incomex/docs/mcp-writes/ui-preview/concept-ledger.js — sha256 ad89043ab288a3b0ee0af586ef803f3d5a46495d76a5f7e57fbdfa2740b24920
  • /opt/incomex/docs/mcp-writes/ui-preview/ui-contracts.js — sha256 d18f59de4426701bce5d07b86ca9ce43b05c892f571ef9d23197bb1d076265e3

Manifest + gate:

  • /opt/incomex/dot/sql/approved-sql-manifest.tsv — 8 dòng sau G1-5B (4 dòng sua-re: create-core, import-seed-master-list, owner-decision-keep-pending-g1-4, delta-g1-5-demo); backup .bak-g1-2b, .bak-g1-4
  • /opt/incomex/dot/bin/dot-pg-atomic-apply — cổng apply duy nhất

KB reports: 7 báo cáo G1 liệt kê ở mục 3 + báo cáo này (g1-final-proof-2026-07-07.md).

8. Backlog to G2

G2-1: sửa-sổ-khái-niệm 3 giá trị thời gian:

  1. số phút từng task;
  2. tổng phút cộng dồn từ task;
  3. tổng thời gian quy trình nhập tay.

Ghi rõ:

  • G1 KHÔNG xử lý mâu thuẫn này (hiện field.so_phut đang gánh cả nghĩa tổng).
  • G1 chỉ ghi backlog_note (trong change-scope JSONL + báo cáo G1-5A/G1-5B), KHÔNG ghi vào PG.
  • G2 phải xử bằng concept delta riêng (dự kiến: tạo field.tong_phut_congdon, field.tong_thoigian_nhaptay, sửa ranh giới field.so_phut).
  • G2 có thể làm concept_count thay đổi sau approved concept delta — khi đó phải tạo sealed baseline mới thay cho baseline G1 này.

9. Caveat

  • dot-pg-atomic-apply cần gọi đường dẫn tuyệt đối khi SSH non-interactive: /opt/incomex/dot/bin/dot-pg-atomic-apply (binary không nằm trong PATH của shell non-interactive).
  • Baseline/checklist G1 không phải scanner tự động — chưa đăng ký measurement Điều 31; agent phải tự chạy checklist trước write.
  • Checklist kiểm ảnh chụp tại seal: sau delta hợp lệ tương lai, phải thay bằng sealed baseline mới; không dùng checklist cũ kết luận hồi quy khi đã có baseline mới hơn.
  • Không mở kiến trúc mới trong G1-CLOSE: 0 bảng/view/trigger/DOT mới, 0 sửa UI source, 0 sửa các file SQL đã apply, 0 sửa 7 báo cáo G1 đã có.
  • Thư mục /opt/incomex/docs/mcp-writes/sua-re/protection được tạo mới (chown 10001:10001, chmod 2775 — đúng pattern G1-1) để MCP write_file ghi được; đây là mutation filesystem duy nhất ngoài 2 file protection.
  • sha256 của 2 file protection được tính trên bản local và xác nhận lại bằng sha256sum trên VPS — khớp 100%.

10. Next gate

Sau G1-CLOSE, chỉ được bắt đầu G2-1A nếu đủ 4 điều kiện:

  1. g1-final-proof verdict = SEALED (báo cáo này — đạt);
  2. sealed baseline JSON tồn tại (g1-sealed-baseline-2026-07-07.json — đạt, sha256 xác nhận);
  3. readonly checklist SQL tồn tại (g1-sealed-readonly-check-2026-07-07.sql — đạt, sha256 xác nhận);
  4. Owner xác nhận mở G2 — CHƯA có tại thời điểm seal; agent sau không được tự suy.