Skip to content

Taxonomy Domains

RETIRED — DR-130 (2026-08-05). The platform-global subject vocabulary is retired as a platform-core concept: taxonomy_domains 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.

Top-level domain vocabulary used to classify source_documents along the primary/secondary classification axis (pre-ID-131, this classified content_items; the table has since been dropped — see §Relationships). Domains anchor the platform’s two-level hierarchy with taxonomy_subtopics (CV 02) as children. Each row carries a provenance enum (baseline / client / recommended) so the platform can ship sensible defaults while letting clients extend without code changes — this is the precedent that all hybrid CVs in KH mirror.

None formalised. Sector-intelligence shorthand may use sector codes — to be captured in entity_aliases (CV 18) when defined.

keylabelprovenance
securitySecuritycore
complianceCompliancecore
implementationImplementationcore
supportSupportcore
corporateCorporatecore
product-featureProduct Featurecore
methodologyMethodologycore

(Verified S236 W1 against the live taxonomy_domains table — 7 baseline-provenance domains observed. The 8 client-provenance domains (e.g. safeguarding-*, multi-academy-trusts, education, products-services, legislation-policy, market-intelligence, sector-news) are intentionally out-of-scope for the platform baseline; they are Phew tenant-specific rows that should not ship as core.)

  • taxonomy_domains table — DB row source (columns id, name, display_name, display_order, colour, provenance, is_active). Snapshot at scripts/tests/fixtures/taxonomy_snapshot.json domains[].
  • source_documents.primary_domaincharacter varying(50) DEFAULT 'unclassified' NOT NULL, referencing taxonomy_domains.name. Re-homed off content_items.primary_domain 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_domaincharacter varying(50), nullable secondary classification axis (same FK target); added in the same M3 migration.
  • Finding 2 — q_a_pairs carries no domain column. Domain for a Q&A pair is derived one hop away via record_lifecycle.domain: the record_lifecycle_domain_sync trigger (20260628191701_id131_record_lifecycle_domain_sync) write-time-syncs record_lifecycle.domain from the owning source_documents.primary_domain (owner_kind='source_document' rows), or, for owner_kind='q_a_pair' rows, from that pair’s linked source document’s primary_domain (falling back to 'unclassified' when no linked source document exists). Win-rate / governance-config domain-policy joins over Q&A pairs read record_lifecycle.domain, not a direct q_a_pairs column.
  • taxonomy_subtopics.domain_id — FK to taxonomy_domains.id from CV 02 (parent-child).
  • classification_disputes — references domain values for review queue.
  • Bound to Layer 3 hierarchy (parent of taxonomy_subtopics) and Layer 5 (consumed by every domain entity carrying primary_domain / secondary_domain).
  • contexts/taxonomy-context.tsx — React context for app-side reads (DB-driven taxonomy per CLAUDE.md).
  • lib/taxonomy/taxonomy.ts — 24-line re-export shim (content types and platforms only — taxonomy domains read from the DB context).
  • scripts/generate-taxonomy-snapshot.ts — emits taxonomy_snapshot.json for the Python pipeline (separate snapshot pattern per CLAUDE.md “Taxonomy dual-source”).
  • scripts/kb_pipeline/classifier.py — reads taxonomy snapshot for ML domain classification.
  • Filter UI: components/browse/filter-panel.tsx chips + admin CRUD via app/api/taxonomy/* routes.
  • lib/mcp/tools/content.ts — MCP search/filter input.
  • Already carries provenance enum — model precedent for all hybrid CVs.
  • Sector-intelligence implies sector verticalisation; clients in different sectors will add their own domains.
  • Granularity governance not yet formalised (when to add a new domain vs. reuse an existing one) — ad-hoc today per source §2.3.
  • No SKOS / ISO 25964 broader-term / narrower-term encoding yet (see source §2.3 “what’s missing”).
  • Total live row count (S236 W1 verification): 15 active domains across the 3 provenance values (baseline 7, client 8). Baseline rows are the platform-shipped set above; client rows belong to the tenant (Phew today) and ship via the admin UI rather than the core seed.