Orchestrata Ultimate › Plans › plan_vizint_implementation › implementation-plan

VizInt Command Center — Detailed Implementation Plan

Source: plans/plan_vizint_implementation/implementation-plan.md at 8a2cb42ad · last changed 2026-07-27 · first committed 2026-05-26 · 1041 lines.

Prose pending.

Plan text

VizInt Command Center — Detailed Implementation Plan

Spec: 016-vizint-command-center
Status: Gap Analysis Complete → Implementation Planned
Plan Version: 1.0.0
Created: 2026-05-26
Estimated Duration: 8–10 weeks (1 engineer full-time)
Parallelizable: Phases 0–1 can overlap; Phases 2–4 have internal parallel tracks


Table of Contents

  1. Executive Summary
  2. Current State Snapshot
  3. Phase 0: Foundation & Backend Hardening
  4. Phase 1: Portal Framework Core
  5. Phase 2: P1 Production Gadgets (Batch A)
  6. Phase 3: P1 Production Gadgets (Batch B) + Gateway Integration
  7. Phase 4: P2 Gadgets & Personal Productivity
  8. Phase 5: Testing, Compliance & Performance
  9. Appendix A: Dependency Graph
  10. Appendix B: Risk Register
  11. Appendix C: Definition of Done
  12. Appendix D: Traceability Matrix

1. Executive Summary

Problem

The VizInt Command Center (Spec 016) is the unified dashboard for Orchestrata. The backend gateway handlers exist but the entire JavaScript frontend is missing from the repository. Additionally:

Solution

Implement the frontend in 5 phases over 8–10 weeks:

Phase Focus Duration Deliverable
0 Spec consolidation, backend hardening, contract tests Week 1 Clean spec, real backend data, verified RPC schemas
1 Portal framework (bridge, bus, registry, chrome, sync) Weeks 1–3 vizint-ui/ with core framework + 59 unit tests passing
2 P1 Gadgets Batch A (ProjectExplorer, SessionManager, CXPFeed, VolkStatus) Weeks 3–5 4 core gadgets with real data
3 P1 Gadgets Batch B (ClaudeChat, TaskBoard, QADashboard, AuditTrail) + Gateway hardening Weeks 5–7 4 more gadgets + real Neo4j queries
4 P2 Gadgets (KGExplorer, NotificationCenter, Personal gadgets) Weeks 7–8 Remaining gadgets
5 E2E tests, constitutional compliance, performance Weeks 8–10 Full test suite, compliance audit, perf budget

Success Criteria


2. Current State Snapshot

What Exists ✅

src/orchestrata_ultimate/gateway/
├── handlers/session.py       # SessionHandler — 7 RPC methods (stubbed active)
├── handlers/projects.py      # ProjectsHandler — 4 RPC methods (real Neo4j)
├── handlers/volk.py          # VolkHandler — list, lifecycle
├── handlers/cxp.py           # CXPFeed handler
├── handlers/knowledge.py     # Knowledge graph queries
├── handlers/governance.py    # Governance decisions
├── rpc.py                    # RPC router wiring all handlers
├── server.py                 # WebSocket server (SPEC-014)
└── pubsub.py                 # Pub/sub subscription manager

What Is Missing ❌

vizint-ui/                          # ENTIRE DIRECTORY MISSING
├── index.html                      # Entry point with import maps
├── app.js                          # CommandCenterApp
├── lib/
│   ├── portal.js                   # Gadget lifecycle
│   ├── bus.js                      # EventBus (CustomEvents)
│   ├── registry.js                 # Dynamic ES module loading
│   ├── chrome.js                   # Gadget window chrome
│   ├── shared.js                   # Utilities (debounce, formatTimestamp)
│   ├── atlas.js                    # Geolocation
│   └── chronus.js                  # Time engine
├── bridge/
│   ├── websocket-bridge.js         # JSON-RPC 2.0 over WS
│   ├── gadget-bridge.js            # bus <-> RPC translation
│   ├── state-sync.js               # localStorage + remote sync
│   └── notification-manager.js     # Desktop + in-app notifications
├── gadgets/                        # 31 gadgets (ALL MISSING)
├── styles/
│   ├── common.css                  # CSS variables, themes
│   └── command-center.css          # Layout, chrome, badges
├── providers/                      # Chronus providers
├── configs/
│   └── command-center.json         # Runtime config
└── tests/
    ├── vitest.config.js
    ├── unit/                       # 48 unit tests
    ├── e2e/                        # 11 Playwright tests
    └── helpers/ws-test-server.js   # Mock JSON-RPC server

Phase 0: Foundation & Backend Hardening

Duration: Week 1
Goal: Eliminate blockers before frontend development starts
Parallelizable: Yes — backend tasks can run alongside Phase 1 scaffolding

0.1 Deprecate SPEC-051

Task: Consolidate the two VizInt specs into one canonical source of truth.

# Task Time Owner Verification
0.1.1 Add deprecation notice to specs/051-vizint-ui/spec.md header 15 min Any File committed
0.1.2 Move any unique FRs from SPEC-051 into SPEC-016 as "Historical Notes" appendix 1 hr Any SPEC-016 updated
0.1.3 Update RTM to point all vizint requirements to SPEC-016 only 30 min Any grep -c 051 rtm/ returns 0
0.1.4 Delete or archive specs/051-vizint-ui/compliance-audit.md 15 min Any File moved to archive/

Deliverable: Single canonical spec (016). No references to 051 in active docs.

0.2 Harden Gateway SessionHandler

Task: Remove hardcoded mock data from gateway/handlers/session.py.

# Task Time Owner Verification
0.2.1 Audit SessionHandler.handle_active() — replace hardcoded session with Neo4j query 2 hr Backend Returns real active session or null
0.2.2 Audit SessionHandler.handle_list() — verify Neo4j pagination 1 hr Backend Returns paginated session list
0.2.3 Audit SessionHandler.handle_get() — verify session lookup by ID 1 hr Backend Returns session with context/facts
0.2.4 Audit SessionHandler.handle_open() — wire to SessionController.begin() 2 hr Backend Creates real session, returns session_id
0.2.5 Audit SessionHandler.handle_close() — wire to SessionController.end() 2 hr Backend Closes session, persists summary
0.2.6 Add @traces(spec="016", ...) to all handler methods missing traceability 30 min Backend code-review.py --min-severity ERROR passes

Deliverable: All 7 session RPC methods return real data from Neo4j/SessionController.

0.3 Write Contract Tests

Task: Create schema-validated contract tests that pin frontend expectations to backend behavior.

