Orchestrata Ultimate › Plans › plan_vizint_phase_6 › roadmap
VizInt Command Center — Gap Closure Roadmap
Source: plans/plan_vizint_phase_6/roadmap.md at 8a2cb42ad · last changed 2026-07-27 · first committed 2026-05-26 · 322 lines.
Prose pending.
Plan text
VizInt Command Center — Gap Closure Roadmap
Status: All 4 Sprints Complete | Target: 100% Requirements + 90% Constitutional Compliance
Current: ~86% Requirements (253/294) | 44% Constitutional (63/142)
Gap: 41 Requirements | 79 Constitutional Items to reach 90%
Executive Summary
The Command Center is functionally complete for all P1 and P2 gadgets. The remaining work falls into four categories:
- Gadget Polish (29 requirements): Deferred work, task detail panels, file tree deep-dive, export features
- Personal Gadgets (8 requirements): Todoist, Email, Calendar integrations + Web Crypto token storage
- Observability & Resilience (40 constitutional items): Debug panel, error boundaries, metrics, recovery
- Code Quality & Documentation (45 constitutional items): JSDoc, error handling, API docs, testing standards
Estimated Effort: ~120 hours (3 weeks at full-time, 6 weeks at 50%)
Priority Order: Resilience → Gadget Polish → Observability → Personal Gadgets → Documentation
Part I: Requirements Gap Analysis (52 Missing)
Category A: Project Explorer Deep-Dive (9 requirements | 18h)
| ID | Requirement | Effort | Blockers |
|---|---|---|---|
| REQ-016-005 | Iteration summary with gap trend | 2h | Needs Neo4j Iteration node queries |
| REQ-016-006 | File tree with pagination | 3h | knowledge.nodes pagination API exists |
| REQ-016-007 | Directory expand/collapse | 2h | Pure UI |
| REQ-016-008 | Real-time file search | 2h | Debounced filter on fetched data |
| REQ-016-009 | File entry metadata (classes, functions) | 2h | Already in knowledge.nodes response |
| REQ-016-010 | Click file → KGExplorer navigation | 2h | Bus event + KGExplorer filter param |
| REQ-016-012 | Sparkline trends on KG counts | 3h | Reuse QA Dashboard sparkline component |
| REQ-016-013 | Auto-refresh every 60s | 1h | setInterval + existing subscription |
| REQ-016-014 | Click count → KGExplorer filtered | 1h | Bus event with node_type filter |
Implementation Strategy: Add a FileTree sub-component to ProjectExplorer. Use existing knowledge.nodes pagination. Extract sparkline as reusable CanvasSparkline class. Use ctx.bus.emit('kg-explorer:filter', { node_type }) for cross-gadget navigation.
Category B: Session Manager Enhancements (10 requirements | 24h)
| ID | Requirement | Effort | Blockers |
|---|---|---|---|
| REQ-016-016 | Status badges (green pulse, grey, red) | 2h | Pure CSS |
| REQ-016-017 | Recent iterations list | 2h | Neo4j query |
| REQ-016-018 | Click session → SessionManager select | 1h | Bus event |
| REQ-016-019 | Click iteration → IterationBrowser | 2h | New gadget or redirect |
| REQ-016-020 | Auto-refresh on events | 1h | Already subscribed |
| REQ-016-033 | Deferred work prioritized list | 4h | New sub-component |
| REQ-016-034–039 | Deferred work CRUD + persistence | 8h | RPC methods needed |
| REQ-016-040–042 | Log work input + display | 4h | RPC + UI |
Implementation Strategy: Add DeferredWorkPanel and WorkLogPanel sub-components. Backend needs session.deferredWork RPCs (list, add, update, delete) and session.logWork. Store deferred work in session context.json.
Category C: Volk Status Polish (3 requirements | 6h)
| ID | Requirement | Effort |
|---|---|---|
| REQ-016-089 | Detail panel updated via lifecycle events | 2h |
| REQ-016-091 | Compact mode (<400px) | 2h |
| REQ-016-092–093 | Layout auto-switch + manual toggle | 2h |
Category D: Task Board Detail Panel (7 requirements | 16h)
| ID | Requirement | Effort |
|---|---|---|
| REQ-016-137–141 | Detail panel slide-out with inline editing | 10h |
| REQ-016-142–144 | Gateway persistence + conflict resolution | 6h |
Implementation Strategy: Slide-out panel pattern (reuse property panel from KGExplorer). Backend needs projects.taskUpdate RPC. Conflict resolution via last-write-wins with timestamp comparison.
Category E: Claude Chat Search (1 requirement | 2h)
| ID | Requirement | Effort |
|---|---|---|
| REQ-016-118 | Message keyword filter | 2h |
Category F: Audit Trail Export (4 requirements | 6h)
| ID | Requirement | Effort |
|---|---|---|
| REQ-016-185–188 | CSV/JSON export with filters | 6h |
Category G: Personal Gadgets (8 requirements | 32h)
| ID | Requirement | Effort | Notes |
|---|---|---|---|
| REQ-016-235–238 | TodoistGadget | 12h | API token, today's tasks, toggle, quick-add |
| REQ-016-239 | EmailGadget | 8h | Unread count, sender/subject previews |
| REQ-016-240 | CalendarGadget | 8h | Today's events with time blocks |
| REQ-016-241 | Web Crypto token encryption | 4h | Encrypt before localStorage |
| REQ-016-242 | Personal gadgets offline-capable | — | Already satisfied by architecture |
Decision Point: Todoist/Email/Calendar gadgets are P3 (nice-to-have). They add significant value for daily driver usage but are not required for core orchestrata functionality. Recommendation: Implement Web Crypto token storage first (unblocks all personal gadgets), then Todoist as the highest-value personal gadget.
Part II: Constitutional Gap Analysis (120 Missing)
Article I: Agent Autonomy (10 items | 4h)
All items are behavioral guarantees already satisfied by the architecture but not formally verified:
- Dashboard only displays data; all mutations go through gateway RPCs
- CXP feed renders packets without modification
- TaskBoard sends suggestions via
projects.taskCreate, not direct commands
Verification: Add integration tests proving no gadget bypasses the gateway. Mark as verified.
Article II: Prolog SSOT (10 items | 8h)
- CONST-II-001: PAM++ auth enforced by gateway → already true, verify with audit
- CONST-II-007: UI disables on -32001 unauthorized → add error handling in bridge
- CONST-II-002, 003–006, 008–010: Governance fidelity → verify AuditTrail displays raw Prolog output
Implementation: Add governance.evaluate and governance.rules RPC handlers. Ensure AuditTrail renders raw JSON without reformatting.
Article III: Session Isolation (12 items | 12h)
Critical for production safety. Requires:
- Session-scoped
test_idequivalent for all gadget data operations session_idparameter on all RPC calls- Per-session localStorage namespace
- Gadget state reset on session switch
Implementation: Add sessionScope wrapper to StateSync. Prefix all localStorage keys with active session ID. Clear gadget state on session.close event.
Article IV: Hooks for Extensibility (10 items | 16h)
- CONST-IV-001: Plugin gadget loading via manifest URL → add
registry.loadFromURL(url) - CONST-IV-004: Custom themes → add
<link rel="stylesheet">dynamic injection - CONST-IV-005: Custom layout profiles → already implemented in Phase 4
- CONST-IV-007: NotificationManager hooks → add
registerHandler(type, callback)
Implementation: Add plugin API surface to Registry, NotificationManager, and Theme system.
Article V: Minimal Core (8 items | 4h)
Mostly verified. Remaining:
- CONST-V-001: Core handles only bridge/registry/layout/theming/notifications → verify
- CONST-V-003: Personal productivity are gadgets → true by design
- CONST-V-007: Core dependencies minimal → verify no charting library imported
- CONST-V-009: Core API versioned → API_VERSION implemented
Article VI: JS ES2024 Standards (11 items | 20h)
High-impact code quality work:
- CONST-VI-003: Web Workers for heavy computation → KGExplorer force-directed graph
- CONST-VI-004: Promise.all for concurrent ops → audit all
asyncfunctions - CONST-VI-005: structuredClone → replace all JSON.parse(JSON.stringify())
- CONST-VI-008: try/catch on all async → add error boundaries
- CONST-VI-013: JSDoc on all public APIs → 20+ files to document
- CONST-VI-014: No console.log → audit and redirect to logger
- CONST-VI-015: Functions < 40 lines → refactor long functions
- CONST-VI-016: No global mutable state → audit window.* mutations
- CONST-VI-018: Event listener cleanup → verify all
unmount()methods
Article VII: Testing Without Mocks (10 items | 16h)
- CONST-VII-001: Real WebSocket connections → WsTestServer is real WS
- CONST-VII-007: Integration tests with real gateway → add tests against live gateway
- CONST-VII-009: Race condition tests → concurrent subscription tests
Implementation: Add tests/integration/ directory with tests against real gateway server.
Article VIII: Observability (20 items | 40h)
Largest single category. Requires building:
- MetricsCollector class (CONST-VIII-001–010): Track render times, RPC latency, event delivery, memory, FPS, errors
- DebugPanel gadget (CONST-VIII-016): Toggle overlay showing subscriptions, RPC queue, bus traffic
- PerformanceOverlay (CONST-VIII-017): FPS counter, memory gauge, render time histogram
- GadgetHealthIndicator (CONST-VIII-015): Error/loading states in chrome titlebar
Architecture:
// lib/metrics.js
export class MetricsCollector {
recordRender(gadgetId, duration) {}
recordRpcLatency(method, duration) {}
recordEventDelivery(topic, latency) {}
recordError(gadgetId, error) {}
getSnapshot() {}
}
Article IX: Graceful Degradation (20 items | 32h)
Critical for production reliability:
- ErrorBoundary (CONST-IX-006, 007, 014): Wrap each gadget mount in try/catch, show error state with retry button
- RPC Queue (CONST-IX-003, 013): Bridge already queues 100 calls; verify flush on reconnect
- Auto-re-subscription (CONST-IX-008, 012): Track active subscriptions, re-subscribe after reconnect
- localStorage Quota (CONST-IX-010): Measure usage, evict oldest entries
- Read-only mode (CONST-IX-001): Disable inputs when bridge disconnected
Article X: Versioning (10 items | 12h)
- CONST-X-003: Gateway protocol version check → call
gateway.infoon connect - CONST-X-004: Incompatible version warning → banner in header
- CONST-X-008: CSS custom properties prefixed → audit
--cc-*prefix usage - CONST-X-009: Deprecation warnings → add
deprecate()helper
Article XI: Documentation (10 items | 16h)
- CONST-XI-002–005: API docs for GadgetBridge, WebSocketBridge, StateSync, NotificationManager
- CONST-XI-007–008: Theme system and layout profile docs
- CONST-XI-009: Plugin gadget development guide
- CONST-XI-010: Performance budget documentation
Part III: Prioritized Implementation Plan
Sprint 1: Resilience Foundation (Week 1 | 40h)
Goal: Close all Article IX degradation items + Article VIII observability core
| Day | Task | Hours | Deliverable |
|---|---|---|---|
| 1 | ErrorBoundary wrapper for gadget mount | 6 | Error state UI + retry button |
| 1 | Bridge RPC queue verification | 2 | Test: queue fills, drains on reconnect |
| 2 | Auto-re-subscription on reconnect | 6 | Track subs, re-subscribe after reconnect |
| 2 | Read-only mode when disconnected | 4 | CSS class gadget--readonly, input disabling |
| 3 | MetricsCollector core | 8 | lib/metrics.js with render/RPC/event tracking |
| 4 | DebugPanel gadget | 8 | Toggle overlay: subs, RPC queue, bus traffic |
| 4 | PerformanceOverlay | 4 | FPS counter, memory gauge |
| 5 | GadgetHealthIndicator in chrome | 4 | Error/loading dots in titlebar |
| 5 | localStorage quota handling | 4 | Measure, evict, warn |
Exit Criteria: All 20 Article IX items verified. 10 Article VIII items verified.
Sprint 2: Gadget Polish (Week 2 | 40h)
Goal: Close 29 requirements in Categories A–F
| Day | Task | Hours | Deliverable |
|---|---|---|---|
| 1 | FileTree sub-component | 6 | Expandable tree, search, metadata |
| 1 | ProjectExplorer → KGExplorer navigation | 2 | Bus events for cross-gadget filtering |
| 2 | Sparkline extraction + KG counts | 4 | Reusable CanvasSparkline class |
| 2 | Session status badges + iterations | 4 | CSS pulse animation, iteration list |
| 3 | DeferredWorkPanel | 8 | CRUD UI, priority sorting |
| 3 | WorkLogPanel | 4 | Input + history list |
| 4 | Backend RPCs: session.deferredWork, session.logWork | 6 | Python handlers + tests |
| 4 | Volk Status detail panel + compact mode | 4 | Slide-out panel, responsive layout |
| 5 | Task Board detail panel | 6 | Slide-out with inline editing |
| 5 | Audit Trail CSV/JSON export | 4 | Download generation |
Exit Criteria: All Category A–F requirements checked. Backend RPCs pass tests.
Sprint 3: Code Quality & Standards (Week 3 | 40h)
Goal: Close Article VI, VII, X + documentation
| Day | Task | Hours | Deliverable |
|---|---|---|---|
| 1 | JSDoc all public APIs | 8 | 20 files documented |
| 1 | structuredClone migration | 4 | Replace JSON.parse(JSON.stringify()) |
| 2 | Error handling audit | 6 | try/catch on all async operations |
| 2 | Function length refactor | 4 | Split functions > 40 lines |
| 3 | Event listener cleanup audit | 4 | Verify all unmount() remove listeners |
| 3 | Console.log → logger audit | 4 | Redirect all console.* to logger() |
| 4 | Gateway version check | 4 | gateway.info call + banner |
| 4 | CSS property prefixing | 4 | --cc-* prefix audit + migration |
| 5 | Integration tests | 6 | tests/integration/ against real gateway |
| 5 | Documentation: API docs + plugin guide | 6 | Markdown docs for all public APIs |
Exit Criteria: All Article VI items verified. Article VII integration tests passing. API docs complete.
Sprint 4: Personal Gadgets & Final Polish (Week 4 | 32h)
Goal: Web Crypto, Todoist gadget, remaining constitutional items
| Day | Task | Hours | Deliverable |
|---|---|---|---|
| 1 | Web Crypto token encryption | 6 | lib/crypto.js encrypt/decrypt |
| 1 | Plugin API: registry.loadFromURL | 4 | Dynamic gadget loading |
| 2 | TodoistGadget | 10 | API token auth, tasks, toggle, quick-add |
| 3 | Article I + II verification | 4 | Integration tests + audit |
| 3 | Article III session isolation | 6 | Session-scoped StateSync |
| 4 | Article IV extensibility hooks | 6 | Theme injection, notification handlers |
| 4 | Article V verification | 2 | Dependency audit |
| 5 | Final compliance run | 4 | Full constitutional + requirements audit |
Exit Criteria: ≥90% constitutional compliance (128/142). 100% requirements completion.
Part IV: Risk Register
| Risk | Likelihood | Impact | Mitigation |
|---|---|---|---|
| Backend RPC gaps block frontend work | Medium | High | Define RPC contracts first, mock until backend ready |
| Web Crypto API not supported in test env | Low | Medium | Fallback to plain localStorage in tests |
| KGExplorer force-directed graph too slow | Medium | Medium | Offload to Web Worker, cap node count |
| ErrorBoundary catches break gadget state | Medium | High | Test error injection per gadget |
| Integration tests flaky with real gateway | Medium | Medium | Retry logic, health checks before tests |
Part V: Verification Checklist
Per-Sprint Gates
Before starting next sprint:
- [ ] All previous sprint tests pass (
npm test,npx playwright test) - [ ] Lint clean (
npm run lint) - [ ] Compliance checker updated (
node scripts/compliance-check.js) - [ ] Requirements checklist updated
- [ ] Constitutional checklist updated
Final Gate (End of Sprint 4)
- [ ] All 294 requirements checked
[x] - [ ] ≥128/142 constitutional items checked
[x](90%) - [ ] 250+ unit tests passing
- [ ] 100+ E2E tests passing
- [ ] Security audit clean (
node scripts/security-audit.js) - [ ] Performance budget met (
node scripts/perf-budget.js) - [ ] Integration tests against real gateway passing
- [ ] Documentation complete (API docs, plugin guide, performance budget)