KB-537E

23-P3B — IU Edit Draft Schema-Only — Execution Report

7 min read Revision 1
pack-23p3breportschemaedit-draftcommentpass

23-P3B — IU Edit Draft Schema-Only — Execution Report

Date: 2026-05-07 04:37:51 UTC Executor: Opus (Claude) Prompt: knowledge/dev/laws/dieu44-trien-khai/prompts/23-p3b-iu-edit-draft-schema-prompt.md rev4 Log: /tmp/23-p3b.20260507-043751.log (VPS 38.242.240.89)


Final Verdict

Field Value
phase_status PASS
p3c_readiness READY
preflight PASS
ddl OK
verify_fail 0
draft_action CREATED
comment_action CREATED
sort_order_action ADDED
policy_keys_action SEEDED
iu_uv_rows_unchanged PASS
iu 6 → 6
uv 6 → 6
owner directus

Verification matrix

Test Result
V1 — unit_edit_draft exists PASS
V2 — unit_edit_comment exists PASS
V3 — information_unit.sort_order is integer PASS
V4 — draft 18 columns by name+type PASS
V5 — comment 13 columns by name+type PASS
V6 — draft constraints (8 CHECK + 3 FK) by name PASS
V7 — comment constraints (5 CHECK + 3 FK) by name PASS
V8 — 6 named indexes + idx_iu_parent_sort PASS
V9 — JSONB metadata defaults {} PASS
V10 — IU/UV row counts unchanged (6→6 / 6→6) PASS
V11 — P3A gateway allow-list intact (fn_iu_create,fn_iu_apply_edit_draft) PASS
V12 — no new functions (FN_BEFORE=0 → FN_AFTER=0) PASS
V13 — owner = directus (matches IU); PUBLIC INSERT/UPDATE/DELETE absent (count=0) PASS
V14 — iu_edit.policy.default_mode=auto_apply, iu_edit.schema.version=p3b-v1 PASS

Required assertions (per task acceptance)

Requirement Status
phase_status=PASS
p3c_readiness=READY
V1–V14 all PASS
unit_edit_draft created
unit_edit_comment created
sort_order_action=ADDED (or SKIPPED_ALREADY_EXISTS_WITH_INDEX) ✓ ADDED
IU/UV counts unchanged ✓ 6→6 / 6→6
no new functions ✓ V12
P3A gateway allow-list intact ✓ V11
owner matches IU owner ✓ both = directus
PUBLIC INSERT/UPDATE/DELETE absent ✓ pub=0
boundaries honored

DDL transaction

BEGIN
  set_config('app.p3b_owner','directus')
CREATE TABLE unit_edit_draft (18 cols, 8 CHECK, 3 FK, PK)
CREATE INDEX idx_ued_unit_status_created
CREATE INDEX idx_ued_address_status_created
CREATE INDEX idx_ued_base_version
CREATE INDEX idx_ued_applied_version (partial WHERE applied_version_ref IS NOT NULL)
CREATE TABLE unit_edit_comment (13 cols, 5 CHECK, 3 FK, PK)
CREATE INDEX idx_uec_draft_created
CREATE INDEX idx_uec_unit_created
DO $$ … sort_order conditional ADD + idx_iu_parent_sort (partial)
DO $$ … OWNER → directus on both new tables
REVOKE INSERT,UPDATE,DELETE ON unit_edit_draft FROM PUBLIC
REVOKE INSERT,UPDATE,DELETE ON unit_edit_comment FROM PUBLIC
INSERT 0 2 dot_config rows (auto_apply, p3b-v1)
COMMIT
DDL_EXIT=0