# Task Time Owner Verification
0.3.1 Define JSON schemas for all 11 gateway RPC methods (session.* + projects.*) 2 hr Backend Schemas in vizint-ui/tests/contracts/
0.3.2 Write contract tests: session.list request/response round-trip 1 hr Backend Test passes against real gateway
0.3.3 Write contract tests: session.get, session.open, session.close 1 hr Backend All pass
0.3.4 Write contract tests: projects.list, projects.get, projects.tasks, projects.taskCreate 1 hr Backend All pass
0.3.5 Write contract tests: volk.list, cxp.traffic, knowledge.query 1 hr Backend All pass
0.3.6 Add contract test CI step to GitHub Actions 30 min Backend Runs on every PR

Deliverable: 8 contract tests passing. Schemas are the API contract between frontend and backend.

0.4 Create vizint-ui/ Scaffold

Task: Set up the frontend directory structure and toolchain.

# Task Time Owner Verification
0.4.1 Create vizint-ui/package.json with Vitest + Playwright + ESLint 30 min Frontend npm install succeeds
0.4.2 Create vizint-ui/vitest.config.js (jsdom, ES modules, coverage) 30 min Frontend npm test runs
0.4.3 Create vizint-ui/playwright.config.js (Firefox, baseURL from env) 30 min Frontend npx playwright test runs
0.4.4 Create vizint-ui/.eslintrc.json (strict rules per CONST-VI) 30 min Frontend npm run lint runs
0.4.5 Create directory skeleton (lib/, bridge/, gadgets/, styles/, tests/) 15 min Frontend find vizint-ui -type d matches spec
0.4.6 Add vizint-ui/ to root .gitignore for node_modules/, coverage/ 5 min Frontend Ignored correctly

Deliverable: vizint-ui/ is a runnable Node.js project with test tooling.

Phase 0 Exit Criteria


Phase 1: Portal Framework Core

Duration: Weeks 1–3
Goal: Implement the core infrastructure that all gadgets depend on
Risk: Low — these are well-specified utility modules with clear interfaces

1.1 Shared Utilities (lib/shared.js)

# Task Time Owner Tests Req IDs
1.1.1 generateId() — UUID v4 15 min Frontend TEST-UNIT-045, 046 REQ-016-265
1.1.2 debounce(fn, ms) — cancelable 15 min Frontend TEST-UNIT-047 REQ-016-275
1.1.3 formatTimestamp(iso) — human-readable 15 min Frontend TEST-UNIT-048 REQ-016-265
1.1.4 throttle(fn, ms) — for scroll/resize 30 min Frontend New NFR-001
1.1.5 clamp(val, min, max) — utility 10 min Frontend New —
1.1.6 escapeHtml(str) — XSS prevention 30 min Frontend New FR-016

Deliverable: lib/shared.js with 100% unit test coverage.

1.2 EventBus (lib/bus.js)

# Task Time Owner Tests Req IDs
1.2.1 emit(type, detail) — dispatch CustomEvent with vizint: prefix 30 min Frontend TEST-UNIT-001 REQ-016-265
1.2.2 on(type, handler) — subscribe 30 min Frontend TEST-UNIT-002 REQ-016-265
1.2.3 off(type, handler) — unsubscribe 30 min Frontend TEST-UNIT-003 REQ-016-265
1.2.4 once(type, handler) — auto-remove after first fire 30 min Frontend TEST-UNIT-004 REQ-016-265
1.2.5 addEventListener/removeEventListener DOM API compatibility 30 min Frontend TEST-UNIT-005, 006 REQ-016-266
1.2.6 destroy() — remove all listeners 30 min Frontend TEST-UNIT-007 REQ-016-271
1.2.7 Wildcard subscriptions (vizint:session.*) 1 hr Frontend New REQ-016-267

Deliverable: lib/bus.js — 8 unit tests passing.

1.3 WebSocketBridge (bridge/websocket-bridge.js)

# Task Time Owner Tests Req IDs
1.3.1 connect(url, auth) — open WS, send auth 1 hr Frontend TEST-UNIT-009 REQ-016-258, 261
1.3.2 call(method, params) — JSON-RPC 2.0 request/response 1 hr Frontend TEST-UNIT-010, 011 REQ-016-258
1.3.3 subscribe(topic, filters, callback) — subscription RPC 1 hr Frontend TEST-UNIT-016 REQ-016-262
1.3.4 unsubscribe(subId) — remove subscription 30 min Frontend TEST-UNIT-017 REQ-016-262
1.3.5 Auto-reconnect with exponential backoff (1s, 2s, 4s, max 30s) 2 hr Frontend TEST-UNIT-012, 013 REQ-016-259
1.3.6 Connection state tracking (connected/reconnecting/disconnected) 1 hr Frontend TEST-UNIT-014, 015 FR-001
1.3.7 Request queue during disconnect (max 100, oldest discarded) 1 hr Frontend TEST-UNIT-018, 019 FR-001
1.3.8 RPC timeout handling (reject after 10s) 1 hr Frontend TEST-UNIT-020 FR-001
1.3.9 onStateChange(listener) — multiple listeners 30 min Frontend New FR-001
1.3.10 Correlation IDs (cc-req-{counter}) on all RPC calls 30 min Frontend New CONST-VIII-013

Deliverable: bridge/websocket-bridge.js — 12 unit tests passing.

1.4 StateSync (bridge/state-sync.js)

# Task Time Owner Tests Req IDs
1.4.1 get(key) — read from localStorage 30 min Frontend TEST-UNIT-021 FR-002
1.4.2 set(key, value) — write to localStorage + debounced gateway sync 1 hr Frontend TEST-UNIT-022, 024 FR-002
1.4.3 delete(key) — remove from both 30 min Frontend TEST-UNIT-023 FR-002
1.4.4 pullRemote() — fetch from gateway 1 hr Frontend TEST-UNIT-025 FR-002
1.4.5 pushLocal() — send to gateway 1 hr Frontend TEST-UNIT-026 FR-002
1.4.6 Last-write-wins conflict resolution 1 hr Frontend TEST-UNIT-027 FR-002
1.4.7 Key namespacing (commandcenter.state.*) 30 min Frontend TEST-UNIT-028 CONST-X-006
1.4.8 Fallback to localStorage-only when gateway disconnected 30 min Frontend New FR-002

Deliverable: bridge/state-sync.js — 8 unit tests passing.

1.5 GadgetRegistry (lib/registry.js)

