Orchestrata Ultimate › Plans › spec-implementation-gaps

Spec implementation gaps — evidence-graded audit (session 227)

Source: plans/spec-implementation-gaps.md at 8a2cb42ad · last changed 2026-07-27 · first committed 2026-07-12 · 299 lines.

Prose pending.

Plan text

Spec implementation gaps — evidence-graded audit (session 227)

Question: which specs have genuinely unimplemented requirements? Method: check-traces + generate_rtm_evidence.py over specs/ vs src/, then code-level audits of the suspect clusters (4 parallel auditors + direct probes). UNLINKED (no @traces, no test citation) is the starting signal only — every verdict below is code-verified, not inferred from trace absence.

Headline numbers (RTM evidence, 2026-07-12)

1. Per-spec UNLINKED distribution (worst first, code-verdicts in §2-§3)

spec total UNLINKED % package / note
021 opencode-integration 295 294 99% no opencode code anywhere in src/
007 prolog-gov + verification 397 277 69% governance/ + verification/ heavily built — trace debt + unwired suspects
016 vizint-command-center 294 243 82% largely JS (in-repo vizint-ui/), Python tracer blind
002 postman 497 238 47% postman/ (30 modules) built — checklist inflation suspect
020 claude-code-harness 240 232 96% only core/adapters/claude/{hooks,tool_interceptor} exist
014 websocket-gateway 202 142 70% gateway/ built; 15 REQs honestly retired (workflow_engine)
015 plugin-sdk 210 112 53% plugin/ built (Phase D recorded done)
003 intent 402 92 22% trace debt tier
004 cxp 303 72 23% trace debt tier
009 volk-context-injection 288 70 24% trace debt tier (injection unified, W8.5)
000 orchestrata-cli 112 63 56% cli.py thin — real gaps suspected
018 fireflies 80 58 72% integrations/fireflies_* built (Phase D done)
017 calendar-integration 70 47 67% prior ruling: implemented as vizint-ui JS gadget
022 tui-interface 39 39 100% prior ruling: vizint-ui JS
005 multi-agent 78 35 44% agents/ built — trace debt tier
102 volk-test-harness 131 29 22% harness/ built — trace debt
006 session-management 165 27 16% trace debt
028 llm-client 56 22 39% known model-table divergence items in backlog
011 provider-manager 60 21 35% trace debt
105 ontology-domaingen 50 21 42% domaingen/ built (SPEC-105 tests exist)
097 testing-standards 11 11 100% META — standards doc, not code-traceable
others (025,027,031,019,012,032,106,008,030,024,029,103,050,001,010,013,026,072,104) — ≤17 each ≤23% trace debt tier / effectively covered

GHOST rows (6): RESOLVED 2026-07-12 — all six verified as RTM-scanner false-positives on prose/fixtures, NOT real traces: three are intentional tooling-test fixtures (test_ast_trace_audit / test_ast_check_traces / test_generate_rtm_evidence), REQ-001 is docstring prose about merge keys (test_kg_sync_extended), REQ-024-044 is a comment documenting a descoped requirement (test_di), REQ-1 is a spec-writer generator fixture. No @traces decorator references a nonexistent req (check-traces: 0 dangling, 0 malformed after the session-227 purge). GHOST=6 in the RTM is stable, characterized noise.

2. Code-verified verdicts — suspected-missing cluster (021 / 020 / 000)

