Hiến Pháp Bổ Sung S132 — Điều 0-S + 0-M + 0-L (v3.8)
Hiến Pháp Bổ Sung S132 — 3 Điều Mới
Ngày: 2026-03-24 | Session: S132 Tác giả: Anh Huyên (tầm nhìn), Claude Desktop (soạn thảo) Hiến pháp: v3.7 → v3.8 Áp dụng: Mọi thiết kế, mọi luật, mọi agent
ĐIỀU 0-S: NGUYÊN TẮC SINGLE PROVIDER — "1 BỘ PHẬN CUNG CẤP, TẤT CẢ DÙNG LẠI" (★ NỀN TẢNG)
"Mỗi loại service, thông tin sẽ do 1 bộ phận cung cấp → tất cả dùng lại." — Huyên, S132 "Mọi thứ tính bằng hàng trăm, hàng ngàn. Ngay PG cũng phải thiết kế cho tầm nhìn này." — Huyên, S132
§1 Định nghĩa
Single Provider = với mỗi loại NHU CẦU trong hệ thống, chỉ có ĐÚNG 1 "bộ phận" (provider) chịu trách nhiệm cung cấp service/data đó. Mọi phần khác cần thông tin đó → gọi provider đó. KHÔNG tự làm riêng.
§2 Tại sao
Khi hệ thống có hàng trăm collections, hàng ngàn entities, hàng trăm luật:
- Tự làm riêng → hàng trăm bản sao logic → lỗi × hàng trăm → bảo trì × hàng trăm → PG thành "quái vật chậm chạp"
- Dùng chung 1 provider → 1 logic → sửa 1 nơi → tất cả hưởng → PG gọn gàng → triển khai nhanh
§3 Quy tắc
3a. Mỗi loại nhu cầu = 1 provider duy nhất
| Nhu cầu | Provider (SSOT) | Cách dùng |
|---|---|---|
| Đếm entities | meta_catalog + refresh_registry_count() |
17 triggers gọi CÙNG 1 function |
| Xác minh đếm | verify_counts() |
1 function, tất cả collections |
| Khai sinh entities | birth_registry |
1 bảng, mọi entity |
| Phân loại loài | species_collection_map |
1 bảng, mọi collection |
| Phát hiện vấn đề | system_issues |
1 bảng, mọi loại vấn đề |
| Đo lường/kiểm tra | measurement_registry |
1 bảng, mọi luật |
| Danh mục luật | law_catalog |
1 bảng, mọi luật |
| Hiển thị bảng | DirectusTable.vue |
1 component, mọi bảng |
| Navigation entity | 5-Layer Registries | 1 khung, mọi entity |
3b. Thêm "khách hàng" mới = thêm DATA, KHÔNG thêm CODE
- Thêm collection mới → thêm 1 row vào
meta_catalog. KHÔNG viết trigger mới (trigger gọi chung function). - Thêm loại đo lường → thêm 1 row vào
measurement_registry. KHÔNG viết function mới. - Thêm luật mới → thêm 1 row vào
law_catalog+ 1 collection SSOT. KHÔNG viết framework mới. - Thêm dòng Registries mới → config theo Điều 32 template. KHÔNG code tay từng layer.
3c. Tạo provider mới = quyết định kiến trúc lớn
Khi phát hiện nhu cầu chưa có provider → PHẢI:
- Thiết kế provider theo chuẩn (metadata-driven, config-based)
- Đảm bảo scale tới hàng trăm/hàng ngàn "khách hàng"
- Đăng ký vào Hiến pháp (bảng §3a)
- Hội đồng review nếu provider mới ảnh hưởng nhiều luật
TUYỆT ĐỐI KHÔNG tạo giải pháp riêng lẻ cho 1 luật nếu nhu cầu đó chung cho nhiều luật.
§4 Kiểm tra vi phạm
Assembly Gate Q6 (bắt buộc): "Nhu cầu này đã có provider chưa?"
- Nếu CÓ → dùng provider đó (thêm row config)
- Nếu CHƯA → đây có phải nhu cầu chung không?
- Chung → thiết kế provider mới (quyết định kiến trúc)
- Riêng biệt thật sự → OK tạo riêng (hiếm khi)
§5 Tầm nhìn PG
PG phải gọn gàng ở quy mô lớn:
- Triggers: ít và ổn định (~20-30). Chỉ cho real-time events. 1 function, nhiều triggers gọi chung.
- Tables: nhiều nhưng mỗi table có mục đích rõ. Law collection = SSOT data. Framework tables = shared infrastructure.
- Functions: ít framework functions (~5-10), dùng lại cho mọi luật. KHÔNG 1 function per law.
- Views/MViews: ít (~5-10), tổng hợp across laws. KHÔNG 1 view per law.
- Data rows: nhiều — hàng trăm measurements, hàng ngàn entities = BÌNH THƯỜNG cho PG. Rows = data, không phải overhead.
Phân biệt rõ: Thêm DATA (rows) = tốt, PG xử lý dễ dàng. Thêm INFRASTRUCTURE (triggers, functions, views) = cẩn thận, phải justify.
ĐIỀU 0-M: NGUYÊN TẮC ĐO LƯỜNG PHỔ QUÁT
(Giữ nguyên nội dung đã soạn — 5 nguyên tắc)
- Mỗi luật = 1 collection SSOT
- 1 framework đo lường phổ quát (
measurement_registry) - Triggers chỉ cho real-time, measurements cho periodic
- SSOT tự mở rộng, tự phát hiện "điểm mù"
- "2 bài toán đơn giản" là nền tảng mọi đo lường
Chi tiết: search_knowledge("universal measurement framework")
ĐIỀU 0-L: NGUYÊN TẮC "DÙNG LẠI TRƯỚC KHI TẠO MỚI"
(Giữ nguyên nội dung đã soạn)
- Trước khi tạo mới → kiểm tra đã có provider chưa
- Trước khi tạo collection → kiểm tra
law_catalog - Trước khi viết logic → đăng ký
measurement_registry - Tiền lệ thành công phải ghi nhận và dùng lại
- Assembly Gate Q6: "Đã đăng ký vào framework phổ quát chưa?"
DANH SÁCH PROVIDERS HIỆN TẠI (v3.8)
| # | Provider | Table/Component | Phục vụ | Khách hàng hiện tại | Scale tới |
|---|---|---|---|---|---|
| 1 | Entity Counter | meta_catalog + refresh_registry_count() |
Đếm real-time | 17 collections | 100+ collections |
| 2 | Count Verifier | verify_counts() |
Xác minh đếm | 17 collections | 100+ collections |
| 3 | Birth Registry | birth_registry |
Khai sinh entities | 15,307 entities | 100k+ entities |
| 4 | Species Classifier | species_collection_map + meta_catalog.species_code |
Phân loại loài | 21 species, 138 collections | 100+ species |
| 5 | Issue Tracker | system_issues |
Phát hiện vấn đề | Điều 31 runner | Mọi luật, mọi agent |
| 6 | Measurement Engine | measurement_registry + run_internal_measurements() |
Đo lường phổ quát | 15 measurements (8P/3F genuine/1dis) — PRODUCTION | 500+ measurements |
| 7 | Law Catalog | law_catalog |
Danh mục luật | 5 luật đã đăng ký — PRODUCTION | 100+ luật |
| 8 | Table Renderer | DirectusTable.vue |
Hiển thị bảng | Mọi trang bảng | Mọi trang bảng |
| 9 | Entity Navigator | 5-Layer Registries | Navigation entity | 15 loại entity | 100+ loại entity |
| 10 | Framework Health | verify_framework_health() |
Kiểm tra SSOT | (MỚI — chưa implement) | Toàn hệ thống |
Providers CẦN TẠO (phát hiện qua rà soát):
| # | Nhu cầu | Provider đề xuất | Lý do |
|---|---|---|---|
| A | Config cho Layer UI (Điều 32) | layer_config table |
Mỗi dòng Registries cần config 5 layers — hiện code tay |
| B | Relationship renderer | (cần thiết kế) | Layer 5 hiện render tay per entity type |
| C | Nuxt API generator | (cần thiết kế) | Mỗi trang viết API endpoint riêng — nên metadata-driven |
DANH SÁCH VI PHẠM CẦN SỬA
| # | Vi phạm | Luật liên quan | Cách sửa | Ưu tiên |
|---|---|---|---|---|
| 1 | Contracts Điều 31 = JSON files trên đĩa | Điều 31 | Chuyển vào measurement_registry (PG) |
🔴 S132-S133 |
| 2 | Layer config cho mỗi dòng Registries = code tay | Điều 32 (chưa viết) | Tạo layer_config table = provider |
🔴 S133 |
| 3 | API endpoints Nuxt = mỗi trang code riêng | Assembly First | Audit + thiết kế API generator metadata-driven | 🟡 S134+ |
| 4 | Operating Rules VPS lỗi thời (MySQL backup, 8 containers) | OR | Cập nhật cho đúng thực tế | 🟡 S134+ |
| 5 | Luật nằm rải rác, không có law_catalog |
Điều 0-S mới | Implement law_catalog |
🔴 S132-S133 |
CÁC LUẬT CẦN CẬP NHẬT THEO ĐIỀU 0-S
| Luật | Cần sửa gì |
|---|---|
| Điều 26 (Đếm) | Đăng ký verify_counts vào measurement_registry. Ghi rõ: meta_catalog = provider cho đếm. |
| Điều 28 (Khai sinh) | Đăng ký birth_registry check vào measurement_registry. |
| Điều 29 (Species) | Đăng ký species check vào measurement_registry. |
| Điều 31 (Toàn vẹn) | Chuyển JSON contracts → measurement_registry. Thêm §III-B methodology. |
| Điều 32 (Layer — chưa viết) | PHẢI thiết kế theo Single Provider từ đầu: 1 layer_config table cho mọi dòng. |
| Assembly Gate | Thêm Q6: "Nhu cầu này đã có provider chưa?" |