06 — Topic Operational Workflow (human/AI/KG paths, candidate→active, merge/split, Điều 38/39, design-only, 2026-06-02)
06 — Topic Operational Workflow (Branch F)
Branch F. End-to-end workflow for the topic / content-semantic axis (AX-TOPIC = FAC-08), the most uncertain axis. Topic =
taxonomynodes under facet FAC-08 +axis_assignment(IU↔topic, with confidence/zone) + KG semantic discovery. Not a new island. Verdict: RECOMMENDED. Three entry paths (human / AI / KG) converge on one lifecycle; deterministic structure (Điều 38) anchors content, KG (Điều 39) discovers candidates, governance owns lifecycle/approval/UI/coverage.
06.0 Where topic lives (recap, doc 01/03/04)
- Facet:
taxonomy_facetsFAC-08 "Chủ đề nội dung?" (currentlycardinality='single',max_labels_per_entity=0= defined-but-not-operationalized). - Nodes:
taxonomyrows withfacet_id=FAC-08,status,parent_id/parent_facet(hierarchy),replaced_by(supersession). - Assignment (IU↔topic):
axis_assignment(new, doc 04) withzone∈{approved,candidate,quarantine},match_score,confidence,evidence,provenance,valid_time; legacy rule-labels inentity_labels; IU tags iniu_metadata_tag. - Topic↔topic relations:
taxonomy.parent_id+universal_edges/entity_relations(semantic). - Owner: GOV-KG-SYS (substrate/vocabulary) + GOV-COUNCIL (policy) — to be ratified under SB-2/OP-B.
06.1 The three entry paths (priority-ordered)
Per GPT direction: human-specified topic is highest priority; AI-proposed needs approval before UI-fixed status; KG-assisted stays provisional/AI-facing.
Path A — Human-requested topic (highest authority)
- Human requests a topic (via Directus/UI) →
approval_requests(request_type_code='register_topic_node',proposed_action= the node spec). - A candidate
taxonomyrow is created (status='candidate', FAC-08) — not born yet. - Review = L1/L2 (technical owner or council per scope — doc 02). Human-origin = high trust, but still APR-gated because it changes classification truth.
- On approve → promote (§06.3):
status='active'+ Birth entry + coverage trigger.
Path B — AI-proposed topic
- An agent (Điều 38 Text-as-Code analysis of IU bodies, or clustering) proposes a topic →
approval_requestswithevidence+confidence+provenance(Điều 39 A8: no provenance ⇒ quarantine). - Candidate
taxonomyrow (status='candidate'),axis_assignmentrows inzone='candidate'for the IUs it would tag. - Review via
doc_reviewstwo-gate (AI gate 1 = quality/dup check; human gate 2 = decision) +apr_approvals. AI may propose, never self-enact (Điều 39 Golden Rule). - On approve → promote. On reject → candidate retained for audit (
zone/statusflips to retracted), never silently deleted (NĐ-36-01 temporal).
Path C — KG-assisted dynamic topic (provisional, AI-facing)
- The KG (Điều 39) clusters
universal_edges/iu_relation+ embeddings (Qdrant) and surfaces emergent topics, scored bytrust_score = confidence × freshness_decay × provenance_weight × source_authority. - These live as provisional
taxonomyrows (status='provisional') andaxis_assignment.zone='candidate'— usable for AI retrieval/search, not for the official human UI tree. - A provisional topic is promotable via Path B review when it stabilizes (recurs, high trust, human confirms).
06.2 Topic candidate state
A candidate is taxonomy.status∈{candidate,provisional}. It is:
- governed only as input quality (doc 09) — never a governance orphan;
- visible in AI/search and in a clearly-marked "candidate" UI lane (doc 10), never the official tree;
- carries
confidence/evidence/provenance; below threshold ⇒ stays candidate; missing provenance ⇒ quarantine.
06.3 Promotion to born object
Promotion (candidate/provisional → active/born) is an L3 build (doc 02):
- recorded L2 approval (
register_topic_node); - COMMIT:
taxonomy.status='active'+birth_registryentry + owner assigned (GOV-KG-SYS) + coverage status set (GOV) ; - its
axis_assignmentrows for that topic flipzone='candidate'→'approved'(and reconcile intoentity_labelsfor the topic facet); - it becomes UI-visible (doc 10) and APR-gated for future edits.
06.4 Topic relations
- Hierarchy:
taxonomy.parent_id/parent_facet(broader/narrower), APR-gated, DAG-capable (multi-parent topics allowed). - Semantic (related/synonym/contradiction):
universal_edgesnow;entity_relationswhen built (NĐ-36-01 soft relations: Đồng nghĩa/Bao hàm/Mâu thuẫn). Each carries confidence/provenance/valid_time.
06.5 Topic↔IU assignment
axis_assignment(axis_code='AX-TOPIC', entity_kind='information_unit', entity_ref=canonical_address, node_ref=taxonomy.code, zone, match_score, confidence, evidence, provenance, valid_time). Cardinality bounded by FAC-08 (single today; council may widen to multiple — a data change). match_score (technical) is separated from zone (governance) per NĐ-36-01 §MT4.
06.6 Topic merge / split / deprecate
Topic ontology change = L2 (AI proposes, human chots — NĐ-36-01 §MT8):
- Merge:
iu_merge_set-style record overtaxonomy(merged → source_codes[],change_set_id,idempotency_key, rollback); winner node keeps identity; losersstatus='deprecated',replaced_by=winner; allaxis_assignment.node_refre-pointed (with revision bump, valid_time closed on old). - Split:
iu_split_set-style (source → child_codes[]); assignments re-distributed by review. - Deprecate:
status='deprecated'+replaced_by(never deleted — temporal/audit, NĐ-36-01).
06.7 Wrong-topic / drift detection (quality loops)
Runs as scanner DOTs (doc 09), raising system_issues/KG-quality findings:
- wrong/low-confidence assignment:
axis_assignment.confidence < thresholdorzone='quarantine'. - overlap / duplicate / alias: two topics with near-identical assignment sets or fuzzy-equal names (
pg_trgm); candidate for merge. - too-broad / too-narrow: assignment count vs governed ceilings (
label_rules.skip_wide_warning;max_ungrouped). - drift: topic membership changes over time beyond a bound (KG
kg_quality_log). - contradiction: conflicting semantic edges ⇒ quarantine (Điều 39 A6).
- island: a topic used in UI but not registered/owned ⇒
axis_unregistered/coverage gap (doc 09).
06.8 Owner / approval / governance
- Owner: GOV-KG-SYS (substrate/vocabulary), GOV-COUNCIL (policy/grouping ceilings), GOV-SIV (quality/integrity). Render via GOV-MOUT (interim).
- Approval: all topic mutations route the L0–L4 ladder (doc 02): low-risk auto-tag = L0; routine node edit = L1/L2; merge/split/new-facet = L2; ontology-law change = L4.
- Coverage: active topics are governed objects (doc 09); candidates are input-quality only.
06.9 Search / retrieval
- Active/born topics → human UI tree + Qdrant + KG (full retrieval).
- Provisional/candidate topics → AI-facing retrieval + search only (clearly marked), excluded from official navigation until promoted.
- Vector boundary: one vector/chunk = one IU (charter); topic membership augments retrieval, never replaces IU identity.
06.10 How Điều 38 and Điều 39 participate (division of labor)
| Concern | Owner | Role in topic workflow |
|---|---|---|
| content/topic anchoring from text | Điều 38 (Text-as-Code, metadata L3, iu_metadata_tag, binding) |
derives candidate topic signals deterministically from IU bodies; "máy trước, người sau"; agent proposes, DOT/system confirms |
| semantic discovery & trust | Điều 39 (KG: universal_edges, kg_*) |
clusters/links to surface candidate topics; computes trust_score; quarantines no-provenance; proposes, never self-enacts |
| alias / canonicalization / soft relations | NĐ-36-01 (entity_relations, abbreviation_dict) |
dedup topic names, synonym/subsumption; 3-zone; substrate unbuilt — interim manual/universal_edges |
| vocabulary | Điều 24 (taxonomy, facets) |
the topic node vocabulary itself |
| lifecycle / ownership / approval / UI / coverage / issues | One-Roof Governance (this design) | candidate→active, owner, APR, UI exposure, coverage trigger, quality issues |
* unbuilt (doc 01). Topic determination thus relies on Điều 38 + Điều 39; governance does not try to compute semantic correctness itself — it owns the process (proposal/review/promotion/coverage), exactly as GPT directed.
06.11 Verdict
RECOMMENDED. The topic workflow is fully expressible on existing substrate + the two new tables (axis_registry, axis_assignment): three entry paths, one candidate→provisional→active lifecycle, merge/split/deprecate via existing change-set primitives, quality loops via the scanner, all under the L0–L4 ladder. Topic is an un-activated facet being operationalized, not an island.