Skip to content

Taxonomy Subtopics

RETIRED — DR-130 (2026-08-05). The platform-global subject vocabulary is retired as a platform-core concept: taxonomy_subtopics is DROPPED in the id-417 DR-130 retirement wave, along with the per-document subject-classification stage and the domain/subtopic filter surfaces. Subject “aboutness” is display-level derived metadata — the driving axes are scope (scope_tag), semantics, and concept membership. If a client ever needs a subject vocabulary it returns as an R6 client-overlay CV in the client bundle. This file is a historic record of the IMS-era vocabulary; nothing below is current.

Subtopic vocabulary that lives one level below taxonomy_domains (CV 01). Forms the second tier of KH’s two-level domain hierarchy, used to refine primary/secondary classification on source_documents (pre-ID-131, this classified content_items; the table has since been dropped — see §Relationships). Like its parent, each subtopic row carries a provenance enum so platform-shipped subtopics can coexist with client-defined ones.

None formalised. Sector-specific subtopics may include acronyms when introduced (e.g. SaaS sub-areas, regulatory schemes) — capture in entity_aliases when ratified.

33 baseline-provenance subtopics shipped in the frontmatter baseline_values above (verified S236 W1 against taxonomy_subtopics; the earlier “31 baseline-provenance” prose figure was a count miss reconciled to the frontmatter shape S237 per Liam ruling). The full list lives in the frontmatter; the planned scripts/seed/baseline-taxonomy-subtopics.sql materialises these rows as a migration-time seed (see Notes — seed-file derivability is deferred to the Q-OQR1-16 combined PR per Liam ruling S237). Subtopics are grouped under the 7 baseline domains in CV 01 and follow the same kebab-case naming convention.

  • taxonomy_subtopics table — DB row source (columns id, name, display_name, domain_id, display_order, provenance, is_active).
  • taxonomy_subtopics.domain_id — FK to taxonomy_domains.id (CV 01).
  • source_documents.primary_subtopiccharacter varying(50) DEFAULT 'unclassified' NOT NULL, referencing taxonomy_subtopics.name. Re-homed off content_items.primary_subtopic at ID-131 M3 (20260628191700_id131_sd_classification_cols); content_items itself was DROPPED at ID-131 M6 (S450 GO) — the table no longer exists on any env.
  • source_documents.secondary_subtopiccharacter varying(50), nullable secondary classification axis (same FK target); added in the same M3 migration.
  • q_a_pairs carries no subtopic column and no record_lifecycle sync. Contrast CV 01’s Finding 2: record_lifecycle carries a domain column with a write-time sync trigger, but there is no equivalent subtopic column on record_lifecycle — Q&A pairs currently have no subtopic-level classification signal at all, derived or direct.
  • classification_disputes — review queue for ambiguous subtopic assignments.
  • Bound to Layer 3 (child of taxonomy_domains in the hierarchy) and Layer 5 (consumed by source_documents + downstream filters).
  • contexts/taxonomy-context.tsx — React context for app-side reads.
  • lib/taxonomy/taxonomy.ts — re-export shim (content types and platforms only — taxonomy subtopics read from the DB context).
  • scripts/generate-taxonomy-snapshot.ts — emits taxonomy_snapshot.json for the Python pipeline.
  • scripts/kb_pipeline/classifier.py — reads taxonomy snapshot for ML subtopic classification.
  • Filter UI: components/browse/filter-panel.tsx chips + app/api/taxonomy/* admin CRUD routes.
  • lib/mcp/tools/content.ts — MCP search/filter input.
  • Classification disputes feed (classification_disputes).
  • Hierarchy is FK-only — no SKOS BT/NT encoding (source §2.3).
  • Granularity governance shared with parent domain — ad-hoc per source §2.3.
  • Per-product subsections (Product Overview, Key Features, etc.) cited as client-extensible examples in Product_KB_Dev_Brief.md §“Sales Playbook Zone”.
  • Total live row count (S236 W1 verification): 57 active subtopics across the 3 provenance values; 33 are baseline-provenance per the frontmatter and ship as the platform default, with the remainder being tenant-specific client rows.
  • Seed-file derivability (Ratified-S237): scripts/seed/baseline-taxonomy-subtopics.sql lands in the Q-OQR1-16 combined PR (alongside application_types introduce, kb_section retire, procurement rename, project_id → workspace_id, digests → change_reports, form_templates rename, provenance enum retrofit). Generator emits the 33 frontmatter rows verbatim — the markdown is the source of truth; the SQL seed is derived. Validates the “markdown as source-of-truth” pattern end-to-end. Out of WP6 scope this session.