KB-1D05

Audit v3.0 — Codex — Code Quality & Assembly Compliance

8 min read Revision 1
auditarchitecture-v3codexs145post-completion

AUDIT REPORT — CODEX — 2026-03-19

Scope: Architecture v3.0 post-completion (Agent 2 brief: A-F) Method: Cross-check GitHub main (web-test) + production runtime (VPS) + PostgreSQL/Directus metadata


TÓM TẮT

  • A. PG Objects Inventory: PASS
  • B. Directus Configuration: WARN
  • C. Nuxt Code Review: PASS
  • D. Health Check Script Review: PASS
  • E. Git Integrity: WARN
  • F. Assembly Compliance: WARN

Overall: PASS có điều kiện (không có lỗi blocking mới, nhưng còn governance/ops drift cần xử lý).


A) PG OBJECTS INVENTORY — PASS

Evidence

  1. Trigger inventory:
SELECT tgname, tgrelid::regclass AS table_name, tgenabled
FROM pg_trigger
WHERE tgname LIKE 'trg_%'
ORDER BY tgname;

Result: 108 triggers, all tgenabled = 'O'.

  1. Disabled trigger check:
SELECT COUNT(*) AS disabled_trg_count
FROM pg_trigger
WHERE tgname LIKE 'trg_%' AND tgenabled <> 'O';

Result: 0.

  1. Function inventory:
SELECT routine_name
FROM information_schema.routines
WHERE routine_schema='public' AND routine_type='FUNCTION'
ORDER BY routine_name;

Result: 71 functions present (including lifecycle/rules/reconciliation functions).

  1. DRV-001..007 existence:
SELECT d.code, d.name AS registered_function,
       CASE WHEN r.routine_name IS NULL THEN 'MISSING' ELSE 'OK' END AS function_exists
FROM derived_objects_registry d
LEFT JOIN information_schema.routines r
  ON r.routine_schema='public' AND r.routine_name=d.name
WHERE d.code BETWEEN 'DRV-001' AND 'DRV-007'
ORDER BY d.code;

Result: DRV-001 → DRV-007 all OK.

Conclusion

  • Không phát hiện trigger/function bị thiếu hay disabled ngoài ý muốn.

B) DIRECTUS CONFIGURATION — WARN

Evidence

  1. AUTO-ID flows inactive (13/13):
SELECT name, status, trigger
FROM directus_flows
WHERE lower(name) LIKE '%auto-id%'
ORDER BY name;

Result: 13 flow [AUTO-ID] ... đều inactive.

  1. Summary:
SELECT status, COUNT(*)
FROM directus_flows
WHERE lower(name) LIKE '%auto-id%'
GROUP BY status;

Result: inactive = 13.

  1. New collections status config (S142):
SELECT collection, field, interface, options
FROM directus_fields
WHERE collection IN ('workflow_steps','trigger_registry','task_comments')
  AND field='status';

Result: cả 3 collection có status dropdown draft/active/deprecated/retired.

  1. DB column check:
SELECT table_name, column_default, is_nullable
FROM information_schema.columns
WHERE table_name IN ('workflow_steps','trigger_registry','task_comments')
  AND column_name='status';

Result: cả 3 có default 'active', NOT NULL.

  1. API read access check:
curl https://directus.incomexsaigoncorp.vn/items/universal_edges?limit=1
curl https://directus.incomexsaigoncorp.vn/items/lifecycle_log?limit=1
curl https://directus.incomexsaigoncorp.vn/items/universal_rule_violations?limit=1

HTTP: 200/200/200.

Finding (WARN)

  • API read access đang mở cho 3 collection governance (universal_edges, lifecycle_log, universal_rule_violations). Nếu đây không chủ đích cho public/API role thì là risk lộ telemetry nội bộ.

C) NUXT CODE REVIEW — PASS

Source reviewed from web-test@main (GitHub), không dùng checkout cũ trên VPS làm chuẩn.

