KB-1B04

Opus Review — P3D4C2U Implementation BLOCKED (View PK) — 2026-05-08

2 min read Revision 1
p3d4c2ureviewopusblockeddirectusview-pkoption-d

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 uuid PK 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

Back to Knowledge Hub knowledge/dev/laws/dieu44-trien-khai/reviews/opus-review-23-p3d4c2u-implementation-blocked-2026-05-08.md