IU-0 Pack 2 Option A — Governance Cleanup Execution Pack (rev3)
IU-0 Pack 2 Option A — Governance Cleanup Execution Pack
Date: 2026-05-04 Status: DESIGN rev3 — chờ GPT/User approve dispatch Scope: Governance cleanup only — trigger registration + collection registry Ranh giới: Không DDL. Không IU production rows. Không CRUD/outbox/Qdrant/Directus exposure. Rev 2: Patch theo GPT review — pg_get_functiondef, transaction wrap, rollback marker, duplicate SKIP logic, Directus exposure verify, pre-write SQL review gate. Rev 3: Thêm Điều 20 vào §2 Inputs + §3 Legal basis.
§1. Objective / Non-goals
Objective: Đóng governance debt từ Pack 1 — đăng ký 3 triggers mới với TRIGGER-GUARD + đăng ký 2 bảng mới vào collection_registry. Nền sạch trước bước tiếp.
Non-goals:
- Không tạo IU production rows
- Không CRUD pilot
- Không outbox/worker
- Không Qdrant/vector
- Không Directus managed collection exposure
- Không legacy vector mutation
- Không DDL (CREATE/ALTER/DROP TABLE/TRIGGER/FUNCTION)
- Không mở Pack 2B/2C execution
§2. Inputs — đọc trước khi execute
knowledge/dev/laws/dieu44-trien-khai/design/10-iu0-pack2-readiness-and-scope-decision-pack.mdknowledge/dev/laws/dieu44-trien-khai/reports/iu0-pack1-execution-report.mdknowledge/dev/laws/dieu44-trien-khai/design/09a-iu0-pack1-vocab-schema-ddl-design.mdrev4knowledge/dev/laws/dieu44-trien-khai/reviews/gpt-review-opus-pack2-readiness-report-and-next-directive-2026-05-04.mdknowledge/dev/laws/dieu44-trien-khai/reviews/gpt-review-iu0-pack2a-execution-pack-2026-05-04.mdknowledge/dev/laws/dieu20-thiet-ke-truoc-trien-khai.md
§3. Legal basis
| Luật | Áp dụng |
|---|---|
| HP NT1 SSOT | Registry phải khớp runtime. Trigger tồn tại nhưng chưa đăng ký = drift |
| HP NT9 Không chắc = sai | Discovery trước, write sau. Không giả định cơ chế TRIGGER-GUARD |
| HP NT13 PG First | Inspect PG runtime trước mọi write |
| Đ4 Birth | Không tạo IU rows → không đụng birth production |
| Đ7 Assembly First | PG metadata insert, không app code |
| Đ8 Dependency | Inspect dependency trước registration |
| Đ10–13 Operations | Collection registry = Live Catalog requirement |
| Đ14 No Duplicate | Check duplicate trước mọi insert metadata |
| Đ20 Thiết kế trước triển khai | Discovery + design trước write. Execution pack này là sản phẩm Đ20 |
| Đ44 | Giữ đúng hướng IU, chưa CRUD/vector |
§4. Execution — Giai đoạn Discovery (READ-ONLY)
Claude Code chạy tất cả discovery trước. Không write gì trong giai đoạn này.
D1. Inspect TRIGGER-GUARD event trigger + function body
docker exec postgres psql -U directus -d directus -c "
SELECT e.evtname,
e.evtevent,
e.evtfoid::regproc AS function_name,
pg_get_functiondef(e.evtfoid) AS function_def
FROM pg_event_trigger e;
"
D2. Inspect cơ chế whitelist/registry
Từ function def D1, xác định:
- TRIGGER-GUARD kiểm tra whitelist bảng nào?
- Cơ chế đăng ký trigger hợp lệ là gì?
- Nếu chỉ log WARNING mà không có registry → ghi nhận "no registration mechanism".
docker exec postgres psql -U directus -d directus -c "
SELECT table_name FROM information_schema.tables
WHERE table_schema = 'public'
AND (table_name LIKE '%trigger%' OR table_name LIKE '%ddl%' OR table_name LIKE '%audit%' OR table_name LIKE '%whitelist%')
ORDER BY table_name;
"
Nếu tìm thấy bảng liên quan → \d <table_name> + SELECT * FROM <table_name> LIMIT 10;
D3. Inspect collection_registry schema + convention
docker exec postgres psql -U directus -d directus -c "\d collection_registry"
docker exec postgres psql -U directus -d directus -c "
SELECT collection_name, governance_role, status FROM collection_registry ORDER BY collection_name LIMIT 20;
"
docker exec postgres psql -U directus -d directus -c "
SELECT * FROM collection_registry WHERE collection_name IN ('information_unit', 'unit_version');
"
D4. Safety checks
docker exec postgres psql -U directus -d directus -c "
SELECT 'information_unit' AS tbl, count(*) FROM information_unit
UNION ALL SELECT 'unit_version', count(*) FROM unit_version;
"
docker exec postgres psql -U directus -d directus -c "
SELECT collection FROM directus_collections WHERE collection IN ('information_unit', 'unit_version');
"
§5. Checkpoints — STOP conditions
| # | Điều kiện | Hành động |
|---|---|---|
| S1 | TRIGGER-GUARD function body không rõ cơ chế registry | STOP F1. Báo cáo function def. |
| S2 | Cơ chế đăng ký cần DDL | STOP F1. Không DDL. |
| S3 | collection_registry schema/convention không rõ | STOP F3. Đề xuất decision. |
| S4 | Duplicate xung đột | STOP F3. (Đã có + đúng → SKIP) |
| S5 | IU tables rows > 0 | STOP ALL. |
| S6 | IU trong directus_collections | STOP ALL. |
| S7 | Không derive được SQL write an toàn | STOP. |
§6. Pre-write SQL Review Gate
Sau discovery, TRƯỚC KHI write, Claude Code PHẢI:
- In ra SQL write chính xác (không template/placeholder).
- Xác nhận chỉ INSERT metadata, không DDL.
- Xác nhận rollback SQL tương ứng.
- Không derive được → STOP.
§7. Giai đoạn Write (CHỈ NẾU DISCOVERY OK + SQL REVIEW OK)
Mọi write trong transaction: BEGIN → duplicate check → write → verify → COMMIT. Verify fail → ROLLBACK.
W1. Trigger registration (nếu có cơ chế)
Transaction wrap, marker _dot_origin = 'iu0_pack2a_20260504' hoặc description marker. TRIGGER-GUARD chỉ log WARNING → W1 = SKIP.
W2. Collection registry
Transaction wrap, INSERT theo convention D3, marker cho rollback. Duplicate đúng → SKIP.
§8. Cấm
Không DDL. Không INSERT vào information_unit/unit_version. Không CRUD/outbox/Qdrant/Directus API/legacy vector. Không Pack 2B/2C.
§9. Rollback
Marker iu0_pack2a_20260504 hoặc PK. Không rollback an toàn → STOP trước write.
W2 rollback: DELETE FROM collection_registry WHERE collection_name IN ('information_unit', 'unit_version');
§10. Verify
V1 trigger registration, V2 collection registry (2 rows), V3 IU count = 0+0, V4 directus_collections = 0, V5 no new tables.
§11. Report format
Upload: knowledge/dev/laws/dieu44-trien-khai/reports/iu0-pack2a-governance-cleanup-report.md
Discovery → STOP conditions → Pre-write SQL → Write actions → Verify → Overall PASS/PARTIAL/STOP.
DỪNG sau report. Không Pack 2B/2C.
CHANGELOG
| Rev | Ngày | Thay đổi |
|---|---|---|
| 1 | 2026-05-04 | Draft |
| 2 | 2026-05-04 | GPT review: pg_get_functiondef, transaction, rollback marker, duplicate SKIP, Directus check, SQL review gate, wording |
| 3 | 2026-05-04 | Thêm Điều 20 vào §2 Inputs (item 6) + §3 Legal basis. |