KB-5134 rev 2

LỆNH 2D — Đóng khuôn vận hành Balo và bảo toàn DOT SSOT — 2026-07-16

11 min read Revision 2
codex-reportbalooperating-templatedotgit-bundlessotlenh-2d2026-07-16

LỆNH 2D — Đóng khuôn vận hành Balo và bảo toàn DOT SSOT

Ngày thực hiện: 2026-07-16
Verdict: PASS
Phạm vi: tài liệu canonical + bundle bảo toàn; production Balo chỉ đọc
Dừng đúng lệnh: không reconcile/apply, không deploy/restart/reload/cron, không push GitHub.

1. Kết luận điều hành

Cơ chế reconcile đã PASS ở 2C đã được đóng thành quy tắc vận hành canonical trong đúng hai tài liệu được chỉ định. Quy tắc mới buộc mission có thay đổi table | view | function | trigger chạy dry-run; apply cùng mission chỉ được phép với delta ADD đúng object vừa tạo và đầy đủ gate an toàn. Mọi MARK_MISSING/REVIVE/delta ngoài mission hoặc lỗi schema/sequence đều HOLD chờ Owner.

Mã DOT không đổi. Hai commit local chưa push đã được bảo toàn bằng một Git bundle lịch sử hoàn chỉnh, chỉ đọc, nằm ngoài working tree DOT. Production Balo vẫn 2148, delta 0.

2. Ba câu tuyên ngôn

  1. Vĩnh viễn: mọi mission thay đổi bốn loại PG object dùng cùng một quy tắc canonical và cùng dot-balo-reconcile; không phát minh lại, không chạy lại first-run.
  2. Nhầm được không: dry-run bắt buộc, điều kiện apply hẹp và danh sách HOLD rõ ràng; write chỉ qua gateway atomic, không setval, không psql direct WRITE.
  3. Tự động: dùng nguyên DOT ba chế độ đã có để tính từ live pg_catalog; không dựng wrapper, daemon, trigger theo dõi, queue hay cron mới.

3. Luật và SSOT đã đọc

  • .claude/skills/incomex-rules.md: 36 điều, 8 bước, hai mũ và evidence thật.
  • knowledge/dev/ssot/operating-rules.md v7.58.
  • knowledge/dev/ssot/vps/vps-operating-rules.md v1.0.
  • knowledge/dev/laws/constitution.md v4.6.3.
  • Quy định Balo canonical v1.9 và handoff thiết kế.
  • Điều 35 v5.2/atomic DOT governance và kiến trúc PG 16.

Assembly Gate: PG/directus là SSOT Balo; Agent Data KB là nơi version tài liệu; VPS /opt/incomex/dot là SSOT mã. Nuxt/Directus UI không thay đổi.

4. Hai tài liệu canonical đã cập nhật

4.1 Quy định Balo

path=knowledge/dev/laws-new/pg-read-pg/balo-thuc-the-quy-dinh.md
revision_before=14
revision_after=15
full_read_truncated=false
content_length=10473

Các mục 11–15 được cập nhật để thay đoạn “macro sau” bằng contract vận hành thật:

  • balo-core-first-run.sql chỉ đúc lần đầu.
  • /opt/incomex/dot/bin/dot-balo-reconcile là cơ chế duy trì canonical.
  • Ba lệnh chính xác: --dry-run, --apply, --verify.
  • Scope hiện hành đúng bốn loại.
  • KEEP không UPDATE/không đổi date_updated; object mới do sequence cấp STT; mất chỉ da_mat=true; trở lại giữ STT.
  • Rename/chuyển schema = khóa mới ADD + khóa cũ MARK_MISSING.
  • Các trường phải-gật không được reconcile.
  • UI Làm mới chỉ đọc; hiện không cron.
  • Ghi hai commit triển khai và evidence 2C; số 2148/385 chỉ là evidence ngày triển khai, không phải luật hardcode.

4.2 Design handoff

path=knowledge/dev/laws-new/pg-read-pg/balo-thuc-the-design-handoff.md
revision_before=1
revision_after=2
full_read_truncated=false
content_length=5769

Đã thêm block canonical ưu tiên ở đầu handoff và sửa ba điểm lệch:

  • phạm vi lịch sử 5 loại có column → phạm vi triển khai 4 loại;
  • rename không còn được hiểu là cập nhật nhãn cũ → ADD + MARK_MISSING;
  • object mất không còn “Owner quyết sau” → bắt buộc da_mat=true, không DELETE.

Không tạo tài liệu luật Balo trùng lặp.

5. Quy tắc kết thúc mission đã đóng

Khi bắt buộc kiểm

Sau mission đã tạo, xóa, đổi tên hoặc chuyển schema một table, view, function hoặc trigger:

dot-balo-reconcile --dry-run

Khi được apply ngay trong cùng mission

Chỉ khi đồng thời:

  • mission ban đầu đã được phép WRITE PG;
  • delta chỉ gồm ADD đúng object mission vừa tạo;
  • CONFLICT=0;
  • sequence_safe=true;
  • không REVIVE;
  • không MARK_MISSING;
  • không METADATA_UPDATE ngoài phạm vi.