Preflight observations

  • unit_edit_draft / unit_edit_comment did NOT exist (clean slate)
  • No similar unit%proposal% / unit%edit% tables
  • IU columns = 15 (sort_order absent → expected ADD), UV columns = 9
  • dot_config.key single-column unique index present
  • IU owner = directus
  • P3A gateway allow-list = fn_iu_create,fn_iu_apply_edit_draft (intact)
  • UV lifecycle convention from fn_iu_create body: empty grep (function does not literal-match lifecycle_status…'…' pattern; informational only — not a gate)
  • Policy keys before: 0 (clean seed)
  • Edit/draft/comment functions before: 0 (clean — V12 baseline)
  • IU=6, UV=6 before

Detail output (post-DDL, read-only)

unit_edit_draft (18 columns)

id uuid NOT NULL gen_random_uuid()
unit_id uuid NOT NULL
canonical_address text NOT NULL
base_version_ref uuid NOT NULL
base_version_seq integer NOT NULL
base_content_hash text NOT NULL
draft_title text NULL
draft_body text NOT NULL
draft_content_hash text NOT NULL
draft_status text NOT NULL DEFAULT 'open'
created_by text NOT NULL
created_at timestamptz NOT NULL DEFAULT now()
applied_by text NULL
applied_at timestamptz NULL
applied_version_ref uuid NULL
stale_at timestamptz NULL
reason text NULL
metadata jsonb NOT NULL DEFAULT '{}'

unit_edit_comment (13 columns)

id uuid NOT NULL gen_random_uuid()
draft_id uuid NOT NULL
unit_id uuid NOT NULL
author_ref text NOT NULL
author_type text NOT NULL DEFAULT 'agent'
comment_body text NOT NULL
comment_kind text NOT NULL DEFAULT 'general'
created_at timestamptz NOT NULL DEFAULT now()
resolved_at timestamptz NULL
resolved_by text NULL
parent_comment_id uuid NULL
target_path text NULL
metadata jsonb NOT NULL DEFAULT '{}'

Constraints (named)

  • unit_edit_draft: pk_unit_edit_draft; FK fk_ued_unit / fk_ued_base_version / fk_ued_applied_version; CHECK chk_ued_status, chk_ued_created_by, chk_ued_body, chk_ued_title, chk_ued_address, chk_ued_base_seq, chk_ued_base_hash, chk_ued_draft_hash (plus auto NOT NULL system checks)
  • unit_edit_comment: pk_unit_edit_comment; FK fk_uec_draft / fk_uec_unit / fk_uec_parent; CHECK chk_uec_author_type, chk_uec_kind, chk_uec_author, chk_uec_body, chk_uec_resolved (plus auto NOT NULL system checks)

Indexes (created)

  • unit_edit_draft: pk_unit_edit_draft, idx_ued_unit_status_created, idx_ued_address_status_created, idx_ued_base_version, idx_ued_applied_version (partial)
  • unit_edit_comment: pk_unit_edit_comment, idx_uec_draft_created, idx_uec_unit_created
  • information_unit: idx_iu_parent_sort (partial WHERE parent_or_container_ref IS NOT NULL)

dot_config seeded

key value
iu_edit.policy.default_mode auto_apply
iu_edit.schema.version p3b-v1

Grants

  • Owner directus holds full privileges on both new tables.
  • context_pack_readonly has SELECT only.
  • PUBLIC has NO INSERT / UPDATE / DELETE / SELECT (REVOKE applied; PUBLIC entirely absent from grants table).

Hard boundaries respected

  • ✗ No new functions (V12: 0 → 0)
  • ✗ No trigger / gateway changes (V11 confirms allow-list value unchanged)
  • ✗ No IU/UV row mutations (V10: 6→6 / 6→6)
  • ✗ No vector mutation
  • ✗ No cleanup
  • ✗ No retry / improvise

Artifacts

  • VPS log: /tmp/23-p3b.20260507-043751.log

Next step

P3B schema-only complete and PASS. Ready to proceed to P3C (functions/edit layer logic) when dispatched.

23-P3B Report | 2026-05-07 | All 14 verifications PASS | rev4 prompt executed cleanly