# Task Time Owner Tests Req IDs
1.5.1 register(manifest) — validate manifest schema 1 hr Frontend TEST-UNIT-036, 040 FR-004
1.5.2 load(id, basePath) — dynamic import() of ES module 1 hr Frontend TEST-UNIT-037 FR-004
1.5.3 resolveDependencies(id) — ensure deps loaded before mount 1 hr Frontend New FR-004
1.5.4 unload(id) — remove from DOM and memory 30 min Frontend New FR-004
1.5.5 Error handling for invalid manifests 30 min Frontend TEST-UNIT-039 FR-004
1.5.6 basePath resolution for gadget entry points 30 min Frontend TEST-UNIT-038 FR-004

Deliverable: lib/registry.js — 5+ unit tests passing.

1.6 Gadget Chrome (lib/chrome.js)

# Task Time Owner Tests Req IDs
1.6.1 create(gadgetId, title) — build titlebar + body container 1 hr Frontend TEST-UNIT-041 FR-007
1.6.2 Minimize button — toggle body visibility 30 min Frontend TEST-UNIT-042 FR-007
1.6.3 Close button — trigger unmount 30 min Frontend TEST-UNIT-043 FR-007
1.6.4 Status bar — render connection info 30 min Frontend TEST-UNIT-044 FR-007
1.6.5 Resize handles — mouse drag to resize 1 hr Frontend New US-012
1.6.6 Extension slot — custom buttons in titlebar 1 hr Frontend New CONST-IV-009

Deliverable: lib/chrome.js — 4+ unit tests passing.

1.7 GadgetBridge (bridge/gadget-bridge.js)

# Task Time Owner Tests Req IDs
1.7.1 mapEventToRPC(busEvent, rpcMethod, paramsMapper) 1 hr Frontend New FR-003
1.7.2 mapSubscriptionToEvent(topic, busEvent, payloadMapper) 1 hr Frontend New FR-003
1.7.3 call(method, params) — proxy to WebSocketBridge 30 min Frontend New FR-003
1.7.4 subscribe(topic, filters, callback) — proxy to WebSocketBridge 30 min Frontend New FR-003
1.7.5 Namespace mapping: session.*, cxp.*, volk.*, knowledge.*, governance.* 1 hr Frontend New FR-003
1.7.6 Bidirectional event translation 1 hr Frontend New FR-003

Deliverable: bridge/gadget-bridge.js — tested via integration.

1.8 NotificationManager (bridge/notification-manager.js)

# Task Time Owner Tests Req IDs
1.8.1 Subscribe to governance.decisions 30 min Frontend TEST-UNIT-029 FR-005
1.8.2 Subscribe to kernel.events (severity ≥ warning) 30 min Frontend TEST-UNIT-030 FR-005
1.8.3 Subscribe to session.events (type = decision_needed) 30 min Frontend TEST-UNIT-031 FR-005
1.8.4 Priority ordering: info < warning < error < critical 30 min Frontend TEST-UNIT-032 FR-005
1.8.5 Desktop notification via Notification API 1 hr Frontend TEST-UNIT-033 FR-005
1.8.6 Max 200 notifications stored (oldest discarded) 30 min Frontend TEST-UNIT-034 FR-005
1.8.7 Unread count tracking 30 min Frontend TEST-UNIT-035 FR-005
1.8.8 Click-to-navigate to relevant gadget 1 hr Frontend New US-010
1.8.9 "Mark all read" and per-notification dismiss 30 min Frontend New US-010

Deliverable: bridge/notification-manager.js — 7+ unit tests passing.

1.9 CommandCenterApp (app.js)

# Task Time Owner Tests Req IDs
1.9.1 initialize(config) — bootstrap 5 subsystems 1 hr Frontend E2E FR-001–007
1.9.2 mountDefaultLayout() — load default profile gadgets 1 hr Frontend E2E US-012
1.9.3 Theme system — light/dark toggle, system pref detection 2 hr Frontend E2E FR-006
1.9.4 Layout profiles — Development (5 gadgets), Monitoring (4 gadgets) 2 hr Frontend E2E US-012
1.9.5 Connection status indicator in header 1 hr Frontend E2E FR-001
1.9.6 shutdown() — disconnect, persist, unmount 1 hr Frontend New FR-001

Deliverable: app.js — E2E tests for page load, header, theme, layout, connection status.

1.10 HTML Entry Point & Styles

# Task Time Owner Tests Req IDs
1.10.1 index.html — import maps, zero-build ES modules, no bundler 1 hr Frontend E2E FR-001
1.10.2 styles/common.css — CSS custom properties, light/dark themes 2 hr Frontend Visual FR-006
1.10.3 styles/command-center.css — grid layout, header, gadget chrome 2 hr Frontend Visual US-012
1.10.4 System preference detection (prefers-color-scheme) 30 min Frontend E2E FR-006
1.10.5 No flash of unstyled content (theme applied before first paint) 30 min Frontend E2E FR-006

Deliverable: index.html loads in browser with correct theme, grid, and header.

Phase 1 Exit Criteria


Phase 2: P1 Production Gadgets (Batch A)

Duration: Weeks 3–5
Goal: Implement the 4 most critical observability gadgets
Parallelizable: Yes — 4 gadgets can be developed in parallel by different engineers

2.1 ProjectExplorer Gadget (gadgets/project-explorer/)

Requirements: US-001, FR-008, REQ-016-001 to 020
Estimated LOC: 173
Priority: Critical

# Task Time Tests Req IDs
2.1.1 Query knowledge.nodes for Project node on mount 1 hr E2E REQ-016-001, 002, 003
2.1.2 Display project metadata: name, version, file count, LOC 1 hr E2E REQ-016-003, 004
2.1.3 KG node summary: counts by type (File, Class, Function, Session, Iteration, Spec) 1 hr E2E REQ-016-011
2.1.4 File tree browser via knowledge.nodes (node_type=File) 2 hr E2E REQ-016-006, 007, 008
2.1.5 File tree search with debounced filtering (300ms) 1 hr E2E REQ-016-008
2.1.6 Recent sessions list (last 10) with status badges 1 hr E2E REQ-016-015, 016
2.1.7 Auto-refresh every 60 seconds 30 min E2E REQ-016-013
2.1.8 Click-through from file tree to KGExplorer (context passing) 1 hr E2E REQ-016-010

Deferred to Phase 5: Sparkline trends (REQ-016-012), iteration summary (REQ-016-005, 017), click-through to SessionManager/IterationBrowser (REQ-016-018, 019).

2.2 SessionManager Gadget (gadgets/session-manager/)