Sau apply:

dot-balo-reconcile --verify
dot-balo-reconcile --dry-run

Delta phải bằng 0.

Khi phải HOLD

HOLD chờ Owner nếu có ADD ngoài mission, MARK_MISSING, REVIVE, METADATA_UPDATE không giải thích, CONFLICT, sequence không an toàn hoặc schema contract lệch. Không tự sửa nhãn, không setval, không dùng đường WRITE khác.

Mission chỉ sửa record nghiệp vụ, UI, tài liệu, kiểm tra read-only hoặc object ngoài bốn loại không bắt buộc reconcile.

6. Rà tài liệu mâu thuẫn

Path Nội dung lệch/cũ Phân loại Quyết định
knowledge/dev/laws-new/pg-read-pg/balo-thuc-the-quy-dinh.md Core snapshot, reconcile là “macro sau” Canonical Đã sửa revision 15
knowledge/dev/laws-new/pg-read-pg/balo-thuc-the-design-handoff.md 5 loại gồm column; rename cập nhật nhãn; mất còn chờ quyết định Canonical Đã sửa revision 2
knowledge/current-state/reports/codex-balo-reconcile-from-template-progress-2026-07-15.md 2A HOLD/chưa có DOT production Báo cáo lịch sử Giữ nguyên audit; không dùng làm canonical
knowledge/current-state/reports/codex-lenh-2b-balo-reconcile-dryrun-2026-07-16.md READY_FOR_OWNER_APPLY_GATE/chưa apply Báo cáo lịch sử Giữ nguyên; 2C là bước kế tiếp
knowledge/dev/laws-new/pg-read-pg/label-rules/README.md Liệt kê da_mat cùng nhóm cột dán nhãn Tài liệu phụ/draft lệch ranh giới Không sửa do scope chỉ cho hai canonical; đề xuất lệnh tài liệu riêng bỏ da_mat khỏi nhóm phải-gật và trỏ về reconcile
label-rules/00-general-rules.md, 01-general-rules.md Số evidence 2146 và khung labeling cũ Tài liệu phụ/draft Giữ; khi sửa sau phải không ghi stt/loai_census/da_mat

Không phát hiện hướng dẫn bảo chạy lại balo-core-first-run.sql, cho UI Làm mới WRITE hoặc cấp STT thủ công.

7. Git bundle bảo toàn DOT: PASS

BUNDLE_CREATED_UTC=20260716T103548Z
BUNDLE_PATH=/opt/incomex/backups/dot-bundles/dot-balo-2d-20260716T103548Z.bundle
BUNDLE_MODE=444
BUNDLE_SIZE=856689
BUNDLE_SHA256=54d758a6557f56e19c31764e4d8ee65872f780006ef8bedc89a0762916311951

Output verify:

/opt/incomex/backups/dot-bundles/dot-balo-2d-20260716T103548Z.bundle is okay
The bundle contains these 2 refs:
bddfdcc5a504ff6f4c1bc4fdf075dc8dde209402 refs/heads/main
bddfdcc5a504ff6f4c1bc4fdf075dc8dde209402 HEAD
The bundle records a complete history.
ANCESTRY_65A_TO_BDDF=PASS
BUNDLE_VERIFY=PASS

Hai commit nhìn thấy trong lịch sử hoàn chỉnh:

65a2d732dd31459ce9d9312fce5b36c9ac9627a3|feat(balo): add four-kind reconcile dry-run gate
bddfdcc5a504ff6f4c1bc4fdf075dc8dde209402|chore(dot): preserve approved sua-re manifest entries

Bundle được tạo bằng --all, HEAD là bddfdcc, lịch sử được verify là complete và 65a2d73 là ancestor trực tiếp được chứng minh; do đó cả hai commit nằm trong bundle. Không checkout/clone/fetch thử và không đụng repo thật.

Lệnh phục hồi chỉ tham khảo, chưa thực hiện:

git clone /opt/incomex/backups/dot-bundles/dot-balo-2d-20260716T103548Z.bundle <THU_MUC_KHOI_PHUC_MOI_NGOAI_PRODUCTION>

8. Verify production chỉ đọc: PASS

Dry-run lúc 2026-07-16T10:37:18Z:

table|385|385|0|0|0|0|0
view|699|699|0|0|0|0|0
function|654|654|0|0|0|0|0
trigger|410|410|0|0|0|0|0
TOTAL|2148|2148|0|0|0|0|0
BALO_RESULT|add=0|revive=0|metadata_update=0|mark_missing=0|conflict=0|sequence_safe=t
FINGERPRINT|unchanged=PASS
DRY_RUN|PASS|delta=0|write=0

Truy vấn độc lập chạy trong BEGIN TRANSACTION READ ONLY và kết thúc ROLLBACK:

COUNTS|2148|385|699|654|410|2148
SEQUENCE|2148|true|1|2149

Thứ tự COUNTS: tổng | table | view | function | trigger | max(stt).

