KB-1EA2
Tổng hợp phiên S111 — PostgreSQL + Assembly First
5 min read Revision 1
TỔNG HỢP PHIÊN S111 — 2026-03-12
8 missions trong 1 phiên. Thành tựu chính: chuyển đếm sang PostgreSQL. Nhiều bài học đau thương.
I. MISSIONS ĐÃ CHẠY
| Mission | PRs | Kết quả | Ghi chú |
|---|---|---|---|
| Mission D | #485 | ✅ DONE | Nhật ký format, tổng nguyên tử, cột kiểm chứng, auto deploy sync |
| Mission E | #486-487 | ⚠️ PARTIAL | CAT-ALL có số, /registries/all có data, dot-id-collision-check ✅. NHƯNG: đếm sai, nav bị xoá, agent báo 17/17 KHỚP khi thực tế FAIL |
| Mission E-FIX | #488 | ⚠️ PARTIAL | Crosscheck logic fix, header fix, baseline fix. Nhưng CAT-006/007 vẫn lệch |
| Mission E-FIX-2 | #489 | ✅ DONE | Nav khôi phục 5 mục, header 20 loại, điều tra DOT/Pages |
| S108-REGISTRY-PG | #490 | ✅ DONE | Chuyển đếm sang PG TABLE + FUNCTION. Directus API hoạt động |
| S111-COUNT-VERIFY | #491 | ⚠️ PARTIAL | 3 cách đếm nhưng count_a≈count_b vô nghĩa cho Model B |
II. THÀNH TỰU CHÍNH
- Chuyển đếm sang PostgreSQL — v_registry_counts + v_registry_summary + refresh_registry_counts() FUNCTION
- Luồng đúng kiến trúc: PG → Directus → Nuxt (không bypass)
- Phát hiện Directus 11.5.1 không introspect VIEW → dùng TABLE + FUNCTION
- Nav khôi phục — Knowledge, Modules, Tasks, Workflows, Registries
- dot-id-collision-check — 660 codes scanned, 0 collision
III. VẤN ĐỀ CÒN TỒN ĐỌNG (ưu tiên cho S112)
🔴 P0 — Cross-check Model B vô nghĩa
count_a và count_b đều đếm CÙNG TABLE PG → luôn khớp. Với Model B (DOT tools, Pages, Agents = file scan): cần so Directus record vs VPS files. CAT-006 (108≠118) và CAT-007 (37≠38) vẫn báo KHỚP = VÔ LÝ.
🔴 P1 — Header vs CAT-ALL không nhất quán
Header hiện 1527, CAT-ALL hiện 1542. Số liệu thay đổi giữa các lần refresh do changelog liên tục tăng.
🔴 P2 — 814 orphan gây hoang mang
783 changelog + 31 system_issues = log records không có PREFIX-NNN. Đây là bình thường nhưng hiển thị "814 mồ côi" gây hoảng. Giải pháp: Phân biệt "orphan thực sự" vs "log records không cần code".
🟡 P3 — AD↔Directus Sync Gap
Agent Data 162 docs, Directus 174 docs → gap 12. Cần điều tra.
IV. BÀI HỌC S111 (Huyen — ghi vĩnh viễn)
- "Stupid = đi làm lại cái xã hội đã làm rồi." 4 tầng code đếm vs 1 câu SQL. Hơn 10 lần vi phạm Assembly First, mất hàng chục ngày.
- Assembly First câu 0 = PostgreSQL. DB làm việc DB giỏi nhất. Đếm, quan hệ, bắc cầu, constraint = PG.
- ID sinh từ PG TRIGGER, KHÔNG Directus Flow. 13 AUTO-ID Flows fail → 776+ orphan. PG TRIGGER = 0 orphan by design.
- Luồng data: PG → Directus → Nuxt. KHÔNG BAO GIỜ bypass Directus.
- SCOPE LOCK. Agent tự ý sửa navigation → mất 2 mission fix. Agent chỉ được sửa files trong scope.
- VERIFY ĐẾM. Agent báo 17/17 KHỚP khi thực tế FAIL. Phải đối chiếu TỪNG DÒNG số liệu.
- Directus 11.5.1 không introspect VIEW → dùng TABLE + FUNCTION refresh.
V. TÀI LIỆU ĐÃ CẬP NHẬT S111
| Tài liệu | Version | Nội dung |
|---|---|---|
| Operating Rules | v4.18 | Assembly First viết lại (PG #1). Assembly Gate v2 (6 câu, câu 0=PG). ID từ PG TRIGGER. SCOPE LOCK. VERIFY ĐẾM. Luồng PG→Directus→Nuxt. Directus VIEW limitation. |
| Hiến pháp | v3.2 | Điều 5 K3 cập nhật. Điều 7 K1 thêm PG ưu tiên #0. Migration entries DONE. |
| tech-debt.md | S111 | TD-123✅, TD-085✅, TD-122✅, TD-111✅. TD-132 (đếm+bugs), TD-133 (PG native + ID TRIGGER). |
| roadmap.md | v3.0 | Viết lại toàn bộ. 42 PRs, Phase 2 chi tiết. |
| sync-governance.md | v1.4 | Phase 2 cập nhật. |
| current-state/index.md | S111 | S111 entry chi tiết. TD summary. Lớp 1/2/3 status. |
| s108-s109-session-summary.md | rev 4 | TD ĐÃ DONE + kế hoạch mới. |
| urgent-pg-view-architecture.md | NEW | Luồng PG→Directus→Nuxt, KHÔNG bypass. |
| Memory | Cập nhật | Assembly First = PG first. |
VII. INSIGHT CUỐI PHIÊN (Huyen — quan trọng nhất)
- CHỈ ĐẾM NGUYÊN TỬ ĐÚNG ĐỊNH NGHĨA. 16 loại là nguyên tử. changelog + system_issues = log records, KHÔNG PHẢI nguyên tử → KHÔNG ĐẾM. 814 "orphan" là do đếm nhầm.
- Cross-check từ 1 bảng = VÔ NGHĨA. Bảng sai → tất cả sai theo. Cần 3 nguồn THỰC SỰ KHÁC: PG direct, Directus API, VPS files. Mục tiêu: TÌM SỰ THẬT, không tìm con số.
- ID đã có trong PG. Sinh ID bên ngoài = sai mọi nguyên tắc = nguồn gốc orphan. PG TRIGGER sinh ID = giải pháp gốc rễ.
| Ưu tiên | Việc | TD |
|---|---|---|
| 🔴 P0 | Fix cross-check Model B (so Directus vs VPS, không phải PG vs PG) | TD-132 |
| 🔴 P1 | Phân biệt orphan thực vs log records không cần code | TD-132 |
| 🔴 P2 | PG TRIGGER sinh ID thay 13 Directus Flows → 0 orphan | TD-133 |
| 🟡 | AD↔Directus sync gap 12 docs | Mới |
| 🟡 | Lớp 3 quan hệ PG CTE | TD-133 |