§7 Roadmap 4 pha + D0-D9 + Đợt 1-9
§7 ROADMAP THỰC THI — ĐIỀU TRA → DESIGN → IMPLEMENT
Part of: PG Reform Tools — S176 mission Prev: 09-khai-sinh-collection.md ← | → Next: 11-tham-chieu-td.md
§7.1 Pha điều tra (đang làm — phiên S176)
| Khối | Trạng thái | Báo cáo | Phát hiện chính |
|---|---|---|---|
| K0 Timeline + Retention | ✅ DONE | s176-invest-k0-timeline-retention |
4 mốc, WAL OFF, dot_run_log missing, last_executed bulk-backfill |
| K1 L1 Official Channels | ✅ DONE | s176-invest-k1-official-channels |
272 DOT, 148/223 thiếu cặp, 42 cặp trùng tên, 60/272 fp=NULL, 79 fn_*, fn_transition_lifecycle là phôi gateway |
| K2 L3 Bypass Writers | ✅ DONE | s176-invest-k2-bypass-writers |
4 DB cluster, 4 bypass L3, CAT-ALL known hack, password leak, 6 cron không installer |
| KS.1 DDL audit gap | ✅ DONE | s176-invest-k2-supplement rev 3 |
🔴 INVISIBLE AUDIT GAP — DDL qua psql không log. 2084 events H2. Admin monopoly |
| KS.2 Mốc 2026-03-10 | ✅ DONE | s176-invest-k2-supplement rev 3 |
Hypothesis reset BỊ BÁC. 2 collection tạo mới S108 #471+#473. SELF-HEALING-LATE (4 tháng tối). WHY-5 = argument Phương án C |
| KS.3 15 script unregistered | ✅ DONE | s176-invest-k2-supplement rev 3 |
14/15 là metadata catch-up gap (b), 1/15 di tích (c), 0/15 cố tình. Pattern ~22% registry. dot-script-lint self-exempt |
| KS.4 DOT MA (chiều ngược) | ⏳ NEXT | s176-invest-k2-supplement rev 4 |
Quét 212 record có file_path → file còn tồn tại trên disk không? |
| KS.5 SELECT-then-INSERT vs 9 writer S175 | ⏳ Pending | rev 5 | Cross-check 12 file race risk K1 vs dot-collection-health S175 — giao điểm? |
| KS.6 Cron installer mapping | ⏳ Pending | rev 6 | 6 cron LIVE nrm/doc/script-lint ai cài? Manual hay DOT? |
| K3 Credentials + quyền PG | ⏳ Pending | s176-invest-k3-credentials-permissions |
\du, role_table_grants, fn_* SECURITY DEFINER, IP forensic |
| K4 Shadow patterns + dead code | ⏳ Pending | s176-invest-k4-shadow-patterns |
Markers .sql-applied, 5 cron unknown, 0048_mysql, placeholder doc-* |
| K5 Catalog DOT baseline | ⏳ Pending | s176-invest-k5-catalog-baseline |
Quét 46 record fp=NULL còn lại, xác định cụm MATRIX/KG/MISC |
§7.2 Pha thiết kế (sau điều tra — CHƯA bắt đầu)
Nguyên tắc: KHÔNG vội thiết kế khi chưa điều tra xong. Design 1 lần, tổng hợp mọi phát hiện, không vá lẻ tẻ. Bài học S176: HP v4.4.0 quên kiến trúc cũ → mất buổi mò.
| Bước | Nội dung | Đầu vào |
|---|---|---|
| D0 Vẽ lại tổng thể bức tranh PG hiện trạng | Sơ đồ 4 DB × 3 lớp × mọi writer × mọi bypass × mọi gap audit | K0+K1+K2+KS.1..6+K3+K4+K5 |
D1 Design 5 nhóm DOT + field mới (kind, file_path_status) |
Chốt phân loại, constraint, validation | K1+KS.3+K5 |
D2 Design dot_run_log + ddl_audit_log + dot-find |
Schema 2 bảng mới + cổng tra cứu | K0+KS.1+K5 |
| D3 Design password rotation + GSM flow | .env structure, rotate procedure, DOT credential audit |
K3 |
| D4 Design DOT-MIGRATION-APPLY + DOT-CAT-ALL-REFRESH | Thay thế 2 CI bypass | K2+KS.2 |
| D5 Design DOT-COLLECTION-CREATE | Quy trình khai sinh đầy đủ 9 bước | Đ36 + Birth Law |
D6 Design dot-file-path-orphan-check + CI pre-merge gate |
Chặn metadata shells | KS.3 |
D7 Design dot-ddl-audit-monitor + event trigger |
Bắt mọi DDL | KS.1 |
| D8 Chốt "Phương án A+" cuối cùng | Tổng hợp D1-D7, decide gap nào dùng gateway PG function (C-partial) vs constraint PG | Tất cả trên |
| D9 Sửa luật đồng bộ 1 lần | HP v4.6.0 + Đ33 v2.1 + Đ35 v5.1 + OR bổ sung — không sửa lẻ tẻ | D0-D8 |
§7.3 Pha thực thi (sau thiết kế — CHƯA bắt đầu)
Đợt 1 — Hạ tầng password (rủi ro thấp): Đẩy GSM → .env VPS → PG container đọc → test 1 DOT → rotate test.
Đợt 2 — REVOKE direct + 5 ngoại lệ: REVOKE password-less → whitelist E1-E5 → test mọi DOT chính thức.
Đợt 3 — Dedupe DOT + metadata catalog + bảng mới: Dedupe 42 cặp → thêm 7 field mới (5 cũ + kind + file_path_status) → backfill 230 DOT canonical → tạo dot_run_log + ddl_audit_log + event trigger.
Đợt 4 — Fix 4 bypass L3: DOT-MIGRATION-APPLY + DOT-CAT-ALL-REFRESH + đăng ký pg-client.js + đăng ký dot-script-lint/dot-cron-matrix-setup.
Đợt 5 — Fix NT12 cặp (batch): Batch 1 (10 direct-PG writer rủi ro cao) → Batch 2 (38 schema bootstrap) → Batch 3 (100 còn lại). Mỗi batch 1 phiên.
Đợt 6 — DOT-COLLECTION-CREATE + Birth fix: Test 1 collection → backfill birth_registry → trigger guard.
Đợt 7 — Catalog DOT cho AI: dot-find semantic search → README auto-gen → test agent gọi.
Đợt 8 — (MỚI KS.1+KS.3) DDL audit + file_path orphan check: Deploy event trigger → backfill ddl_audit_log rỗng (forward only) → deploy dot-ddl-audit-monitor + dot-file-path-orphan-check → CI pre-merge gate.
Đợt 9 — Backfill 46 record file_path=NULL còn lại: Sau KS.4+K5 xác định chính xác còn bao nhiêu → one-shot migration script.
§7.4 Quy tắc thực thi
- Mỗi lần phát hiện bệnh mới = ghi ngay vào master + tracker (KS.1/KS.2/KS.3 đã thực hiện)
- Mỗi khối báo cáo xong = đọc FULL, không đọc tóm tắt (bài học KS.3)
- Mỗi vấn đề = đặt câu hỏi WHY và trả lời bằng evidence cứng (git log, grep, query, stat) — không đoán mò
- P0→P5 từng phase báo về — chậm mà chắc
- Mỗi đợt 1 PR, không gộp
- Test local trước push + Verify production sau mỗi deploy (§0-AE)
- Update tracker + handoff sau mỗi đợt
File 10 — §7 Roadmap | Index | S176 | Living doc