Orchestrata Ultimate › Plans › research › audit-07-kg-schema
Audit 07 — KG Schema / Semantic Layer
Source: plans/research/audit-07-kg-schema.md at 8a2cb42ad · last changed 2026-07-27 · first committed 2026-07-04 · 40 lines.
Prose pending.
Plan text
Audit 07 — KG Schema / Semantic Layer
Headline: No single schema/ontology. Three parallel Cypher conventions + SPEC-105 ontology targets Stardog/RDF (disjoint from Neo4j). It's a code-structure graph with bolt-on provenance fragments — NOT domain-semantic. Provenance/ownership/ temporal live in dicts/Redis/Prolog, not graph edges.
Location
src/orchestrata_ultimate/knowledge_graph/ (40 files). Client neo4j_client.py;
DDL schema.py:1-143; enums types_enums.py; code-sync sync.py(845)/synchronizer.py/_sync_queries.py;
design/RTM kg_design.py::KGDesignStore; queries query_engine.py/search.py/temporal.py/portfolio.py;
injectors context_injector.py/volk_context_injector.py. SPEC-105 domaingen/ = OWL/ttl→code+Stardog, never touches Neo4j.
Nodes
- Enum (
types_enums.py:24-38) = 12;schema.py:11-47= 18; ~35 distinct labels actually MERGE'd across src. Decision+Artifactdeclared (schema.py:19-20) but NEVER created — dead. NoIntent, noComponent.- Duplicate concepts:
Spec≠Specification,Class≠CodeClass≠DesignClass,Function≠CodeFunction,Volk≠Agent. - Divergent keys:
Sessionmerged on session_id/seq/id/user_id (4),Projecton id/slug/name (3),Requirementon id/req_id (2),Volkon name/volk_id (2) → MERGE spawns duplicate nodes.
Edges (~40 created)
- Enum 13 + schema.py adds HAS_SPEC/TRACES_TO/IMPLEMENTS/PRODUCED/MADE_DECISION...
- 9 SPEC-008-mandated edges = 0 occurrences: ASSIGNED_TO, OWNS, OWNED_BY, MADE_BY, APPLIES_TO, WORKED_ON, WORKED_ON_BY, REQUIRES, PART_OF. No agent↔work/ownership, decision↔target, or artifact-provenance edge at all.
- Name drift:
INHERITS(enum) vsINHERITS_FROM(sync);TRACES_TO→Requirement (design) vs RequirementItem (sync). MADE_DECISION, NEXT_VERSION, CHANGED_IN, HAS_DOCdeclared, effectively unused.
Ontology / properties
None governing Neo4j. SPEC-008 prose (spec.md:124-160) = doc, not enforced, diverges from schema.py. Props ad-hoc per writer (generic Node model bypassed). SPEC-105 ontology is RDF/Stardog, can't answer volk/intent/artifact questions in the live KG. Rich for code structure, shallow for problem domain.
Queries
Mostly inline. Reusable: _sync_queries.py (dead code/untested/inheritance), query_engine.py (multi_hop variable-depth), search.py (fulltext), kg_design.py (RTM/compliance), portfolio.py, volk_context_injector.py (6 task queries). Injection queries never MATCH the requesting Volk — no ownership/history/decision retrieval. No provenance/temporal/cross-store queries.
Constraints/indexes — 3 disjoint sets (~26 uniqueness)
schema.py:79-112, sync.py, kg_design.py:135, cxp_auditor.py:78. No constraints for Session/Volk/Agent/Task/Memory/Fact/AuditEntry/Scenario/Decision/Artifact. Conflicting keys → dup nodes. Dead :Node(created_at) index.
Proposal
- Canonical identity first: unify Volk/Agent, Spec/Specification, Class/CodeClass/DesignClass, single Session/Project/Requirement key + uniqueness constraints. Single schema-authority migration module (consolidate 3 DDL sites).
- New semantic nodes:
Volk(canonical),Intent,Artifact,Decision,PipelineRun,Component,NodeVersion,Concept/OntologyClass+PropertyDef. - New edges: ASSIGNED_TO/OWNS/WORKED_ON/EXECUTED_BY; Intent-[:TRIGGERED]->PipelineRun-[:PRODUCED]->Artifact-[:DERIVED_FROM]->Spec, GENERATED_BY->Volk; Volk-[:MADE]->Decision-[:APPLIES_TO]->Component, SUPERSEDES, JUSTIFIED_BY; HAS_VERSION/NEXT_VERSION; Memory-[:ABOUT]->File/Decision.
- New queries: volk-aware injection (ownership+recent decisions — SPEC-008 spec.md:333-347 specced-unimplemented), provenance/blast-radius, traceability audit (intent→req→code→test→run + orphans), temporal as-of, decision reasoning.
- Constraints/indexes: uniqueness Volk.alias/Session.id/Task.id/Intent.id/Artifact.id/Decision.id/PipelineRun.id/Component; range on created_at/valid_from; fulltext + Spec.title/Requirement.title/Decision.rationale/Memory.summary.