Điều 31 — Bổ sung Layer 3 & Layer 4 (§IV.6-B/C/D)
Điều 31 — Bổ sung §IV.6-B/C/D: Layer 3 & Layer 4
Version: v1.0 DỰ THẢO BAN HÀNH | Soạn: S161D | Duyệt: Anh Huyên S161 Vị trí: File riêng, bổ sung cho Điều 31 §IV.6 Issue Class Tham chiếu:
search_knowledge("system integrity law")— Điều 31 v1.2
§IV.6-B: Layer 3 — Phân loại chi tiết (sub_class)
Nguyên tắc
-
Mỗi issue_class (L2) PHẢI có ít nhất 1 sub_class (L3). Không issue nào tồn tại mà không có sub_class.
-
Phân loại theo ROOT CAUSE, không theo triệu chứng. Hai issue cùng triệu chứng "link hỏng" nhưng khác root cause (target xoá vs source xoá) → khác sub_class.
-
Tiêu chí phân loại ENCODE ĐƯỢC thành code. Mỗi sub_class có bộ điều kiện SQL/logic rõ ràng. Runner/Scanner phát hiện lỗi → chạy điều kiện → tự gán sub_class. Không cần con người phân loại.
-
sub_class là field bắt buộc trong system_issues. Runner/scanner tạo issue mới PHẢI gán sub_class. Issue thiếu sub_class = issue lỗi.
-
Mở rộng bằng config. Thêm sub_class mới = thêm dòng vào bảng + thêm điều kiện classify. KHÔNG sửa code runner.
Bảng phân loại chuẩn
| issue_class (L2) | sub_class (L3) | Điều kiện tự động classify | Severity |
|---|---|---|---|
| render_fault | orphan_dep_target |
entity_dependencies.target_id trỏ đến record không tồn tại | CRITICAL |
| render_fault | orphan_dep_source |
entity_dependencies.source_id trỏ đến record không tồn tại | CRITICAL |
| render_fault | missing_registry_config |
Collection managed nhưng thiếu record trong table_registry | WARNING |
| data_fault | no_dependencies |
Entity có code nhưng 0 rows trong entity_dependencies | WARNING |
| data_fault | missing_identifier |
Entity tồn tại nhưng field code = NULL hoặc rỗng | WARNING |
| data_fault | catalog_incomplete |
meta_catalog entry thiếu field bắt buộc | WARNING |
| sync_fault | count_drift |
meta_catalog.record_count ≠ COUNT(*) thực tế | WARNING |
| sync_fault | vector_orphan |
Agent Data document không có record gốc Directus | CRITICAL |
| sync_fault | missing_vector |
Directus record có Sync Flow nhưng thiếu Agent Data document | WARNING |
| contract_fault | stale_contract |
last_verified_at > 90 ngày | WARNING |
| contract_fault | cascade_failure |
>5 checks cùng run_id fail | CRITICAL |
| infra_fault | production_down |
Health gate fail | CRITICAL |
| infra_fault | auth_failure |
Authentication fail | CRITICAL |
| watchdog_fault | runner_liveness |
WATCHDOG always_fail — runner sống | CRITICAL |
| watchdog_fault | runner_dead |
last_seen_at > 26h | CRITICAL |
Quy tắc classify tự động
KHI phát hiện lỗi:
1. Xác định issue_class (L2) từ loại kiểm tra
2. Chạy bộ điều kiện classify cho issue_class đó
3. Điều kiện đầu tiên KHỚP → gán sub_class
4. Không khớp → gán sub_class = "unclassified"
5. "unclassified" > 0 → tự tạo contract_fault
Đếm Layer 3
- Tổng issues Layer 3 PHẢI = tổng Layer 2 cha. Lệch = BUG.
§IV.6-C: Layer 4 — Địa chỉ lỗi (Issue Detail)
Nguyên tắc
-
Layer 4 = danh sách từng issue trong 1 sub_class. Bấm sub_class → thấy danh sách.
-
Mỗi issue chỉ ra ĐỊA CHỈ CỤ THỂ để fix. Không chấp nhận mô tả chung chung.
-
Fields bắt buộc Layer 4:
| Field | Mô tả |
|---|---|
| entity_code | Mã entity bị ảnh hưởng |
| affected_entity | Tên/path entity |
| entity_url | Link trực tiếp đến entity — bấm vào = đến đúng chỗ fix |
| description | Mô tả CỤ THỂ vấn đề |
| severity | CRITICAL / WARNING |
| date_created | Khi phát hiện |
| occurrence_count | Phát hiện bao nhiêu lần |
| source_system | Ai phát hiện |
-
entity_url PHẢI là link hoạt động. Entity đã xoá → ghi "[DELETED]" + mã gốc.
-
Sort: severity DESC → occurrence_count DESC → date_created DESC.
Quy tắc tạo entity_url
- meta_catalog → /knowledge/registries/{collection_name}
- table_registry → /knowledge/registries/{parent}/{table_code}
- entity_dependencies → link đến source entity
- Khác → /admin/content/{collection}/{id}
- Đã xoá → "[DELETED] {entity_code}"
Đếm Layer 4
- Tổng Layer 4 PHẢI = số hiển thị Layer 3 cha. Pagination nếu >50.
§IV.6-D: Bất biến xuyên Layer
- Tổng L1 = Tổng L2 = Tổng L3 = Tổng L4. Lệch = sync_fault.
- Mỗi issue có đúng 1 issue_class VÀ đúng 1 sub_class.
- sub_class = NULL > 24h → auto-escalate.
- Thêm sub_class mới = sửa bảng config + cập nhật luật. KHÔNG sửa code runner.
Điều 31 bổ sung v1.0 | S161D | Layer 3 + Layer 4 + Bất biến.
search_knowledge("dieu31 layer 3 4 sub_class")