Requirements: US-002, FR-009, REQ-016-021 to 052
Estimated LOC: 198
Priority: Critical

# Task Time Tests Req IDs
2.2.1 Call session.active on mount, display session_id prominently 1 hr E2E REQ-016-021, 022
2.2.2 Display active session: goals, portfolio, duration (live timer), status 1 hr E2E REQ-016-022
2.2.3 "No active session" placeholder 30 min E2E REQ-016-025
2.2.4 "Start Session" button + dialog (goals, portfolio, purpose) 2 hr E2E REQ-016-026, 027, 028
2.2.5 "Close Session" button + dialog (summary, carryover checklist) 2 hr E2E REQ-016-029, 030, 031
2.2.6 Subscribe to session.events for real-time updates 1 hr E2E REQ-016-043, 044, 045
2.2.7 Session history table with pagination 1 hr E2E REQ-016-046, 047
2.2.8 Toast notifications for open/close results 30 min E2E REQ-016-032

Deferred to Phase 5: Deferred work management (REQ-016-033 to 039), work logging (REQ-016-040 to 042), history search/filter (REQ-016-048 to 050).

2.3 CXPFeed Gadget (gadgets/cxp-feed/)

Requirements: US-003, FR-012, REQ-016-051 to 074
Estimated LOC: 161
Priority: Critical

# Task Time Tests Req IDs
2.3.1 Subscribe to cxp.traffic on mount 30 min E2E REQ-016-051, 052, 053
2.3.2 Render packets as scrolling rows: timestamp, from, to, subject, status, thread_id 1 hr E2E REQ-016-054, 055
2.3.3 Color-coded delivery status (green/yellow/red/grey) 30 min E2E REQ-016-056
2.3.4 Click to expand full CXP payload (11 fields) 1 hr E2E REQ-016-057
2.3.5 Volk filter dropdown (from volk.list) 1 hr E2E REQ-016-060
2.3.6 Thread filter (debounced 300ms) 30 min E2E REQ-016-061
2.3.7 Delivery status filter dropdown 30 min E2E REQ-016-063
2.3.8 Multiple filters with AND semantics + "Clear Filters" 1 hr E2E REQ-016-064, 066, 067
2.3.9 Auto-scroll pause on scroll-up, resume on scroll-to-bottom 1 hr E2E REQ-016-068, 069
2.3.10 Packet count badge in titlebar 30 min E2E REQ-016-072
2.3.11 Max 5000 packets retained (oldest discarded) 30 min E2E REQ-016-059

Deferred to Phase 5: JSON syntax highlighting (REQ-016-058), subject glob filter (REQ-016-062), active filter count (REQ-016-065), jump-to-bottom button (REQ-016-070, 071), throughput indicator (REQ-016-073, 074).

2.4 VolkStatus Gadget (gadgets/volk-status/)

Requirements: US-004, FR-013, REQ-016-075 to 093
Estimated LOC: 192
Priority: Critical

# Task Time Tests Req IDs
2.4.1 Call volk.list on mount, render as cards 1 hr E2E REQ-016-075, 076
2.4.2 Card content: alias, role, health indicator, current task 1 hr E2E REQ-016-076, 077, 078, 079
2.4.3 Subscribe to volk.lifecycle for real-time updates 1 hr E2E REQ-016-080
2.4.4 CSS transition on health changes (300ms) 30 min E2E REQ-016-081
2.4.5 Task start/complete event updates 30 min E2E REQ-016-084
2.4.6 Responsive grid layout (auto columns based on width) 1 hr E2E REQ-016-090

Deferred to Phase 5: Detail panel (REQ-016-085 to 089), compact mode (REQ-016-091 to 093), slide-in animations (REQ-016-082, 083).

Phase 2 Exit Criteria


Phase 3: P1 Production Gadgets (Batch B) + Gateway Hardening

Duration: Weeks 5–7
Goal: Complete remaining P1 gadgets + ensure backend feeds real data
Parallelizable: Gadget development parallel; gateway hardening can be separate track

3.1 ClaudeChat Gadget (gadgets/claude-chat/)

Requirements: US-005, FR-016, REQ-016-094 to 118
Estimated LOC: 226

# Task Time Tests Req IDs
3.1.1 Scrollable message history (user right, Claude left) 1 hr E2E REQ-016-094, 095
3.1.2 Message input (Shift+Enter newline, Enter send) 1 hr E2E REQ-016-096
3.1.3 Send via cxp.send with dedicated thread_id 1 hr E2E REQ-016-099, 100
3.1.4 Receive responses via cxp.traffic filtered to thread_id 1 hr E2E REQ-016-101
3.1.5 Work status tracking: sent → processing → delivered 1 hr E2E REQ-016-102
3.1.6 Markdown rendering: code blocks, lists, bold, italic, links 2 hr E2E REQ-016-104 to 107
3.1.7 HTML sanitization (no script tags, no event handlers) 1 hr Unit REQ-016-108
3.1.8 "New Thread" button — fresh thread_id, clear display 30 min E2E REQ-016-109
3.1.9 Chat history persisted in localStorage (last 100 messages) 1 hr E2E REQ-016-112
3.1.10 Typing indicator (animated dots) while processing 1 hr E2E REQ-016-114, 115
3.1.11 Connection status in chat header 30 min E2E REQ-016-116, 117
3.1.12 Error responses with red styling 30 min E2E REQ-016-103

Deferred: Thread selector (REQ-016-110, 111), cross-device sync (REQ-016-113), message search (REQ-016-118), timestamps on hover (REQ-016-098).

3.2 TaskBoard Gadget (gadgets/task-board/)

Requirements: US-006, FR-010, FR-017, REQ-016-119 to 144
Estimated LOC: 224

# Task Time Tests Req IDs
3.2.1 Kanban columns: Not Started, In Progress, Completed 1 hr E2E REQ-016-119
3.2.2 Task cards: title, priority badge, assigned volk, description 1 hr E2E REQ-016-121
3.2.3 Column headers with task count 30 min E2E REQ-016-122
3.2.4 HTML5 Drag and Drop between columns 2 hr E2E REQ-016-124, 125, 126
3.2.5 Drop zone highlighting 30 min E2E REQ-016-125
3.2.6 Status change sends RPC update 1 hr E2E REQ-016-126
3.2.7 "New Task" modal: title, description, assigned volk, priority 2 hr E2E REQ-016-129 to 136
3.2.8 Query tasks via projects.tasks with status filtering 1 hr E2E REQ-016-134
3.2.9 New task appears in correct column immediately 30 min E2E REQ-016-132, 136

