KB-1FB4 rev 78

Bảng Tiến độ — S171B-VERIFY rev41

38 min read Revision 78

BẢNG TIẾN ĐỘ DỰ ÁN INCOMEX — SSOT

Cập nhật: S176-PART1 rev 74 (2026-04-13) — PG Reconfig INVESTIGATE 60%: HP v4.5.0 + Đ33 v2.0 ban hành, PG-Reconfig Master rev 3, K0/K1/K2 + KS.1/KS.2/KS.3 điều tra xong. KS.4-KS.6 + K3-K5 + DESIGN + IMPLEMENT chờ tiếp. | HP: v4.5.0 (S176) | Đ33: v2.0 BAN HÀNH (S176) | OR: v7.57-draft | DOT: 272 (chờ dedupe ~230) | Luật: 36 enacted + 1 draft (Đ34) + 1 viết lại (Đ36)


🟡 S176-PG-RECONFIG — ROADMAP TỔNG (2026-04-13 rev 74)

Mission: Tái cấu trúc công cụ PG để "ghi sai PG = không được phép xảy ra".

Nguyên tắc vàng của mission: Điều tra → hỏi WHY → Design tổng → Sửa luật đồng bộ → IMPLEMENT. KHÔNG vá lẻ tẻ. Mỗi lỗi tìm thấy = cơ hội học gốc rễ. Bài học: HP v4.4.0 quên kiến trúc cũ → mất buổi mò.

File SSOT bức tranh tổng: folder knowledge/current-state/reform-PG-tools/ — đọc 00-index.md ĐẦU TIÊN mỗi phiên (4k chars), rồi đọc file liên quan việc đang làm. File cũ pg-reconfig-master.md đã trở thành stub redirect sau khi split 2026-04-14 (v2.0 folder split — 13 file ~5k chars mỗi file, không mất nội dung).

Roadmap 4 pha — theo dõi end-to-end

PHA 1 — INVESTIGATE (đang chạy, ~60% xong)
├─ ✅ K0    Timeline + Retention
├─ ✅ K1    L1 Official Channels (272 DOT, 60/272 fp=NULL)
├─ ✅ K2    L3 Bypass Writers (4 bypass L3, 4 DB cluster)
├─ ✅ KS.1  DDL MySQL era audit (INVISIBLE AUDIT GAP 🔴)
├─ ✅ KS.2  Mốc 2026-03-10 (hypothesis bác, SELF-HEALING-LATE, WHY-5 = argument Phương án C)
├─ ✅ KS.3  15 script unregistered (14/15 metadata shells, pattern 22% registry)
├─ ⏳ KS.4  DOT MA — chiều ngược (file_path trỏ file đã xoá?)                 ← NEXT
├─ ⏳ KS.5  Cross-check 12 SELECT-then-INSERT vs 9 writer S175
├─ ⏳ KS.6  Cron installer mapping (6 cron LIVE ai cài?)
├─ ⏳ K3    Credentials + quyền PG (\du, role_table_grants, fn_* SECURITY DEFINER)
├─ ⏳ K4    Shadow patterns + dead code (markers, 5 cron, 0048_mysql, placeholder)
└─ ⏳ K5    Catalog DOT baseline (quét 46 record fp=NULL còn lại)

PHA 2 — DESIGN (chưa bắt đầu — chỉ sau khi đủ dữ liệu)
├─ ⏳ D0    Vẽ lại tổng thể bức tranh PG (sơ đồ 4 DB × 3 lớp × mọi writer × mọi gap)
├─ ⏳ D1    Design 5 nhóm DOT + field mới (kind, file_path_status, target_db, target_layer)
├─ ⏳ D2    Design dot_run_log + ddl_audit_log + dot-find
├─ ⏳ D3    Design password rotation + GSM flow + DOT credential audit
├─ ⏳ D4    Design DOT-MIGRATION-APPLY + DOT-CAT-ALL-REFRESH
├─ ⏳ D5    Design DOT-COLLECTION-CREATE (9 bước Đ36 + Birth Law)
├─ ⏳ D6    Design dot-file-path-orphan-check + CI pre-merge gate (KS.3)
├─ ⏳ D7    Design dot-ddl-audit-monitor + event trigger (KS.1)
├─ ⏳ D8    Chốt "Phương án A+" cuối cùng
└─ ⏳ D9    Sửa luật đồng bộ 1 lần HP v4.6.0 + Đ33 v2.1 + Đ35 v5.1 + OR

PHA 3 — IMPLEMENT 9 đợt (chưa bắt đầu)
├─ ⏳ Đợt 1   Hạ tầng password GSM (rủi ro thấp)
├─ ⏳ Đợt 2   REVOKE direct + 5 ngoại lệ E1-E5
├─ ⏳ Đợt 3   Dedupe 42 cặp DOT + metadata catalog + dot_run_log + ddl_audit_log
├─ ⏳ Đợt 4   Fix 4 bypass L3 (DOT-MIGRATION-APPLY, DOT-CAT-ALL-REFRESH, pg-client.js, 2 script)
├─ ⏳ Đợt 5   Fix NT12 cặp batch (10 direct-PG → 38 schema bootstrap → 100 còn lại)
├─ ⏳ Đợt 6   DOT-COLLECTION-CREATE + Birth registry fix
├─ ⏳ Đợt 7   Catalog DOT cho AI (dot-find semantic + README auto-gen)
├─ ⏳ Đợt 8   DDL audit + file_path orphan check (KS.1 + KS.3)
└─ ⏳ Đợt 9   Backfill 46 record fp=NULL còn lại

PHA 4 — VERIFY & CLOSE
└─ ⏳ Verify production + retire master document → KB current-state/history

✅ Đã DONE phiên S176 (tính đến rev 74)

# Item File Rev Chars Ghi chú
1 Hiến pháp v4.5.0 BAN HÀNH knowledge/dev/laws/constitution.md 11 10,870 +Kiến trúc 4 DB + 3 lớp + NT3 có ngoại lệ
2 Điều 33 PostgreSQL v2.0 BAN HÀNH knowledge/dev/laws/dieu33-postgresql-law.md 2 28,507 §0 Kiến trúc, §13 5 ngoại lệ E1-E5, §14 Password GSM, §15 CI hooks
3 PG Reform Tools folder (split từ master) knowledge/current-state/reform-PG-tools/ 13 file rev 1 ~58,000 (tổng) Split 2026-04-14 từ pg-reconfig-master.md rev 3 → 13 file ~5k (00-index → 12-why-mo). File cũ thành stub redirect rev 4. Lý do: monolith 58k đốt ngữ cảnh khi rewrite, patch từng file nhỏ an toàn hơn.
4 K0 Timeline + Retention reports/s176-invest-k0-timeline-retention 1 11,442 4 mốc, WAL OFF, dot_run_log missing
5 K1 L1 Official Channels reports/s176-invest-k1-official-channels 1 19,812 272 DOT, 60/272 fp=NULL, fn_transition_lifecycle là phôi gateway
6 K2 L3 Bypass Writers reports/s176-invest-k2-bypass-writers 1 29,642 4 DB cluster, 4 bypass L3, CAT-ALL known hack, password leak
7 K2 Supplement (KS.1+KS.2+KS.3) reports/s176-invest-k2-supplement 3 50,762 INVISIBLE AUDIT GAP + 2026-03-10 bác + 14/15 metadata shells