Ba SHA giữ nguyên 2C:

DOT      7e657b96cc27e0f396e2485a67d6296c4de10aabd2f68cf4aaf367cb7b9bdfe5
SQL      c018f12ce86918c2a6199b70c4626c981deb2632edc686c1544504a3cf387369
MANIFEST fb86bee730f76464c385f3da7be65ad81fc5a718f25b84a554404a13dde070fd
MISSION_FILES_STATUS=CLEAN
DOT_HEAD=bddfdcc5a504ff6f4c1bc4fdf075dc8dde209402

9. Git diff và commit

DOT mission files không có diff; working tree scoped cho ba file canonical code là sạch. LỆNH 2D không sửa code, nên không tạo commit DOT giả/no-op.

Hai tài liệu canonical sống trong Agent Data KB, không tồn tại trong Git working tree local hoặc /opt/incomex/dot; chúng được version bằng KB revision 15 và 2. Tạo bản sao Git chỉ để có commit sẽ sinh SSOT trùng, nên không làm.

Các commit local cần bảo toàn vẫn là:

65a2d732dd31459ce9d9312fce5b36c9ac9627a3
bddfdcc5a504ff6f4c1bc4fdf075dc8dde209402

10. Zero-touch và giới hạn WRITE

BALO_OR_DIRECTUS_DB_WRITE=NOT_RUN
DOT_APPLY=NOT_RUN
PSQL_WRITE=NOT_RUN
SETVAL=NOT_RUN
UI_NUXT_DIRECTUS_NGINX_COMPOSE_CHANGE=NOT_RUN
DEPLOY_RESTART_RELOAD=NOT_RUN
CRON_CHANGE=NOT_RUN
CRON_BALO_REFERENCES=NONE
GITHUB_PUSH=NOT_RUN
WORKFLOW_DEPLOY=NOT_TRIGGERED

Ngoại lệ đúng phạm vi: hai document KB được cập nhật qua Agent Data MCP và một bundle filesystem được tạo ngoài DOT working tree. Không có write vào DB directus/public.balo_thuc_the.

Container start time không đổi so với 2C:

postgres          2026-04-17T05:35:18.48439927Z
incomex-directus  2026-05-08T09:13:06.267002946Z
incomex-nuxt      2026-07-11T02:50:33.302411141Z
incomex-nginx     2026-06-30T00:44:14.689584247Z

11. Evidence paths

knowledge/current-state/reports/evidence/balo-operations-2d-20260716/
/opt/incomex/backups/dot-bundles/dot-balo-2d-20260716T103548Z.bundle

Files local:

  • bundle-verify.log
  • production-readonly-verify.log
  • canonical-kb-verify.log
  • conflict-inventory.md

12. Hai mũ, OR, TD và handoff

  • Mũ xây dựng: cập nhật đúng hai canonical; dùng nguyên DOT; tạo bundle ngoài worktree.
  • Mũ giám sát: full-read cả hai revision, semantic search, dry-run production, truy vấn READ ONLY, SHA, container và cron đều được kiểm độc lập.
  • OR v7.58: không cập nhật — đây là rule chuyên môn Balo, đã đặt đúng canonical Balo; không phát hiện nguyên tắc điều hành tổng quát mới.
  • TD-2D-01: label-rules/README.md còn liệt kê da_mat như cột dán nhãn. Không sửa trong 2D vì Owner khóa chỉ hai canonical; cần mission tài liệu hẹp nếu muốn dọn.
  • Handoff: STOP. Không chuyển sang report “Balo gần đây”, cron hay 12 loại.

13. Verify KB canonical

LIST_BOTH=PASS
FULL_READ_BOTH=PASS
TRUNCATED=false
CHECK_DOT_3_MODES=true
CHECK_SCOPE_4=true
CHECK_FIRST_RUN_ONLY=true
CHECK_HOLD_RULE=true
CHECK_UI_READONLY=true
CHECK_COMMITS=true
SEMANTIC_TOP=knowledge/dev/laws-new/pg-read-pg/balo-thuc-the-quy-dinh.md
SEMANTIC_SCORE=0.9107980999999999

14. Trạng thái upload báo cáo

Báo cáo đã được upload vào đúng path KB:

knowledge/current-state/reports/codex-lenh-2d-balo-operating-template-dot-preservation-2026-07-16.md

Kiểm revision 1:

LIST=PASS
count=1
revision=1

FULL_READ=PASS
truncated=false
content_length=10533
verdict_present=true
bundle_sha_present=true
canonical_revisions_present=true

SEMANTIC_SEARCH=PASS
top_document_id=knowledge/current-state/reports/codex-lenh-2d-balo-operating-template-dot-preservation-2026-07-16.md
score=0.82550995

Sau khi bổ sung bằng chứng này, báo cáo được cập nhật revision 2 và kiểm lại lần cuối trước bàn giao.

Back to Knowledge Hub knowledge/current-state/reports/codex-lenh-2d-balo-operating-template-dot-preservation-2026-07-16.md