04 — Topic Axis Governance, Birth & Lifecycle (Workstream B)
04 — Topic Axis Governance, Birth & Lifecycle (Workstream B)
Goal: make a topic node a born, governed object with a real approval/lifecycle, and define who approves what — without faking governance and without auto-promoting AI proposals.
Lifecycle states (reuse taxonomy.status + replaced_by)
Unify on the open-axis lifecycle, encoded in the live taxonomy columns:
candidate → provisional → active → (merged | split) → deprecated → retired/rejected
| State | taxonomy.status value |
Meaning | Who sets it |
|---|---|---|---|
| candidate | candidate |
proposed topic (e.g. reconciled from a topic:* tag or KG/Điều-39 proposal); counts but is NOT a Layer-1 root |
DOT/AI proposal |
| provisional | provisional |
accepted for trial; visible, low trust | topic policy owner |
| active | active |
approved root/child; appears as Layer-1/Layer-N | APR-gated approval |
| merged / split | replaced_by set |
reorganized; old node points to survivor | APR-gated |
| deprecated | deprecated |
retiring; hidden from new assignment | topic policy owner |
| retired/rejected | retired / rejected |
gone; assignments must be re-homed | APR-gated |
Golden rule (Điều 39): the knowledge graph / AI proposes only, never auto-mutates. A KG- or AI-suggested topic enters as candidate and can never become active without human approval. This macro itself honors it: the 7 live topic:* tags become candidate FAC-08 nodes on reconciliation — none is promoted to an approved root in this session (Forbidden #6).
Three-zone discipline (uncertain axis)
Topic (FAC-08) is an uncertain / semantic axis (vs deterministic structural axes like containment/reconstruction). It therefore runs Approved / Candidate / Quarantine zones, and assignments carry confidence + provenance (iu_metadata_tag.confidence, enrichment_source; future axis_assignment.evidence). "Provenance-or-quarantine": an assignment with no provenance is quarantined, not counted as truth.
Ownership (reuse live governance_object_ownership + governance_responsibility_scope)
The 2026-06-01 docs assumed these tables were unbuilt; they are live, so topic ownership is bound relationally (no owner_gov_code column on taxonomy — that anti-pattern is forbidden by the unified governance model). Recommended owner map (council to ratify under SB-2 / Điều 37), per scope:
| Scope | Owner | Responsibility |
|---|---|---|
| Policy (vocabulary, grouping, which roots) | GOV-COUNCIL | approves root topics & grouping ceilings |
| Substrate / vocabulary (taxonomy, KG edges, vector) | GOV-KG-SYS | maintains FAC-08 nodes, universal_edges |
| Health / integrity / coverage | GOV-SIV | orphan/phantom topic detection, coverage |
| Execution (DOT scan/propose/apply) | GOV-DOT | the topic coverage-DOT lifecycle |
| Render (Registries-Pivot display) | GOV-MOUT (interim COUNCIL delegation) | the surface; computes no truth |
| Family law | GOV-NRM-SYS | the law text under Điều 24/37/38 |
Owner-link inheritance (M-DEF-7): an axis's policy owner inherits down the topic tree; risk links (who may edit vocab, approve a merge/split, the issue path) are computed per node and never inherited (anti-hiding).
Who approves what (answer to macro Q within §5)
- Approve a root topic (Layer-1 node) → GOV-COUNCIL via
approval_requests(Điều 32), typeschema_add/rule_change, risk medium+ ⇒ ≥1 president / council_review. Structural (new facet) = council_review. - Approve a child topic → topic policy owner (delegated by COUNCIL) via
approval_requests, lighter risk tier. - AI / Điều-39 proposal → candidate → automatic insert as candidate only; promotion to active is a separate APR.
Note (honest gap): IU today is an island — approval_requests has 0 rows ever referencing IU, and IU carries no governance owner. Topic governance must therefore be stood up, not assumed; the substrate (ownership + approval tables) is live, but the rows (owner assignments, approval records for FAC-08) do not yet exist. That is the owner-ratification blocker (doc 09).
Birth (reuse birth_registry)
A topic node is a born/governed object: on creation it gets a birth_registry entry (like any object). Before birth it is a birth-orphan (existing detector). A topic relation (universal_edges within FAC-08) is also a governed relation; whether each edge births separately or is covered by node birth is an owner decision (recommend: node births; edge is governed by edge-type registration + lifecycle, not per-edge birth, to avoid edge-birth explosion — consistent with prior RP findings on birth grain).
Grouping policy (governed rows, never literals)
Topic grouping uses the live rp_grouping_policy (default threshold 50) + Điều 24 §5.4 Scored-Union-Top-N per facet. When a topic node's child_count exceeds the governed ceiling → emit CLASSIFICATION_REQUIRED / NEEDS_GROUPING (not paginate). The ceiling is a row, owner = GOV-COUNCIL; the "50" is never hardcoded.
What is NOT done here (forbidden, honored)
- No FAC-08 nodes inserted live; no
topic:*tag promoted to active root; no owner rows written; no approval faked. This doc defines the lifecycle; enacting it is owner-gated (doc 09 next macro).
Workstream B (governance) completion: topic governance/birth/lifecycle is fully defined on live substrate, with the Điều-39 no-auto-promote rule structurally enforced.