G1 Final Proof — SUA-RE
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_nhap — PASS 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[].mincó đú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_keyfield.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ộtbacklog_notetrong 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ồmux_sruk_slot_currentUNIQUE (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_0→scan_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_currentchặ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:
- Đọc g1-final-proof này hoặc sealed baseline mới nhất.
- Chạy read-only checklist phù hợp với baseline mới nhất (
g1-sealed-readonly-check-2026-07-07.sqlkhi G1 còn là baseline mới nhất). - Nếu lệch không có giải thích từ approved later delta → HOLD.
- Render SQL vàng trước.
- Dừng audit trước apply.
- Chỉ apply sau Owner GO.
- Apply qua
/opt/incomex/dot/bin/dot-pg-atomic-apply(đường dẫn tuyệt đối). - Verify read-only sau apply.
- Ghi KB report.
- 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— sha2564a410cf61c9ce05de6897cd3367c24b910d42fe17900d0d96d3a8ea588c3ba07(4759 B)/opt/incomex/docs/mcp-writes/sua-re/protection/g1-sealed-readonly-check-2026-07-07.sql— sha2567de67384a65dde1c3fda3cbe5728316dfa2e8661b5c8ac1a66432715fa5cd955(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— sha2562839def83d054407a922e189eb4887c03a1172340cda98f08726038f8c109d0a/opt/incomex/dot/sql/sua-re/import-seed-master-list.sql=…/golden/import-seed-master-list.golden.sql— sha256e17cae62240a8d73a28bcccf79718dbe714d54ebf9209894a94b7199ba730d5c/opt/incomex/dot/sql/sua-re/owner-decision-keep-pending-g1-4.sql— sha25659c95e398f1712638858c724f3e2a5c2a47eb7a29f254b129f4e38d3b99cc1a9/opt/incomex/dot/sql/sua-re/delta-g1-5-demo.sql=…/golden/delta-g1-5-demo.golden.sql— sha2562a770815ea011c8bea08bf9bb23e3d6f20e6ad38e0faf88018936c95267298ba
Change-scope / seed / nguồn:
/opt/incomex/docs/mcp-writes/ui-preview/change-scope/master-list-quy-trinh-v1.g1-5-demo.jsonl— sha2562088f4c4aec02ecca54693a5e2f8a4843129cb88c5fcf7cd8c28da265b4e835e(chứa backlog_notephan_dinh_3_gia_tri_thoi_gian)/opt/incomex/docs/mcp-writes/sua-re/golden/import-seed-master-list.seed-map.golden.json— sha2564cce468a139f3bc589e40e01feaa4b23c39ea5c9bbfb16ffd2f5a00332e1aa77/opt/incomex/docs/mcp-writes/ui-preview/concept-ledger.js— sha256ad89043ab288a3b0ee0af586ef803f3d5a46495d76a5f7e57fbdfa2740b24920/opt/incomex/docs/mcp-writes/ui-preview/ui-contracts.js— sha256d18f59de4426701bce5d07b86ca9ce43b05c892f571ef9d23197bb1d076265e3
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:
- số phút từng task;
- tổng phút cộng dồn từ task;
- 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ớifield.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-applycầ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
sha256sumtrê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:
- g1-final-proof verdict = SEALED (báo cáo này — đạt);
- sealed baseline JSON tồn tại (
g1-sealed-baseline-2026-07-07.json— đạt, sha256 xác nhận); - readonly checklist SQL tồn tại (
g1-sealed-readonly-check-2026-07-07.sql— đạt, sha256 xác nhận); - Owner xác nhận mở G2 — CHƯA có tại thời điểm seal; agent sau không được tự suy.