KB-514B

dot-iu-cutter v0.2 — BR-5 canonical-address-v1 Ratification Closure (2026-05-15)

9 min read Revision 1
dieu44-trien-khaidot-iu-cutterv0.2br-5canonical-address-v1ratificationclosureclosed-with-notesdieu242026-05-15

dot-iu-cutter v0.2 — BR-5 canonical-address-v1 Ratification Closure

document_path: knowledge/dev/laws/dieu44-trien-khai/v0.2-planning/dot-iu-cutter-v0.2-br-5-canonical-address-v1-ratification-closure-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)
secondary: Opus
phase: v0.2 planning — BR-5 closure record
mutation_performed: false
ddl_written: false

§1 — Closure Status

BR_5_status: closed_with_notes
closure_basis: GPT review accepted the BR-5 ratification request recommendation on 2026-05-15; d38-v1 explicitly rejected
agent_revision_needed: false
mutation_performed: false
phase_alpha_design_unblocked_from_BR_5_side: true

§2 — Ratified Version Identifier

version_string: canonical-address-v1
short_form_allowed: cav1   (for jsonb / index payloads where size matters)
rejected_alternative: d38-v1   (couples version label to a specific doc id; not future-proof)
binding: the DEFAULT value for public.tac_logical_unit.canonical_address_format_version (when added in Phase α) is 'canonical-address-v1'

§3 — Ratified Grammar

canonical_form (storage layer):
  D{doc}-DIEU{N}-{S{seg}|ROOT}[-P{n}][-{n}]

EBNF (excerpt; full grammar in BR-5 request §5):
  canonical_address    = doc_prefix , "-" , section_prefix , [ "-" , subsegment_chain ] ;
  doc_prefix           = "D" , doc_id ;
  doc_id               = digit , { digit } ;
  section_prefix       = root_marker | numbered_section ;
  root_marker          = "DIEU" , dieu_number , "-" , "ROOT"
                       | section_code_token , "-" , "ROOT" ;
  numbered_section     = "DIEU" , dieu_number , "-" , section_token
                       | section_code_token , "-" , section_token ;
  section_code_token   = uppercase_letter , { uppercase_letter | digit } ;
  section_token        = "S" , digit , { digit } ;
  subsegment           = ("P" , digit , { digit }) | (digit , { digit }) ;
  subsegment_chain     = subsegment , [ "-" , subsegment_chain ] ;

§4 — Storage Rules (ratified)

character_set: ASCII only (no Vietnamese diacritics)
separator: hyphen "-" between tokens
case_sensitivity: case-sensitive; canonical form is UPPER-CASE for doc/section/subsegment tokens
whitespace: NONE (forbidden inside an address)
max_length: not bounded by v1; UNIQUE constraint enforces practical bound
collision_policy_at_storage_layer: DB unique index rejects duplicates
nullability_in_schema: unchanged from current production state (NOT NULL on tac_logical_unit + 5 sister tables; NULL allowed only on birth_registry)

4.1 Validity examples (ratified)

VALID:
  D38-DIEU28-ROOT
  D38-DIEU28-S0
  D38-DIEU28-S10
  D38-DIEU28-S1-P1
  D38-DIEU35-S4-P1-3
  D38-C1A-ROOT
  D38-C1A-S4-P7
  D40-DIEU44-ROOT
  D38-DIEU44-S5

INVALID:
  D38-DIEU28-S2.1        (dot separator — only hyphen allowed)
  Đ44§5.3.1              (Vietnamese diacritic + section sign — ASCII only)
  d38-DIEU28-S2          (lower-case doc prefix)
  D38_DIEU28_S2          (underscore separator)
  D38-DIEU-28-S2         (hyphen between DIEU and number — must concat as DIEU{N})
  D38 DIEU28 S2          (whitespace forbidden)
  D38-DIEU28-            (trailing separator)
  ""                     (empty)
  NULL                   (on NOT-NULL columns)

§5 — Storage / Display Decoupling (ratified)

storage_form_authoritative: D38-DIEU28-S2-P1   (ASCII, v1)
display_form_human_facing: e.g., "Đ28 §2.1"   (i18n; rendered by presentation-layer renderer)
storage_value_NEVER_changes_for_display_purposes: TRUE
display_renderer_responsibility:
  - read canonical_address column
  - parse via the v1 grammar
  - emit the human form for citation surfaces (D11 §4.13 consumer contract)
display_renderer_layer: out of v0.2 P0 scope; expected placement is Nuxt SSR / client (the existing reader per BR-3 §9)
v1_grammar_changes_do_NOT_require_renderer_changes_unless: storage syntax changes substantively (would trigger v1.1 or v2)

§6 — Non-Law Artifact Format (ratified deferral)

non_law_artifact_formats (e.g., design artifacts, code symbols, reports, runbooks):
  status: EXPLICITLY DEFERRED — NOT part of canonical-address-v1
  deferred_to: future Đ24 follow-up
  trigger_for_future_ratification: emergence of a concrete production use-case for storing non-law canonical addresses
  reserved_path: a separate v-NL-1 vocabulary (or v1.1 extension) — to be designed when needed
  v0_2_Phase_α_treatment: do not introduce any non-law form columns or grammar extensions