Evidence

  1. useUniversalEdges.ts exists and reads universal_edges via Directus:
  • web/composables/useUniversalEdges.ts lines 34-97
  • Query readItems('universal_edges'...) lines 46-57.
  1. [entityType]/[id].vue uses composable:
  • web/pages/knowledge/registries/[entityType]/[id].vue line 80: const { data: layer5 } = useUniversalEdges(...)
  1. DiscoveryView uses composable and 6 headings:
  • web/components/registries/DiscoveryView.vue line 105: const { data: edges } = useUniversalEdges(...)
  • 6 headings đúng thứ tự:
    • 1. Thuộc ai (line 412)
    • 2. Chứa gì (line 425)
    • 3. Dùng ai (line 438)
    • 4. Ai dùng tôi (line 451)
    • 5. Cùng nhóm (line 464)
    • 6. Tương tự (line 487)
  1. No direct PG access from Nuxt source files audited (Directus SDK path).

Note

  • DiscoveryView vẫn giữ nhánh entity_dependencies legacy cho backward compatibility (không blocking, nhưng có nguy cơ drift nếu song song lâu dài).

D) HEALTH CHECK SCRIPT REVIEW — PASS

Evidence

  1. Health-check workflow file on main is .github/workflows/sync-check.yml (không phải health-check.yml).

  2. CHECK 11 logic (blocking):

  • sync-check.yml lines 379-429
  • Blocking condition:
    • lines 422-424: nếu BLOCKING_VIOLATIONS > 0 thì exit 1.
  1. CHECK 13 logic (INFO mode):
  • sync-check.yml lines 496-515
  • Không block deploy, report reconciliation info.
  1. scripts/smoke-test.sh exists and executable logic valid.
  • Runtime execution (2026-03-19) result: PASS 17 | FAIL 0.
  1. Latest Health Check workflow runs:
  • gh run list -R Huyen1974/web-test --workflow 'Health Check' --limit 3
  • 3 gần nhất đều conclusion: success.

E) GIT INTEGRITY — WARN

Evidence

  1. PR merge status:
  • PR #549: MERGED, commit f3bd1f1..., checks success.
  • PR #550: MERGED, commit 2a5e6f4..., checks success.
  1. Direct push check:
  • GraphQL query 40 commits gần nhất trên web-test/main.
  • Kết quả: tất cả có associatedPullRequests.totalCount = 1.
  1. Docker compose parity:
  • web-test@main: infra/docker/docker-compose.yml sha256
  • /opt/incomex/docker/docker-compose.yml sha256
  • Result: identical hash (08826106...2a2caebc).

Finding (WARN)

  • Checkout source tại VPS /opt/incomex/docker/nuxt-repo đang ở commit cũ f706da7 (PR #493 era), trong khi main hiện là 2a5e6f4.
  • Dù runtime artifact đang reflect code mới, checkout cũ trên VPS dễ gây audit/deploy nhầm nguồn.

F) ASSEMBLY COMPLIANCE — WARN

Evidence

  1. Assembly chain đúng ở runtime:
  • Nuxt đọc qua Directus API/composable (useUniversalEdges) thay vì query PG trực tiếp.
  1. Secrets hygiene:
  • Không thấy hardcoded credential trong các file audit trọng yếu (useUniversalEdges.ts, [id].vue, DiscoveryView.vue, sync-check.yml, smoke-test.sh).
  • VPS .env permission: 600 root:root.
  • Key format check (không lộ value): hợp lệ.
  1. Governance exposure:
  • Public read 200 cho lifecycle_loguniversal_rule_violations.

Finding (WARN)

  • Cần xác nhận chính sách: các collection governance có thực sự intended public-read hay chỉ dành API role nội bộ.

KHUYẾN NGHỊ

  1. (High) Dọn hoặc tự động sync checkout /opt/incomex/docker/nuxt-repo theo main để tránh sai nguồn khi điều tra production.
  2. (High) Chốt policy quyền đọc cho lifecycle_log + universal_rule_violations; nếu không cần public thì giảm scope.
  3. (Medium) Lập kế hoạch retire nhánh entity_dependencies legacy trong DiscoveryView khi coverage universal_edges đạt ngưỡng.
  4. (Medium) Đặt naming thống nhất workflow (health-check.yml alias hoặc doc mapping) để tránh nhầm sync-check.yml vs health-check.

FINAL VERDICT

Architecture v3.0 (scope Agent 2) đạt trạng thái vận hành, các thành phần cốt lõi A/C/D đã khớp mục tiêu thiết kế và CI evidence cho PR #549/#550 là sạch. Không phát hiện lỗi blocking mới.

Các điểm còn lại là governance/ops WARN (source checkout drift trên VPS và phạm vi read access của dữ liệu governance).