Deferred: Deferred column (REQ-016-123), touch drag-drop (REQ-016-127), undo (REQ-016-128), task detail panel (REQ-016-137 to 141), bidirectional sync (REQ-016-142 to 144).

3.3 QADashboard Gadget (gadgets/qa-dashboard/)

Requirements: US-007, FR-014, REQ-016-145 to 168
Estimated LOC: 179
Priority: Currently only 21% complete — biggest gap

# Task Time Tests Req IDs
3.3.1 Display test count, pass rate, coverage percentage 1 hr E2E REQ-016-145, 146, 147
3.3.2 Pass rate color: green ≥99%, yellow ≥95%, red <95% 30 min E2E REQ-016-146
3.3.3 Coverage trend sparkline (Canvas 2D, last 20 iterations) 3 hr E2E REQ-016-150, 151, 152
3.3.4 Hover tooltip on sparkline (value + date) 1 hr E2E REQ-016-152
3.3.5 Gate status: pass (green ✓), fail (red ✗), partial (yellow ▲) 1 hr E2E REQ-016-154, 155
3.3.6 Failed tests expandable section 1 hr E2E REQ-016-158, 159, 160
3.3.7 RTM progress bar: verified/total requirements 1 hr E2E REQ-016-162, 163
3.3.8 Click RTM bar → RTM Viewer gadget 30 min E2E REQ-016-164
3.3.9 "Run Tests" button sending RPC command 1 hr E2E REQ-016-167
3.3.10 Test run progress bar 1 hr E2E REQ-016-168
3.3.11 Real-time updates via kernel.events subscription 1 hr E2E REQ-016-165, 166

Deferred: Metric cards with delta (REQ-016-149), slowest tests highlight (REQ-016-161), duration trend sparkline (REQ-016-150 related).

3.4 AuditTrail Gadget (gadgets/audit-trail/)

Requirements: US-008, FR-015, REQ-016-169 to 188
Estimated LOC: 202

# Task Time Tests Req IDs
3.4.1 Query governance.query on mount with default time range 1 hr E2E REQ-016-169
3.4.2 Sortable table: timestamp, actor, action, resource, result, latency 1 hr E2E REQ-016-170, 171, 172
3.4.3 Pagination: 50 items/page 1 hr E2E REQ-016-173
3.4.4 Full-text search (debounced 300ms) 1 hr E2E REQ-016-174
3.4.5 Actor filter dropdown 1 hr E2E REQ-016-176
3.4.6 Action type filter dropdown 1 hr E2E REQ-016-177
3.4.7 Result filter dropdown 1 hr E2E REQ-016-178
3.4.8 Active filter summary bar with remove buttons 1 hr E2E REQ-016-180
3.4.9 Click row → expand full JSON event detail 1 hr E2E REQ-016-184
3.4.10 Constitutional article violations highlighted 1 hr E2E REQ-016-181

Deferred: Date range picker (REQ-016-175), article filter (REQ-016-179), escalation chains (REQ-016-182, 183), CSV/JSON export (REQ-016-185 to 188).

3.5 Gateway Hardening (Backend Track)

# Task Time Owner Verification
3.5.1 VolkHandler.handle_list() — return real volk instances from runtime 2 hr Backend Contract test passes
3.5.2 VolkHandler.handle_lifecycle() — publish real lifecycle events 2 hr Backend E2E test sees events
3.5.3 CXPFeedHandler — stream real CXP packets via pub/sub 2 hr Backend CXPFeed gadget receives packets
3.5.4 KnowledgeHandler.handle_query() — validate read-only Cypher 2 hr Backend KGExplorer can query
3.5.5 GovernanceHandler.handle_query() — return real Prolog decisions 2 hr Backend AuditTrail shows real data
3.5.6 Add RPC method: tests.run — trigger pytest execution 2 hr Backend QADashboard "Run Tests" works
3.5.7 Add RPC method: tests.status — return current test run progress 1 hr Backend Progress bar updates
3.5.8 Add RPC method: metrics.current — return test count, coverage, pass rate 1 hr Backend QADashboard metrics load

Deliverable: All gateway handlers return real data. No stubs or hardcoded values remain.

Phase 3 Exit Criteria


Phase 4: P2 Gadgets & Personal Productivity

Duration: Weeks 7–8
Goal: Complete remaining gadgets + personal productivity features
Parallelizable: Yes — personal gadgets are independent

4.1 KGExplorer Gadget (gadgets/kg-explorer/)

Requirements: US-009, FR-019, REQ-016-189 to 208

# Task Time Tests Req IDs
4.1.1 Force-directed graph rendering (Canvas 2D API) 4 hr E2E REQ-016-189
4.1.2 Node coloring by type (blue File, green Class, etc.) 1 hr E2E REQ-016-190
4.1.3 Node size proportional to relationship count 1 hr E2E REQ-016-191
4.1.4 Labeled directed edges with arrowheads 1 hr E2E REQ-016-192
4.1.5 Zoom (scroll wheel, 0.1x–5x) 1 hr E2E REQ-016-194
4.1.6 Pan (mouse drag on background) 1 hr E2E REQ-016-195
4.1.7 Node drag repositioning 1 hr E2E REQ-016-196
4.1.8 Click node → property panel 1 hr E2E REQ-016-197, 199–201
4.1.9 Double-click → expand relationships 1 hr E2E REQ-016-198
4.1.10 Cypher input with "Run Query" button 1 hr E2E REQ-016-203, 205
4.1.11 Query results as tabular data 1 hr E2E REQ-016-206
4.1.12 Query error messages inline 30 min E2E REQ-016-208

Deferred: Auto-complete (REQ-016-204), query history (REQ-016-207), full-text search (FR-019 related).

4.2 NotificationCenter Gadget (gadgets/notification-center/)

Requirements: US-010, FR-005, REQ-016-209 to 230

# Task Time Tests Req IDs
4.2.1 Subscribe to governance/kernel/session events 30 min E2E REQ-016-209–213
4.2.2 Desktop notification permission + display 1 hr E2E REQ-016-214–216
4.2.3 Click desktop notification → focus tab + open gadget 1 hr E2E REQ-016-217
4.2.4 Notification bell with unread count badge 30 min E2E REQ-016-219
4.2.5 Dropdown: last 50 notifications 1 hr E2E REQ-016-220, 221
4.2.6 Click notification → navigate to relevant gadget 1 hr E2E REQ-016-222
4.2.7 "Mark All Read" + per-notification dismiss 30 min E2E REQ-016-223, 224
4.2.8 Priority styling: info/blue, warning/yellow, error/red, critical/pulsing red 30 min E2E REQ-016-225
4.2.9 Notification settings panel 1 hr E2E REQ-016-226–230