Phát hiện quan trọng đã ghim (chi tiết xem PG-Reconfig Master §2)

Kiến trúc thực tế (K0+K1+K2):

  • 4 database cluster: directus, incomex_metadata, workflow (rỗng), postgres (admin)
  • 2 PG user nghiệp vụ: workflow_admin (directus), incomex (incomex_metadata) — cross-DB coupling qua s134_pg_grants.sql
  • 272 DOT, ~230 sau dedupe, 148/223 (66%) thiếu DOT cặp
  • 79 PG function fn_*, fn_transition_lifecycle là phôi gateway hiện đang dùng
  • directus_activity retention 128 ngày, dot_run_log KHÔNG tồn tại, WAL archive OFF

4 bypass L3 chủ đích (K2):

  1. CI CAT-ALL UPDATE qua set_config('app.allow_meta_update','true') — backdoor, self-documented là "known hack"
  2. CI auto-apply 36 SQL file vĩnh viễn trong sql/ qua marker .done (6 file chưa marker)
  3. scripts/integrity/pg-client.js (Điều 31 runner) — Node.js pg lib INSERT thẳng measurement_log
  4. dot-script-lint + dot-cron-matrix-setup

Từ KS.1 — 🔴 INVISIBLE AUDIT GAP:

  • directus_activity chỉ log DDL qua API, DDL qua psql trực tiếp MÙ HOÀN TOÀN
  • 2084 DDL events H2: 100% user=admin@example.com (admin monopoly trước S148), 99.6% bot/script
  • 2 spike: 2026-02-14 bulk 631 events + 2026-03-06 tạo meta_catalog bulk 23 collections/21s

Từ KS.2 — Hypothesis 2026-03-10 reset BỊ BÁC:

  • 2 bảng system_issues + registry_changelog được TẠO MỚI hoàn toàn S108 #471 WATCHDOG + #473 SELFHEAL, không reset
  • SELF-HEALING-LATE: 4 tháng tối 2025-12-07 → 2026-03-10 không có cơ chế phát hiện vi phạm
  • RUN-BEFORE-COMMIT: operator chạy script production 13 phút trước commit
  • WHY-5 (mạnh nhất): Tuyến L1 qua Directus API là tuyến forensic khả thi DUY NHẤT → argument mạnh nhất cho Single Writer Gateway

Từ KS.3 — Pattern METADATA SHELLS ~22% registry:

  • 14/15 script "không đăng ký" thực ra là metadata catch-up gap: có metadata DOT_* đầy đủ, chỉ thiếu file_path
  • Smoking gun: 14/15 commit đầu tiên là "sync: copy 35 VPS-only files to macbook (Step 2A)" — script chạy trên VPS trước khi git biết
  • 6 script LIVE production cron không được audit qua §0-AY vì file_path rỗng
  • dot-script-lint tự lách regex mình detect (self-exempt)
  • Pattern lặp ≥ 4 cụm (NRM, DOC, MATRIX, KG) → ~22% registry bị ảnh hưởng (60/272 record fp=NULL, KS.3 giải thích 14/60, còn 46 chưa biết)
  • §0-AY bị vô hiệu hoá bằng "metadata shells" — cần constraint cứng PG + CI gate

Bài học quy trình:

  • Đọc FULL file qua get_document_for_rewrite, KHÔNG đọc tóm tắt agent paste (KS.3 bài học cuối)
  • Mỗi phát hiện = ghi master + tracker ngay, không để sót (KS.2+KS.3 đã suýt sót)
  • Mỗi bệnh đặt WHY và trả lời bằng evidence cứng (git log, grep, query, stat)
  • Điều tra xong MỚI thiết kế — không vá lẻ tẻ
  • Mục tiêu = nghiệp vụ tiện lợi, không phải tuân thủ luật bằng mọi giá

⏳ NEXT ACTION (phiên đang làm)

  1. KS.4 — DOT MA chiều ngược: quét 212 record có file_path → file còn tồn tại trên disk/VPS không?
  2. Sau KS.4 → KS.5 cross-check 12 SELECT-then-INSERT vs 9 writer S175
  3. Sau KS.5 → KS.6 cron installer mapping
  4. Sau KS.6 → K3 credentials
  5. Sau K3 → K4 shadow patterns
  6. Sau K4 → K5 catalog baseline
  7. Sau K5 → D0-D9 DESIGN tổng
  8. Sau D9 → sửa luật đồng bộ HP v4.6.0 + Đ33 v2.1 + Đ35 v5.1 + OR
  9. Sau sửa luật → IMPLEMENT 9 đợt

TD mới phát hiện S176 PG-Reconfig (rev 74 cập nhật đầy đủ)

