Bảng Tiến độ — S171B-VERIFY rev41
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 quas134_pg_grants.sql - 272 DOT, ~230 sau dedupe, 148/223 (66%) thiếu DOT cặp
- 79 PG function
fn_*,fn_transition_lifecyclelà phôi gateway hiện đang dùng directus_activityretention 128 ngày,dot_run_logKHÔNG tồn tại, WAL archive OFF
4 bypass L3 chủ đích (K2):
- CI CAT-ALL UPDATE qua
set_config('app.allow_meta_update','true')— backdoor, self-documented là "known hack" - CI auto-apply 36 SQL file vĩnh viễn trong
sql/qua marker.done(6 file chưa marker) scripts/integrity/pg-client.js(Điều 31 runner) — Node.js pg lib INSERT thẳngmeasurement_logdot-script-lint+dot-cron-matrix-setup
Từ KS.1 — 🔴 INVISIBLE AUDIT GAP:
directus_activitychỉ 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-linttự 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)
- 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?
- Sau KS.4 → KS.5 cross-check 12 SELECT-then-INSERT vs 9 writer S175
- Sau KS.5 → KS.6 cron installer mapping
- Sau KS.6 → K3 credentials
- Sau K3 → K4 shadow patterns
- Sau K4 → K5 catalog baseline
- Sau K5 → D0-D9 DESIGN tổng
- Sau D9 → sửa luật đồng bộ HP v4.6.0 + Đ33 v2.1 + Đ35 v5.1 + OR
- 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_end → ddl_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_relations0 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-setupkhô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_updatesession var — guard ở function nào, tạo bởi SQL nào? — K3 - WHY-L User
incomexquyền thật trên DBdirectusngoàis134_pg_grants.sql? — K3 - WHY-M
incomex_metadatacó 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_queuedormant — producer chết hay chưa bật? — K4 - WHY-Q
0048_link_policies_mysql.sqlkhô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.mdcũ), đọc00-index.mdđầu tiên mỗi phiênknowledge/dev/laws/constitution.mdrev 11 (HP v4.5.0)knowledge/dev/laws/dieu33-postgresql-law.mdrev 2 (Đ33 v2.0)knowledge/current-state/reports/s176-invest-k0-timeline-retentionrev 1knowledge/current-state/reports/s176-invest-k1-official-channelsrev 1knowledge/current-state/reports/s176-invest-k2-bypass-writersrev 1knowledge/current-state/reports/s176-invest-k2-supplementrev 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-ggcloudsecretsLARK_APP_ID/SECRET— đọc thẳng GSM, KHÔNG dùng.env(Phase 1 verifiedsource=gsm:github-chatgpt-ggcloud) - 1 SA VPS:
cursor-ci-builder@github-chatgpt-ggcloud.iam.gserviceaccount.comvới 4 role bao gồmsecretmanager.secretAccessorgrant 2026-04-11 - 1 CLI ngôn ngữ chung:
/usr/local/bin/lark-toolv1.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:
- Over-engineering credential layer (nghĩ GSM không cho VPS đọc → sai, chỉ thiếu quyền)
- Suýt bắt user chạy gcloud tay (Claude Code tự làm được)
- Reactive fix IAM → Huyên nhắc "mỗi lỗi = cơ hội gốc rễ" → search KB ra S173 RCA đầy đủ
- 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
- 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:
- 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 - Sau Phase 3 — Desktop làm: Đọc
knowledge/dev/lark/snapshots/2026-04-11/{index,cross-base-links,master-tables-candidates,anomalies}.md→ vẽ 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-opscắt phụ thuộc CI/CD SA (S173 recommend)
Tài liệu reference:
knowledge/dev/lark/README.mdrev2 — Contract chung mọi agent Larkknowledge/dev/lark/lark-base-registry.mdrev1 — 18 Base + app_tokenknowledge/dev/lark/lark-base-88-phai-cu-blueprint.mdrev1 — 80 bảng 15 nhómknowledge/dev/lark/lark-base-88-data-flow.mdrev1 — Flow 3 bảng coreknowledge/dev/lark/lark-client-architecture.mdrev2 — Kiến trúc library+CLIknowledge/current-state/reports/s176-iam-rca.mdrev1 — RCA IAM + 5 đề xuấtknowledge/current-state/reports/s173-gh-push-rcarev1 — RCA cũ giải thích cache TTLknowledge/dev/ssot/operating-rules.mdrev50 — OR v7.57-draft + AP-IAM-RESET-PATTERNknowledge/other/specs/vps-contabo.mdrev4 — 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
- IaC hoá IAM binding — Terraform/gcloud script version-controlled, sửa tay → drift alert
- IAM audit cron weekly —
gcloud projects get-iam-policydiff baseline → Telegram - Alert permission-denied realtime — Cloud Logging filter → Pub/Sub → Telegram
- Custom role
incomex-vps-agent— gom đủ quyền VPS agent cần - 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.mdv7.56 + soạn luậtoperating-rules-law-drafting.mdv1.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):
- Timezone GDrive backup — lệch giờ VN
- Rác dormant: MYSQL env +
.retired, FS scripts, GCS terraform,docker-compose.local.yml,mysql:8.0cache,system-inventory.mdstale - TD-AGENT-DATA-TEST-MAIN-DIVERGE — main VPS lệch remote 4 commits
- TD-KUMA-ADMIN-PASS-STALE
- 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.mdstale
🟢 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)
- PA5 migration 7147 rows (TD-DOC-ID-ENCODING)
- S171B Phase 3 UK upgrade test (TD-UK-UPGRADE-TEST)
- NĐ-36-01 Council Vòng 2 → Phần 2
- Đ36 Phần 3-5
- Đ38 GP chi tiết + Phần 3-5
- TD-D31-MEASUREMENT-HEALTH
- TD-NUXT-DIRECTUS-403 + TD-NUXT-ICON-UNDEFINED
Nhóm 3 — Soạn luật (PARK)
- TD-LAW-AMEND-D27-RETIRE — Đ27 cover OS-layer
- TD-LAW-D40-LIVENESS — REVIEW lại (không Kuma, dùng DOT + Directus)
- TD-LAW-D31-EXPAND — backup/cron/credential health
- TD-OR-AP-SILENT-SWALLOW
- TD-OR-CP17-PREFLIGHT
- TD-OR-AP-SELF-VERIFY-CLOSE
- TD-LAW-AUTO-PUSH-UNTRUSTED
- 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ũ), đọc00-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