KB-73A4
S176-INVESTIGATE K0 — Timeline + Retention
12 min read Revision 1
s176investigateddldmlphaseCk0timelineretention
title: "S176-INVESTIGATE K0 — Mốc thời gian + Retention log" sprint: S176 phase: INVESTIGATE block: K0 date: 2026-04-13 status: done tags: ['s176','investigate','ddl','dml','phaseC','k0','timeline','retention']
S176-INVESTIGATE · K0 — Mốc thời gian + Retention
Mục tiêu: trả lời 3 câu mốc để phân loại writer L1/L2/L3 × H1/H2/H3 ở các khối sau. Chế độ: CHỈ ĐỌC. Không GRANT/REVOKE/ALTER. Nguồn chính: Directus KB (knowledge_documents), PG trực tiếp qua SSH (SELECT only), Directus REST
/items/*aggregate.
1. Mốc DOT 100% — ban hành khi nào?
Phương pháp
- Query
knowledge_documentsqua Directus REST vớifile_path _contains operating-rulesvàconstitution. - Đọc nội dung
knowledge/dev/laws/constitution.mdvàknowledge/dev/ssot/operating-rules.mdđể trích trực tiếp câu có "DOT 100%".
Kết quả
| Artifact | Doc ID (Directus) | File path | Ngày KB | Phiên bản |
|---|---|---|---|---|
| Hiến pháp Kiến trúc | 945 | knowledge/dev/laws/constitution.md |
created 2026-03-30 / updated 2026-04-03 | v4.4.0 BAN HÀNH (S148), cập nhật S157 2026-04-02 (+Điều 38) |
| OR SSOT | 955 | knowledge/dev/ssot/operating-rules.md |
created 2026-03-30 / updated 2026-04-11 | v7.57-draft (S176) |
Trích HP v4.4.0 (id=945):
11 NGUYÊN TẮC NỀN TẢNG — CẤM VI PHẠM
| 3 | DOT 100% | Mọi thao tác qua script | Không DOT = không làm được |
Trích OR v7.57-draft (id=955):
V. 13 NGUYÊN TẮC — CẤM VI PHẠM NT-01 SSOT | NT-02 Tự động 100% | NT-03 DOT 100% | NT-04 Sẵn sàng thay đổi | … | NT-12 DOT cặp | NT-13 PG FIRST
Luật chi tiết:
- Điều 35 — Luật Quản trị DOT v5.0 (ban hành S155, 3 vòng Council, 67 domain rules, 271 DOT tools) — từ changelog HP v4.4.0.
Kết luận mốc
- Mốc DOT 100% tường minh sớm nhất trong KB hiện hữu: 2026-03-30 (S148 — HP v4.4.0 BAN HÀNH).
- Luật chuyên biệt (Đ35 v5.0) đến từ S155 (sau S148). Ngày S155 chưa tra chính xác.
- Chưa verify: DOT 100% có tồn tại ở bản HP trước v4.4.0 (v4.3.0, v3.9…) hay không — KB đã retire bản cũ ("Hiến pháp v3.9 — SUPERSEDED"). Không tìm thấy bản v4.3.0 còn lưu trong
knowledge_documentsqua query hiện tại. - Anchor dùng cho K1-K4: bất kỳ writer nào có last-touch > 2026-03-30 và KHÔNG nằm trong
dot_tools= vi phạm DOT 100% thời kỳ H3.
2. Migration MySQL → PG — khi nào xong?
Phương pháp
- Đọc S115 Final Report (
id=570,knowledge/current-state/reports/s115-mysql-to-pg-report). - Đối chiếu header amendment trong
docs/ssot/constitution.mdlocal. - Đọc S174-INV-02 (
id=1116) để xác nhận không còn MySQL daemon.
Kết quả
| Sự kiện | Ngày | Nguồn |
|---|---|---|
| S115 MySQL→PG Migration COMPLETE | 2026-03-13 | Doc 570 s115-mysql-to-pg-report — "Date: 2026-03-13 · Status: COMPLETE · PRs #496 #497 #498" |
| Amendment vào constitution.md | 2026-03-13 | docs/ssot/constitution.md line 1: "[S115 AMENDMENT — 2026-03-13] Phụ lục E 'MySQL First' đã RETIRED" |
| Xác nhận không còn MySQL daemon | 2026-04-08 | S174-INV-02 (doc 1116): "Không có MySQL daemon/binary/user/port đang chạy trên host" |
Trích S115 (doc 570):
- PR #496 — feat: migrate Directus from MySQL to PostgreSQL
infra/docker/docker-compose.yml: MySQL service replaced with PostgreSQL 16infra/docker/.env.example: MySQL vars replaced with PG varsdot/configs/directus.env.template:DB_CLIENT=pg, port 5432scripts/0047c_*.sh(3 files): Added DEPRECATED headers- Verification:
DB_CLIENT=pg on VPS: Confirmed,MySQL container STOPPED: incomex-mysql Exited (0)
Kết luận mốc
- Migration xong: 2026-03-13.
- Danh sách writer đã rewrite cho PG: CHƯA TỒN TẠI trong S115 report. Báo cáo chỉ liệt kê infra-swap (compose + env + 3 script
0047c_*bị đánh DEPRECATED). KHÔNG có audit app-layer writers. → Giả định ngầm: "Directus là writer chính → đổi DB_CLIENT là đủ; mọi script khác đi qua Directus API." Giả định này CHƯA VERIFY → là câu hỏi mở của K2 (bypass writers). - S174-INV-02 (2026-04-08) tìm thấy 5 cụm dormant trong env/repo/migration-backups/build path → vẫn còn bề mặt điều tra cho remnant PATH, nhưng không phải daemon sống.
Phát hiện bất thường
- Header amendment nằm ở bản local
docs/ssot/constitution.md, nhưng KB version (doc 945, HP v4.4.0) đã viết lại hoàn toàn → không còn dấu amendment S115. Local vs KB đang drift về thể loại (HP v1.11e cũ vs HP v4.4.0 mới).
3. Retention các nguồn log (MAX thực tế, không cap)
Phương pháp
- Directus REST
/items/<collection>?aggregate[count]=id&aggregate[min]=<field>&aggregate[max]=<field>. - PG trực tiếp qua SSH
docker exec postgres psql -U directuschodirectus_activity,directus_revisions. - Kiểm tra cấu hình WAL:
SHOW wal_keep_size; SHOW archive_mode; SHOW archive_command;.
Ma trận retention
| # | Nguồn log | Vị trí thật | Count | Min | Max | Retention thực | Ghi chú |
|---|---|---|---|---|---|---|---|
| 1 | directus_activity |
PG directus.public.directus_activity |
102,496 | 2025-12-07 09:13:49 | 2026-04-13 07:41:37 | ~128 ngày | Có trước cả mốc migration — data đã được mang từ MySQL sang PG hoặc bắt đầu khi Directus deploy ban đầu. Xuyên suốt H2→H3. |
| 2 | directus_revisions |
PG directus.public.directus_revisions |
97,219 | 2025-12-07 10:55:27 (id=1, qua join activity) |
— | ~128 ngày | Không có field timestamp trực tiếp, lấy qua FK activity. |
| 3 | system_issues |
Directus/PG | 1,069 | 2026-03-10 05:37:30 | 2026-04-12 01:30:03 | ~34 ngày | Bắt đầu 3 ngày trước migration — có thể bảng mới lập từ đợt S115 hoặc bị reset. |
| 4 | registry_changelog |
PG public.registry_changelog |
20,614 | 2026-03-10 03:28:07 | 2026-04-13 06:00:47 | ~34 ngày | Trùng mốc với system_issues → hai collection đều ra đời cùng đợt đầu tháng 3. |
| 5 | entity_audit_queue |
PG | 1 | 2026-03-20 10:07:59 | 2026-03-20 10:07:59 | 1 row duy nhất | Không được tiêu thụ — queue rỗng thực tế. |
| 6 | dot_tools.last_executed |
Directus collection | 272 rows | min last_executed = 2026-03-31 08:08:57 |
— | Không phải log — chỉ lưu timestamp lần chạy gần nhất per DOT, không có lịch sử run. | NT12 vẫn không có nhiệt kế "DOT chạy mấy lần/bao giờ". |
| 7 | dot_run_log |
KHÔNG TỒN TẠI | 0 | — | — | — | Đã quét: information_schema.tables PG không có bảng tên chứa run hoặc log trùng dot_run_log; knowledge_documents collection list không có. |
| 8 | PG WAL | /var/lib/postgresql/data/pg_wal (container postgres) |
pg_wal dir = 81M |
— | — | KHÔNG retain | archive_mode=off, archive_command=(disabled), wal_keep_size=0, max_wal_size=1GB. WAL chỉ đủ checkpoint cycle → không thể replay DDL/DML quá khứ. |
| 9 | PG database size | directus database |
— | — | — | — | 270 MB total — nhỏ, toàn bộ query aggregate dưới 1 giây. |
Phát hiện bất thường
- Không có
dot_run_log: memory và skill đề cập "dot_run_log" là nguồn log chuẩn, nhưng NT12 "DOT cặp" không có backing storage. Nếu muốn verify một DOT có chạy không, hiện chỉ códot_tools.last_executed(không phải log, chỉ timestamp mới nhất). → Điều tra bypass (K2) phải dựa chủ yếu vào filesystem/cron/code-grep, KHÔNG có runtime log. - PG WAL archive OFF: không thể truy DDL event quá khứ ngoài 128 ngày của
directus_activity. Mọi điều tra "ai ALTER TABLE" cần dựa vàodirectus_activity(cho DDL qua Directus API) + git history + source grep. - Trùng mốc 2026-03-10:
system_issuesvàregistry_changelogbắt đầu cùng ngày (3 ngày trước S115). Cần verify K2: có migration script tạo mới 2 bảng này không? Hay bị TRUNCATE lúc migrate? directus_activitycó data từ 2025-12-07: cross mốc MySQL→PG → chứng tỏ data đã đượcpg_dump/mysqldumprestore, không phải bảng mới. Nếu đúng, có thể dò DDL quaaction='update'/action='create'trên collectiondirectus_fields/directus_collectionsđể truy DDL qua Directus API thời MySQL.- entity_audit_queue chỉ có 1 row từ 2026-03-20: không tiêu thụ — nghi ngờ đây là bảng đăng ký kế hoạch nhưng không có producer nào bơm vào.
Cửa sổ điều tra khả thi
| Lớp | Cửa sổ tối đa | Dùng cho |
|---|---|---|
| H3 (sau DOT 100%) | 2026-03-30 → 2026-04-13 = 14 ngày | Phát hiện vi phạm hiện tại |
| H2 (thời MySQL) | 2025-12-07 → 2026-03-13 = 96 ngày | Qua directus_activity (DDL qua Directus API) |
| H2/H3 chính xác mốc | — | Chỉ có thể bóc qua directus_activity + git log |
| H1 (trước DOT 100%) | — | Không có log runtime. Phải dùng git history + source grep. |
4. Câu hỏi mở (chuyển sang K1-K4)
- DOT 100% lần đầu ban hành khi nào (trước HP v4.4.0 2026-03-30)? Cần tra git log
knowledge/dev/laws/để dò bản v4.3.0, v4.2.0, v3.9 còn lưu trong repo không. - Danh sách writer đã rewrite cho PG có tồn tại dưới dạng checklist nào khác (PR #496 diff, S115 session handoff) không? Hay S115 thực sự chỉ đổi connection string?
- 2 bảng
system_issues,registry_changelogra đời ngày 2026-03-10: do ai tạo, qua flow nào? (K2) entity_audit_queuecó producer không? Có phải di tích của kế hoạch cũ không? (K4 dead code)- Tại sao không có
dot_run_logmà vẫn yêu cầu DOT cặp (NT12) verify? NT13 PG FIRST + NT12 có đồng bộ không?
5. Forward / backward link
- Backward: không (K0 là khối đầu)
- Forward:
- K1 — L1 chính thức: dùng mốc 2026-03-30 làm đường cutoff phân biệt H2↔H3; dùng
dot_tools+last_executedlàm danh sách writer L1. - K2 — Bypass: dùng cửa sổ
directus_activity(128 ngày) để check DDL bypass Directus; dùng grep cho các nguồn không log. - K3 — Credentials: PG user
directushiện có full DDL (xác nhận ở K3 bằng\du); WAL off có nghĩa không có "read replica role" nào đang chạy. - K4 — Shadow patterns: vì PG WAL và dot_run_log đều thiếu, K4 phải đào filesystem cron/systemd + source code.
- K1 — L1 chính thức: dùng mốc 2026-03-30 làm đường cutoff phân biệt H2↔H3; dùng
6. Evidence trích dẫn
# Directus knowledge_documents
id=945 title="Hiến pháp Kiến trúc v4.4.0 BAN HÀNH" file_path=knowledge/dev/laws/constitution.md
date_created=2026-03-30T07:11:34 date_updated=2026-04-03T08:12:07
id=955 title="Nguyên tắc Điều hành — SSOT" file_path=knowledge/dev/ssot/operating-rules.md
date_created=2026-03-30T08:42:58 date_updated=2026-04-11T02:48:13
id=570 title="S115 MySQL to PostgreSQL Migration Report"
date_created=2026-03-13T08:11:07
id=1116 title="S174-INV-02 — Rà tàn dư MySQL/Firestore/GCS/Artifact Registry"
date_created=2026-04-08T10:13:21
# PG SELECT (docker exec postgres psql -U directus -d directus)
directus_activity: count=102496 min=2025-12-07 09:13:49 max=2026-04-13 07:41:37
directus_revisions: count=97219 min(via join)=2025-12-07 10:55:27
system_issues: count=1069 min=2026-03-10 05:37:30 max=2026-04-12 01:30:03
registry_changelog: count=20614 min=2026-03-10 03:28:07 max=2026-04-13 06:00:47
entity_audit_queue: count=1 min=max=2026-03-20 10:07:59
dot_tools: count=272 last_executed min=2026-03-31 08:08:57
# PG config
wal_keep_size=0 max_wal_size=1GB archive_mode=off archive_command=(disabled)
pg_wal dir=81M directus db size=270 MB
# dot_run_log
SELECT table_name FROM information_schema.tables WHERE table_schema='public' AND (table_name LIKE '%run%' OR table_name LIKE '%log%')
→ không có dot_run_log
7. Trạng thái
- K0 DONE. Chờ duyệt để chuyển sang K1.
- Không chỉnh sửa code/schema/quyền. Toàn bộ query là SELECT / GET.