TD Block Mô tả Status Priority
TD-S176-PASSWORD-LEAK K2 Incomex2026PG_306ac539ad365fce rò rỉ git history (agent-data-test/scripts/import_firestore_to_pg.py). PHẢI đổi password + dọn git history khi triển khai phương án A. OPEN — Đợt 1 khẩn 🔴 High
TD-S176-CI-CAT-ALL-BYPASS K2 CI deploy-vps.yml dùng set_config('app.allow_meta_update','true') bypass guard meta_catalog. Self-documented "known hack". Fix: DOT-CAT-ALL-REFRESH gọi fn_refresh_cat_all() SECURITY DEFINER. OPEN — Đợt 4 🔴 High
TD-S176-CI-SQL-AUTOAPPLY K2 CI auto-apply 36 file SQL qua marker .done, không qua DOT, file vĩnh viễn. Fix: DOT-MIGRATION-APPLY header -- DOT-MIGRATION-APPLY-OK, retire sql/archive/. OPEN — Đợt 4 🟡 Medium
TD-S176-DOT-DEDUPE K1 42 cặp DOT trùng tên (DOT-NNN vs DOT_SEMANTIC), khác domain khác paired. Chọn DOT_SEMANTIC canonical. OPEN — Đợt 3 🟡 Medium
TD-S176-NT12-VIOLATION K1 148/223 (66%) DOT writer thiếu DOT cặp. 38/38 schema bootstrap paired=None. Fix batch 10-15 DOT/phiên. OPEN — Đợt 5 🟡 Medium
TD-S176-DOT-RUN-LOG-MISSING K0 dot_run_log không tồn tại — NT12 không có backing log runtime. Tạo bảng + log mọi DOT chạy. OPEN — Đợt 3 🟡 Medium
TD-S176-BIRTH-REGISTRY-DEAD K2 birth_registry count=0, trigger không chạy. Fix Đợt 6 DOT-COLLECTION-CREATE + backfill. OPEN — Đợt 6 🟡 Medium
TD-S176-CRON-INSTALLER-MISSING K2 5/6 cron PG function không có installer DOT (chỉ DOT-308 có). Fix: gắn installer DOT cho mỗi cron entry. OPEN — Đợt 4 🟢 Low
TD-S176-DEAD-CODE-0048-MYSQL K2 0048_link_policies_mysql.sql dùng MySQL UUID() fail trên PG. KS.2 confirm: chưa có marker .done → chưa từng apply thành công. Dead code. OPEN — Đợt 4 🟢 Low
TD-S176-PG-DUMP-COMMITED K2 vps_pg_schema_incomex_metadata_kb_20260405.sql pg_dump snapshot có \restrict <token> commit vào git. Sensitive. Move ra ngoài git. OPEN — Đợt 4 🟢 Low
TD-S176-DDL-MYSQL-ERA-AUDIT KS.1 🔴 INVISIBLE AUDIT GAP — directus_activity chỉ log DDL qua API. DDL qua psql KHÔNG có log nào. WAL OFF. 2084 DDL events H2 chỉ là phần nhỏ. Fix: PG event trigger ddl_command_endddl_audit_log SECURITY DEFINER + DOT dot-ddl-audit-monitor daily. Bổ sung Đ33 §16 sau DESIGN. OPEN — Đợt 8 + Đ33 §16 🔴 High
TD-S176-ADMIN-MONOPOLY-LEGACY KS.1 100% DDL events H2 (2084 lần) user=admin@example.com. Trước S148 admin token chung, dữ liệu lịch sử "ngộ độc admin". Fix: K3 verify còn DOT dùng admin token không + backfill nhãn "events <2026-03-30 không phân biệt user". OPEN — K3 verify 🟡 Medium
TD-S176-LOG-WITH-SECRET KS.1 Rà log file tìm secret leak: /var/log/, /opt/incomex/logs/, Directus logs, agent-data logs, telegram logs. Pattern: password=, token=, Bearer, Incomex2026PG, _secret, api_key. OPEN — KS hoặc K4 🟡 Medium
TD-S176-2026-03-10-RESET KS.2 Hypothesis K0 "2 bảng log bị reset 2026-03-10" BỊ BÁC. KS.2 verify: 2 bảng tạo MỚI hoàn toàn S108 #471 WATCHDOG + #473 SELFHEAL. Không có reset. CLOSED
TD-S176-SELF-HEALING-LATE KS.2 MỚI Self-healing layer (system_issues, registry_changelog, watchdog) dựng 2026-03-10. Trước đó 4 tháng (2025-12-07 → 2026-03-10 = 93 ngày) đã có 100k+ events mà KHÔNG có cơ chế phát hiện vi phạm nào. NT5 codify quá muộn. Vi phạm thời kỳ này không log. Fix: (1) backfill chạy lại checker trên snapshot cũ, HOẶC (2) chấp nhận ghi nhãn "data ≤ 2026-03-10 không qua self-healing". OPEN — Decide trong DESIGN 🟡 Medium
TD-S176-RUN-BEFORE-COMMIT KS.2 MỚI Operator chạy script production 13 phút TRƯỚC commit (10:17 vs 10:30 2026-03-10). Workflow "test trên cloud Directus → xanh → commit → merge". Tạo cửa sổ schema drift nếu quên commit. DOT-067 dot-schema-diff + DOT-075 dot-schema-snapshot lý thuyết catch, nhưng last_executed=bulk-set không tin được. Fix: pre-commit hook HOẶC daily cron diff alert. OPEN — KS.6 verify snapshot + Đợt 7 🟡 Medium
TD-S176-METADATA-CATCHUP KS.3 MỚI — áp đảo 14/15 script "unregistered" thực ra là metadata shells — có metadata DOT_* đầy đủ (tier, domain, paired, trigger) nhưng file_path=NULL. §0-AY bị vô hiệu hoá bằng hồ sơ rỗng ruột. Pattern lặp ≥4 cụm, ~22% registry (60/272). Fix: (1) PG CHECK constraint file_path IS NOT NULL OR file_path_status='placeholder'; (2) DOT mới dot-file-path-orphan-check (tier A, cron daily) cross-ref ls dot/bin/ vs dot_tools.file_path; (3) CI pre-merge hook; (4) backfill 46 record còn lại qua one-shot migration. OPEN — Đợt 8+9 + Đ33 §17 🔴 High
TD-S176-VPS-FIRST-NO-HOOK KS.3 MỚI OR §VI "sửa VPS → git push 2×/ngày" không có bước dot-register-self sau khi tạo script trên VPS. 14/15 script có first commit "sync: copy 35 VPS-only files to macbook (Step 2A)" — chạy trên production nhiều ngày/tuần TRƯỚC khi git biết. Fix: cron push 2×/ngày thêm bước gọi dot-file-path-orphan-check trước git push HOẶC VPS pre-commit hook. OPEN — Đợt 8 🟡 Medium
TD-S176-LINTER-SELF-EXEMPT KS.3 MỚI dot-script-lint (DOT_SCRIPT_LINT tier-A monitoring.integrity) là linter chống hardcode nhưng chính nó dùng ${PG_CONTAINER:-postgres} để lách regex mình detect. Semantic vẫn là direct PG writer qua run_pg psql. Self-exempt. Fix: (1) mở rộng pattern bắt wrapping ${VAR:-default} HOẶC (2) chuyển dot-script-lint sang ghi system_issues qua Directus API thay vì psql. OPEN — Đợt 4 🟢 Low
TD-S176-INSTALLER-NOT-DOT KS.3 MỚI dot-cron-matrix-setup (installer one-shot) không có metadata dot_tools, asymmetry với dot-cron-pivot-setup (DOT-308 có register). Định nghĩa "DOT là gì" chưa cover installer/bootstrap/one-shot. Fix: thêm field kind vào dot_tools với enum {writer, checker, installer, bootstrap, one_shot}. OPEN — Đợt 3 🟢 Low

Tóm lược TD: 20 TD — 3 đỏ + 10 vàng + 6 xanh + 1 đã đóng (TD-2026-03-10-RESET bị bác).

Câu hỏi WHY — tình trạng điều tra

