KB-630E

15000x · 02 — Productization Gap Matrix (9 capabilities LIVE_READY + 8 GAPs G1..G8 + 1 ruled-out G9; sidecar > column-add)

4 min read Revision 1
iu-corev0.615000xgap-matrixproductizationsidecar-designlive-discovery

15000x · 02 — Productization Gap Matrix

Method

Live discovery first (per 12000x lesson L1: "the substrate is usually already shipped"). Surveyed:

  • pg_proc for fn_iu_collection_*, fn_iu_compose*, *template*, *catalog*, *product*
  • information_schema.tables for *template*, *product*, *catalog*, *registry*
  • dot_iu_command_catalog for product-factory commands
  • iu_piece_collection, iu_piece_membership schemas — look for is_template / lineage columns
  • design_templates and collection_registry (the only existing "template"/"registry" tables) — verify out-of-scope

Live findings

Already LIVE_READY (no work needed)

Capability Lives where
Piece-collection compose (mint+attach) fn_iu_compose
Piece-collection lifecycle CRUD fn_iu_collection_create / add_piece / remove_piece / reorder_piece
Manifest digest fn_iu_collection_manifest_refresh
Render / validate fn_iu_collection_render / fn_iu_collection_validate
Healthcheck fn_iu_collection_healthcheck + 8-surface Python wrapper
DOT entrypoints (compose) dot_iu_create_workflow_from_steps, dot_iu_create_file_from_pieces
Piece lifecycle (gov-bound) dot_iu_supersede_piece / split / merge (10000x)
Event runtime (gated) fn_iu_piece_emit_event + lifecycle trigger (11000x)
Template+Instance mechanism fn_iu_compose iu_id-reuse branch (12000x Phase F proven)
Text-as-code roundtrip cutter_agent/iu_core/text_as_code.py (12000x proven)

GAPs to close in 15000x

# Gap Severity Resolution
G1 No durable is_template marker High Migration 031 sidecar iu_collection_template_registry
G2 No durable template→instance lineage record High Migration 031 sidecar iu_collection_template_instance_lineage
G3 No product-template view Med v_iu_product_template
G4 No lineage view Med v_iu_product_template_instance with digest-match flag
G5 No operator-grade DOT for register-as-template Med dot_iu_register_template
G6 No operator-grade DOT for record-instance-lineage Med dot_iu_record_template_instance
G7 No consolidated operator runbook High OPERATOR_RUNBOOK.md
G8 No durable productized templates High Compose + mark 2 templates; 1 instance
G9 design_templates table — IU Core registry? (resolved) Out of scope: UI/component template table for Directus design system

Design decision — sidecar, not column-add

Option Pros Cons
A — add columns to iu_piece_collection Single-table queries; direct FK 9+ live callers; harder rollback
B — sidecar tables Zero blast radius; fail-closed rollback; FK keeps integrity Two-step query — mitigated by views

Decision: B (sidecar). Migration 031.

What this macro does NOT productize

  • Template versioning column — collection_key suffix convention sufficient
  • Template ACLs — iu_piece_collection has no ACL model
  • Cross-tenant templates — no tenancy model
  • Bulk export — text-as-code handles single; bulk is 16000x
  • Auto-instantiate from event — belongs in event-runtime productization

Validation

After migration 031: runtime/110 D9 PASS at 169 (27+26+61+6+12+21+16). D8_unregistered = 0 rows.

Back to Knowledge Hub knowledge/dev/laws/dieu44-trien-khai/v0.6-iu-core-15000x-productization-operator-ops-closeout-open-goal/02-productization-gap-matrix.md