KB-37B8
dot-iu-cutter v0.2 — canonical_address Reconciliation Report (2026-05-15)
15 min read Revision 1
dieu44-trien-khaidot-iu-cutterv0.2canonical-addressreconciliationreportplanning-only2026-05-15
dot-iu-cutter v0.2 — canonical_address Reconciliation Report
document_path: knowledge/dev/laws/dieu44-trien-khai/v0.2-planning/dot-iu-cutter-v0.2-canonical-address-reconciliation-report-2026-05-15.md
revision: r1
date: 2026-05-15
author: Agent (Claude Code CLI, Opus 4.7 1M)
sovereign: User / anh Huyên
verifier: GPT (Đ32 HIGH-risk path — anticipated)
secondary: Opus
phase: v0.2 planning — reconciliation report (planning-only, no execution)
predecessors:
- dot-iu-cutter-v0.2-canonical-address-reconciliation-discovery-2026-05-15.md
- dot-iu-cutter-v0.2-canonical-address-reconciliation-options-2026-05-15.md
§1 — Explicit Status
v0_2_planning_started: true
canonical_address_reconciliation_status: pending_gpt_review
mutation_performed: false
ddl_written: false
migration_started: false
production_modified: false
dry_run_env_modified: false
tac_logical_unit_modified: false
cutter_governance_modified: false
CUT_authorized: false
VERIFY_authorized: false
deploy_performed: false
agent_self_advance_to_design: PROHIBITED
§2 — Discovery Summary
inspection_method: read-only psql via ssh + docker exec; no mutation
target_column: public.tac_logical_unit.canonical_address
production_state:
type: text
nullable: NO
default: (none)
ordinal_position: 2 (first-class)
unique_constraint: YES — tac_logical_unit_canonical_address_key (global uniqueness)
index: tac_logical_unit_canonical_address_key (btree UNIQUE)
row_count_in_tac: 86 (all non-null, all distinct)
lifecycle_at_inspection: all 86 rows show lifecycle_status='draft_only'
production_format_syntax: D{doc}-DIEU{N}-{S{seg}|ROOT}[-P{n}][-{n}]
examples: D38-DIEU28-S2-P1, D38-DIEU32-S3, D38-DIEU35-S4-P1-3
documents_present: D38-DIEU28, D38-DIEU32, D38-DIEU35
Đ44 itself NOT in tac_logical_unit yet
v0_1_p0_1_design_proposed_syntax: Đ{N}[ §{path}] example: Đ44 §5.3.1
— DIFFERENT from production
sister_canonical_address_columns (system-wide vocabulary):
public.tac_logical_unit text NOT NULL 86 rows
public.information_unit text NOT NULL 98 rows non-null
public.unit_edit_draft text NOT NULL 13 rows non-null
public.iu_notification_event text NOT NULL (count not separately measured)
public.event_outbox text NOT NULL 44,726 rows non-null ← largest by far
public.event_pending text NOT NULL 0 rows non-null
public.birth_registry text NULLABLE 0 rows non-null
sandbox_tac.logical_unit text (sandbox)
absent_companion_fields (per v0.1 P0-1 design §4):
- canonical_address_format_version
- authority {enacted, draft, runtime}
- birth_gate_class
- address_collision_at
- superseded_by_unit_id
- supersedes_unit_id
- canonical_address_alias table
unverified_in_this_discovery:
- whether identity_profile jsonb on tac_logical_unit already stores authority/format-version-equivalent data
- reader/writer inventory beyond public.fn_event_unread and the canonical_address NOT NULL trigger
- sandbox_tac.logical_unit detailed role
Full evidence: discovery doc §3.
§3 — Recommended Option
recommended_option: D (Hybrid / migration-safe phased)
rationale:
- preserves the existing column unchanged (operationally safest)
- adds authority + format_version + alias in v0.2 Phase α (unblocks P0-2 / P0-4 / P0-6 with full P0-1 design intent)
- defers supersession FKs and birth_gate refinement to bounded Phase β / γ, each with its own dry-run + GPT gate
- avoids the system-wide cutover risk of Option C (would touch 7 tables incl. 44,726 event_outbox rows)
- avoids the design-deferral debt of Option B
- matches the v0.1 governance discipline (per-phase HB equivalents + explicit execution prompts)
fallback_if_GPT_prefers_simpler_path:
Option A — Reuse SSOT (single-shot revision of P0-1 design to adopt production syntax, then add companion fields in one v0.2 cycle).
If GPT chooses A, the only material difference is that all companion fields land in one v0.2 cycle instead of phased.
NOT_recommended:
Option B (defers necessary work without lasting benefit)
Option C (disproportionate cost; HIGH risk to event_outbox; no proportional benefit if a presentation-layer renderer can carry the human-display syntax)
final_selection_authority: GPT review + explicit User selection. Agent recommendation is non-binding.
Full pros/cons/risks/governance/dry-run/compat: options doc §2–§7.
§4 — Blockers Before v0.2 Migration Design
blockers_before_p0_1_design_revision:
- id: BR-1
title: option_selection_pending_gpt_review
description: GPT must select an option (recommendation: D; alt: A). Until then, P0-1 design revision cannot start.
severity: HARD blocker for P0-1 design revision
- id: BR-2
title: identity_profile_jsonb_inspection_required
description: tac_logical_unit.identity_profile jsonb (GIN-indexed) may already store authority/format-version-equivalent data; a read-only inspection of distinct top-level keys + sample values is required BEFORE Phase α DDL is authored, to avoid double-storage.
severity: HARD blocker for P0-1 Phase α DDL authoring (NOT for option selection)
scope: read-only inspection only; no mutation
- id: BR-3
title: reader_writer_inventory_for_canonical_address
description: public.fn_event_unread plus the NOT-NULL trigger plus any application code paths (Nuxt, dot, agent-data) that read or write canonical_address on tac_logical_unit / information_unit / event_outbox / unit_edit_draft must be inventoried. This is needed regardless of option chosen (Option D and A both need the inventory; C requires it acutely).
severity: HARD blocker for P0-1 Phase α DDL authoring
- id: BR-4
title: authority_backfill_rule_design
description: how to derive authority for the 86 existing rows — from lifecycle_status? from doc_code regex? from identity_profile.jsonb? — must be specified BEFORE authority column is added. Đ0-G review of the rule required.
severity: HARD blocker for adding authority column
- id: BR-5
title: dieu24_ratification_of_production_syntax_as_v1
description: Đ24 must ratify the production syntax D{doc}-DIEU{N}-… as v1 of the canonical_address format vocabulary. Without this, format_version stamping has no anchor.
severity: HARD blocker for adding canonical_address_format_version column
- id: BR-6
title: split_merge_metadata_propagation_TD_read_and_absorbed
description: per v0.2 scope backlog §5, the TD at knowledge/dev/laws/dieu44-trien-khai/backlog/td-p1-split-merge-metadata-propagation-gap-2026-05-15.md must be read before P0-2 (manifest_envelope / manifest_unit_block) design starts. P0-2 cites canonical_address per row; reconciliation must align with what the TD recommends.
severity: HARD blocker for P0-2 design start (not for P0-1 reconciliation itself)
- id: BR-7
title: sandbox_tac_logical_unit_clarification
description: sandbox_tac.logical_unit was observed; its role (test fixture? legacy? mirror?) is not documented. Clarify before any reconciliation alters parallel schemas.
severity: SOFT blocker; informational
total_hard_blockers: 6 (BR-1, BR-2, BR-3, BR-4, BR-5, BR-6)
total_soft_blockers: 1 (BR-7)
closure_sequence_recommended:
BR-1 first (option selection unblocks all downstream design work)
BR-2 + BR-3 + BR-7 can be parallel inspections AFTER BR-1
BR-4 + BR-5 sequential after BR-3
BR-6 in parallel with BR-2/BR-3/BR-4/BR-5 but MUST close before P0-2 design starts
§5 — Dependency Impact on Subsequent v0.2 Items
5.1 manifest_envelope (v0.2-D-1)
can_design_proceed_now? NO — blocked by BR-1 (option selection) + BR-6 (split/merge TD)
why:
- P0-2 manifest_unit_block has a field `canonical_address` per row
- the shape of that field (text vs uuid FK; production syntax vs revised syntax) depends on the chosen reconciliation option
- split/merge TD shapes how envelope/unit_block carry propagation metadata
proceed_after: BR-1 + BR-6 close
5.2 manifest_unit_block (v0.2-D-2)
can_design_proceed_now? NO — same as manifest_envelope (BR-1 + BR-6)
why: same; manifest_unit_block is the row-level table that carries canonical_address per row
proceed_after: BR-1 + BR-6 close
5.3 review_decision (v0.2-D-3)
can_design_proceed_now? PARTIAL
why:
- review_decision references manifest_envelope (FK) and decision_backlog_entry (FK to v0.1 live)
- the FK to manifest_envelope means review_decision design cannot finalize until manifest_envelope design finalizes
- review_decision fields that don't depend on address syntax (verdict enum, reviewer_identity, escalation_ref, prior_review_decision_id) CAN be designed in parallel
proceed_after: review_decision skeleton can start now; address-citation fields wait until manifest_* lands
5.4 decision_backlog remainder (v0.2-D-5/D-6/D-7)
can_design_proceed_now? YES (largely independent)
why:
- decision_backlog_history is an append-only history of decision_backlog_entry transitions; no canonical_address dependency
- decision_backlog_dependency is an edge table between decision_backlog_entry rows; no canonical_address dependency
- decision_backlog_sweep_log is a periodic sweep log; minimal address dependency
caveats:
- if backlog entries are emitted referencing canonical_address values in payload jsonb, the payload shape may want to reflect the chosen reconciliation option — but jsonb is permissive enough to absorb either form
proceed_after: can start in parallel with BR-1 resolution; no hard block from BR-1
5.5 canonical_address reconciliation itself (v0.2-D-4)
can_design_proceed_now? NO — IS the work being planned
expected_design_artefact: separate v0.2 P0-1 revised design document (per Option D Phase α specification)
expected_completion_gate: BR-1 + BR-2 + BR-3 + BR-4 + BR-5 close → P0-1 Phase α design authored → GPT review → dry-run cycle authored → HB-equivalent dry-run executed → closure
§6 — Whether v0.2 Can Proceed to the Next Planning Step
proceed_to_next_v0_2_planning_step? CONDITIONAL_YES
condition_for_YES:
- GPT reviews this report (and the discovery + options docs) and selects a reconciliation option (recommendation: D; alt: A)
- GPT (or User) explicitly authorizes the next planning step
if_GPT_selects_OPTION_D:
next_planning_steps_authorized (only after explicit prompt):
step_D_α_1: read-only inspection of tac_logical_unit.identity_profile jsonb to resolve BR-2
step_D_α_2: read-only reader/writer inventory (BR-3) for canonical_address across tac_logical_unit / information_unit / event_outbox / unit_edit_draft / fn_event_unread / triggers / application code
step_D_α_3: Đ24 ratification request for production syntax (BR-5)
step_D_α_4: Đ0-G review request for authority backfill rule (BR-4)
step_D_α_5: read the split/merge TD (BR-6)
step_D_α_6: author P0-1 Phase α revised design document
step_D_α_7: P0-2 / P0-6 design refresh authoring (in parallel after step_D_α_6 lands)
step_D_α_8: P0-5 remainder design (can start in parallel)
step_D_α_9: assemble v0.2 master design document + risk review
step_D_α_10: v0.2 implementation planning (preflight + migration sequence + rollback test plan + dry-run)
step_D_α_11: HB-equivalent dry-run execution
step_D_α_12: blocker closure + final readiness review + command-review package
step_D_α_13: explicit User production execution prompt for v0.2
step_D_α_14: production execution (separate session)
if_GPT_selects_OPTION_A:
similar to Option D but Phase β / γ collapse into the same v0.2 cycle (single-shot revision)
agent_self_advance_at_any_step: PROHIBITED
each_step_terminates_at_GPT_review_or_explicit_user_prompt: TRUE
§7 — Negative Confirmations
no_DDL_written_in_this_planning_chain: TRUE
no_SQL_mutation_in_this_planning_chain: TRUE
no_ALTER_TABLE_in_this_planning_chain: TRUE
no_INSERT_UPDATE_DELETE_in_this_planning_chain: TRUE
no_migration_started: TRUE
no_change_to_tac_logical_unit: TRUE
no_change_to_cutter_governance: TRUE
no_change_to_sister_tables (information_unit, event_outbox, unit_edit_draft, …): TRUE
no_change_to_v0_1_live_schema: TRUE
no_deploy: TRUE
no_CUT_or_VERIFY_run: TRUE
no_dry_run_env_modified: TRUE
no_dry_run_env_torn_down: TRUE
no_design_expansion_beyond_canonical_address_reconciliation: TRUE
no_v0_2_migration_design_started: TRUE
output_form: reconciliation_report_documentation_only
§8 — Cross-References
discovery:
knowledge/dev/laws/dieu44-trien-khai/v0.2-planning/dot-iu-cutter-v0.2-canonical-address-reconciliation-discovery-2026-05-15.md
options:
knowledge/dev/laws/dieu44-trien-khai/v0.2-planning/dot-iu-cutter-v0.2-canonical-address-reconciliation-options-2026-05-15.md
v0_2_scope_backlog:
knowledge/dev/laws/dieu44-trien-khai/planning/dot-iu-cutter-v0.2-scope-backlog-2026-05-15.md
v0_1_production_handoff:
knowledge/dev/laws/dieu44-trien-khai/execution/dot-iu-cutter-v0.1-production-handoff-status-2026-05-15.md
v0_1_p0_1_design (baseline for reconciliation):
knowledge/dev/laws/dieu44-trien-khai/migration-design/dot-iu-cutter-v0.1-p0-1-canonical-address-migration-design-2026-05-15.md
v0_1_p0_schema_planning_package:
knowledge/dev/laws/dieu44-trien-khai/planning/dot-iu-cutter-v0.1-p0-schema-planning-package-2026-05-15.md
v0_1_session_closeout_gpt_review:
knowledge/dev/laws/dieu44-trien-khai/reviews/dot-iu-cutter-v0.1-session-closeout-gpt-review-2026-05-15.md
v0_1_production_execution_gpt_review:
knowledge/dev/laws/dieu44-trien-khai/reviews/dot-iu-cutter-v0.1-production-execution-gpt-review-2026-05-15.md
split_merge_metadata_TD (BR-6 dependency):
knowledge/dev/laws/dieu44-trien-khai/backlog/td-p1-split-merge-metadata-propagation-gap-2026-05-15.md
production_pre_migration_schema_evidence (canonical_address pre-existing):
/opt/incomex/backups/dieu44_exec_2026-05-15/directus_schema_pre_20260515T141429Z.sql sha256 638307fd62d4b1aa087ce7f70f42112c4c6185a2e44d8144a1d859029515668a
§9 — Sign-Off Block
agent (author): Claude Code CLI / Opus 4.7 1M action: read-only discovery + options + report authored
verifier (Đ32 HIGH-risk path): GPT action: review + option selection — PENDING
secondary (record keeping): Opus action: 3 KB files stored in Agent Data — DONE
sovereign (authorizing party): User / anh Huyên action: explicit prompt for any next-step inspection or design — PENDING
End of reconciliation report.