✅ Đã trả lời (10 WHY):

  • Admin monopoly 2084 events (KS.1 WHY-1) — trước S148 admin token chung
  • DDL qua psql không log (KS.1 WHY-4) — INVISIBLE AUDIT GAP
  • directus_relations 0 events (KS.1 WHY-3) — artifact Directus (m2o qua fields)
  • 2 collection 2026-03-10 ra đời (KS.2 WHY-2) — S108 PR #471 + #473, không reset
  • Self-healing muộn (KS.2 WHY-2) — NT5 codify sau 4 tháng hoạt động
  • Operator chạy trước commit (KS.2 WHY-4) — workflow VPS-first fast iteration
  • dot-script-lint + dot-cron-matrix-setup không đăng ký (KS.3 WHY-A) — oversight + self-exempt
  • Cụm dot-nrm-* fp=NULL (KS.3 WHY-B) — workflow bug, thiếu hook dot-register-self
  • Cụm dot-doc-* fp=NULL (KS.3 WHY-C) — metadata trước implementation sau (placeholder)
  • §0-AY không catch (KS.3 WHY-D) — cảnh sát chỉ kiểm "có trong registry", không kiểm "link đúng"

⏳ Đang treo (14 WHY):

  • WHY-F Pattern metadata shells lặp ở 46 record còn lại (cụm MATRIX/KG/MISC)? — KS.4 + K5
  • WHY-G DOT MA chiều ngược: có bao nhiêu record có fp nhưng file đã xoá? — KS.4
  • WHY-H 12 file SELECT-then-INSERT vs 9 writer S175 giao điểm ở dot-collection-health? — KS.5
  • WHY-I 6 cron LIVE nrm/doc/script-lint ai cài trên VPS? — KS.6
  • WHY-J 5 cron PG function K2 không có installer ai cài? — K4
  • WHY-K app.allow_meta_update session var — guard ở function nào, tạo bởi SQL nào? — K3
  • WHY-L User incomex quyền thật trên DB directus ngoài s134_pg_grants.sql? — K3
  • WHY-M incomex_metadata có Directus API access không? — K3
  • WHY-N Password leak còn dùng trên VPS không? — K3 🔴 verify ngay
  • WHY-O Birth registry trigger không chạy (count=0) mà NT5 không alert? — K4
  • WHY-P entity_audit_queue dormant — producer chết hay chưa bật? — K4
  • WHY-Q 0048_link_policies_mysql.sql không có marker — fail hay chưa schedule? — K4
  • WHY-R DOT 100% có bản trước v4.4.0 không? — K4 git history
  • WHY-S Đ33 §13 E3 (ngoại lệ normative) có thật trong luật chính thức không? — K3/K4

Tài liệu reference S176 PG-Reconfig

  • knowledge/current-state/reform-PG-tools/ folder 13 file rev 1 — SSOT bức tranh tổng (split từ pg-reconfig-master.md cũ), đọc 00-index.md đầu tiên mỗi phiên
  • knowledge/dev/laws/constitution.md rev 11 (HP v4.5.0)
  • knowledge/dev/laws/dieu33-postgresql-law.md rev 2 (Đ33 v2.0)
  • knowledge/current-state/reports/s176-invest-k0-timeline-retention rev 1
  • knowledge/current-state/reports/s176-invest-k1-official-channels rev 1
  • knowledge/current-state/reports/s176-invest-k2-bypass-writers rev 1
  • knowledge/current-state/reports/s176-invest-k2-supplement rev 3 (KS.1+KS.2+KS.3)

🔴 S176 ONGOING — Lark Production Infrastructure (2026-04-11)

Mission: Xây hạ tầng Lark dùng chung cho mọi agent (Claude Code, Codex, Gemini, cron, Desktop). 3 Phase: Library + CLI + Dump Lần 1. Pattern LOT (Lark Operation Template), 1 Bot "For Gem", 1 credential GSM, 1 cửa CLI lark-tool.

📋 HANDOFF S176 INLINE (phiên sau đọc khi chuyển)

Tóm tắt 1 câu: Xây xong hạ tầng Lark production (library + CLI ngôn ngữ chung) qua 2 phase + unblock IAM silent bug từ S174, đang chờ Phase 3 dump thật 18 Base.

Quyết định kỹ thuật CHỐT:

  • 1 Bot "For Gem" cli_a785d634437a502f đã add 18 Base folder "Dữ liệu Phái cử"
  • 1 credential: GSM github-chatgpt-ggcloud secrets LARK_APP_ID/SECRET — đọc thẳng GSM, KHÔNG dùng .env (Phase 1 verified source=gsm:github-chatgpt-ggcloud)
  • 1 SA VPS: cursor-ci-builder@github-chatgpt-ggcloud.iam.gserviceaccount.com với 4 role bao gồm secretmanager.secretAccessor grant 2026-04-11
  • 1 CLI ngôn ngữ chung: /usr/local/bin/lark-tool v1.0.0 — mọi agent dùng chung
  • Pattern LOT (DOT-inspired cho Lark): audit, rate limit global, whitelist, idempotent, checksum
  • Read-only 100%. Write = S177 riêng

File structure VPS:

/opt/incomex/lark-client/v1.0.0
├── lark_client/ (core, reader, registry, audit, exceptions)
├── config/bases.yaml (18 Base SSOT §0-AU)
├── config/allowed_endpoints.yaml (4 read endpoint, 0 write)
├── cli/ (lark_tool.py, dump.py, summarize.py)
└── tests/ (19 tests)
/usr/local/bin/lark-tool (symlink)
/var/log/lark-ops/YYYYMMDD.jsonl (audit, logrotate 90d)
/var/lock/lark-api.lock (rate limit 10 req/s)
/opt/incomex/lark-snapshots/2026-04-11/ (Phase 3 output, đang chạy)

CLI commands có sẵn:

lark-tool --version | registry list | registry show <key>
lark-tool schema list <key> [--json]
lark-tool schema dump <key> | schema dump --all [--output]
lark-tool schema summarize <dir> (OFFLINE, 0 API call)
lark-tool audit tail [-n N] [--follow]

Flag --agent <n> | Exit codes: 0 ok, 1 user, 2 network, 3 internal, 4 permission, 5 credential lost.

Dữ liệu có con số:

  • Phase 1: 8/8 VERIFY + 19/19 full test. ~1200 LOC. Deps: requests, PyYAML, tabulate. Token 42 chars TTL 7200s
  • Phase 2: 8/8 VERIFY. Test 2 Base: Đối Ngoại NL 7 bảng 178 fields + Base 88 80 bảng 3674 fields. 3 bảng known 234/233/87 ✓. Idempotent ✓. Summarize offline ✓
  • 4 master candidates Base 88: "BÁO CÁO - Danh sách Email" 14f/7inbound (strongest), "Nhóm - Danh sách" 6f/2in, "BÁO CÁO - Phân nhóm gửi" 6f/2in, "Phái cử 2" 12f/2in

