P3D Pack 1 Phase 5 — TAC→IU Migration Read-Only/Dry-Run Report (Post-Phase5A Rerun, rev6)
P3D Pack 1 Phase 5 — TAC→IU Migration Read-Only/Dry-Run Report (Post-Phase5A Disambiguation Rerun)
Date: 2026-05-11 Mode: READ-ONLY / DRY-RUN — zero writes, zero mutation Run kind: POST-PHASE5A-DISAMBIGUATION RERUN Prompt:
prompts/p3d-pack1-phase5-readonly-dryrun-tac-to-iu-migration-prompt.mdrev6 (APPROVED FOR RERUN 2026-05-11) Approval review:reviews/gpt-final-review-p3d-pack1-phase5a-prompt-rev6-approved-rerun-2026-05-11.mdRegistry addendum:design/p3d-pack1-phase5a-semantic-registry-disambiguation-addendum.mdDesign reference:design/p3d-pack1-phase5-tac-to-iu-migration-design.mdPrevious run: rev4 returned PARTIAL because the registry correctly flagged 3 AMBIGUOUS concepts. Rev6 splits those concepts; this rerun produces a clean evidence set. Author: Opus 4.7 (agent rerun) DB target: VPS PostgreSQL (postgres container, db=directus, schema=public)
STATUS FLAGS (final response format)
phase5a_rerun_status=PASS
report_path=knowledge/dev/laws/dieu44-trien-khai/reports/p3d-pack1-phase5-tac-to-iu-migration-dryrun-report.md
no_mutation_performed=true
gate0_all_passed=true
resolved_field_map_complete=true
g1_to_g11_attempted=true
old_concept_references_present=false
publication_metrics_available=true
provenance_projection_available=true
rollback_sizing_available=true
nesting_evidence_available=true
nesting_max_depth=2
address_collision_count=0
scale_brittleness_self_audit_passed=true
next_recommended_action=GPT/User makes D1/D2/D3 nesting decision (depth=2, 3 roots, 83 children — both D1 and D2 viable on data shape) and Phase 5B species/composition decision (4 atom + 4 molecule species are PLAUSIBLE against target governance_role=observed; likely a new species per Phase 4D)
Status = PASS — all goals returned evidence. Only one residual AMBIGUOUS_FIELD remains (collection_display_name on collection_registry — informational, no goal blocked).
1. GATE-0 — Phase 1 Table Existence
| Check | Table | relkind | Result |
|---|---|---|---|
| P1 | tac_logical_unit | r | PASS |
| P2 | tac_unit_version | r | PASS |
| P3 | tac_publication | r | PASS |
| P4 | tac_publication_member | r | PASS |
| P5 | information_unit | r | PASS |
| P6 | unit_version | r | PASS |
| P7 | collection_registry rows for information_unit + unit_version |
both present | PASS |
| P8 | dot_config vocab.unit_kind.law_unit |
value=law_unit |
PASS |
| P8b | entity_species | r | PASS |
| P8c | species_collection_map | r | PASS |
| P8d | collection_registry | r | PASS |
| P8e | birth_registry | r | PASS |
Phase 1 verdict: PASS.
2. GATE-0 — Phase 3 Function Existence
| Check | Function | Result | Signature |
|---|---|---|---|
| P9 | fn_iu_create | PRESENT | (p_canonical_address text, p_title text, p_body text, p_actor text, p_unit_kind text, p_section_type text, p_owner_ref text, p_publication_type text, p_parent_ref uuid) → jsonb |
| P10 | fn_iu_create_plan | PRESENT | same args → jsonb |
| P11 | fn_content_hash | PRESENT | (p_body text) → text |
| P12 | fn_iu_birth_gate_layer1 | PRESENT | () → trigger |
| P13 | fn_iu_birth_gate_layer2 | PRESENT | () → trigger |
| P14 | fn_iu_verify_invariants | PRESENT | (p_addr text) → jsonb |
Phase 3 verdict: 6/6 PRESENT.
3. GATE-0 — Phase 2 Resolved Field Map (rev6 registry, 31 concepts)
Core domain concepts
| Concept | Table | Resolution | Column |
|---|---|---|---|
| address_field | tac_logical_unit | RESOLVED | canonical_address |
| address_field | information_unit | RESOLVED | canonical_address |
| content_body | tac_unit_version | RESOLVED | body |
| content_body | unit_version | RESOLVED | body |
| content_hash | tac_unit_version | RESOLVED | content_hash |
| content_hash | unit_version | RESOLVED | content_hash |
| provenance_json_profile | unit_version | RESOLVED | content_profile (jsonb) |
| provenance_text_note | unit_version | RESOLVED | provenance (text) |
| provenance_text_note | tac_unit_version | RESOLVED | provenance (text) |
| parent_ref | tac_logical_unit | RESOLVED | parent_id |
| parent_ref | information_unit | RESOLVED | parent_or_container_ref |
| sort_order | tac_logical_unit | RESOLVED | sort_order |
| section_type | tac_logical_unit | RESOLVED | section_type |
| section_type | information_unit | RESOLVED | section_type |
| lifecycle | tac_logical_unit | RESOLVED | lifecycle_status |
| lifecycle | information_unit | RESOLVED | lifecycle_status |
| publication_ref | tac_publication_member | RESOLVED | publication_id |
| logical_unit_ref | tac_publication_member | RESOLVED | logical_unit_id |
| publication_render_order | tac_publication_member | RESOLVED | render_order |
| title_field | tac_unit_version | RESOLVED | title |
| title_field | unit_version | RESOLVED | title |
| description_field | tac_unit_version | RESOLVED | description |
| description_field | unit_version | RESOLVED | description |
Registry/Species concepts
| Concept | Table | Resolution | Column |
|---|---|---|---|
| species_identifier | entity_species | RESOLVED | species_code |
| species_identifier | species_collection_map | RESOLVED | species_code |
| species_identifier | collection_registry | RESOLVED | species_code |
| species_identifier | birth_registry | RESOLVED | species_code |
| species_display | entity_species | RESOLVED | display_name |
| species_composition | entity_species | RESOLVED | composition_level |
| species_composition | birth_registry | RESOLVED | composition_level |
| species_management | entity_species | RESOLVED | management_mode |
| species_hierarchy_parent | entity_species | RESOLVED | parent_id |
| species_hierarchy_depth | entity_species | RESOLVED | depth |
| collection_table_key | collection_registry | RESOLVED | collection_name |
| collection_table_key | species_collection_map | RESOLVED | collection_name |
| collection_table_key | birth_registry | RESOLVED | collection_name |
| collection_display_name | collection_registry | AMBIGUOUS_FIELD | name, name_en (informational only; no goal blocked) |
| governance_role | collection_registry | RESOLVED | governance_role |
| governance_role | birth_registry | RESOLVED | governance_role |
| migration_state | collection_registry | RESOLVED | migration_state |
| birth_strategy | collection_registry | RESOLVED | birth_code_strategy |
| mapping_primary | species_collection_map | RESOLVED | is_primary |
| disc_field | species_collection_map | RESOLVED | discriminator_field |
| disc_value | species_collection_map | RESOLVED | discriminator_value |
| disc_operator | species_collection_map | RESOLVED | discriminator_operator |
| disc_config | species_collection_map | RESOLVED | discriminator_config |
| birth_entity | birth_registry | RESOLVED | entity_code |
Field map: complete. 1 residual AMBIGUOUS (informational), 0 FIELD_ABSENT among operational concepts.
Comparison vs rev4 (post-disambiguation gain)
| Concept | rev4 status | rev6 status |
|---|---|---|
| publication_link / tac_publication_member | AMBIGUOUS (publication_id + logical_unit_id) | REPLACED: publication_ref→publication_id RESOLVED; logical_unit_ref→logical_unit_id RESOLVED |
| sort_order / tac_publication_member | FIELD_ABSENT (render_order was UNREGISTERED) | REPLACED: publication_render_order→render_order RESOLVED |
| provenance_profile / unit_version | AMBIGUOUS (content_profile + provenance) | REPLACED: provenance_json_profile→content_profile RESOLVED; provenance_text_note→provenance RESOLVED |
| collection_key / collection_registry | AMBIGUOUS (name + collection_name) | REPLACED: collection_table_key→collection_name RESOLVED; collection_display_name AMBIGUOUS (name+name_en) but informational |
All operational ambiguity resolved. No deprecated concepts referenced in this rerun.
4. G1 — Source Row Accounting
| Table | Row count |
|---|---|
| tac_logical_unit | 86 |
| tac_unit_version | 86 |
| tac_publication | 3 |
| tac_publication_member | 86 |
| information_unit (target, current) | 12 |
| unit_version (target, current) | 19 |
section_type distribution on tac_logical_unit (12 distinct values)
| section_type | count |
|---|---|
| technical_spec | 19 |
| governance_process | 16 |
| paragraph | 14 |
| heading | 10 |
| principle | 8 |
| process | 7 |
| checklist | 6 |
| changelog | 2 |
| article | 1 |
| appendix | 1 |
| instruction_block | 1 |
| definition | 1 |
lifecycle_status distribution on tac_logical_unit
| lifecycle_status | count |
|---|---|
| draft_only | 86 |
Uniform single-value lifecycle across all source rows.
5. G2 — Schema Alignment (source → target)
Pair A: tac_logical_unit → information_unit
| Concept | Source col | Target col | Alignment |
|---|---|---|---|
| address_field | canonical_address | canonical_address | ALIGNED |
| parent_ref | parent_id | parent_or_container_ref | ALIGNED (uuid↔uuid, different names) |
| section_type | section_type | section_type | ALIGNED |
| lifecycle | lifecycle_status | lifecycle_status | ALIGNED |
| sort_order | sort_order | sort_order | ALIGNED |
Target-only fields requiring construction at migration: unit_kind, content_anchor_ref, version_anchor_ref, conformance_status, owner_ref, identity_profile. Source owner (text) maps semantically to target owner_ref (text) but is OUTSIDE registry as the owner_ref concept isn't defined for source.
Pair B: tac_unit_version → unit_version
| Concept | Source col | Target col | Alignment |
|---|---|---|---|
| content_body | body | body | ALIGNED |
| content_hash | content_hash | content_hash | ALIGNED (but recipe differs — see G6) |
| title_field | title | title | ALIGNED |
| description_field | description | description | ALIGNED |
| provenance_json_profile | (concept not registered on source) | content_profile | TARGET-RESOLVED — source has content_profile jsonb column (UNREGISTERED on source per current registry) |
| provenance_text_note | provenance | provenance | ALIGNED (both text) |
Pair C/D: tac_publication / tac_publication_member → (no IU target)
Per design §G — IU publication model not yet designed. Out of scope.
UNREGISTERED_FIELD list (unchanged from rev4 except render_order now RESOLVED via publication_render_order)
- tac_publication_member: (none —
render_ordernow covered). - tac_publication:
enacted_at,council_score,approved_by,risk_tier,publication_profile,version. - tac_unit_version:
version_number,review_state,length_flag,length_exception_reason,content_profile(jsonb — note: registry doesn't include provenance_json_profile for source side),vector_sync_status,vector_synced_at,vector_chunk_count,editor,enacted_at. - tac_logical_unit:
doc_code,section_code,owner,tier,identity_profile. - information_unit:
doc_code,section_code,unit_kind,content_anchor_ref,version_anchor_ref,conformance_status,identity_profile,owner_ref,created_by,updated_by,deleted_at. - unit_version:
unit_id,version_seq,editor,review_state,enacted_at,created_by. - entity_species:
code,prefix,kg_metadata,_dot_origin. - collection_registry:
code,classification,owner,group,icon,field_count,has_note,purpose,_dot_origin,storage_role,source_kind,description_policy,birth_code_column,birth_identity_source.
6. G3 — Nesting Evidence
parent_ref RESOLVED on tac_logical_unit = parent_id. (Unchanged from rev4 — same source data.)
Roots vs children
| Kind | Count |
|---|---|
| root (parent_id IS NULL) | 3 |
| child | 83 |
3 roots = 3 publications.
Recursive depth distribution
| depth | count |
|---|---|
| 0 (roots) | 3 |
| 1 | 38 |
| 2 | 45 |
Max depth = 2. Sum 3+38+45 = 86 (no cycles).
Parent→child section_type pairs (top 22)
| parent_st | child_st | count |
|---|---|---|
| heading | technical_spec | 11 |
| governance_process | governance_process | 9 |
| heading | paragraph | 9 |
| heading | principle | 7 |
| heading | heading | 7 |
| technical_spec | technical_spec | 7 |
| heading | process | 5 |
| heading | checklist | 4 |
| heading | governance_process | 4 |
| article | governance_process | 3 |
| governance_process | paragraph | 3 |
| article | checklist | 2 |
| article | process | 2 |
| article | paragraph | 2 |
| article | heading | 1 |
| article | technical_spec | 1 |
| article | principle | 1 |
| article | appendix | 1 |
| article | definition | 1 |
| article | changelog | 1 |
| article | instruction_block | 1 |
| heading | changelog | 1 |
Evidence for D-decision (no Agent recommendation):
- Shallow tree (depth ≤ 2). Both D1 (preserve) and D2 (flatten) viable on data shape.
- Parents are typed:
article,heading,governance_process,technical_spec. - Leaves are typed mostly:
technical_spec,paragraph,principle,checklist,process, etc. - D1 → mixed composition (parents=compound/molecule, leaves=atom). D2 → uniform atom.
7. G4 — Publication Structure (now joinable via publication_ref)
tac_publication SELECT * (3 rows)
| doc_code | version | publication_type | name | lifecycle_status |
|---|---|---|---|---|
| DIEU-28 | v2.0 | law | ĐIỀU 28: LUẬT KỸ THUẬT HIỂN THỊ — v2.0 BAN HÀNH | proposed |
| DIEU-32 | v1.1 | law | Điều 32: Luật Phê duyệt — v1.1 BAN HÀNH | proposed |
| DIEU-35 | v5.2 | law | DIEU 35: LUAT QUAN TRI DOT - v5.2 FINAL (BAN HANH 2026-04-18 S178 Fix 15) | proposed |
Members per publication (via tac_publication_member.publication_id join)
| doc_code | version | member_count |
|---|---|---|
| DIEU-28 | v2.0 | 27 |
| DIEU-32 | v1.1 | 23 |
| DIEU-35 | v5.2 | 36 |
Sum = 27+23+36 = 86 (matches G1).
Logical-unit ref integrity (1:1 with tac_logical_unit)
| total_members | distinct_lu_refs | orphan_refs |
|---|---|---|
| 86 | 86 | 0 |
PASS — every pub_member.logical_unit_id resolves to a tac_logical_unit row; no duplicates, no orphans.
Ordering integrity per publication (render_order)
| doc_code | min | max | member_count | distinct_orders | no_duplicates |
|---|---|---|---|---|---|
| DIEU-28 | 0 | 26 | 27 | 27 | true |
| DIEU-32 | 0 | 22 | 23 | 23 | true |
| DIEU-35 | 0 | 35 | 36 | 36 | true |
PASS — each publication has a contiguous [0, member_count-1] render_order range with no duplicates. Zero gaps, zero duplicates across all 3 publications.
8. G5 — Canonical Address Collision
| Metric | Value |
|---|---|
| collision_count | 0 |
| collision_sample | (empty) |
PASS — no overlap between 86 TAC source addresses and 12 current IU target addresses.
9. G6 — Hash / Provenance Projection
content_bodyRESOLVED on source (body) + target (body).content_hashRESOLVED on source + target.fn_content_hashPRESENT.provenance_json_profileRESOLVED on target =content_profile(jsonb).provenance_text_noteRESOLVED on target =provenance(text). Informational.
Hash recipe comparison (re-verified live, 5 sampled tac_unit_version rows)
| id8 | stored_hash matches fn_content_hash(body)? |
|---|---|
| 9ed7b93b | f (differ) |
| bd4718d6 | f |
| b6998920 | f |
| b15c0098 | f |
| 665338ba | f |
5/5 differ. Confirms recipe divergence (TAC composite vs IU body-only sha256). Migration MUST recompute IU hash; MUST NOT copy TAC hash into target.content_hash.
Provenance projection — RESOLVED carriers
| Carrier | Column | Type | Total target rows | Non-empty rows |
|---|---|---|---|---|
| provenance_json_profile | unit_version.content_profile | jsonb | 19 | 0 |
| provenance_text_note | unit_version.provenance | text | 19 | 0 |
Projection feasibility: PASS. Both carriers exist and are unpopulated on current target rows. Migration can write content_profile.source_hashes.tac_v1 = <original TAC composite hash> per Phase 4B addendum §7. The text provenance field stays untouched (free-text editor note) or receives a short origin tag if Phase 5B chooses.
10. G7 — Species/Composition Grouping (NO Agent interpretation)
Live entity_species count = 40.
Target governance_role
| collection_name | governance_role |
|---|---|
| information_unit | observed |
| unit_version | observed |
Composition groups + PLAUSIBLE/CONFLICT
PLAUSIBLE = management_mode = 'observed'.
| composition | total | plausible | conflict | unknown |
|---|---|---|---|---|
| atom | 20 | 4 | 16 | 0 |
| compound | 8 | 0 | 8 | 0 |
| meta | 1 | 0 | 1 | 0 |
| molecule | 11 | 4 | 7 | 0 |
Live species dump (40 rows; all candidate_not_approved)
| code | species_code | display_name | composition | management | status |
|---|---|---|---|---|---|
| SPE-AGT | agent | Agent | atom | governed | active |
| SPE-AIS | ai_support | Hỗ trợ AI | atom | observed | active |
| SPE-CAT | catalog | Danh muc he thong | atom | governed | active |
| SPE-CPT | checkpoint_type | Loai checkpoint | atom | governed | active |
| SPE-BLK | cms_block | CMS Block | atom | excluded | active |
| SPE-DEP | dependency | Phu thuoc | atom | governed | active |
| SPE-DXF | directus_field | Directus Field | atom | observed | active |
| SPE-DOT | dot_tool | DOT Tool | atom | governed | active |
| SPE-LBL | entity_label | Entity Label | atom | governed | active |
| SPE-ERL | entity_rule | Quy tac thuc the | atom | governed | active |
| SPE-GOV | governance_infra | Hạ tầng Giám sát | atom | observed | active |
| SPE-GRL | governance_relation | Liên kết Quản trị | atom | governed | active |
| SPE-JCT | junction_table | Bảng Liên kết | atom | excluded | active |
| SPE-JUR | jurisdiction | Phạm vi Pháp lý | atom | governed | active |
| SPE-FAC | label_facet | Chieu phan loai | atom | governed | active |
| SPE-LBR | label_rule | Quy tac gan nhan | atom | governed | active |
| SPE-ENF | law_enforcement | Thực thi DOT-Luật | atom | governed | active |
| SPE-SYS | system_backup | Hệ thống/Backup | atom | excluded | active |
| SPE-ISS | system_issue | Van de he thong | atom | governed | active |
| SPE-LOG | system_log | Nhật ký Hệ thống | atom | observed | active |
| SPE-APP | approval_request | Yeu cau phe duyet | compound | governed | active |
| SPE-GAG | governance_agency | Cơ quan Quản trị | compound | governed | active |
| SPE-LAW | law | Văn bản Luật | compound | governed | active |
| SPE-MOD | module | Module | compound | governed | active |
| SPE-OSC | os_crm | OS CRM | compound | excluded | active |
| SPE-TSK | task | Nhiem vu | compound | governed | active |
| SPE-WCR | wcr | De xuat thay doi | compound | governed | active |
| SPE-WKF | workflow | Quy trinh | compound | governed | active |
| SPE-SPE | species | Loai | meta | governed | active |
| SPE-BZS | business_support | Hỗ trợ Kinh doanh | molecule | observed | active |
| SPE-CPS | checkpoint_set | Bo checkpoint | molecule | governed | active |
| SPE-CKS | checkpoint_support | Hỗ trợ Checkpoint | molecule | observed | active |
| SPE-COL | collection | Collection | molecule | governed | active |
| SPE-HLP | help_center | Trung tâm Trợ giúp | molecule | observed | active |
| SPE-PGE | page | Trang UI | molecule | governed | active |
| SPE-PVR | pivot_result | Ket qua Pivot | molecule | observed | active |
| SPE-TBL | table_ui | Bang UI | molecule | governed | active |
| SPE-WEB | website_content | Nội dung Website | molecule | excluded | active |
| SPE-PGW | website_page | Trang Website | molecule | excluded | active |
| SPE-WFS | workflow_step | Buoc quy trinh | molecule | governed | active |
Agent makes no composition or species recommendation. GPT/User applies Điều 0-B and the D-nesting decision.
11. G8 — IU Creation Pathway (bounded output)
Function inventory
| function | identity_args | return | parent_ref candidate match? |
|---|---|---|---|
| fn_iu_create | (p_canonical_address text, p_title text, p_body text, p_actor text, p_unit_kind text, p_section_type text, p_owner_ref text, p_publication_type text, p_parent_ref uuid) |
jsonb | YES (substring parent_ref in args) |
| fn_iu_create_plan | same args | jsonb | YES |
| fn_content_hash | (p_body text) |
text | n/a |
| fn_iu_birth_gate_layer1 | () |
trigger | n/a |
| fn_iu_birth_gate_layer2 | () |
trigger | n/a |
| fn_iu_verify_invariants | (p_addr text) |
jsonb | n/a |
Trigger inventory — information_unit
| trigger_name | tgtype | function_called |
|---|---|---|
| trg_aa_iu_gateway_write_guard | 23 | fn_iu_gateway_write_guard |
| trg_birth_information_unit | 5 | fn_birth_registry_auto |
| trg_iu_birth_gate_layer1 | 7 | fn_iu_birth_gate_layer1 |
| trg_iu_birth_gate_layer2 | 21 | fn_iu_birth_gate_layer2 |
| trg_iu_updated_at | 19 | fn_iu_updated_at |
Trigger inventory — unit_version
| trigger_name | tgtype | function_called |
|---|---|---|
| trg_aa_iu_notif_version | 5 | fn_iu_notif_version |
| trg_aa_uv_gateway_write_guard | 23 | fn_iu_gateway_write_guard |
Agent provides identity/signature/triggers; GPT/User interprets behavior.
12. G9 — Birth Gate Field Requirements (bounded output)
Layer1 — NEW.<field> extracted from source
| field_name | exists_on_target | status |
|---|---|---|
| canonical_address | YES | SATISFIED |
| unit_kind | YES | SATISFIED |
| lifecycle_status | YES | SATISFIED |
| owner_ref | YES | SATISFIED |
| conformance_status | YES | SATISFIED |
| identity_profile (jsonb keys: title, owner_lookup_ref, primary_section_type_ref, publication_authority_ref, publication_type_ref) | YES (column); per-key satisfaction UNKNOWN until migration constructs the jsonb | SATISFIED (column) |
Layer1 also performs vocab lookups (vocab.unit_kind.*, vocab.section_type.*, vocab.publication_type.*). Vocab table existence confirmed (P8). Per-section_type vocab presence for the 12 distinct section_types from G1 must be re-verified pre-pilot.
Layer2 — v_row.<field> extracted from source
| field_name | exists_on_target | status |
|---|---|---|
| content_anchor_ref | YES | SATISFIED |
| version_anchor_ref | YES | SATISFIED |
Layer2 also enforces: version_anchor_ref must point to a unit_version where unit_id=NEW.id; content_anchor_ref must equal version_anchor_ref::text. Satisfiable via ordered INSERT (IU stub → UV → UPDATE anchors); migration logic must honor this.
13. G10 — Pilot Candidate Metrics (metric-only, NO Agent ranking)
All 3 metric concepts RESOLVED → full metric set available.
Sort: diversity_count DESC, member_count ASC. All rows candidate_not_approved.
| doc_code | version | name | lifecycle_status | member_count | diversity_count | nesting_depth | label |
|---|---|---|---|---|---|---|---|
| DIEU-35 | v5.2 | DIEU 35: LUAT QUAN TRI DOT - v5.2 FINAL (BAN HANH 2026-04-18 S178 Fix 15) | proposed | 36 | 12 | 2 | candidate_not_approved |
| DIEU-32 | v1.1 | Điều 32: Luật Phê duyệt — v1.1 BAN HÀNH | proposed | 23 | 8 | 2 | candidate_not_approved |
| DIEU-28 | v2.0 | ĐIỀU 28: LUẬT KỸ THUẬT HIỂN THỊ — v2.0 BAN HÀNH | proposed | 27 | 7 | 2 | candidate_not_approved |
All 3 publications have nesting_depth = 2 (max across publication members under recursive parent walk).
Agent does NOT recommend a pilot. GPT/User selects from the full list per Phase 5C plan.
14. G11 — Rollback Input Computation
address_field RESOLVED on tac_logical_unit + publication_ref RESOLVED on tac_publication_member.
| Metric | Value |
|---|---|
| total_projected_iu_inserts | 86 |
| total_projected_uv_inserts | 86 |
Per-publication breakdown (rollback batch sizing)
| doc_code | version | projected_inserts |
|---|---|---|
| DIEU-28 | v2.0 | 27 |
| DIEU-32 | v1.1 | 23 |
| DIEU-35 | v5.2 | 36 |
Per-publication transactions per design §J/§L are sized 23–36 IU + matching UV rows. Exact-key rollback (RETURNING capture) per publication is the proposed model.
15. SCALE-BRITTLENESS SELF-AUDIT
| Check | Result | Notes |
|---|---|---|
| Column name from memory used in a query? | No | All operational column refs come from rev6 resolved field map. Information_schema introspection is the only direct column-name usage. |
| "or similar" / "equivalent" in any selector? | No | Exact string-equality matching only. |
| Agent interpreted "simplest" / "allows containment"? | No | G7 dumps and groups; D1/D2/D3 evidence only. |
| AMBIGUOUS_FIELD silently resolved? | No | Only collection_display_name remains AMBIGUOUS; reported and not used by any goal. |
| Fixed counts as logic? | No | All counts live SELECT. |
| Phase 3/4 labels treated as facts without re-verification? | No | Hash recipe re-verified (5/5 differ). |
| Semantic concept missing from registry? | No new UNREGISTERED on operational tables. | render_order (rev4 UNREGISTERED) now covered by publication_render_order. |
| Old/deprecated concepts referenced in operational logic? | No | publication_link, provenance_profile, collection_key no longer appear in any operational query. |
| Agent recommended a pilot? | No | All G10 rows labelled candidate_not_approved. |
| Composition/species decision pushed? | No | All species rows labelled candidate_not_approved. |
| Nesting decision (D1/D2/D3) pushed? | No | Evidence presented; no Agent recommendation. |
| Any write/mutation? | No | All SELECT / introspection. No INSERT/UPDATE/DELETE/DDL/CREATE/ALTER executed. |
Self-audit verdict: PASS.
16. CRITICAL BLOCKERS — none for evidence-gathering
The rev6 registry split resolves all operational ambiguity. Only one residual AMBIGUOUS_FIELD remains (collection_display_name on collection_registry — informational, no goal blocked).
Outstanding decisions for GPT/User (not blockers for this dry-run)
- Nesting decision D1/D2/D3 — depth=2, 3 roots, 83 children, contiguous render_order per publication. Both D1 (preserve) and D2 (flatten) viable on data shape. D2 has smallest blast radius; D1 preserves tree fidelity.
- Species/composition (Phase 5B) — atom: 4 PLAUSIBLE / 20 total; molecule: 4 PLAUSIBLE / 11 total. No existing species is semantically
law_unit. Per Phase 4D, a new species is likely needed. - Provenance JSON structure —
content_profile.source_hashes.tac_v1carrier confirmed (jsonb, currently empty on all 19 target rows). Migration script may write per Phase 4B addendum §7 contract. - Hash recipe divergence (re-confirmed) — IU must recompute
fn_content_hash(body). Source composite hash → JSON provenance only. - collection_display_name AMBIGUOUS (informational) —
namevsname_enon collection_registry. Registry can split intocollection_display_name_primary+collection_display_name_enin a future revision; not blocking.
17. Boundaries honored
- No INSERT — confirmed.
- No UPDATE — confirmed.
- No DELETE — confirmed.
- No DDL — confirmed.
- No migration — confirmed.
- No seed — confirmed.
- No backfill — confirmed.
- No function/trigger patch — confirmed.
- No Directus/Nuxt/Qdrant changes — confirmed.
- No nested/secondary agent dispatch — confirmed.
- No production nesting/species/composition decision — confirmed.
- No deprecated concept names in operational logic — confirmed (registry §0.1 rev6 only).
- No hardcoded column names outside semantic field resolution — confirmed.
- No fuzzy selectors — confirmed.
Phase 5 Dry-Run Report rev6 | Post-Phase5A disambiguation | Full G1–G11 PASS | evidence-only | 2026-05-11