Framing discovery: SPEC-020 and SPEC-021 are as-built docs of harness code that lives OUTSIDE this repo (~/.opencode/plugins/orchestrata.ts 3,236-line TS plugin; ~/.claude/hooks/*), targeting the FROZEN old monorepo. Neither was ported into src/.

SPEC-021 opencode-integration — ~95-100% genuinely unimplemented in-repo

No plugin runtime, no lifecycle hooks, none of the 24 tools, no agents. Also missing everywhere (not just the plugin): Redis-queued KG sync + conversation-turn capture (Conversation/ConversationTurn node writers exist nowhere in this codebase), deception detection, memory search, and a project-scoped arbitrary-Cypher query CLI (scripts/neo4j_query.py is canned subcommands only). ~30-40 reqs have in-repo backends the plugin would call (session CLI, kg_context.py), but zero reqs are satisfied as specified. Recommendation: re-scope or retire the spec — porting it verbatim would target frozen paths.

SPEC-020 claude-code-harness — ~45% genuinely missing

SPEC-000 orchestrata-cli — ~40-45% genuinely missing + FALSE-DECLARED stubs

3. Code-verified verdicts — built-but-untraced clusters

SPEC-007 (governance + verification) — mostly trace debt, five real gaps

The governance package is genuinely built (policy engine, ethical boundary, constitutional enforcer, escalation, audit, safe mode — all on real Prolog + Redis). Real gaps, code-verified:

SPEC-002 (postman) — checklist inflation confirmed, plus real gaps

postman/ (30 modules) implements the core routing/delivery/queue surface; most UNLINKED rows are trace debt. Real gaps:

SPEC-014 websocket-gateway — ~78% of UNLINKED genuinely missing/deficient

97/142 MISSING, 14 PARTIAL, 13 implemented-untraced, 10 RETIRED (workflow 076-080 + config 081-085 — exactly 10, not ~15), 8 statically unverifiable. This is a real implementation gap, not tracing hygiene. Top items:

  1. Subscription filters are dead code gateway-wide — Subscription.filters stored (models.py:135) but never read (pubsub.py:177-206, protocol.py:115-159); filters are accepted-and-ignored across CXP/volk/session streams.
  2. Auth schemes absent — JWT only; no static-token or HMAC (13 reqs); scope hardcoded "read_write"; wrong error surface (close 4001, no -32001).
  3. Zero Prometheus metrics — no orchestrata_gateway_* registrations; /metrics emits an empty default registry. /health always 200.
  4. No heartbeat/presence/per-client buffering/rate limiting/batch RPC; config.py:162-168 ping fields are dead.
  5. Publisher-less streams — session.events, session.facts, volk.lifecycle are subscribe-confirmation stubs; publish_lifecycle_event (handlers/volk.py:427) has zero call sites.
  6. Ring buffer: Streams+MAXLEN (not spec'd sorted set), no 24h TTL, replay has no since/until/filter params, sequence counters reset on restart.
  7. Suspect CITED: REQ-014-101/102 (Prolog gateway_access/2) — auth never calls Prolog.

SPEC-015 plugin-sdk — ~84% of UNLINKED genuinely missing

~94/112 MISSING. "Phase D done" holds but is narrow: Volk projection + git-install are real; everything downstream of context.register_X() is inert:

  1. Never wired into kernel boot — no PLUGIN_MANAGER ComponentType, zero PluginManager hits in cli_main.py; plugins never run outside tests.
  2. Tool/provider/event-bus/channel registries are Protocol-only stubs — IToolRegistry/IProviderRegistry have no concrete impl and are never injected.
  3. Plugin Prolog rules never loaded — registration.py:254-274 appends filenames to a list, nothing consults them. False DECLARED trace (REQ-015-063 → orchestrator/engine.py:262) masks this.
  4. No audit trail (:PluginAudit zero hits; 203/206 falsely trace to knowledge_graph/versioning.py), no CLI/ops surface, no config system, hot-reload reuses cached manifest.
  5. Live defect: VolkRegistry has no unregister and context cleanup only clears local lists — a stopped plugin's volk alias stays dispatchable.

SPEC-018 fireflies — 100% of UNLINKED genuinely missing as features

All 58 are user-observable gaps: no fireflies gadget exists in vizint-ui (app.js registers 12 gadgets, none Fireflies), no SessionLinker, no settings UI, no test_connection, no fireflies.health/.sync RPCs. What exists (client + 4 gateway RPCs + MCP tools + FirefliesKnowledgeSync) is the backend US-006 slice only — and sync_recent() has zero production callers. Worse than the RTM shows: ~12 of the 22 DECLARED reqs are false traces (memory/ hot_store.py:37-188 claims REQ-018-015/026-029/041/044/046-049; ambiguity_resolver.py claims 065/078/079 — all unrelated code). Live bugs: fireflies_client.py:312/:172 report page size as total; :375 maps GraphQL questions → "decisions".

SPEC-016 vizint — 61% real JS (tracer-blind), 21% missing, 10% unwired

148/243 IMPLEMENTED in vizint-ui/ JS (matches the 017/022 ruling); 52 (21%) genuinely MISSING; 25 (10%) built-but-unreachable → 31.7% deliver zero value today. Top items:

  1. NotificationCenter (769 LOC) + parts of KG Explorer fully built but unwired — absent from app.js gadget manifests and every layout profile; subscribes to governance.events/kernel.events topics the backend never publishes.
  2. Personal-infra gadgets (Flashcards/Iqama/Time-to-POI/Chronus/Settings/ Embed) + Email gadget don't exist despite the checklist claiming 100%; PrayerTimes provider is a stub with no consuming gadget.
  3. The human checklist is wrong in both directions — claims done things that don't exist AND marks the real CSV/JSON export undone. Don't trust it.
  4. Mistraced DECLARED: 109-111 (thread dropdown), 164 (RTM viewer gadget), 182 (escalation chain) — no code.
  5. Live bugs: lib/bus.js wildcard subscription registers the literal string 'vizint:' and can never fire; GadgetBridge is dead code (never instantiated); dev-auth demo JWT hardcoded valid to 2036.

4. Checklist-less specs (19 dirs, invisible to the tooling) — AUDITED

Genuinely missing code — the entire Claude-Code-parity tool wave, 9 specs (063-071): REPLTool, git-worktree tools, LSPTool, PowerShellTool, RemoteTriggerTool, ScheduleCronTool, TaskStop/TaskOutput tools, team-RBAC tools, MCP-resource tools. Zero code for any of them (grep-verified); the registry stopped at the 13 volk tools. These are exactly the "14 missing tools" SPEC-062's own gap analysis enumerated. Several read as imported boilerplate (066 targets Windows; 070 dated 2024, generic RBAC prose) — the real decision per spec is build vs formally archive.

Partially built (5):

Effectively done, just untracked (2): 023 goal-system (models + GoalMixin

No checklist warranted (3): 051 (deprecated → SPEC-016), 101 (umbrella), 061 (duplicate of 050).

098 API standards — decision needed: concrete MUSTs (versioned /api/v1, error-code taxonomy, Deprecation/Sunset headers, gateway rate limiting), none applied anywhere; adopt (all-red checklist) or archive as boilerplate.

Note: SPEC-099 requirements.md generation is already a recorded backlog item. The auto-generated compliance-audit.md files in these dirs are class-name-diff noise, not usable verdicts.

5. SPEC-100 logging-exception-handling — double defect (direct probe)

  1. Format outlier: its checklist uses FR-NNN section checkboxes with no REQ-100-* ids — invisible to check-traces AND the RTM generator.
  2. Headline requirement unimplemented: the spec mandates structlog with JSON output; structlog appears nowhere in pyproject.toml or src/orchestrata_ultimate/core/logging.py (stdlib logging only).

6. Known structural blind spots of this audit

7. Synthesis — where the real work is

  1. Tool wave 063-071 (§4): zero code, highest functional leverage — ACTIVE, see plans/tool-wave-plan.md (user ruling 2026-07-12).
  2. Gateway hardening (014): dead subscription filters, absent auth schemes, zero metrics, publisher-less streams — largest single real-gap cluster in built code.
  3. Plugin SDK activation (015): wire PluginManager into kernel boot + concrete tool/provider registries, or the whole package stays test-only.
  4. U:Vfy wiring (007b): 63 tested modules with no production caller.
  5. False-trace purge: fix the mechanical @traces mis-stamps (018/015/016 clusters + GHOST rows) so the RTM stops overstating DECLARED.
  6. Live defects found in passing (need owners): VolkRegistry no-unregister (stale plugin volk stays dispatchable); fireflies_client total=page-size (:312/:172) and questions→"decisions" (:375); vizint lib/bus.js wildcard never fires; postman _query_prolog always-False placeholder; plugin/governance.py docstring falsely claims Prolog backing.
  7. Retire/rescope decisions for the user: SPEC-021 (retire — targets frozen paths), SPEC-098 (adopt or archive), 066/070 (archive per tool-wave plan), SPEC-014 workflow/config rows (formally retire the 10 reqs).