Files
sq/todos/SQ-009-server-skeleton.md
2026-02-27 12:15:43 +01:00

1.6 KiB

SQ-009: Server Skeleton

Status: [x] DONE Blocked by: SQ-008 Priority: High

Description

Running sq-server binary with CLI, notmad lifecycle management, health gRPC endpoint, and Axum HTTP health endpoint. Follows the fungus-server pattern exactly.

Files to Create/Modify

  • crates/sq-server/src/main.rs - entry point with logging setup
  • crates/sq-server/src/cli.rs - clap Command enum with Serve subcommand
  • crates/sq-server/src/cli/serve.rs - ServeCommand with notmad builder
  • crates/sq-server/src/state.rs - State struct with Config
  • crates/sq-server/src/grpc/mod.rs - GrpcServer as notmad::Component
  • crates/sq-server/src/grpc/health.rs - StatusService impl
  • crates/sq-server/src/grpc/error.rs - gRPC error mapping
  • crates/sq-server/src/servehttp.rs - Axum health routes

Configuration

SQ_HOST=127.0.0.1:6060          # gRPC listen address
SQ_HTTP_HOST=127.0.0.1:6062     # HTTP listen address
SQ_DATA_DIR=./data               # WAL storage directory
SQ_NODE_ID=node-1                # Unique node identifier
LOG_LEVEL=pretty                 # pretty|json|short

Acceptance Criteria

  • cargo run -p sq-server -- serve starts and listens on configured ports
  • gRPC Status RPC returns node_id
  • HTTP GET / returns 200 with health message
  • Graceful shutdown on SIGINT via notmad cancellation token
  • Logging setup matches forest/fungus pattern (pretty/json/short)

Reference Files

  • /home/kjuulh/git/src.rawpotion.io/rawpotion/fungus/crates/fungus-server/src/cli/serve.rs
  • /home/kjuulh/git/src.rawpotion.io/rawpotion/fungus/crates/fungus-server/src/state.rs