RCA pattern "mất secret định kỳ" (Huyên nhớ mang máng, đã xác minh): Từ S173 log cron: 04-05 16:00 PASS → 04-06 04:00 (13h cache) PASS → 04-06 16:00 (25h cache) FAIL → 04-07 fail tiếp. Gốc: cache TTL 24h hardcoded trong script + SA base state thiếu secretAccessor. S173 fix theo PA-4 (bypass runtime, đọc GSM 1 lần ghi .env) thay vì grant quyền → không cắt gốc. S176 là lần đầu grant thực sự. Giả thuyết "IAM reset tự động" bị LOẠI TRỪ.

Sai lầm + bài học Desktop S176:

  1. Over-engineering credential layer (nghĩ GSM không cho VPS đọc → sai, chỉ thiếu quyền)
  2. Suýt bắt user chạy gcloud tay (Claude Code tự làm được)
  3. Reactive fix IAM → Huyên nhắc "mỗi lỗi = cơ hội gốc rễ" → search KB ra S173 RCA đầy đủ
  4. Suýt chặn Phase 1 chờ RCA Phase 2 (không cần, S173 đã có đáp án) → Bài học: search KB TRƯỚC khi giao điều tra mới
  5. Giải thích dài dòng → Huyên nhắc, memory #30 ★ update

AP codes: AP-IAM-RESET-PATTERN (OR v7.57-draft rev50), AP-EVIDENCE-BLIND (S173)

Trạng thái:

  • ✅ Phase 0 DONE (snapshot + plan, phát hiện IAM block)
  • ✅ IAM unblock DONE (grant secretAccessor)
  • ✅ RCA DONE (cache TTL + base state, không phải reset)
  • ✅ Phase 1 DONE (library 8/8+19/19 PASS)
  • ✅ Phase 2 DONE (CLI 8/8 PASS)
  • Phase 3 RUNNING (dump 18 Base thật + upload KB)

Việc tiếp theo ĐỦ làm ngay:

  1. Chờ Phase 3 Claude Code báo về (ước 10-20 phút). Check: ls /opt/incomex/lark-snapshots/2026-04-11/ + tail /var/log/lark-ops/$(date +%Y%m%d).jsonl
  2. Sau Phase 3 — Desktop làm: Đọc knowledge/dev/lark/snapshots/2026-04-11/{index,cross-base-links,master-tables-candidates,anomalies}.mdvẽ bản đồ Mermaid 18 Base → thiết kế prompt Lần 2

Backlog không khẩn:

  • S177 Lark Write Guard (module write + CLI + approval UI)
  • Automation rules (API không hỗ trợ, screenshot web UI 1 lần)
  • Map Lark → PG schema cho migration
  • Terraform-ize IAM chống drift
  • SA riêng vps-ops cắt phụ thuộc CI/CD SA (S173 recommend)

Tài liệu reference:

  • knowledge/dev/lark/README.md rev2 — Contract chung mọi agent Lark
  • knowledge/dev/lark/lark-base-registry.md rev1 — 18 Base + app_token
  • knowledge/dev/lark/lark-base-88-phai-cu-blueprint.md rev1 — 80 bảng 15 nhóm
  • knowledge/dev/lark/lark-base-88-data-flow.md rev1 — Flow 3 bảng core
  • knowledge/dev/lark/lark-client-architecture.md rev2 — Kiến trúc library+CLI
  • knowledge/current-state/reports/s176-iam-rca.md rev1 — RCA IAM + 5 đề xuất
  • knowledge/current-state/reports/s173-gh-push-rca rev1 — RCA cũ giải thích cache TTL
  • knowledge/dev/ssot/operating-rules.md rev50 — OR v7.57-draft + AP-IAM-RESET-PATTERN
  • knowledge/other/specs/vps-contabo.md rev4 — SA name corrected

Bối cảnh nghiệp vụ: Cán bộ Lark cũ nghỉ → Huyên cần AI tiếp quản. 18 Base folder "Dữ liệu Phái cử", Base 88 core 80 bảng. Workflow: Nghiệp đoàn → Xí nghiệp → Đơn hàng → TTS → Xuất cảnh → Seikyu/PQL. Triết lý: "Nhân viên không nhớ quy trình, hệ thống giao từng việc". Huyên chốt: "cưỡi ngựa xem hoa" không đủ, phải trace case thật hoặc điều tra vấn đề đang đau. Desktop MCP OK query ad-hoc, không đủ khảo sát toàn hệ thống → CLI dump offline là giải pháp chính thức.

TD mới S176 Lark

TD Mô tả Status Priority
TD-S176-IAM-GSM-LARK SA cursor-ci-builder thiếu roles/secretmanager.secretAccessor → không đọc được GSM. Fix: grant. KHÔNG dùng env var fallback. ✅ DONE 🔴 High
TD-S176-IAM-ROOT-CAUSE Pattern "mất secret định kỳ" = cache TTL + base state thiếu quyền. Giả thuyết reset tự động bị LOẠI TRỪ. ✅ CLOSED
TD-S176-IAM-RESET-PATTERN False hypothesis. ✅ CLOSED
TD-BACKUP-ENV-LEAK code-backup-to-gdrive.sh rsync .env lên GDrive (không exclude). Rủi ro thấp, fix khi rảnh. OPEN 🟢 Low
TD-GSM-DIRECT-READ-MIGRATION Migrate secret khác từ .env sang đọc thẳng GSM (PG_, DIRECTUS_, OPENAI, QDRANT...). Dài hạn. OPEN 🟡 Medium

Giải pháp gốc rễ đề xuất cho TD-S176-IAM-ROOT-CAUSE

  1. IaC hoá IAM binding — Terraform/gcloud script version-controlled, sửa tay → drift alert
  2. IAM audit cron weeklygcloud projects get-iam-policy diff baseline → Telegram
  3. Alert permission-denied realtime — Cloud Logging filter → Pub/Sub → Telegram
  4. Custom role incomex-vps-agent — gom đủ quyền VPS agent cần
  5. Runbook "SA lifecycle" — checklist khi tạo SA mới

Không làm ngay trong S176 (scope Lark), ghi Nhóm 1 ưu tiên cao phiên kế.


🏁 S174 FINAL SUMMARY (2026-04-09)

