dot-iu-cutter v0.1 — X-A source_span ↔ axis_1_drift_unit Ratification Closure
dot-iu-cutter v0.1 — X-A source_span ↔ axis_1_drift_unit Ratification Closure
Date: 2026-05-15 Status: X-A RATIFICATION CLOSURE —
closed_with_notesTrigger: GPT review of Đ32 P0 Risk Review Package returnedPASS(2026-05-15). GPT chốt X-A theo recommendation trong Cross-Cutting Decision Register §3.1 (option_4). User authorized this ratification closure as the single design-level blocker to opening implementation planning per Đ32 Risk Review Report §10. Scope: RATIFICATION DOCUMENTATION ONLY. No code, no DDL, no SQL, no migration, no PG mutation, no Qdrant/vector mutation, no implementation planning, no implementation execution.
1. Problem Statement
The cutter's MARK stage records each cut unit's source_span on manifest_unit_block (P0-2 §4 + §9 item 4). The VERIFY stage measures axis-1 round-trip drift on verify_result using axis_1_drift_count under axis_1_drift_unit (P0-4 §4.1 + §6). If MARK-span semantics and VERIFY-drift semantics use mismatched units, round-trip equality cannot be evaluated consistently — drift detection becomes systematically wrong, and PASS/FAIL on axis-1 loses meaning.
problem_id: X-A
problem_title: source_span unit on P0-2 manifest_unit_block must align with axis_1_drift_unit on P0-4 verify_result
affected_p0_items: [P0-2, P0-4]
classification_prior_to_ratification: design-level blocker for opening implementation planning
authority_for_ratification: Đ24 vocabulary owner + Đ44 family registry custodian (joint); Đ32 reviews residual risk
sources:
- risk-review/dot-iu-cutter-v0.1-p0-cross-cutting-decision-register-2026-05-15.md §3.1
- risk-review/dot-iu-cutter-v0.1-dieu32-p0-risk-review-report-2026-05-15.md §7.1, §8, §10
- reviews/dot-iu-cutter-v0.1-dieu32-p0-risk-review-package-gpt-review-2026-05-15.md (PASS)
- migration-design/dot-iu-cutter-v0.1-p0-2-manifest-envelope-unit-block-migration-design-2026-05-15.md §9 item 4
- migration-design/dot-iu-cutter-v0.1-p0-4-verify-result-migration-design-2026-05-15.md §6 + §12 item 1
2. Selected Option
Per Cross-Cutting Decision Register §3.1, option_4 is the recommended option and GPT has ratified it.
selected_option: option_4
selected_option_name: byte_span_canonical_token_drift_with_conversion
selected_option_description: source_span = byte offsets (precise span); axis_1_drift_unit = canonical_token; canonicalization rule maps byte spans → canonical_token positions during drift calculation
rationale:
- precise byte spans preserved on manifest_unit_block (lossless reference into source revision)
- canonical_token chosen for drift measurement (semantic comparison; collapses CRLF/whitespace/BOM)
- explicit conversion makes the dependency on the canonicalization rule visible at the schema level
- matches P0-4 §6 recommendation and Cross-Cutting Decision Register §3.1 recommendation
options_rejected:
- option_1 byte_for_both: trivial encoding differences inflate drift; not appropriate for cutter's markdown
- option_2 line_for_both: misses sub-line drift; CRLF normalization needed
- option_3 canonical_token_for_both: loses precise span retention for editor tooling
3. Binding Decision
The following bindings are now established at design level. They are logical bindings, not DDL.
3.1 source_span semantics on P0-2 manifest_unit_block
source_span_start: byte offset into the source revision (inclusive)
source_span_end: byte offset into the source revision (exclusive)
encoding_assumption: UTF-8 byte-counted offsets unless source revision metadata declares otherwise
source_revision_reference: source_revision field on manifest_envelope determines the byte-stream identity
nullability_policy: source_span_start and source_span_end NOT NULL when the block references a positioned region; nullable allowed only for synthetic blocks without source positions
binding_authority_for_unit: Đ24 vocab owner (drift unit family) + Đ44 family registry custodian (cross-family alignment)
3.2 axis_1_drift_unit on P0-4 verify_result
axis_1_drift_unit_value: canonical_token
axis_1_drift_unit_alternatives_v0_1: not_applicable for v0.1 default
axis_1_drift_unit_field_remains_an_enum: true (enum allows future source_kind specialization without schema change)
axis_1_drift_unit_default_v0_1: canonical_token (per this ratification)
binding_authority_for_unit: Đ24 vocab owner; cross-checked against Đ44 family ratifier
3.3 VERIFY conversion requirement
conversion_required: true
conversion_basis: canonicalization_rule_v0.1
conversion_direction_at_verify_time:
step_1: load source revision bytes referenced by manifest_envelope.source_revision
step_2: apply canonicalization_rule_v0.1 to obtain canonical_token stream
step_3: map each byte_span (source_span_start, source_span_end) to its corresponding canonical_token position range
step_4: compare against re-emitted unit content (also canonicalized via the same rule) at canonical_token granularity
step_5: record axis_1_drift_count under axis_1_drift_unit=canonical_token
canonicalization_rule_used_field_on_verify_result: REQUIRED — records which rule version was applied (per P0-4 §14 anti-ghost-drift mitigation)
verify_must_record_byte_to_token_mapping_at_per_unit_breakdown_level: true (axis_1_drift_details JSONB carries per-unit byte-span → token-position mapping for audit)
binding_authority_for_conversion: Đ24 vocab owner (canonicalization rule path) + Đ32 (residual risk acceptance)
3.4 canonicalization_rule_v0.1 placeholder
canonicalization_rule_v0.1_placeholder:
scope: markdown source_kind only (v0.1 default)
steps:
- NFC unicode normalization
- LF line endings (normalize CR/CRLF to LF)
- trailing whitespace trim (per line)
rule_identity_recorded_with_verify_result: true (canonicalization_rule_used field on verify_result captures the rule version)
rule_changes_mid_cycle: prohibited; rule changes require D4 capability intake + Đ24 ratification
binding_authority_for_placeholder: Đ24 vocab owner (placeholder accepted here; full prose Đ24 ratification path remains X-7)
3.5 Future-capability boundaries (NOT v0.1)
ast_based_drift:
status: deferred to FUTURE source_kind capability intake
scope_when_introduced: code artifacts, structured documents
channel: D4 capability intake + Đ24 ratification + Đ32 risk review
v0.1_treatment: axis_1_status='not_applicable' for source_kind=code v0.1
byte_level_drift_for_binary_or_special_source_kind:
status: FUTURE capability; not v0.1 default
scope_when_introduced: binary artifacts; canonicalization-resistant source_kind
channel: D4 capability intake + Đ32 risk review
v0.1_treatment: out_of_scope (binary artifacts not in cutter v0.1 coverage)
no_other_drift_unit_introduced_by_this_ratification: true
4. Authority
authority_chain:
drift_unit_vocabulary_path:
authority: Đ24 vocabulary owner
decision: ratifies axis_1_drift_unit=canonical_token as the v0.1 default value and axis_1_drift_unit enum membership {byte, line, ast_node, canonical_token} per P0-4 §6
status: ratified
cross_family_alignment:
authority: Đ44 family registry custodian
decision: accepts cross-family alignment between manifest_unit_block (P0-2 family) and verify_result (P0-4 family) — byte_span on P0-2, canonical_token drift on P0-4, conversion via canonicalization_rule_v0.1
status: accepted
residual_risk_acceptance:
authority: Đ32 (HIGH-risk path; carried from Đ32 P0 Risk Review §5 + §7.1)
decision: accepts residual risk under approve_with_notes posture; residual risk = canonicalization rule v0.1 placeholder (prose ratification remains X-7) + application-layer enforcement of byte→token conversion v0.1 (PG enforcement FUTURE)
status: approve_with_notes
co_signers_for_record:
- Đ24 vocab owner — drift unit vocabulary + canonicalization rule v0.1 placeholder acceptance
- Đ44 family registry custodian — cross-family alignment acceptance
- Đ32 — residual risk acceptance under approve_with_notes
authority_completed_via: GPT review PASS (2026-05-15) on Đ32 P0 Risk Review Package + GPT explicit chốt of option_4 per Cross-Cutting Decision Register §3.1
5. Gate Effect
X_A_status: closed_with_notes
notes_carried_forward:
- canonicalization_rule_v0.1 is a placeholder ratified by Đ24 here; full prose ratification of the rule remains under X-7 (planning-level; cross-link Đ24 ratification path)
- byte → canonical_token conversion is application-layer at v0.1; PG-constraint enforcement FUTURE
- axis_1_drift_unit enum extension for ast_node and byte source_kinds remains FUTURE capability per D4 intake
- canonicalization_rule_used field on verify_result MUST be populated on every verify_result row to preserve historical interpretability
implementation_planning_gate_status: OPEN_PENDING_EXPLICIT_PROMPT_APPROVAL
implementation_planning_gate_open_reasoning:
- X-A was the sole design-level blocker per Đ32 Risk Review Report §8
- X-A is now closed_with_notes
- opening the implementation planning phase still requires an explicit user prompt approval (separate prompt, similar pattern to the P0 Migration Design phase prompt)
implementation_allowed: false
implementation_execution_allowed: false
6. Remaining Planning-Level Decisions (carried into Implementation Planning)
X-A closure does NOT close the remaining planning-level cross-cutting decisions. They are carried INTO the implementation planning phase plate, not blockers to its opening.
planning_level_cross_cutting_carryover:
- id: X-1
title: schema placement (TAC vs new schema class for governance/manifest family)
recommended_in_register: new schema class for governance/manifest family
owner: Đ44 + Đ33/Đ43
- id: X-2
title: primary ID form (uuid + human aliases vs bigserial vs deterministic text)
recommended_in_register: uuid + human aliases on user-facing fields
owner: Đ44 family registry custodian
- id: X-3
title: JSONB validation policy
recommended_in_register: application-layer v0.1; PG jsonb_check FUTURE
owner: Đ44 + Đ24
- id: X-4
title: enum implementation strategy
recommended_in_register: Đ24 lookup FK
owner: Đ24 + Đ44
- id: X-6
title: dot_pair_signature shape final polish
recommended_in_register: shared table with signature_kind enum + cross-reference FKs (designed in P0-3 §4.3)
owner: G-4 DOT Registry Custodian + Đ44
- id: X-7
title: canonicalization rule prose ratification
recommended_in_register: full prose ratification via Đ24 path; v0.1 placeholder accepted (and bound here by this X-A ratification for purposes of byte→token conversion)
owner: Đ24 vocab owner + Đ44 family ratifier
- id: X-8
title: rollback test plan authoring
recommended_in_register: plan authored during planning; dry-run executed before migration execution
owner: G-4 DOT Registry Custodian + Đ32 (HIGH-risk path)
execution_level_blockers_unchanged_by_this_ratification:
- X-7 canonicalization rule v0.1 prose ratified by Đ24 (execution-level subset)
- X-8 rollback test plan dry-run executed (execution-level subset)
- operational seat naming for G-1..G-5
- G-3 D4 capability intake (executor/verifier boundary policy)
- DOT-pair (dot-iu-cutter + dot-iu-cutter-verify) registered via G-4 Custodian
- signing scheme implementation (v0.1 hash-based; FUTURE cryptographic)
- dot_pair_drift / signature_failure signal routing wired to G-2 backlog
- canonicalization rule library scaffolding (v0.1)
- directus backup before migration
- final risk review signature
7. Cross-References Updated by This Ratification
The following references are now bound. They are recorded here in this ratification file; prior files (per-item designs, risk-review files, cross-cutting register) are NOT modified.
binding_references:
- P0-2 §9 item 4 (source_span unit open decision): bound to byte offsets per §3.1 above
- P0-4 §6 + §12 item 1 (axis_1_drift_unit open decision): bound to canonical_token per §3.2 above
- P0-4 §6 (conversion logic): bound to canonicalization_rule_v0.1 placeholder per §3.3 + §3.4 above
- Cross-Cutting Register X-A §3.1 option_4: ratified per §2 above
- Đ32 Risk Review Report §7.1 design-level blocker: closed_with_notes per §5 above
derived_field_obligations_for_planning_phase_to_consume:
- P0-2: source_span_start, source_span_end are byte-offset integers (logical type-class confirmed)
- P0-4: axis_1_drift_unit enum default value is `canonical_token`; canonicalization_rule_used is a REQUIRED field
- cross-cutting X-7 has a placeholder rule accepted here for v0.1 byte→token conversion; full prose ratification still owed by Đ24
8. Hard Boundaries Confirmation
no_code_written: true
no_ddl_written: true
no_sql_written: true
no_create_table_statements_written: true
no_alter_table_statements_written: true
no_column_ddl_written: true
no_index_ddl_written: true
no_constraint_ddl_written: true
no_trigger_function_or_rls_policy_written: true
no_migration_script_written: true
no_migration_executed: true
no_pg_mutation: true
no_qdrant_mutation: true
no_directus_mutation: true
no_data_writes: true
no_implementation_planning_started: true
no_implementation_execution: true
no_previous_phase_file_modified: true
no_migration_design_file_modified: true (8 migration-design files unchanged)
no_risk_review_file_modified: true (5 risk-review files unchanged)
no_design_planning_closure_ratification_review_file_modified: true (all prior governance files unchanged)
no_canonicalization_rule_full_prose_authored_in_this_document: true (v0.1 placeholder bound here for byte→token conversion only; full prose ratification remains X-7 / Đ24 path)
output_form: ratification_closure_documentation_in_markdown_only
9. Status
ratification_file_status: COMPLETE
X_A_status: closed_with_notes
implementation_planning_gate_status: OPEN_PENDING_EXPLICIT_PROMPT_APPROVAL
implementation_allowed: false
implementation_execution_allowed: false
remaining_planning_level_blockers: 7 (X-1, X-2, X-3, X-4, X-6, X-7, X-8) carried into planning phase plate
execution_level_blockers_unchanged: yes
next_step (NOT executed by Agent):
- explicit user prompt approval to open implementation planning phase (separate prompt)
- or further GPT review of this ratification closure if user routes that way