810608d3d8e98c014343daa1ff210ec5543c8c73
Add notify-based filesystem watcher for .story_kit/work/ that auto-commits changes with deterministic messages and broadcasts events over WebSocket. Push full pipeline state (Upcoming, Current, QA, To Merge) to frontend on connect and after every watcher event. Strip dead UI: remove ReviewPanel, GatePanel, TodoPanel, UpcomingPanel and all associated REST polling. Replace with 4 generic StagePanel components driven by WebSocket. Simplify AgentPanel to roster-only. Delete all 11 workflow HTTP endpoints and 16 request/response types from the server. Clean dead code from workflow module. MCP tools call Rust functions directly and need none of the HTTP layer. Net: ~4,100 lines deleted, ~400 added. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Living Spec Standalone (Web Server Binary)
This app runs as a single Rust web server binary that serves the Vite/React frontend and exposes APIs.
The frontend lives in the frontend/ directory.
You can also run the frontend and backend separately in development (Vite dev server + Rust API).
Running it in development
# Build the frontend
cd frontend
pnpm install
pnpm dev
# Run the server (serves embedded frontend/dist/)
cargo run
Production
# Build the release binary (also builds the frontend via build.rs)
cargo build --release
# Run the server (serves embedded frontend/dist/)
./target/release/story-kit-server
Cross-Platform Distribution
Story Kit ships as a single self-contained binary with the React frontend embedded via
rust-embed. No Rust toolchain, Node.js, or extra libraries are required on the target machine.
macOS
# Native build – no extra tools required beyond Rust + pnpm
make build-macos
# Output: target/release/story-kit-server
# Verify only system frameworks are linked (Security.framework, libSystem.B.dylib, etc.)
otool -L target/release/story-kit-server
Linux (static x86_64, zero dynamic deps)
The Linux build uses the x86_64-unknown-linux-musl target to produce a fully static binary.
Prerequisites:
# Install cross – a Rust cross-compilation tool backed by Docker
cargo install cross
# Ensure Docker Desktop (or Docker Engine) is running
Build:
make build-linux
# Output: target/x86_64-unknown-linux-musl/release/story-kit-server
# Verify the binary is statically linked
file target/x86_64-unknown-linux-musl/release/story-kit-server
# Expected: ELF 64-bit LSB executable, x86-64, statically linked
ldd target/x86_64-unknown-linux-musl/release/story-kit-server
# Expected: not a dynamic executable
Running on any Linux x86_64 machine:
# No Rust, Node, glibc, or any other library needed – just copy and run
./story-kit-server
Testing
Frontend Tests
The frontend uses Vitest for unit tests and Playwright for end-to-end tests.
cd frontend
# Run unit tests
pnpm test
# Run end-to-end tests
pnpm test:e2e
Backend Tests
This project uses nextest for running tests and cargo-llvm-cov for code coverage.
Install Tools
cargo install cargo-nextest cargo-llvm-cov
Run Tests
# Run all tests
cargo nextest run
# Run specific module
cargo nextest run search_files
# Run with verbose output
cargo nextest run --no-capture
Generate Coverage
# HTML report (opens in browser)
cargo llvm-cov nextest --html --open
# Terminal output
cargo llvm-cov nextest
# LCOV format (for CI)
cargo llvm-cov nextest --lcov --output-path lcov.info
# Clean coverage data
cargo llvm-cov clean
Configuration
- Nextest config:
.config/nextest.toml - Coverage output:
target/llvm-cov/html/index.html
Current Coverage (search_files module)
Module: commands/search.rs
├── Region Coverage: 75.36%
├── Function Coverage: 69.05%
└── Line Coverage: 72.55%
Available Test Profiles
# Development (default)
cargo nextest run
# CI with retries
cargo nextest run --profile ci
# Coverage optimized
cargo nextest run --profile coverage
Description