feat: In-app delivery, live WebSocket dashboard, Docker demo stack#4
Open
feat: In-app delivery, live WebSocket dashboard, Docker demo stack#4
Conversation
… stack Add zero-cost in-app delivery provider to Rust runtime that skips HTTP entirely (0μs latency). Instrument every pipeline stage with lock-free atomic counters for eval/delivery latency and throughput. Expose metrics via /health endpoint. Add WebSocket gateway on NestJS (standalone ws.Server attached to Fastify's HTTP server) that broadcasts delivery events and pipeline metrics in real-time. Redis stream consumer persists notifications to MongoDB and broadcasts to connected WebSocket clients. Frontend gains live WebSocket hooks, streaming notifications feed with LIVE/OFFLINE indicator, and 8-card Pipeline Performance dashboard showing throughput, eval latency, delivery count, matches, and more. Complete Docker Compose stack with ticker simulator, seed data, and multi-connector support for end-to-end demo. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Add #[derive(Default)] to InAppProvider (clippy) - Use is_some_and instead of map_or (clippy) - Exclude engine-core from NX affected test to prevent --passWithNoTests being forwarded to Rust test runner - Remove load-test-smoke job (binary was deleted in earlier cleanup) - Update node path filter: add notiflo-web, remove stale pipeline/analytics - Update README.md with accurate Docker setup and API docs - Update CLAUDE.md to reflect completed pipeline implementation Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
The nestjs-e2e job runs `nx affected -t e2e` which picks up notiflo-web-e2e (Cypress) in addition to notiflo-e2e (NestJS). Cypress tests need a running API backend + Next.js proxy, which this job doesn't provide — only Redis + MongoMemoryServer. Exclude notiflo-web-e2e to fix the false failure. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
The data-testid was on a <span> inside <Link>. Cypress clicking the span didn't reliably trigger Next.js client-side navigation. Moving the testid to the <Link> (which renders as <a>) fixes the e2e test. Also reverts the incorrect notiflo-web-e2e exclusion — the Cypress tests work fine without an API backend (pages render with empty data). Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
The nestjs-e2e job used `nx affected -t e2e` which also picked up notiflo-web-e2e (Cypress) via implicitDependencies when notiflo-web files changed. Cypress tests need a running API backend and fast dev server compilation — neither available in this job. Run `nx e2e notiflo-e2e` explicitly since that's what the job was designed for. Reverts the unnecessary Sidebar data-testid change. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
ws.Serverattached to Fastify's HTTP server at/ws/notifications. Broadcasts delivery events and pipeline metrics (polled every 5s from Rust/health). Redis stream consumer persists to MongoDB and broadcasts live.Key decisions
ws.ServerwithnoServer: trueinstead of NestJSWsAdapterbecause Fastify intercepts HTTP upgrade requests before the adapter can handle themin_appchannel whenchannelPreferencesis empty ({}) or null/healthendpoint → NestJS polls every 5s → WebSocket broadcast → React stateTest plan
cargo check --workspacepassesdocker compose up --build— full stack runs/healthendpoint returnsdeliveries_completed > 0,avg_eval_latency_us > 0🤖 Generated with Claude Code