P2B-P0 — IU Schema Inspection Read-Only Prompt
P2B-P0 — IU Schema Inspection Read-Only Prompt
Date: 2026-05-05 | Status: PROMPT rev2 — sẵn sàng dispatch Controlling: Pack 2B design (file 19) + GPT handoff Pack 2B directive + GPT review rev1 Scope: READ-ONLY schema inspection. Không DDL, không INSERT, không mutation.
§0. Mission
Inspect actual PG schema của information_unit và unit_version tables.
Upload report. HARD STOP.
Mục đích: Thu thập schema thật để build exact INSERT payloads cho P2B-P1. Không đoán columns từ trí nhớ. Không tạo IU rows. Không sửa gì.
§1. Connection
docker exec -i postgres psql -U directus -d directus
§2. Queries — chạy lần lượt, capture output đầy đủ
Q1: information_unit columns
SELECT column_name, data_type, is_nullable, column_default
FROM information_schema.columns
WHERE table_schema='public' AND table_name='information_unit'
ORDER BY ordinal_position;
Q2: unit_version columns
SELECT column_name, data_type, is_nullable, column_default
FROM information_schema.columns
WHERE table_schema='public' AND table_name='unit_version'
ORDER BY ordinal_position;
Q3: information_unit constraints
SELECT conname, contype, pg_get_constraintdef(oid)
FROM pg_constraint
WHERE conrelid='information_unit'::regclass
ORDER BY conname;
Q4: unit_version constraints
SELECT conname, contype, pg_get_constraintdef(oid)
FROM pg_constraint
WHERE conrelid='unit_version'::regclass
ORDER BY conname;
Q5: information_unit triggers
SELECT tgname, tgfoid::regproc AS func, pg_get_triggerdef(oid) AS def
FROM pg_trigger
WHERE tgrelid='information_unit'::regclass AND NOT tgisinternal
ORDER BY tgname;
Q6: unit_version triggers
SELECT tgname, tgfoid::regproc AS func, pg_get_triggerdef(oid) AS def
FROM pg_trigger
WHERE tgrelid='unit_version'::regclass AND NOT tgisinternal
ORDER BY tgname;
Q7: Current counts (baselines)
SELECT 'information_unit' AS tbl, count(*) AS cnt FROM information_unit
UNION ALL
SELECT 'unit_version', count(*) FROM unit_version
UNION ALL
SELECT 'iu_birth', count(*) FROM birth_registry WHERE collection_name='information_unit'
UNION ALL
SELECT 'uv_birth', count(*) FROM birth_registry WHERE collection_name='unit_version';
Q8: IU collection metadata
SELECT collection_name, governance_role, birth_code_strategy,
birth_code_column, birth_identity_source, description_policy
FROM collection_registry
WHERE collection_name IN ('information_unit','unit_version')
ORDER BY collection_name;
Q9: Function hash + trigger count audit
SELECT md5(pg_get_functiondef('fn_birth_registry_auto'::regproc)) AS fn_hash;
SELECT count(*) AS birth_trigger_count
FROM pg_trigger WHERE tgname LIKE 'trg_birth_%' AND NOT tgisinternal;
Q10: RLS policies (Opus bổ sung — nếu có RLS thì INSERT sẽ bị ảnh hưởng)
SELECT tablename, policyname, cmd, qual
FROM pg_policies
WHERE tablename IN ('information_unit','unit_version');
Q10b: RLS table flags (GPT bổ sung — phát hiện RLS enabled kể cả khi chưa có policy)
SELECT relname, relrowsecurity, relforcerowsecurity
FROM pg_class
WHERE relname IN ('information_unit','unit_version');
Q11: FK references TO these tables (ai tham chiếu IU/UV)
SELECT
c.conname AS fk_name,
src.relname AS source_table,
tgt.relname AS target_table,
pg_get_constraintdef(c.oid) AS definition
FROM pg_constraint c
JOIN pg_class src ON c.conrelid = src.oid
JOIN pg_class tgt ON c.confrelid = tgt.oid
WHERE c.contype = 'f'
AND tgt.relname IN ('information_unit','unit_version')
ORDER BY source_table, fk_name;
§3. Report format
Upload report tại:
knowledge/dev/laws/dieu44-trien-khai/reports/19-p2b-p0-iu-schema-inspection-report.md
Report phải có các section sau:
§3.1 Actual columns
- Bảng columns đầy đủ cho cả IU và UV
- Đánh dấu rõ: cột nào NOT NULL mà KHÔNG có default → bắt buộc trong INSERT payload
§3.2 Constraints summary
- PK, FK, UNIQUE, CHECK constraints
- FK references ĐẾN IU/UV (ai phụ thuộc)
§3.3 Triggers summary
- Triggers trên IU: phải thấy
trg_birth_information_unit - Triggers trên UV: ghi nhận có/không birth trigger
§3.4 Current counts (baselines)
- IU rows, UV rows, IU birth rows, UV birth rows
- IU rows và IU birth rows expected = 0 (evidence: 18c report)
- UV rows và UV birth rows: capture baseline. Nếu non-zero → flag cho GPT/User review, không tự coi là failure trừ khi có design evidence bắt buộc UV phải empty
§3.5 Collection metadata
- birth_code_strategy, birth_code_column, birth_identity_source cho cả IU và UV
- description_policy
§3.6 Audit invariants
- fn_birth_registry_auto hash
- Birth trigger count
§3.7 RLS status
- Có policy nào không? Nếu có → ghi rõ impact lên INSERT
§3.8 Minimum INSERT payload — candidate fields
Phân tích từ actual schema (KHÔNG từ trí nhớ):
- Liệt kê tất cả NOT NULL columns không có default → PHẢI có trong INSERT
- Liệt kê columns có default → có thể bỏ qua
- Liệt kê nullable columns → optional
- Đề xuất minimum valid INSERT payload shape cho 1 pilot IU row
- Đề xuất unit_version row shape nếu cần (hoặc ghi nhận UV là subordinate)
§3.9 Risks / blockers trước P2B-P1
- FK dependencies chưa có data?
- Enum/vocab columns cần giá trị hợp lệ?
- Trigger side effects?
- Bất kỳ vấn đề nào có thể block pilot INSERT
§3.10 Hard-stop confirmation
Ghi rõ: "P2B-P0 COMPLETE. HARD STOP. Chờ GPT/User review trước P2B-P1."
§4. Hard boundaries — TUYỆT ĐỐI
- ❌ NO DDL (no ALTER, no CREATE TABLE, no CREATE INDEX)
- ❌ NO INSERT / UPDATE / DELETE
- ❌ NO IU rows, NO UV rows
- ❌ NO trigger/function edits
- ❌ NO DOT-119 execute
- ❌ NO Pack 2B CRUD
- ❌ NO vector/outbox/Qdrant
- ❌ NO Directus exposure
- ❌ NO P3/HC
- ❌ NO schema changes of any kind
Nếu bất kỳ query nào trả lỗi → ghi nguyên lỗi vào report, KHÔNG sửa.
§5. Sau report
Upload report → DỪNG. Không draft P2B-P1. Không tiếp tục. Chờ review.
P2B-P0 prompt rev2 | 2026-05-05 | Opus 4.6 + GPT review | Read-only schema inspection. 12 queries. HARD STOP.