KB-4A2A

RP UI Axis — 05 Taxonomy Node Rehearsal & Operator Apply Packet

5 min read Revision 1
topic-axistaxonomyrehearsalbirthoperator-packet2026-06-04

05 — Taxonomy Node Creation: Rollback Rehearsal & Operator Apply Packet (Workstream D)

Status: REHEARSED (BEGIN..ROLLBACK, net-zero proven 3×). Not committed. Apply order packaged.

Triggers on taxonomy (13, live-verified)

birth_trigger_taxonomy + trg_birth_taxonomy (both fn_birth_registry_auto), trg_before_birth_gate_taxonomy (fn_birth_gate), trg_after_sync_edges_taxonomy (trg_sync_edges_taxonomy), trg_auto_code_taxonomy (gen_code_taxonomy), trg_taxonomy_fill_parent_facet, trg_taxonomy_no_cycle (chk_no_cycle), trg_taxonomy_replaced_by, trg_desc_guard_taxonomy, trg_desc_provenance_taxonomy, trg_label_assign_taxonomy, trg_validate_dot_origin_taxonomy. (trg_count_taxonomy disabled.)

Rehearsal results (each inside BEGIN..ROLLBACK; all rolled back; net-zero confirmed via independent RO query)

Probe A — fresh unique name topic_rehearsal_probe, facet 9, root:

  • taxonomy: +1 → LBL-509 (facet_id 9, parent_id null, depth 0, status active). code auto-generated by gen_code_taxonomy (generic LBL- prefix).
  • universal_edges: +2, both is_auto_managed=true: taxonomy:LBL-509 -BELONGS_TO-> taxonomy_facets:FAC-08 and taxonomy_facets:FAC-08 -CONTAINS-> taxonomy:LBL-509.
  • birth_registry: +3 → universal_edges::3756, universal_edges::3757 (species governance_infra/atom/observed/born), entity_labels::900085 (junction_table/atom/excluded/born).

Probe B — name knowledge_graph, facet 9, root:

  • taxonomy: +1 → LBL-510. universal_edges: +2 (LBL-510 ↔ FAC-08). birth_registry: +5 (2 extra births vs Probe A).
  • The birth-gate fired an advisory WARNING ("Tên 'knowledge_graph' đã tồn tại" once it had inserted) — the gate is warning-only, not blocking.

Key findings

  1. Reversible in-transaction: net-zero proven 3 times (taxonomy 58 / births 1,152,860 / edges 2,199 before and after every rollback; fac08 nodes 0).
  2. Side-effect anatomy per node: +1 taxonomy, +2 auto-managed node↔facet edges, +3 to +5 unretirable births.
  3. Birth amplification is name-dependent: a label already used elsewhere in the system (e.g. knowledge_graph, a heavily-used tag) spawns extra junction/label births (5) vs a fresh name (3). ⇒ each candidate MUST be dry-run individually before commit.
  4. Births are unretirable (no retire mechanism system-wide) → committing a node is a one-way door.
  5. Code is generic LBL-NNN, not topic-prefixed → axis_assignment promotion (Packet 4) is an explicit remap.
  6. Birth gate is advisory (warning), so name collisions are allowed but flagged — owner must resolve naming.

Why NOT committed here

Forbidden by macro and by prudence: creating live taxonomy nodes requires (a) GOV-COUNCIL FAC-08 root approval (Packet 2), (b) owner authorisation for unretirable births (Packet 3). No engineering blocker — purely governance.

Operator apply order (per APPROVED node — run one node at a time)

-- 0. Confirm approval ref exists (Packet 2 + Packet 3 signed).
-- 1. DRY RUN this exact node:
BEGIN;
  INSERT INTO taxonomy (name, facet_id, parent_id, status, _dot_origin)
  VALUES ('<approved_label>', 9, <parent_id_or_NULL>, 'active', 'GOV:<approval-code>');
  -- inspect: SELECT * FROM taxonomy WHERE id>... ; edges WHERE id>... ; birth_registry WHERE id>...
  -- confirm: +1 taxonomy, +2 edges, +N births, no unexpected second taxonomy row.
ROLLBACK;            -- verify net-zero
-- 2. If clean, re-run identical block with COMMIT instead of ROLLBACK. Record new LBL-NNN.
-- 3. (children/edges) add taxonomy.parent_id or universal_edges (broader/narrower/related) per approved hierarchy.
-- 4. Promote assignments (Packet 4):
     UPDATE axis_assignment SET node_code='LBL-NNN', status='active',
            approved_by='<owner>', approval_ref='<code>'
      WHERE node_code='TOPIC-CAND:<approved_label>';
-- 5. Activate axis (Packet 1) once ≥1 root approved:
     UPDATE axis_registry SET status='ACTIVE', approval_ref='<code>' WHERE axis_code='AX-TOPIC';
-- 6. Verify axis surface: node shows governance_status=TAXONOMY_BACKED, lifecycle from taxonomy.status.
-- 7. Verify decision queue drains: gov_council_decision_needed=false for that node.

Suggested ordering across nodes

knowledge_graph → architecture (strong) first; dot_trigger, governance after GOV review; cut_pipeline/render_pipeline only after the pipeline parent decision; workflow deferred unless GOV approves at weak evidence.

Forbidden compliance

No taxonomy node committed. No trigger disabled. No birth bypass. No fake active root. Rehearsal-only, rolled back, net-zero proven.

Back to Knowledge Hub knowledge/dev/reports/architecture/rp-ui-consume-axis-surface-decision-queue-automation-handoff-2026-06-04/05-taxonomy-node-rehearsal-or-operator-packet.md