Matrix Refactor Quick Rules — rule ngắn cho Agent/Cowork/Fable
Matrix Refactor Quick Rules
Rule ngắn để Agent/Cowork/Fable không đi lệch. Đọc kèm:
matrix-refactor-implementation-plan.md. DRAFT — không phải ban hành.
Định vị
- Mọi việc mới phải đặt vào một ô ma trận
Tầng × Loài × Kho × MiềnTRƯỚC khi triển khai. - Ma trận chỉ có 4 chiều. Không thêm chiều mới nếu nó chỉ là thuộc tính.
- Quan hệ KHÔNG phải chiều — là graph riêng (
universal_edges/ IU-edges). - Capability/năng lực/điều kiện đáp ứng KHÔNG phải chiều — là thuộc tính lọc.
- Task/request/người thực hiện KHÔNG phải chiều — là overlay.
- Không dùng lại thiết kế "7 chiều phẳng".
- "Tầng" = 6 tầng lắp ráp (nguyên tử→công trình). Không lẫn với Đ5 "5 Tầng" hạ tầng; không dùng lại naming L1–L5.
Kho tạm trước
- Mặc định mọi triển khai mới đi vào kho tạm: mở ô tạm → lắp thử → kiểm nhanh → sai thì xóa → đúng thì promote.
- Không ghi thẳng kho chính/canonical. Kho chính chỉ nhận qua promote.
- Trong kho tạm: kiểm nhẹ, không full governance, không sửa lõi, không sửa công thức/kho/loài canonical.
- Sai trong kho tạm thì xóa kho tạm hoặc xóa phần triển khai — không kéo toàn hệ vào sửa.
- Object kho tạm chưa cần khai sinh canonical; nó mang TEMP_ID_STAMP (workspace_id/candidate_id). Khai sinh canonical (BIRTH_STAMP + birth_id/entity_code) chỉ xảy ra một lần khi promote pass.
- Output kho tạm là thông tin/candidate — không bao giờ là thay đổi đã áp.
Lắp ráp
- Tầng trên lắp từ thành phẩm/vật liệu của tầng dưới TRỰC TIẾP. Công thức tầng nào chỉ xử lý nguyên liệu tầng đó.
- Mục tiêu = nguyên liệu đầu vào + công thức + kho + máy lắp (DOT).
- Mỗi ô tối thiểu phải có: công thức + DOT lắp/kiểm + IO Contract + governance state + rollback.
- IO Contract = 1 record gọn (nhận gì / trả gì / schema tối thiểu / DOT kiểm / rollback) — không phải gói 5 file.
Chống phình hệ
- Không tạo module/lane/registry mới nếu biểu diễn được bằng tầng/loài/kho/miền/công thức/DOT/IO Contract.
- Không tạo registry mới nếu sổ cũ đã có (
birth_registry,collection_registry,meta_catalog,dot_tools,universal_edges,canonical_fields).cell_idlà thuộc tính trên sổ cũ. - Không tạo thiết kế governance mới — One-Roof là trần duy nhất (một governance_registry, một trục Đ32, một Đ31+Đ45, một Đ35).
- Không tạo module contract phức tạp; không Integration Bus; không federated registry slice.
- Lane mức 1–2 có trần artifact cố định; muốn thêm yêu cầu bắt buộc = thay đổi mức 3.
- Mọi khái niệm mới phải có giải trình rất chặt vì sao 7 thành phần nền không biểu diễn được.
Đóng dấu kiểm soát (stamp)
Chi tiết:
matrix-stamp-governance-addendum.md.
S1. Khai sinh không gánh toàn bộ governance. Khai sinh chỉ cấp căn cước tối thiểu (8 trường birth_registry).
S2. Stamp KHÔNG phải chiều ma trận — là nội dung lớp "Governance state" của ô/object.
S3. Mỗi dấu = 1 cột inspect_* trên birth_registry, do 1 DOT đóng độc lập (mô hình PEN/STAMP/GATE Đ0-G). DOT đóng dấu từng phần, không DOT nào phải hiểu toàn hệ.
S4. Object thiếu dấu KHÔNG làm vỡ hệ; nó bị liệt kê/cảnh báo/chặn promote — KHÔNG vô hiệu hóa entity đang chạy.
S5. Promote fail-closed nếu thiếu dấu bắt buộc. Tập dấu bắt buộc khai trong metadata, không hardcode.
S6. Không tạo bảng stamp mới — tái dùng cột inspect_* birth_registry + system_issues/event_outbox/Đ23. governance_stamp_ledger chỉ khi thật sự cần (addendum §9).
S7. Hai dấu căn cước tách biệt: TEMP_ID_STAMP (kho tạm: workspace_id/candidate_id) vs BIRTH_STAMP (canonical sau promote). BIRTH_STAMP + PROMOTE_STAMP là OUTPUT của promote, chỉ đóng SAU khi checker pass — không phải precondition (tránh circular).
S8. Bộ dấu v0.1 ≤ 8–10 dấu lõi (hiện 7: TEMP_ID/BIRTH/CELL/IO/VALIDATION/ROLLBACK/PROMOTE). Thêm một dấu BẮT BUỘC mới = thay đổi Mức 3. GOV/OWNER chỉ bắt buộc ở vùng high-risk. Các inspector mịn (species/collection/relation) gom dưới dấu lõi, không tự nâng số dấu bắt buộc.
S9. Tập dấu đọc từ required-stamps.v0.1.json (metadata) — không hardcode. Checker kiểm promote_preconditions, KHÔNG đòi promote_outputs (BIRTH/PROMOTE) trước khi chạy.
S10. cell_id còn UNKNOWN/PENDING (chưa chắc tầng/loài/miền) → được ở kho tạm, nhưng KHÔNG promote (CELL_STAMP chưa đóng → PROMOTE_BLOCKED).
S11. Checker chỉ kiểm MỘT candidate packet (binding theo candidate_id + packet_hash), KHÔNG scan toàn hệ, KHÔNG tự đoán/ráp artifact rời rạc.
S12. Pre-promote stamps (TEMP_ID/CELL/IO/VALIDATION/ROLLBACK) nằm ở staging metadata; post-promote stamps (BIRTH/PROMOTE) nằm ở canonical substrate. Pre-promote KHÔNG ghi birth_registry. (addendum §2b)
S13. PROMOTE_OK là verdict, KHÔNG phải mutation. Tạo birth + đóng BIRTH/PROMOTE + consume staging = Atomic Promote Contract (transaction riêng sau checker, all-or-nothing). (addendum §7b)
S14. Mọi workspace/candidate phải có TTL + cleanup fail-safe: chỉ xóa draft/expired/quarantined; KHÔNG xóa đang checking/promote_ok-chưa-consumed/approved; nghi ngờ thì không xóa.
Promote
- Không promote nếu thiếu IO Contract / DOT kiểm pass / rollback.
- Kiểm promote CHỈ cục bộ: đúng ô? đúng input? đúng schema? DOT pass? relation bắt buộc đủ? rollback có? owner/scope rõ?
- Checker promote là fail-closed; nghi ngờ → đẩy lên mức trên. Blast-radius class được TÍNH, không tự khai; khai sai = incident + probation.
- Việc nguy hiểm (sửa khai sinh, kernel, tầng/loài/collection canonical mới, công thức canonical, owner/scope, production gate, approval/audit/rollback rule) = mức 3 Canonical — kiểm chặt như hiện tại.
Luật cũ & an toàn
- Không sửa
knowledge/dev/laws/. Không xóa file cũ. Luật enacted thắng cho tới khi enact bản mới. - Không sửa luật cũ trước khi có mapping sang ma trận (preserved/amended/moved; không xóa, không làm yếu).
- Knowledge Graph (Đ39) chạy lane độc lập — không là blocker; quan hệ canonical vẫn qua rule/DOT/promote.
- Không mutate production / DB thật / CI / secrets trong phạm vi track này. Tài liệu trong
laws-new/là DRAFT, không tự ủy quyền gì. - No lane before checker: chưa có checker fail-closed chạy block-mode thì lane chưa mở. A paper lane is no lane.