Đã đóng hẳn (10 mission):

  • S174-INV-01 PG backup RCA → S174-FIX-01 PG backup chain CLOSED
  • S174-INV-02 Remnants audit (Codex)
  • S174-PREP-NUXT backup 2 repo GH tay + điều tra build
  • S174-FIX-02 Nuxt local build (AR-01 CLOSED, Gemini 6/6)
  • S174-IMP-05 GDrive code backup automation
  • S174-FIX-03 Workflow legacy archive (GCS-01 + X-01 CLOSED, Gemini 8/8)
  • S174-INV-05 Ops RCA 3 TD (Codex + Gemini cross-verify)
  • S174-FIX-04 Đ31 hồi sinh + env-contract-check DOT (commit 29ecdd0, Gemini A1-A4 PASS)
  • S174-FIX-05 Log subsystem + 2 DOT canh gác (commit 924c0b7, Gemini B5-B9 PASS)
  • Hậu kiểm cron chain Đ31 PASS (cron-20260409-044906 log, Gemini C10)
  • OR tách 2 file: điều hành operating-rules.md v7.56 + soạn luật operating-rules-law-drafting.md v1.0

Kết luận VPS: KHÔNG còn vấn đề lớn/đỏ đã phát hiện. Bom hẹn giờ (pkg.dev, workflow legacy, PG backup chết, Đ31 stale, log subsystem fail) đã gỡ/fix gốc. Pattern DOT + Directus integrity đã chứng minh thay thế được Kuma cho monitoring nền.

Nợ nhỏ còn lại (không block):

  1. Timezone GDrive backup — lệch giờ VN
  2. Rác dormant: MYSQL env + .retired, FS scripts, GCS terraform, docker-compose.local.yml, mysql:8.0 cache, system-inventory.md stale
  3. TD-AGENT-DATA-TEST-MAIN-DIVERGE — main VPS lệch remote 4 commits
  4. TD-KUMA-ADMIN-PASS-STALE
  5. TD-CONTABO-AUTO-BACKUP

Nợ Nhóm 2 app-logic:

  • TD-D31-MEASUREMENT-HEALTH — 117 measurement FAIL
  • TD-NUXT-DIRECTUS-403 — homepage SSR 403
  • TD-NUXT-ICON-UNDEFINED

Gốc rễ chiến lược (Nhóm 3 luật, PARK):

  • TD-LAW-AMEND-D27-RETIRE — Đ27 cover OS-layer
  • TD-LAW-D31-AUTO-DISCOVER — Đ31 quét thực tế

⚡ S174 TODO (rev60 — giữ nguyên để lịch sử)

✅ ĐÃ ĐÓNG trong S174

  • S173 SSH + GH push CLOSED
  • PG backup chain CLOSED
  • AR-01 Nuxt pkg.dev CLOSED
  • Backup thủ công 2 repo GH DONE
  • S174-IMP-05 GDrive code backup DONE
  • GCS-01 + X-01 Workflow legacy CLOSED
  • TD-D31-RUNNER-STALE CLOSED-PENDING-VERIFY (S174-FIX-04)

Nhóm 1 — VPS sạch & an toàn (CÒN OPEN)

🔴 Đỏ:

  • Mission B S174-FIX-05 Log subsystem (prompt sẵn sàng): TD-LOGROTATE-DUPLICATE + TD-RSYSLOG-OMFILE-SUSPEND

🟡 Vàng gom 1 mission:

  • MYSQL-01, FS-01, GCS-02, AR-02, system-inventory.md stale

🟢 Xanh:

  • MYSQL-02 image cache

⚪ LEGITIMATE:

  • FB-01 Firebase auth client-side, LEG-01 GOOGLE_APPLICATION_CREDENTIALS

🆕 TD mới S174 (không gấp):

  • TD-D31-MEASUREMENT-HEALTH, TD-NUXT-DIRECTUS-403, TD-NUXT-ICON-UNDEFINED
  • TD-AGENT-DATA-TEST-MAIN-DIVERGE, TD-KUMA-ADMIN-PASS-STALE, TD-CONTABO-AUTO-BACKUP
  • TD-DOT-RESOLVED-AT-EMPTY, TD-PATCH-LATENCY-SPIKE-115S, TD-RSYSLOG-SUSPEND-COUNT-STALE

Kuma: ĐÓNG BĂNG scope (5 monitor hiện có).

Nhóm 2 — Triển khai đang dở (PAUSE chờ Nhóm 1)

  1. PA5 migration 7147 rows (TD-DOC-ID-ENCODING)
  2. S171B Phase 3 UK upgrade test (TD-UK-UPGRADE-TEST)
  3. NĐ-36-01 Council Vòng 2 → Phần 2
  4. Đ36 Phần 3-5
  5. Đ38 GP chi tiết + Phần 3-5
  6. TD-D31-MEASUREMENT-HEALTH
  7. TD-NUXT-DIRECTUS-403 + TD-NUXT-ICON-UNDEFINED

Nhóm 3 — Soạn luật (PARK)

  1. TD-LAW-AMEND-D27-RETIRE — Đ27 cover OS-layer
  2. TD-LAW-D40-LIVENESS — REVIEW lại (không Kuma, dùng DOT + Directus)
  3. TD-LAW-D31-EXPAND — backup/cron/credential health
  4. TD-OR-AP-SILENT-SWALLOW
  5. TD-OR-CP17-PREFLIGHT
  6. TD-OR-AP-SELF-VERIFY-CLOSE
  7. TD-LAW-AUTO-PUSH-UNTRUSTED
  8. TD-LAW-D33-OR-D27-DOT-FIRST

I. TIẾN ĐỘ THEO ĐIỀU LUẬT

Điều Tên % Còn dở
Đ26 Luật Pivot 100% H4+H6 data quality (không block)
Đ28 Kỹ thuật Hiển thị 70% Verify Đ24 label + matrix display
Đ32 Approval System 100%
Đ33 Luật PostgreSQL v2.0 70% 🔄 +§16 DDL audit trigger (KS.1), +§17 file_path constraint (KS.3) — chờ DESIGN tổng sau S176 điều tra
Đ35 DOT Governance 90% Cần cập nhật target_db, target_layer, kind, file_path_status
Đ36 Luật Collection 30% 🔄 VIẾT LẠI v5.0. P1 MT + P2 GP đã thảo luận. Cần: NĐ-36-01 → P3 → P4 → P5.
Đ37 Tổ chức Bộ máy 75% GĐ2: 12 TD, 4 wave
Đ38 Luật SQL Hoá VB 25% 🔄 VIẾT LẠI v3.0. P1 MT đã duyệt. Cần GP chi tiết → P3-5.
Đ39 Knowledge Graph 30% Chờ Đ36+Đ38 xong
Đ40 Infrastructure Health (PROPOSED) 0% CHỜ HUYÊN DUYỆT
Đ14 Duplicate Engine 0% S152