4.3 Personal Productivity Gadgets

# Task Time Tests Req IDs
4.3.1 PrayerTimes gadget (wraps existing portal gadget) 2 hr E2E REQ-016-231–234
4.3.2 Flashcards gadget (Italian/Arabic, CSV data) 2 hr E2E REQ-016-289
4.3.3 Iqama Countdown gadget 1 hr E2E REQ-016-290
4.3.4 Time-to-POI gadget 2 hr E2E REQ-016-291
4.3.5 Chronus Sequencer gadget 2 hr E2E REQ-016-292
4.3.6 Settings gadget (1125 LOC) 3 hr E2E REQ-016-293
4.3.7 Embed gadgets (iframe) 1 hr E2E REQ-016-294
4.3.8 Todoist integration (API token, today's tasks, completion toggle) 3 hr E2E REQ-016-235–238
4.3.9 All personal gadgets function independently when gateway disconnected 1 hr E2E CONST-IX-004

4.4 Theme & Layout Polish

# Task Time Tests Req IDs
4.4.1 Named layout profiles: save, switch, reset to default 2 hr E2E US-012
4.4.2 Gadget minimize/maximize/wide modes 1 hr E2E US-012
4.4.3 Reset to default layout button 30 min E2E US-012 (deferred AC)
4.4.4 Layout persistence via StateSync 1 hr E2E US-012

Phase 4 Exit Criteria


Phase 5: Testing, Compliance & Performance

Duration: Weeks 8–10
Goal: Validate the entire system against spec, constitution, and performance budget
Parallelizable: Test categories can run in parallel

5.1 Contract & Integration Tests

# Task Time Tests
5.1.1 Contract: session.list request/response schema 1 hr TEST-CONTRACT-001, 002
5.1.2 Contract: session.get valid session_id param 1 hr TEST-CONTRACT-003
5.1.3 Contract: projects.list request/response schema 1 hr TEST-CONTRACT-004
5.1.4 Contract: subscribe valid channel name enum 1 hr TEST-CONTRACT-005
5.1.5 Contract: unsubscribe valid subscription_id 1 hr TEST-CONTRACT-006
5.1.6 Contract: RPC error codes match gateway catalog 1 hr TEST-CONTRACT-007
5.1.7 Contract: push notification envelope schema 1 hr TEST-CONTRACT-008
5.1.8 Integration: SessionHandler returns live data 1 hr TEST-INTEG-001
5.1.9 Integration: ProjectsHandler returns live data 1 hr TEST-INTEG-002
5.1.10 Integration: Gadget receives real push notification 1 hr TEST-INTEG-003
5.1.11 Integration: State round-trips localStorage ↔ remote 1 hr TEST-INTEG-004
5.1.12 Integration: Each P1 gadget loads, renders, responds to events 2 hr TEST-INTEG-005
5.1.13 Integration: Cross-browser (Chrome, Safari) 2 hr TEST-INTEG-006
5.1.14 Integration: Accessibility ARIA landmarks 1 hr TEST-INTEG-007
5.1.15 Integration: Keyboard navigation 1 hr TEST-INTEG-008

5.2 Performance Tests

# Task Time Tests Target
5.2.1 60fps during gadget panel scrolling 2 hr TEST-PERF-001 60fps
5.2.2 Initial render < 100ms 1 hr TEST-PERF-002 < 100ms
5.2.3 Event dispatch latency < 16ms 1 hr TEST-PERF-003 < 16ms
5.2.4 Gadget mount/unmount < 50ms 1 hr TEST-PERF-004 < 50ms
5.2.5 WebSocket reconnect < 2s on network restore 2 hr TEST-PERF-005 < 2s
5.2.6 Memory usage < 100MB with 10 gadgets 1 hr New < 100MB
5.2.7 Bundle size < 2MB initial load 1 hr New < 2MB

5.3 Accessibility Tests

# Task Time
5.3.1 Keyboard navigation: Tab/Enter/Escape on all controls 2 hr
5.3.2 ARIA labels on all interactive elements 2 hr
5.3.3 Color contrast ratio ≥ 4.5:1 1 hr
5.3.4 Focus indicators visible 1 hr
5.3.5 Screen reader compatibility 2 hr
5.3.6 No information conveyed by color alone 1 hr

5.4 Security Tests

# Task Time
5.4.1 XSS prevention: all user input sanitized 2 hr
5.4.2 CSP headers validated 1 hr
5.4.3 Token storage: encrypted in localStorage (Web Crypto API) 1 hr
5.4.4 No eval(), new Function(), setTimeout(string) 30 min
5.4.5 Markdown sanitization blocks script tags 1 hr

5.5 Failure Scenario Tests

# Task Time
5.5.1 Gateway disconnect → read-only mode 1 hr
5.5.2 Gateway disconnect → RPC queue (max 100) 1 hr
5.5.3 Gateway reconnect → flush queue, re-subscribe 1 hr
5.5.4 Gadget error → error boundary catches, other gadgets unaffected 1 hr
5.5.5 Subscription lost → auto re-subscription 1 hr
5.5.6 RPC timeout → structured error + retry option 1 hr
5.5.7 localStorage quota exceeded → eviction + warning 1 hr
5.5.8 Rapid reconnects (race condition) 1 hr

5.6 Constitutional Compliance Review

# Task Time Target
5.6.1 Article I: Agent Autonomy — verify dashboard observes but never overrides 2 hr 8/10
5.6.2 Article II: Prolog SSOT — verify all auth through gateway, no hardcoded rules 2 hr 10/10
5.6.3 Article III: Session Isolation — verify no cross-session data leak 2 hr 10/12
5.6.4 Article IV: Hooks — verify plugin gadget loading, custom themes 1 hr 8/10
5.6.5 Article V: Minimal Core — verify core < 5000 lines, gadgets dynamic 1 hr 8/10
5.6.6 Article VI: JS ES2024 — ESLint + Prettier CI, no var, no eval 1 hr 18/20
5.6.7 Article VII: No Mocks — verify real WS, real DOM, real events in tests 2 hr 8/10
5.6.8 Article VIII: Observability — metrics tracking, structured logging 2 hr 16/20
5.6.9 Article IX: Graceful Degradation — failure injection tests 2 hr 16/20
5.6.10 Article X: Versioning — API_VERSION checked, namespacing 1 hr 8/10
5.6.11 Article XI: Documentation — all APIs documented 1 hr 8/10

Target: 128/142 (90%) constitutional items verified.

5.7 Performance Budget Validation

Metric Target Validation Method
Gadget initial render < 100ms Playwright performance trace
WebSocket reconnect < 3s Network throttling + timer
RPC round-trip p95 < 200ms Latency histogram in tests
CXP feed scroll 60fps requestAnimationFrame timing
Theme switch < 50ms Visual regression test
Initial page load < 2MB Lighthouse bundle analysis
Memory (10 gadgets) < 100MB performance.memory sampling
Event delivery < 200ms End-to-end latency test

Phase 5 Exit Criteria


Appendix A: Dependency Graph

Phase 0 ──────────────────────────────────────────────────────────────►
  │
  ├──► Spec consolidation (0.1) ──┐
  │                                 │
  ├──► Gateway hardening (0.2) ────┼──► Phase 1 ──► Phase 2 ──► Phase 3 ──► Phase 4 ──► Phase 5
  │                                 │     ▲           ▲           ▲           ▲           ▲
  ├──► Contract tests (0.3) ───────┘     │           │           │           │           │
  │                                      │           │           │           │           │
  └──► Scaffold (0.4) ──────────────────┘           │           │           │           │
                                                    │           │           │           │
Phase 1: Portal Framework ──────────────────────────┘           │           │           │
  ├── lib/shared.js                                             │           │           │
  ├── lib/bus.js                                                │           │           │
  ├── bridge/websocket-bridge.js                                │           │           │
  ├── bridge/state-sync.js                                      │           │           │
  ├── lib/registry.js                                           │           │           │
  ├── lib/chrome.js                                             │           │           │
  ├── bridge/gadget-bridge.js                                   │           │           │
  ├── bridge/notification-manager.js                            │           │           │
  ├── app.js                                                    │           │           │
  └── index.html + styles                                       │           │           │
                                                                │           │           │
Phase 2: P1 Batch A ────────────────────────────────────────────┘           │           │
  ├── gadgets/project-explorer/                                             │           │
  ├── gadgets/session-manager/                                              │           │
  ├── gadgets/cxp-feed/                                                     │           │
  └── gadgets/volk-status/                                                  │           │
                                                                            │           │
Phase 3: P1 Batch B + Gateway ──────────────────────────────────────────────┘           │
  ├── gadgets/claude-chat/                                                              │
  ├── gadgets/task-board/                                                               │
  ├── gadgets/qa-dashboard/                                                             │
  ├── gadgets/audit-trail/                                                              │
  └── backend: volk.list, cxp.traffic, tests.run, metrics.current                       │
                                                                                        │
Phase 4: P2 Gadgets ────────────────────────────────────────────────────────────────────┘
  ├── gadgets/kg-explorer/
  ├── gadgets/notification-center/
  ├── gadgets/prayer-times/
  ├── gadgets/flashcards/
  ├── gadgets/iqama-countdown/
  ├── gadgets/time-to-poi/
  ├── gadgets/chronus-sequencer/
  ├── gadgets/settings/
  ├── gadgets/embed/
  └── theme/layout polish

Phase 5: Validation
  ├── contract tests
  ├── integration tests
  ├── performance tests
  ├── accessibility tests
  ├── security tests
  ├── failure scenarios
  └── constitutional compliance

Appendix B: Risk Register

ID Risk Probability Impact Mitigation
R1 Gateway schema changes during frontend development break contract tests Medium High Lock RPC schemas in Phase 0. Version gateway protocol.
R2 Neo4j query performance > 10s timeout on large KG (558K nodes) Medium High Add query timeouts, pagination, indexes. Fallback to cached data.
R3 Canvas 2D performance inadequate for large KG graphs Low Medium Implement WebGL fallback for KGExplorer. Limit initial node count.
R4 WebSocket reconnect race conditions with rapid disconnect/reconnect Medium Medium Implement connection state machine. Deduplicate subscriptions.
R5 localStorage quota exceeded on long-running sessions Low Medium Implement LRU eviction. Compress stored data.
R6 Browser compatibility — Safari Notification API, ES2024 features Low Medium Test on target browsers (Chrome 90+, Firefox 88+, Safari 14+). Polyfill if needed.
R7 Scope creep — personal gadgets (Todoist, Gmail) require OAuth flows Medium Medium Defer to post-MVP. Implement prayer times + flashcards first (no OAuth).
R8 Team bandwidth — 8–10 weeks assumes 1 FTE; may stretch with parallel work Medium Medium Prioritize P1 gadgets. P2 gadgets can ship in follow-up release.
R9 Spec drift — requirements change during implementation Low High Freeze spec at Phase 0. Changes require approval and traceability update.
R10 Test infrastructure — Playwright/Vitest setup issues Low Low Use standard configs. Mock WS server already specified in testing.md.

Appendix C: Definition of Done

Per-Task Definition of Done

  1. Code complete: Implementation matches spec requirement IDs
  2. Tests pass: Unit + E2E tests for the feature pass in CI
  3. Lint clean: ESLint + Prettier pass with zero warnings
  4. Traceability: @traces decorator on all new Python classes/methods
  5. No stubs: All data from real backend (Neo4j, gateway, runtime)
  6. Documented: JSDoc on all public JS classes/methods
  7. Reviewed: Code review approval (pre-commit hook passes)

Per-Phase Definition of Done

  1. All phase exit criteria met (see each phase)
  2. Contract tests pass for all RPC methods touched in the phase
  3. Integration tests pass for end-to-end flows
  4. No console errors in browser during E2E test run
  5. Performance budget not exceeded for new features
  6. Commit to git with session tracking (session work ...)

Per-Project Definition of Done

  1. All 294 requirements in requirements.md marked [x]
  2. Constitutional compliance ≥ 90% (128/142)
  3. 91+ tests passing across all categories
  4. Performance budget validated
  5. Accessibility audit passes WCAG 2.1 AA
  6. Security audit: 0 critical vulnerabilities
  7. SPEC-051 deprecated and archived
  8. vizint-ui/ committed with README, package.json, and CI config

Appendix D: Traceability Matrix

Requirement Phase Task Test Status
REQ-016-258 1 1.3.1 TEST-UNIT-009 Planned
REQ-016-259 1 1.3.5 TEST-UNIT-012, 013 Planned
REQ-016-260 1 1.3.7 TEST-UNIT-018, 019 Planned
REQ-016-261 1 1.3.1 TEST-UNIT-009 Planned
REQ-016-262 1 1.7.1–1.7.4 Integration Planned
REQ-016-265 1 1.2.1 TEST-UNIT-001 Planned
REQ-016-266 1 1.2.5 TEST-UNIT-005, 006 Planned
REQ-016-267 1 1.2.7 New Planned
REQ-016-268 1 1.5.1 TEST-UNIT-036 Planned
REQ-016-269 1 1.5.1 TEST-UNIT-040 Planned
REQ-016-270 1 1.5.6 TEST-UNIT-038 Planned
REQ-016-271 1 1.2.6, 1.6.3 TEST-UNIT-007, 043 Planned
REQ-016-272 1 1.6.1 TEST-UNIT-041 Planned
REQ-016-273 1 1.4.1 TEST-UNIT-021 Planned
REQ-016-274 1 1.4.4, 1.4.5 TEST-UNIT-025, 026 Planned
REQ-016-275 1 1.4.2 TEST-UNIT-024 Planned
REQ-016-276 1 1.4.6 TEST-UNIT-027 Planned
REQ-016-277 1 1.8.5 TEST-UNIT-033 Planned
REQ-016-278 1 1.8.6 TEST-UNIT-034 Planned
REQ-016-279 1 1.8.1–1.8.3 TEST-UNIT-029–031 Planned
REQ-016-280 1 1.10.2 E2E Planned
REQ-016-281 1 1.10.4 E2E Planned
REQ-016-282 1 1.10.2 E2E Planned
REQ-016-283 1 1.9.4 E2E Planned
REQ-016-284 1 1.9.4 E2E Planned
REQ-016-285 1 1.9.1 E2E Planned
REQ-016-286 5 5.1.12 TEST-INTEG-005 Planned
REQ-016-287 1 All unit tests 59 tests Planned
REQ-016-288 1 1.3.5 TEST-UNIT-012 Planned
REQ-016-289 4 4.3.2 E2E Planned
REQ-016-290 4 4.3.3 E2E Planned
REQ-016-291 4 4.3.4 E2E Planned
REQ-016-292 4 4.3.5 E2E Planned
REQ-016-293 4 4.3.6 E2E Planned
REQ-016-294 4 4.3.7 E2E Planned

Appendix E: File Inventory

New Files to Create

vizint-ui/
├── package.json
├── package-lock.json
├── vitest.config.js
├── playwright.config.js
├── .eslintrc.json
├── .prettierrc
├── index.html
├── app.js
├── lib/
│   ├── portal.js
│   ├── bus.js
│   ├── registry.js
│   ├── chrome.js
│   ├── shared.js
│   ├── atlas.js
│   └── chronus.js
├── bridge/
│   ├── websocket-bridge.js
│   ├── gadget-bridge.js
│   ├── state-sync.js
│   └── notification-manager.js
├── gadgets/
│   ├── project-explorer/
│   │   └── gadget.js
│   ├── session-manager/
│   │   └── gadget.js
│   ├── cxp-feed/
│   │   └── gadget.js
│   ├── volk-status/
│   │   └── gadget.js
│   ├── claude-chat/
│   │   └── gadget.js
│   ├── task-board/
│   │   └── gadget.js
│   ├── qa-dashboard/
│   │   └── gadget.js
│   ├── audit-trail/
│   │   └── gadget.js
│   ├── kg-explorer/
│   │   └── gadget.js
│   ├── notification-center/
│   │   └── gadget.js
│   ├── flashcards/
│   │   ├── gadget.js
│   │   └── data.csv
│   ├── iqama-countdown/
│   │   └── gadget.js
│   ├── prayer-times/
│   │   └── gadget.js
│   ├── time-to-poi/
│   │   └── gadget.js
│   ├── chronus-sequencer/
│   │   └── gadget.js
│   ├── settings/
│   │   └── gadget.js
│   ├── embed/
│   │   └── gadget.js
│   ├── embed-web/
│   │   └── gadget.js
│   ├── runway-viewport/
│   │   └── gadget.js
│   ├── chronus-dev/
│   │   └── gadget.js
│   ├── atlas-debug/
│   │   └── gadget.js
│   ├── helloworld/
│   │   └── gadget.js
│   ├── helloworld2/
│   │   └── gadget.js
│   ├── helloworld-settings/
│   │   └── gadget.js
│   ├── daily/
│   │   └── gadget.js
│   ├── worldtz/
│   │   └── gadget.js
│   ├── eom/
│   │   └── gadget.js
│   └── prayertimes-chronus/
│       └── gadget.js
├── styles/
│   ├── common.css
│   └── command-center.css
├── providers/
│   ├── chronus_civil_provider.js
│   └── chronus_prayerTimes_provider.js
├── configs/
│   └── command-center.json
└── tests/
    ├── unit/
    │   ├── shared.test.js
    │   ├── bus.test.js
    │   ├── websocket-bridge.test.js
    │   ├── state-sync.test.js
    │   ├── registry.test.js
    │   ├── chrome.test.js
    │   └── notification-manager.test.js
    ├── e2e/
    │   └── dashboard.spec.js
    ├── contracts/
    │   ├── session.schema.json
    │   ├── projects.schema.json
    │   └── rpc.contract.test.js
    └── helpers/
        └── ws-test-server.js

Existing Files to Modify

specs/051-vizint-ui/spec.md                        # Add deprecation notice
specs/016-vizint-command-center/checklists/
  ├── requirements.md                               # Mark items [x] as completed
  ├── constitutional.md                             # Mark items [x] as completed
  └── testing.md                                    # Mark items [x] as completed
src/orchestrata_ultimate/gateway/handlers/session.py  # Remove hardcoded data
src/orchestrata_ultimate/gateway/handlers/volk.py     # Add lifecycle pub/sub
src/orchestrata_ultimate/gateway/handlers/cxp.py      # Add traffic streaming
src/orchestrata_ultimate/gateway/rpc.py              # Add new RPC methods
.github/workflows/
  └── ci.yml                                         # Add vizint-ui test steps

Appendix F: Effort Summary

Phase Tasks Estimated Hours Engineer
0 19 ~24 hrs Backend + Frontend
1 47 ~56 hrs Frontend
2 26 ~32 hrs Frontend
3 35 ~44 hrs Frontend + Backend
4 24 ~32 hrs Frontend
5 40 ~48 hrs QA + Frontend
TOTAL 191 ~236 hrs ~8–10 weeks @ 60% utilization

End of Implementation Plan