KB-294B

dot-iu-cutter v0.2 — Structural Schema Inventory (12 tables, cutter_governance) (2026-05-16)

7 min read Revision 1
dot-iu-cutterdieu44v0.2inventoryschemacutter_governancecloseout

dot-iu-cutter v0.2 — Structural Schema Inventory

document_path: knowledge/dev/laws/dieu44-trien-khai/v0.2-execution/dot-iu-cutter-v0.2-structural-schema-inventory-2026-05-16.md
revision: r1
date: 2026-05-16
author: Agent (Claude Code CLI, Opus 4.7 1M)
phase: v0.2 — CLOSEOUT inventory (read-only production introspection)
source: live production (container postgres / db directus / sysid 7611578671664259111), 2026-05-16
schema: cutter_governance   |   table_count: 12   |   total_rows: 0

Read-only catalog snapshot of the completed v0.2 structural schema. All 12 tables are EMPTY (0 rows). No mutation performed to produce this inventory.


§1 — Table Inventory (all 12; source phase, columns, rows, PK)

# Table Source phase Cols Rows Empty Primary Key
1 decision_backlog_entry v0.1 6 0 yes (entry_id)
2 dot_pair_signature v0.1 16 0 yes (signature_id)
3 cut_change_set v0.1 24 0 yes (change_set_id)
4 cut_change_set_affected_row v0.1 8 0 yes (affected_row_id)
5 verify_result v0.1 26 0 yes (verify_result_id)
6 canonical_address_alias Phase α 9 0 yes (alias_id)
7 manifest_envelope P0-2 12 0 yes (envelope_id)
8 manifest_unit_block P0-2 13 0 yes (envelope_id, unit_local_id)
9 review_decision P0-6 25 0 yes (review_decision_id)
10 decision_backlog_history P0-5-remainder 9 0 yes (history_id)
11 decision_backlog_dependency P0-5-remainder 6 0 yes (dependency_id)
12 decision_backlog_sweep_log P0-5-remainder 10 0 yes (sweep_id)
source_phase_rollup:
  v0_1: 5 (decision_backlog_entry, dot_pair_signature, cut_change_set,
           cut_change_set_affected_row, verify_result)
  phase_alpha: 1 (canonical_address_alias)
  P0_2: 2 (manifest_envelope, manifest_unit_block)
  P0_6_P0_5_remainder: 4 (review_decision, decision_backlog_history,
           decision_backlog_dependency, decision_backlog_sweep_log)
total_rows_all_tables: 0

§2 — Primary Key Summary

single_column_pk: 11 tables (decision_backlog_entry.entry_id,
  dot_pair_signature.signature_id, cut_change_set.change_set_id,
  cut_change_set_affected_row.affected_row_id, verify_result.verify_result_id,
  canonical_address_alias.alias_id, manifest_envelope.envelope_id,
  review_decision.review_decision_id, decision_backlog_history.history_id,
  decision_backlog_dependency.dependency_id, decision_backlog_sweep_log.sweep_id)
composite_pk: 1 table — manifest_unit_block (envelope_id, unit_local_id)

§3 — Foreign Key Summary (19 in-schema FKs; 0 cross-schema)

total_fk_in_cutter_governance: 19
  pre_existing (v0.1 + P0-2): 12
  added_by_final_batch (P0-6 + P0-5-remainder): 7
cross_schema_fk: 0

Per-table outbound FKs:

dot_pair_signature:
  - prior_signature_id            -> dot_pair_signature(signature_id)        [self]
cut_change_set:
  - decision_backlog_entry_id     -> decision_backlog_entry(entry_id)
  - executor_signature_id         -> dot_pair_signature(signature_id)
  - verifier_signature_id         -> dot_pair_signature(signature_id)
cut_change_set_affected_row:
  - change_set_id                 -> cut_change_set(change_set_id)
verify_result:
  - change_set_id                 -> cut_change_set(change_set_id)
  - escalation_ref                -> decision_backlog_entry(entry_id)
  - executor_signature_id         -> dot_pair_signature(signature_id)
  - prior_verify_result_id        -> verify_result(verify_result_id)         [self]
  - rollback_change_set_id_triggered -> cut_change_set(change_set_id)
  - verifier_signature_id         -> dot_pair_signature(signature_id)
manifest_unit_block:
  - envelope_id                   -> manifest_envelope(envelope_id)
review_decision:                                                            # final batch
  - manifest_id                   -> manifest_envelope(envelope_id)
  - (manifest_id, manifest_unit_local_id) -> manifest_unit_block(envelope_id, unit_local_id)  [composite]
  - prior_review_decision_id      -> review_decision(review_decision_id)     [self]
  - superseded_by_review_decision_id -> review_decision(review_decision_id)  [self]
decision_backlog_history:                                                   # final batch
  - entry_id                      -> decision_backlog_entry(entry_id)
decision_backlog_dependency:                                                # final batch
  - from_entry_id                 -> decision_backlog_entry(entry_id)
  - to_entry_id                   -> decision_backlog_entry(entry_id)
no_outbound_fk: decision_backlog_entry, canonical_address_alias,
  manifest_envelope, decision_backlog_sweep_log
  (decision_backlog_sweep_log uses soft uuid refs by design — no hard FK)

§4 — Empty Status

all_12_tables: 0 rows  (confirmed by exact COUNT(*) on each)
business_data_in_cutter_governance: NONE

§5 — Notes for App / Tooling Integration (informational; NOT authorized work)

- The schema is structurally complete and empty. First writes must come through
  the authorized cutter agent write path (review → command-review → execution),
  NOT ad-hoc INSERT.
- Soft-reference columns (no hard FK) require application-layer integrity:
  decision_backlog_sweep_log (sweep refs), verify_result.escalation_ref is a
  hard FK but the cut_change_set_ref-style soft refs in the backlog family are
  app-enforced. Integration design must specify the enforcing component.
- decision_backlog_entry is the lean canonical entry table (6 cols: entry_id
  uuid, kind, status, payload jsonb, emitted_at, scenario_ref). History /
  dependency / sweep_log hang off it via entry_id (uuid) — there is NO
  decision_id column anywhere (the old name was retired pre-execution).
- review_decision (25 cols) binds to the manifest pair: single FK to
  manifest_envelope plus a composite FK to manifest_unit_block; plus two self
  FKs (prior / superseded) for decision lineage. Lineage writes must set these
  consistently in one transaction.
- manifest_unit_block PK is composite (envelope_id, unit_local_id) — the unit
  addressing key for CUT/VERIFY tooling.
- No DEFAULTs / triggers / CHECK on the 4 final tables: all invariants are
  app/agent-enforced by design (BATCH-1 GPT override = text + documented
  allowed values, no PG enum / no lookup FK). Integration must own validation.
- canonical_address_alias is empty; alias resolution is a runtime concern,
  unauthorized until the canonicalization-library workstream is approved.
- Directus permissions / RLS / read roles are NOT yet configured for these
  tables — required before any UI or API exposure.

End of v0.2 structural schema inventory.

Back to Knowledge Hub knowledge/dev/laws/dieu44-trien-khai/v0.2-execution/dot-iu-cutter-v0.2-structural-schema-inventory-2026-05-16.md