GHI CHÚ S176 PG-Reconfig (rev 74)

  • Master folder: knowledge/current-state/reform-PG-tools/ — folder 13 file ~5k mỗi file (split 2026-04-14 từ monolith cũ), đọc 00-index.md đầu tiên mỗi phiên
  • Triết lý điều tra: Mỗi lỗi = cơ hội học gốc rễ. Điều tra xong MỚI thiết kế, thiết kế xong MỚI sửa luật, sửa luật xong MỚI fix TD. Không vá lẻ tẻ.
  • HP v4.5.0 + Đ33 v2.0 đã ban hành với kiến trúc 4 DB + 3 lớp Não-Kho-Cổng + 5 ngoại lệ + password GSM. Sẽ sửa tiếp v4.6.0 + v2.1 sau DESIGN tổng (thêm DDL audit trigger KS.1 + file_path constraint KS.3).
  • 10/14 WHY đã trả lời — 14 WHY đang treo chờ KS.4-KS.6 + K3-K5.
  • 20 TD đang open cho mission PG-Reconfig (3 đỏ + 10 vàng + 6 xanh + 1 đóng).

GHI CHÚ S173 (rev49, 2026-04-08)

  • 🟢 SSH IP-ban loop FIXED vĩnh viễn (RCA PasswordAuthentication + cloud-init)
  • 🟢 GH push FIXED vĩnh viễn (RCA SA cache TTL, fix PA-4 đọc GSM 1 lần → .env)
  • Bài học: AP-EVIDENCE-BLIND, AP-SOLUTION-WITHOUT-INVESTIGATION, CP-17 Preflight infrastructure

GHI CHÚ S171 (rev41)

  • 🟢 S171A DONE — Recon SSH 6 tầng sạch
  • 🟢 Contabo Firewall VERIFIED không tồn tại
  • 🟢 Telegram bot SETUP DONE
  • 🟢 S171B Phase 1+2 DONE (workaround UK 1.23.17 auto-notification broken)
  • 🟡 S171B Phase 3 CHỜ — Phase 3A-SAFE test UK 2.2.1 riêng

GHI CHÚ S169

  • NĐ-36-01 v1.1 9 MT hoàn tất, Council Vòng 1 Gemini 8.5 + GPT 8.7
  • Đ36/Đ38 viết lại từ gốc
  • OR v7.54 + Mục XII công thức soạn luật

II. NỢ KỸ THUẬT

🔴 S176 PG-Reconfig — MỚI (xem bảng TD ở phần S176 PG-Reconfig trên)

🔴 VPS Infra Health (S170-S171 — giữ nguyên)

TD Mô tả Status
TD-DOC-ID-ENCODING _fs_key() Firestore legacy. PA5: migrate 7147 rows + CHECK constraint. UNBLOCKED — chờ S172A
TD-SSH-ACCESS-PERMANENT Transient ngoài tầm kiểm soát ✅ CLOSED
TD-CONTABO-FIREWALL-STATUS Verified empty ✅ DONE
TD-TELEGRAM-BOT-SETUP Bot + Chat ID verified ✅ DONE
TD-INFRA-MONITORING-GAP UK 11 monitors + cron workaround ✅ DONE + ⚠️ workaround
TD-UK-UPGRADE-TEST Test UK 2.2.1 riêng OPEN — Phase 3A-SAFE
TD-DOT-VPS-HEALTH DOT cặp dual-trigger 🟡 IN-PROGRESS
TD-PROVIDER-POLICY-WATCH Watch changelog Contabo/GH/CF PROPOSED — S173B
TD-LEGACY-PURGE 5 dormant + 2 safe-delete OPEN — cleanup wave
TD-MYSQL-LEGACY-SCAN 1 dormant + 1 safe-delete DONE-INVESTIGATE — cleanup pending
TD-DOT-319-HP-SCANNER HP Compliance Scanner PROPOSED
TD-NUXT-HP-VIOLATION-REGISTRIES 6 pages Nuxt Directus SDK trực tiếp HOLD — Huyên chốt
TD-GIT-VPS-GH-SYNC-VERIFY S173-GH-FIX v2 ✅ CLOSED S173
TD-GSM-PAT-DEPENDENCY Cắt gốc cache TTL ✅ CLOSED S173
TD-GH-SYNC-MONITOR Telegram alert path verified ✅ DONE S173
TD-SSH-IP-BAN-LOOP RCA fix 2 lớp ✅ CLOSED S173
TD-CLOUD-INIT-DRIFT Cloud-init lock ✅ DONE S173
TD-CRON-SCRIPT-VPS-COMMIT Verify 3 script mới OPEN — gộp Phase 3
TD-CODE-BACKUP-EXTRA rsync GDrive + Contabo OPEN — Phase 5
TD-DIEU-40-INFRA-HEALTH-LAW 5 MT visibility/alert/recovery/watch/chaos PROPOSED
TD-VPS-LOG-FINAL-SCAN Sau Phase 1-2 OPEN — S173 cuối
TD-PG-BACKUP-BROKEN S174-FIX-01 sửa gốc ✅ CLOSED S174
TD-LOGROTATE-DUPLICATE Gộp Mission B S174-FIX-05 OPEN — Mission B
TD-RSYSLOG-OMFILE-SUSPEND Gộp Mission B OPEN — Mission B
TD-D31-RUNNER-ENV S174-FIX-04 commit 29ecdd0 ✅ CLOSED-PENDING-VERIFY
TD-WORKFLOW-GCS-REMNANT S174-FIX-03 ✅ CLOSED S174
TD-ARTIFACT-RUNTIME-DEPENDENCY S174-FIX-02 ✅ CLOSED S174
TD-D31-MEASUREMENT-HEALTH 117 measurement FAIL OPEN — Nhóm 2
TD-NUXT-DIRECTUS-403 Homepage SSR 403 OPEN — Nhóm 2
TD-NUXT-ICON-UNDEFINED Cosmetic OPEN — Nhóm 2
TD-AGENT-DATA-TEST-MAIN-DIVERGE main VPS lệch 4 commits OPEN — reconcile riêng
TD-KUMA-ADMIN-PASS-STALE Helper provision DB token OPEN — cleanup
TD-CONTABO-AUTO-BACKUP Huyên activate panel OPEN — Huyên

Đ26 — Data quality

TD Mô tả Status
TD-PIVOT-H4 126 meta_catalog thiếu pivot
TD-PIVOT-H6 4 duplicate pivot definitions

Đ36 — Viết lại v5.0

TD Mô tả Status
TD-D36-ND01 NĐ-36-01 "Xây dựng bản quan hệ ngữ nghĩa" ⬜ Ưu tiên cao
TD-D36-ND01-P2 Phần 2 GP trả lời 5 câu OR ⬜ Tiếp theo
TD-D36-ND01-MULTILANG Code-Switching NLP, XLM-R ⬜ Ưu tiên cao
TD-D36-ND01-P3/P4/P5/APR Thành phần, quy trình 6W, triển khai
TD-D36-P3/P4/P5 Đ36 Phần 3-5
TD-D36-WF workflows schema 7 fields
TD-D36-DICT 6+ bảng từ điển khái niệm

