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.