KB-661D

Topic Axis — 01 Live Substrate & SSOT Confirmation

4 min read Revision 1
topic-axislive-substrate2026-06-04

01 — Live Substrate & SSOT Confirmation

All values below are live-verified on 2026-06-04 (query_pg RO + ssh→docker psql). Old reports = evidence; live evidence wins.

Execution channel

  • query_pg RO MCP: working.
  • ssh contabodocker exec postgres psql -U directus -d directus: working. Role directus, rolsuper=f, transaction_read_only=off, owns public tables → can apply additive DDL. Classification: EXECUTION_MODE.
  • Rollback rehearsal proven (BEGIN..ROLLBACK net-zero, see doc 02).

DDL safety gate (critical pre-mutation finding)

Two prod event triggers exist:

  • evt_trigger_guard_ddl (ddl_command_end) → fn_evt_trigger_guard()
  • evt_trigger_guard_drop (sql_drop) → fn_evt_trigger_guard_drop()

Both functions act only on object_type='trigger' (log a row to trigger_guard_alerts + RAISE WARNING). For CREATE TABLE/VIEW/FUNCTION and DROP TABLE/VIEW/FUNCTION they are no-ops. → Additive table/view/function DDL is safe and unlogged.

Taxonomy is birth-gated (why node creation is operator-only)

taxonomy carries 13 triggers, incl: fn_birth_gate (BEFORE), fn_birth_registry_auto ×2 (AFTER → birth row, no retire mechanism = known defect), trg_after_sync_edges_taxonomy (writes universal_edges), gen_code_taxonomy (auto code), fn_validate_dot_origin, fn_description_birth_guard, chk_no_cycle, fn_auto_label_assignment. ⇒ Do not INSERT taxonomy nodes live. Candidate topics held in axis_assignment instead.

Substrate inventory (presence / counts)

Object State
axis_registry was ABSENT → now LIVE (this macro)
axis_assignment was ABSENT → now LIVE (this macro)
axis_node, axis_relation, entity_relations, topic table ABSENT (by design — no island)
taxonomy LIVE; 57 active nodes across facets 1–7; 0 nodes under FAC-08
taxonomy_facets LIVE; FAC-08 = id 9, "Chủ đề nội dung?", active; (FAC-09 id=10 "Tầng kiến trúc?" = next candidate axis)
iu_metadata_tag LIVE; topic:* = 7 keys / 25 assignments / ≤16 IUs (architecture5, knowledge_graph10, dot_trigger3, governance3, workflow2, cut_pipeline1, render_pipeline1)
information_unit 219
knowledge_documents 5,723 (drifted from 5,710 in checkpoint — live wins)
iu_relation 60
universal_edges 2,199 (rich DAG: source/target collection+id+code, edge_type, status, valid_time)
governance_object_ownership LIVE but EMPTY (0 rows) → owner must populate
governance_responsibility_scope, approval_requests, birth_registry, system_issues, event_type_registry LIVE
approval_requests statuses observed: approved/applied/rejected/expired
pivot_definitions 39 rows; engine reads source_object (any relation/view) + jsonb filter/group/metric specs
Topic pivots PIV-310/320..332 ABSENT (only PIV-311 IU + PIV-313 issues exist)

RP integration points (live)

v_registries_pivot_surface (tree-shaped, DAG-unsafe for topics), v_registries_pivot_node_contract, v_rp_aggregate_candidate_register, v_registries_pivot_tree, v_living_lists, v_count_integrity, registry_pin, rp_grouping_policy — all confirmed present. The tree shape is exactly why a DAG-aware companion (v_registries_pivot_axis_surface) was needed (doc 06).

SSOT confirmation

Matches checkpoint checkpoint-information-piece-topic-axis-design-2026-06-03.md on every structural claim. Deltas vs checkpoint: docs 5,710→5,723; governance tables confirmed present (checkpoint already corrected this). No contradiction found.

Back to Knowledge Hub knowledge/dev/reports/architecture/topic-axis-ratify-apply-pilot-populate-surface-automation-bridge-2026-06-04/01-live-substrate-and-ssot-confirmation.md