Stabilize graph interactions and add StarIntel integration #64

Merged
lost-rob0t merged 6 commits from agent/stabilize-graph-viewport-picker into main 2026-07-26 02:48:50 +00:00
lost-rob0t commented 2026-07-26 02:30:30 +00:00 (Migrated from github.com)

What changed

  • keep active graph membership memoized across viewport-only workspace saves
  • stop rebuilding Cytoscape elements when only selection or viewport state changes
  • synchronize selection and label classes in isolated effects
  • cancel stale graph animations before Fit, Focus, route, import, or URL-node fitting
  • allow the schema field autocomplete menu to escape the editor form and layer above following controls
  • replace the one-off graph popup with searchable hierarchical canvas, node, edge, and multi-selection context menus
  • add context actions for creation, editing, relations, actors, selection/neighborhoods, graph management, layouts, copy, target submission, queue control, and corpus deletion
  • add optional starintel-server capability probing with compatibility fallback to current gserver routes
  • submit canonical v0.9 target documents and persist accepted targets locally
  • add optional RabbitMQ Web STOMP listening with canonical validation, idempotent PouchDB writes, active-graph membership, bounded prefetch, and explicit ack/nack behavior
  • install versioned CouchDB-compatible map-reduce views for core counts, relations, targets, messages, and events
  • drive dashboard review/dtype/dataset distributions through local map-reduce queries
  • document the server and queue architecture and add focused unit/E2E coverage

Server expansion follow-up

Root causes / design constraints

A pan or zoom persisted the viewport into the workspace and caused graph membership identity churn, rebuilding Cytoscape while animations were running. Selection was also coupled to element rebuilding. The field menu was absolutely positioned inside an overflowing form.

The current gserver API provides useful seed routes but lacks capability discovery, browser streaming, complete target lifecycle, and a shared versioned view contract. This PR keeps a compatibility adapter while preserving replaceable transports for the expanded server.

Browsers cannot consume AMQP 0-9-1 TCP directly, so the current optional broker path uses RabbitMQ Web STOMP. The long-term server-owned authenticated stream gateway is tracked separately.

Validation

  • git diff --check
  • npm run check
  • npm test — 24 unit files / 98 tests plus integration tests
  • npm run build
  • E2E spec updated for the hierarchical menus and integration settings; local execution was blocked only because the isolated workspace could not download the Playwright browser, so GitHub Actions is the execution gate
## What changed - keep active graph membership memoized across viewport-only workspace saves - stop rebuilding Cytoscape elements when only selection or viewport state changes - synchronize selection and label classes in isolated effects - cancel stale graph animations before Fit, Focus, route, import, or URL-node fitting - allow the schema field autocomplete menu to escape the editor form and layer above following controls - replace the one-off graph popup with searchable hierarchical canvas, node, edge, and multi-selection context menus - add context actions for creation, editing, relations, actors, selection/neighborhoods, graph management, layouts, copy, target submission, queue control, and corpus deletion - add optional starintel-server capability probing with compatibility fallback to current gserver routes - submit canonical v0.9 target documents and persist accepted targets locally - add optional RabbitMQ Web STOMP listening with canonical validation, idempotent PouchDB writes, active-graph membership, bounded prefetch, and explicit ack/nack behavior - install versioned CouchDB-compatible map-reduce views for core counts, relations, targets, messages, and events - drive dashboard review/dtype/dataset distributions through local map-reduce queries - document the server and queue architecture and add focused unit/E2E coverage ## Server expansion follow-up - Quasar tracking issue: #65 - versioned capability-discovered API: lost-rob0t/starintel-server#58 - idempotent batch ingest and target lifecycle: lost-rob0t/starintel-server#59 - authenticated RabbitMQ WebSocket gateway: lost-rob0t/starintel-server#60 - shared map-reduce view registry: lost-rob0t/starintel-server#61 - auth, observability, and integration hardening: lost-rob0t/starintel-server#62 ## Root causes / design constraints A pan or zoom persisted the viewport into the workspace and caused graph membership identity churn, rebuilding Cytoscape while animations were running. Selection was also coupled to element rebuilding. The field menu was absolutely positioned inside an overflowing form. The current gserver API provides useful seed routes but lacks capability discovery, browser streaming, complete target lifecycle, and a shared versioned view contract. This PR keeps a compatibility adapter while preserving replaceable transports for the expanded server. Browsers cannot consume AMQP 0-9-1 TCP directly, so the current optional broker path uses RabbitMQ Web STOMP. The long-term server-owned authenticated stream gateway is tracked separately. ## Validation - `git diff --check` - `npm run check` - `npm test` — 24 unit files / 98 tests plus integration tests - `npm run build` - E2E spec updated for the hierarchical menus and integration settings; local execution was blocked only because the isolated workspace could not download the Playwright browser, so GitHub Actions is the execution gate
Sign in to join this conversation.
No description provided.