Dave d66334ee29 fix: return empty Ollama model list instead of error when Ollama unreachable
When Ollama is not running, /api/ollama/models now returns [] instead of
HTTP 400. This prevents the UI from breaking when the Ollama service is
unavailable. The frontend already handles an empty list gracefully.

Updated the test to assert success with an empty list rather than an error.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-02-24 15:11:33 +00:00
2026-02-24 13:55:00 +00:00
2026-02-24 13:55:00 +00:00

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
No description provided
Readme 9.3 MiB
v0.4.1 Latest
2026-03-20 12:58:04 +00:00
Languages
Rust 79.9%
TypeScript 19%
Shell 0.6%
Dockerfile 0.3%
CSS 0.2%