P3D Pack 1 Phase 5C2B — Publication Authority Vocab Seed — Agent Prompt (DRAFT rev2)
P3D Pack 1 Phase 5C2B — Publication Authority Vocab Seed — Agent Prompt (DRAFT rev2)
Date: 2026-05-12 Author: Opus (Claude) Rev: 2 (transaction-scoped lock, conflict handling, verify-before-commit, execution log) Authority: GPT directive
gpt-directive-opus-p3d-pack1-phase5c2b-prompt-rev2-transaction-log-conflict-2026-05-12.mdMode: DRAFT — not approved for dispatch Design:knowledge/dev/laws/dieu44-trien-khai/design/p3d-pack1-phase5c2b-publication-authority-vocab-seed-design.md
Mission
Seed exactly 1 vocab row into dot_config for publication_authority. This unblocks Phase 5C2 DIEU-35 pilot migration which requires a governed publication_authority_ref_value.
Effort: low.
Required reading
knowledge/dev/laws/dieu44-trien-khai/design/p3d-pack1-phase5c2b-publication-authority-vocab-seed-design.md
knowledge/dev/laws/dieu44-trien-khai/reports/p3d-pack1-phase5c2a-publication-authority-ref-probe-report.md
Hard boundaries
- No TAC mutation (no INSERT/UPDATE/DELETE on
tac_publication,tac_logical_unit,tac_unit_version,tac_publication_member). - No IU mutation (no INSERT/UPDATE/DELETE on
information_unit,unit_version). - No DDL (no CREATE/ALTER/DROP TABLE, no CREATE/ALTER FUNCTION, no CREATE/ALTER TRIGGER).
- No function/trigger patch.
- No Directus/Nuxt/Qdrant changes.
- No nested/secondary Agent dispatch.
- No overwrite of existing
dot_configrow. - Scope:
dot_configINSERT of exactly 1 row.
Execution log
All phases must be logged to:
/opt/incomex/logs/p3d-pack1-phase5c2b-$(date -u +%Y%m%dT%H%M%SZ).log
Log must capture: introspection results, resolved columns, pre-existing state, lock result, insert outcome, verify outcome, COMMIT/ROLLBACK decision, KB report upload status. Use tee or equivalent to capture both stdout and file.
Record RUN_STARTED_AT at script start:
RUN_STARTED_AT=$(date -u +"%Y-%m-%dT%H:%M:%SZ")
Execution phases
Phase 0 — Schema introspection
SELECT column_name, data_type, is_nullable
FROM information_schema.columns
WHERE table_schema = 'public'
AND table_name = 'dot_config'
ORDER BY ordinal_position;
STOP condition: If dot_config does not exist or has fewer than 2 columns → report phase5c2b_status=BLOCKED, reason=SCHEMA_MISSING.
Phase 1 — Column resolution
From Phase 0 result, resolve these concepts to actual column names:
| Concept | Expected column | Expected type |
|---|---|---|
| config_key | key |
text |
| config_value | value |
text |
| config_description | description |
text |
| config_updated_at | updated_at |
timestamptz |
If any concept resolves to a different column name than expected, use the resolved name in ALL subsequent queries and in the final response. If a concept cannot be resolved (FIELD_ABSENT), report phase5c2b_status=BLOCKED, reason=COLUMN_RESOLUTION_FAILED.
Phase 2 — Pre-transaction conflict check
SELECT <config_key>, <config_value>, <config_description>
FROM dot_config
WHERE <config_key> = 'vocab.publication_authority.incomex_council';
If 0 rows: Proceed to Phase 3.
If 1+ rows and value = incomex_council and description contains Publication authority:
Report phase5c2b_status=ALREADY_EXISTS_OK. Skip INSERT. Proceed to Phase 6 (vocab landscape). This is not an error — idempotent handling of prior successful run.
If 1+ rows but value ≠ incomex_council OR description conflicts:
Report phase5c2b_status=BLOCKED_EXISTING_CONFLICT. Do NOT overwrite. Do NOT INSERT. Report the existing row values for GPT/User decision. STOP.
Phase 3 — Write transaction (lock + recheck + insert + verify + commit)
Execute as one transaction:
BEGIN;
-- 3A: Transaction-scoped advisory lock
SELECT pg_try_advisory_xact_lock(hashtext('p3d_pack1_phase5c2b_publication_authority_vocab_seed')) AS lock_acquired;
-- If lock_acquired = false → ROLLBACK, report LOCK_BUSY. No retry.
-- 3B: In-transaction recheck (race protection)
SELECT COUNT(*) AS cnt,
MAX(<config_value>) AS existing_value
FROM dot_config
WHERE <config_key> = 'vocab.publication_authority.incomex_council';
-- If cnt > 0 AND existing_value = 'incomex_council' → ROLLBACK, report ALREADY_EXISTS_OK
-- If cnt > 0 AND existing_value ≠ 'incomex_council' → ROLLBACK, report BLOCKED_EXISTING_CONFLICT
-- If cnt = 0 → proceed
-- 3C: INSERT
INSERT INTO dot_config (<config_key>, <config_value>, <config_description>, <config_updated_at>)
VALUES (
'vocab.publication_authority.incomex_council',
'incomex_council',
'Publication authority for Incomex AI Council-governed law pilots; introduced by P3D Pack1 Phase5C2B before DIEU-35 migration.',
now()
);
-- 3D: Verify exact row BEFORE commit
SELECT <config_key>, <config_value>, <config_description>, <config_updated_at>
FROM dot_config
WHERE <config_key> = 'vocab.publication_authority.incomex_council';
-- Verify:
-- key = 'vocab.publication_authority.incomex_council'
-- value = 'incomex_council'
-- description contains 'Publication authority' AND 'P3D Pack1 Phase5C2B'
-- updated_at IS NOT NULL AND updated_at >= RUN_STARTED_AT
-- If ANY field wrong → ROLLBACK, report VERIFY_FAIL
-- If ALL correct → COMMIT
COMMIT;
If INSERT fails: ROLLBACK. Report phase5c2b_status=BLOCKED, reason=INSERT_FAILED, include error message. Do not retry.
If verify fails: ROLLBACK. Report phase5c2b_status=VERIFY_FAIL, include actual vs expected values.
Phase 4 — Post-commit confirmation (read-only)
After successful COMMIT, confirm the row persists:
SELECT <config_key>, <config_value>, <config_description>, <config_updated_at>
FROM dot_config
WHERE <config_key> = 'vocab.publication_authority.incomex_council';
If 0 rows → report phase5c2b_status=POST_COMMIT_MISSING (critical anomaly).
Phase 5 — (reserved, advisory lock auto-released by transaction-scoped lock)
No action needed. pg_try_advisory_xact_lock releases automatically at COMMIT/ROLLBACK.
Phase 6 — Vocab landscape after seed (read-only, informational)
SELECT <config_key>, <config_value>
FROM dot_config
WHERE <config_key> LIKE 'vocab.publication_%'
ORDER BY <config_key>;
Report all rows. Expected: publication_type.design_doc, publication_type.law, and new publication_authority.incomex_council.
Rollback instructions
If rollback is needed after successful commit (GPT/User decision, or downstream 5C2 failure):
DELETE FROM dot_config
WHERE <config_key> = 'vocab.publication_authority.incomex_council';
Where <config_key> is the resolved column name from Phase 1.
Verify 0 rows remain:
SELECT COUNT(*) FROM dot_config
WHERE <config_key> = 'vocab.publication_authority.incomex_council';
-- Expected: 0
Report path
Save report to:
knowledge/dev/laws/dieu44-trien-khai/reports/p3d-pack1-phase5c2b-publication-authority-vocab-seed-execution-report.md
Final response format
phase5c2b_status=PASS|ALREADY_EXISTS_OK|BLOCKED_EXISTING_CONFLICT|BLOCKED|LOCK_BUSY|VERIFY_FAIL|INSERT_FAILED|POST_COMMIT_MISSING
report_path=knowledge/dev/laws/dieu44-trien-khai/reports/p3d-pack1-phase5c2b-publication-authority-vocab-seed-execution-report.md
log_path=/opt/incomex/logs/p3d-pack1-phase5c2b-<timestamp>.log
no_tac_mutation=true
no_iu_mutation=true
no_ddl=true
no_function_patch=true
no_overwrite=true
rows_inserted=1|0
vocab_key_seeded=vocab.publication_authority.incomex_council
vocab_value_seeded=incomex_council
post_insert_verified=true|false
verify_before_commit=true
publication_vocab_landscape_count=<N>
rollback_key_column=<resolved config_key column name>
rollback_key_value=vocab.publication_authority.incomex_council
next_recommended_action=GPT_REVIEW_THEN_PHASE5C2_DIEU35_PILOT
Return only the final response format plus critical blocker notes. Do not write a long essay.
Phase 5C2B | Publication Authority Vocab Seed | DRAFT rev2 | Transaction-scoped lock, conflict handling, verify-before-commit, execution log | 2026-05-12