Đ38 — Viết lại v3.0

TD Mô tả Status
TD-D38-GP Phần 2 GP chi tiết (5 câu)
TD-D38-P3 Phần 3-5
TD-D38-SA Semantic Annotation ⬜ S169

Đ37 GĐ2 — 12 TD (giữ nguyên)

TD Mô tả Status
TD-GOV-KB-FILE Đ37 content file
TD-GOV-OWNERS 32 laws thiếu agency owner ⬜ Wave 1
TD-GOV-AUTO-ONBOARD New DOTs auto-register ⬜ Wave 1
TD-GOV-VIEW-TOPOLOGY 0 governance views ⬜ Wave 2
TD-GOV-COVERAGE-MATRIX No coverage matrix ⬜ Wave 2
TD-GOV-AUDIT-TRAIL audit_log = 0 rows ⬜ Wave 2
TD-GOV-MORE-AGENCIES 5 agencies cho 38 laws ⬜ Wave 3
TD-GOV-NRM-RELATIONS 13 inter-law relations ⬜ Wave 3
TD-GOV-ENFORCEMENT-GAP 5 laws thiếu DOTs ⬜ Wave 3
TD-GOV-HEALTH-DOT All health_dot NULL ⬜ Wave 3
TD-GOV-CONFLICT-DETECT No conflict scanner ⬜ Wave 4
TD-GOV-CASCADE Retire cascade untested ⬜ Wave 4

VPS + KB + Hạ tầng (cũ)

TD Mô tả Status
TD-VPS-UPLOAD PUT/PATCH broken ⚠️ P1 — S173
TD-VPS-REVCHECK Upsert no revision check P1 — S173
TD-VPS-CREDS Credentials in crontab P2 — Phase 4
TD-KB-RETENTION History cleanup cron > 60 ngày ⬜ Phase 5
TD-KB-LEGACY-168 168 docs không có history ⬜ P3 — Phase 5
TD-BACKUP-CODE Backup GDrive mã nguồn ⬜ Phase 5
TD-REPO-PRIVATE Chuyển GH repo private ⬜ Phase 4
TD-GH-TOKEN-REFRESH GH token cache thủ công ⬜ P3 — Phase 5
TD-API-AUTH API Agent Data mở không key ⬜ Phase 4
TD-DIR-PERM Directus API permissions ⬜ Phase 4

III. ROADMAP TỔNG

S176 PG-RECONFIG (đang chạy — chi tiết ở phần trên)

✅ PHA 1 INVESTIGATE 60%  K0/K1/K2 + KS.1/KS.2/KS.3 done
⏳ PHA 1 INVESTIGATE còn   KS.4 → KS.5 → KS.6 → K3 → K4 → K5
⏳ PHA 2 DESIGN            D0 (vẽ tổng) → D1-D7 (7 DOT) → D8 (chốt PA A+) → D9 (sửa luật)
⏳ PHA 3 IMPLEMENT 9 đợt   Đợt 1 password → Đợt 9 backfill
⏳ PHA 4 VERIFY & CLOSE

S176 Lark (ongoing — chi tiết phần S176 Lark)

✅ Phase 0-2 DONE
⏳ Phase 3 RUNNING (dump 18 Base)
⏳ Phase 4 AP-CLOSE

Phase 1 — STABILIZE (S171, đang chạy)

✅ S171A             Recon SSH + Contabo Firewall verify          DONE 2026-04-07
✅ +Telegram setup   Bot + Desktop verify                         DONE 2026-04-07
✅ S171B Phase 1+2   UK + Telegram + 11 monitors + cron           DONE (workaround)
🟡 S171B Phase 3     Test UK 2.2.1 → quyết 3A/3B                  ← CHỜ
⬜ S171C             Git VPS→GH sync verify                        sẵn prompt

Phase 2 — FIX BUG (S172)

S172A   PA5 migration 7147 rows + CHECK constraint
S172B   Legacy purge 10 items Firestore/GCS
S172C   Scan tàn dư MySQL (TD-MYSQL-LEGACY-SCAN)

Phase 3 — INSTITUTIONALIZE (S173)

S173A   DOT-VPS-HEALTH design
S173B   Provider policy watch
S173C   TD-VPS-UPLOAD + TD-VPS-REVCHECK
S173D   Log scan toàn VPS

Phase 4 — SECURITY HARDENING (S174+)

- Tailscale / CF Tunnel (zero-trust SSH)
- TD-API-AUTH, TD-VPS-CREDS, TD-REPO-PRIVATE, TD-DIR-PERM
- Contabo Firewall whitelist

Phase 5 — DR + DEBT (dài hạn)

- TD-CODE-BACKUP-EXTRA
- TD-KB-RETENTION, TD-KB-LEGACY-168, TD-GH-TOKEN-REFRESH

Phase 6 — LUẬT (chờ)

- Điều 40 Infrastructure Health Law

Roadmap cũ — Luật

✅     KB Protection + VPS Git + Qdrant + Docker          DONE (S167)
✅     OR v7.54 + Công thức soạn luật                     DONE (S168)
✅     Đ38 v3.0 MT + GP tóm tắt                          DONE (S168)
✅     Đ36 v5.0 MT + GP tóm tắt                          DONE (S168)
✅     HP v4.5.0 + Đ33 v2.0                               DONE (S176)
1      S176 PG-Reconfig INVESTIGATE (đang chạy)
2      NĐ-36-01 v1.1 → Council Vòng 2 → Phần 2
3      Đ36 Phần 3-5
4      Đ38 GP chi tiết + Phần 3-5
5      Đ28 Nuxt source review
6      Đ37 GĐ2 Wave 1
7      Đ39 PG foundation
8      Đ37 GĐ2 Wave 2-4
9      S152 Duplicate Engine (Đ14)
10     Đ39 Phase 2-4 (Langroid) — LAST

IV. CREDENTIALS & SECRETS

Tên Loại Lưu ở đâu Verified
Telegram Bot incomex_vps_alert_bot token Bot Token /opt/incomex/scripts/vps-health-alert.sh chmod 600 root-only, KHÔNG commit Git
Telegram Chat ID Jack User ID 8680851443 Cùng file với token
Contabo nmhuyen@gmail.com panel Login Chrome password manager (Huyên)
PG password (leak) Incomex2026PG_306ac539ad365fce Git history (agent-data-test/scripts/import_firestore_to_pg.py) 🔴 PHẢI ĐỔI Đợt 1 S176

rev 74 | S176 PG-Reconfig 60% (KS.1+KS.2+KS.3 done, KS.4-K5+DESIGN+IMPLEMENT chờ) | HP v4.5.0 | Đ33 v2.0 | OR v7.57-draft | 272 DOT (60/272 fp=NULL) | 20 TD PG-Reconfig open | 10/24 WHY đã trả lời