§7 — Compatibility with Phase α (closure note)

column_to_add_in_phase_alpha: public.tac_logical_unit.canonical_address_format_version
column_type: text
column_nullable_in_phase_alpha: NO (NOT NULL with DEFAULT 'canonical-address-v1')
column_default_at_DDL_add_time: 'canonical-address-v1'
backfill_for_existing_86_rows: AUTOMATIC at column-add time (DEFAULT value applied); no separate UPDATE statement needed
mirror_on_sandbox_tac.logical_unit: SAME — column added with same DEFAULT; 76 sandbox rows get 'canonical-address-v1' at column-add time (per BR-7 Option II)

constraint_on_value: column may carry future version strings (e.g., 'canonical-address-v1.1', 'canonical-address-v2'); v0.2 Phase α does NOT enforce a FK or CHECK constraint on the value — Phase β may add a Đ24-vocabulary FK if a registry table is established

duplicate_storage_in_identity_profile_jsonb_(BR-2_finding):
  - 27 of 86 rows have canonical_address duplicated inside identity_profile
  - cosmetic; out of v0.2 Phase α scope
  - Đ24 ratifies that the canonical_address COLUMN is the authoritative source; jsonb mirror is redundant; cleanup deferred

§8 — Hard Boundaries

no_DDL_written_in_this_closure: TRUE
no_SQL_mutation: TRUE
no_ALTER_TABLE: TRUE
no_INSERT_UPDATE_DELETE: TRUE
no_migration: TRUE
no_change_to_tac_logical_unit: TRUE
no_change_to_sandbox_tac: TRUE
no_change_to_cutter_governance: TRUE
no_change_to_sister_tables: TRUE
no_phase_alpha_design_started: TRUE
no_phase_alpha_DDL_authored: TRUE
no_deploy: TRUE
agent_self_advance_to_phase_alpha: PROHIBITED
output_form: br_5_closure_record_documentation_only

§9 — Status Roll-Up

BR-5_status: closed_with_notes
phase_alpha_design_unblocked_from_BR_5_side: TRUE
phase_alpha_design_unblocked_overall: depends on BR-4 closure (companion file) and a separate explicit prompt
remaining_blockers_after_this_closure (separate scope):
  - BR-6 split/merge metadata propagation TD (blocks P0-2 design only, NOT Phase α DDL)

§10 — Cross-References

br_5_request_source: knowledge/dev/laws/dieu44-trien-khai/v0.2-planning/dot-iu-cutter-v0.2-br-5-dieu24-canonical-address-v1-ratification-request-2026-05-15.md
br_4_5_gpt_review: knowledge/dev/laws/dieu44-trien-khai/reviews/dot-iu-cutter-v0.2-br-4-5-gpt-review-2026-05-15.md
br_4_closure_companion: knowledge/dev/laws/dieu44-trien-khai/v0.2-planning/dot-iu-cutter-v0.2-br-4-authority-backfill-rule-closure-2026-05-15.md
br_4_5_closure_report: knowledge/dev/laws/dieu44-trien-khai/v0.2-planning/dot-iu-cutter-v0.2-br-4-5-closure-report-2026-05-15.md
closure_readiness_predecessor: knowledge/dev/laws/dieu44-trien-khai/v0.2-planning/dot-iu-cutter-v0.2-br-4-5-closure-readiness-report-2026-05-15.md
production_evidence_schema_snapshot (86 + 76 + 98 + 13 + 44726 rows confirm syntax): /opt/incomex/backups/dieu44_exec_2026-05-15/directus_schema_pre_20260515T141429Z.sql  sha256 638307fd62d4b1aa087ce7f70f42112c4c6185a2e44d8144a1d859029515668a
v0_2_scope_backlog: knowledge/dev/laws/dieu44-trien-khai/planning/dot-iu-cutter-v0.2-scope-backlog-2026-05-15.md

§11 — Sign-Off Block

agent (author):                  Claude Code CLI / Opus 4.7 1M    action: BR-5 closure record authored
verifier (Đ32 HIGH-risk path):   GPT                              action: BR-5 review — PASS (recorded in companion review file)
secondary (record keeping):      Opus                              action: closure stored in Agent Data — DONE (this file)
sovereign (authorizing party):   User / anh Huyên                  action: any next-step prompt to authorize Phase α design — PENDING
council_review_status:
  Đ24: ratification recorded via GPT review (accepted: canonical-address-v1; rejected: d38-v1; grammar ratified per §3; non-law artifact deferral per §6); FUTURE Đ24 formal pass only required if grammar revised or non-law extension landed
  Đ32: standard risk class accepted

End of BR-5 canonical-address-v1 ratification closure.

Back to Knowledge Hub knowledge/dev/laws/dieu44-trien-khai/v0.2-planning/dot-iu-cutter-v0.2-br-5-canonical-address-v1-ratification-closure-2026-05-15.md