Opus Review — P3D4C2U Implementation BLOCKED (View PK) — 2026-05-08
Opus Review — P3D4C2U Implementation BLOCKED (PK issue)
Date: 2026-05-08 Status: BLOCKED — DIRECTUS_VIEW_PK_BLOCKED. Rollback clean.
Tóm tắt
PG view tạo thành công, GRANT thành công, Directus API calls thành công — nhưng Directus runtime từ chối phục vụ data vì không nhận id uuid trên view là primary key.
Root cause: knex-schema-inspector chỉ nhận PK trên view khi column có nextval(seq) default (serial pattern). UUID với gen_random_uuid() không trigger detection.
Rollback sạch: view dropped, permissions deleted, fields deleted, collection deleted. Zero residual. P3D4C1U + IU intact.
Đánh giá 5 options
| Option | Đánh giá Opus |
|---|---|
| A. Materialized view + unique index | Tốt nhất về schema safety nhưng cần refresh mechanism → conflict với "no worker/cron" |
| B. Surrogate serial PK | Không ổn định — pagination break, identity drift |
| C. Companion table | Phức tạp — thêm write path |
| D. Base table + field-allowlist | Đơn giản nhất, pragmatic nhất. event_outbox có PK thật. Field permission Directus giới hạn 13 columns. Risk: column mới auto-leak → cần DOT discipline. |
| E. Custom extension | Quá nặng cho VPS $8/month |
Khuyến nghị Opus
Option D — expose event_outbox trực tiếp với Directus field-level permission.
Lý do:
- event_outbox đã có
id uuidPK thật → Directus nhận ngay - Field permission chỉ cho phép đọc 13 metadata columns → unsafe fields ẩn
- Không cần materialized view, không cần refresh, không cần worker
- Risk (column leak) kiểm soát được bằng DOT: thêm column mới → phải update permission
- Consistent với "đơn giản nhất đủ giải quyết vấn đề"
Nếu GPT/User lo column leak → thêm CI guard hoặc health check (H-level) scan permission coverage. Nhưng cho PoC, field-allowlist đủ.
Opus review P3D4C2U | BLOCKED | Option D recommended | Chờ GPT thẩm tra