KB-3B26

dot-iu-cutter v0.5 — Cut-plan Dry-run & Writer Decision · Writer OD-W1..OD-W9 Rulings Proposal (doc 3)

7 min read Revision 1
dot-iu-cutterv0.5cutplan-dryrun-and-writer-decision-packagewriter-od-rulings-proposalod-w1-w9dieu442026-05-19

dot-iu-cutter v0.5 — Writer OD-W1..OD-W9 Rulings Proposal

doc 3 of 6 · 2026-05-19 · PROPOSALS for GPT/User ratification. Each is the Agent-recommended option + reason; W-3 code-authoring must NOT begin until GPT/User confirms these. Schema/vocab re-verified read-only 2026-05-19 (R-W8 drift check: no drift — 98 IU/0 ICX-CONST; vocab keys law_unit/principle/section/article/law/incomex_council present).

1. Proposed rulings

OD-W1 granularity (NGUYEN_TAC/KIEN_TRUC_SECTION = IU or container):
  PROPOSED: option (a) — emit ALL 60 as information_unit rows.
  reason: keeps cardinality == 60 == pinned manifest candidate_count (invariant I-4),
    preserves the proven reconstruction closure (229+10+69=308), avoids re-pinning the
    accepted identity. Hierarchy is expressed via parent_or_container_ref + section_type,
    not by dropping rows. Options (b)/(c) either lose information or contradict I-4.

OD-W2 DIEU (and all 60) unit_kind:
  PROPOSED: "law_unit" for all 60.
  reason: the internal Incomex Constitution is enacted law; "law_unit" is already in
    dot_config vocab and is the kind of 86/98 existing IU rows. No new vocab seed ⇒ no
    extra production write. A dedicated kind (e.g. constitution_article) would force a
    separately gated vocab seed for zero functional gain.

OD-W3 parent/container representation:
  PROPOSED: parent_or_container_ref (uuid → information_unit.id) by the manifest address
    path; top-level NGUYEN_TAC carry NULL parent; NO synthetic doc-root IU.
  reason: NULL-parent-for-top-level keeps the count exactly 60 (a synthetic root would make
    61 and break I-4). KIEN_TRUC_SECTION are section containers; DIEU point to their owning
    KIEN_TRUC_SECTION (or NULL/top if structurally top-level) per the manifest path.

OD-W4 canonical_address:
  PROPOSED: use the manifest ICX-CONST/<path> VERBATIM; no renumber/normalise/Directus
    re-addressing.
  reason: N-4 invariant; UNIQUE(canonical_address) doubles as the collision guard; the
    cut-plan iu_mapping addresses (ICX-CONST/NT-*, ICX-CONST/DIEU-*) are the canonical set.

OD-W5 idempotency / collision guard:
  PROPOSED: primary guard = pre-existence SELECT on information_unit by the 60
    canonical_address values + manifest_digest binding; hard backstop =
    UNIQUE(canonical_address); identity = the cut-plan OD-1 key
    sha256(canon(source_document_version_id, canonical_address, content_hash)) recorded in
    each row's identity_profile.provenance. A dedicated cut-ledger table is a W-3 design
    choice (recommend reusing the governed cut_change_set/manifest_envelope ledger family
    rather than inventing a new table). G-CUT-ONCE: a pre-existing ICX-CONST set ⇒ no-op.
  reason: gives a deterministic, manifest-digest-keyed, replay-safe write with a DB-level
    backstop; no new schema strictly required for the guard itself.

OD-W6 dot_config vocab:
  PROPOSED: accept the law_unit mapping as-is ⇒ NO vocab seed needed (re-verified present:
    vocab.unit_kind.law_unit, vocab.section_type.{principle,section,article},
    vocab.publication_type.law, vocab.publication_authority.incomex_council). GAP-W3
    closes to a one-line CONFIRMATION precheck in the writer.
  reason: every vocab token the §doc-4 mapping needs already exists; W-2 (gated vocab seed)
    is therefore NOT required unless GPT overrides OD-W2/W1.

OD-W7 signing / credential posture:
  PROPOSED: W-3 first authors a DB-ISOLATED writer + a scratch-schema birth-gate dry-run
    (no production, no credential), proving L1/L2 pass; the cutter_exec/cutter_verify
    credential + real DOT-991/992 signing cycle is built/reviewed SEPARATELY at W-4;
    production CUT only at W-5 with a separate explicit production-write approval.
  reason: lowest-risk ordering; the real signing scheme is the deferred HIGH-risk crypto
    workstream and must not gate proving the mapping/birth-gate correctness.

OD-W8 lifecycle_status / conformance_status:
  PROPOSED: lifecycle_status = "enacted" (scope is enacted_only; all 60 effective_status
    == enacted, confirmed in the cut-plan iu_mapping); conformance_status = "open"
    (matches existing IU convention). GPT to confirm the governance-correct enacted value.
  reason: faithful to the enacted_only scope and consistent with current production rows;
    flagged for governance confirmation since it is a lifecycle semantic, not a code fact.

OD-W9 title / body source:
  PROPOSED: title + body are DETERMINISTICALLY DERIVED by the writer from the pinned
    snapshot region via source_span (body = exact lines line_start..line_end of the
    pinned region; title = the unit heading line). The writer MUST re-hash the body and
    assert sha256(body slice) == candidate.content_hash (== manifest span_sha256) as a
    fail-closed gate. RESOLVED — no missing evidence: the cut-plan iu_mapping carries
    source_span + span_sha256, and the pinned snapshot region (committed fixture, region
    sha 17660443…) + committed dryrun.extract_region make the slice reproducible.
  reason: the manifest/cut-plan intentionally carries identity/spans, not prose; binding
    body to span_sha256 keeps the writer byte-faithful to the accepted snapshot.

2. Missing-evidence check

blocked_by_missing_evidence: NONE.
  - All schema facts (information_unit/unit_version/birth-gate) re-verified read-only.
  - All required vocab tokens re-verified present.
  - title/body derivability resolved via source_span + pinned region (OD-W9).
  - OD-W5 ledger-table location is a DESIGN choice (not missing info) — recommendation given.
note: OD-W8 enacted/open are governance-semantic confirmations (not code unknowns) — the
  only items that benefit from an explicit GPT/User governance nod; they do not block W-3
  scaffolding, only the final lifecycle value baked into the writer.

3. Net effect if all PROPOSED rulings are accepted

- writer maps 60 cut-plan rows → 60 information_unit (unit_kind=law_unit) + 60 unit_version,
  verbatim canonical_address, NULL-parent top-level (count stays 60), enacted/open,
  identity_profile vocab all pre-seeded, body byte-bound to span_sha256;
- NO new vocab seed, NO new table strictly required, NO production write in W-3;
- W-2 (gated vocab seed) becomes UNNECESSARY ⇒ writer track shortens to W-1→W-3→W-4→W-5.

doc 3 of 6. Proposal only. No production mutation. Self-advance PROHIBITED.

Back to Knowledge Hub knowledge/dev/laws/dieu44-trien-khai/v0.5-cutplan-dryrun-and-writer-decision-package/dot-iu-cutter-v0.5-writer-od-rulings-proposal-2026-05-19.md