KB-4CDF

One-Roof Clone Axis/Topic — 03 Topic Axis Seed & Lifecycle (Obj B, PASS)

4 min read Revision 1
one-roofnonprod-cloneaxis-substratetopic-axiscandidate-activelifecycleprovenanceparent-child

03 — Objective B: Topic/Axis Seed & Lifecycle

Verdict: PASS — committed (topic persisted as candidate). SQL: sql/B_topic_axis_seed_lifecycle_clone_COMMIT.sql. 11/11 persisted checks PASS; candidate→active transition proven with visible deltas.

What was seeded

Three axes now exist (responsibility from Objective A, plus):

  • topic (uncertain / label, value_domain topic) — seeded candidate. Four values forming a 2-level hierarchy:
    • governance (root, human-designated), workflow (root, human-designated)
    • ai-ops (parent governance, AI-proposed), registry-kg (parent governance, AI-proposed)
    • coverage rule CR-TOPIC-ASSIGNED: per_assignment, confidence_threshold 0.70, staleness 30d.
    • four candidate assignments with confidence + provenance + assigned_kind ∈ {human, agent}.
  • containment (deterministic / structural, value_domain containment) — 5 group values (GRP-AI/BUSINESS/GOVERNANCE/REGISTRY/WORKFLOW) sourced from collection_registry."group". Demonstrates a third value_domain and the deterministic class (validation, not proposal) — kept candidate, no ownership coverage (deterministic axes don't carry a candidate ownership gap).

Provenance: human-designated vs AI-proposed (both proven)

axis_value.provenance records designated_by ∈ {human,agent}; the 4 topic values split 2 human-rooted / 2 agent-inferred. axis_assignment.assigned_kind likewise carries both human and agent rows. Check 4 & 6 confirmed both designations present — the substrate distinguishes a council-designated topic from a DOT/KG-inferred one, which is the precondition for the promotion gate (human-designated may auto-qualify; AI-proposed must clear confidence + review).

Parent/child topic relation (proven)

axis_value.parent_value_code is a self-FK within an axis. Two children (ai-ops, registry-kg) reference parent governance; the FK rejects a child pointing at a non-existent parent. This is the substrate for the topic tree (doc 07) and the parentage-conflict detector (doc 06).

Candidate → active lifecycle (the transition, measured)

A candidate axis is excluded from active coverage; activating it changes coverage deterministically. Measured live (rollback-only, so the persisted state stays clean):

phase required cells total gap topic gap
topic = candidate 210 0 n/a (excluded)
topic = active 214 4 4
post-revert 210 0

The +4 are exactly the 4 assigned objects (agents, governance_registry, modules, workflows) — each becomes a required cell needing a topic owner the moment the axis goes active. This is the candidate→active gate working end to end: activation is the governed act that makes coverage real, and it is reversible.

Why the persisted state keeps topic as candidate

The seed is committed; the activation was measured then reverted (savepoint), leaving the clean active gap at 0. Activation-with-owners is then done deliberately in Objective C, so the lifecycle is shown as a controlled, owner-backed transition rather than a flip that silently opens a gap. (A subtle correctness note: the activation-measurement result rows were correctly discarded by the savepoint rollback — proving the savepoint isolation works — so the deltas above were captured in a separate clean rollback-only pass for durable evidence.)

Back to Knowledge Hub knowledge/dev/reports/architecture/one-roof-nonprod-clone-axis-topic-substrate-pipeline-2026-06-02/03-topic-axis-seed-and-lifecycle.md