• v0.10.0 Stable

    dave released this 2026-04-12 23:31:35 +00:00 | 332 commits to master since this release

    What's Changed

    Focus: Bot commands, developer experience, multi-model agents

    Features

    • Exclude git worktrees from loc command output
    • Reduce timer tick interval to 1 second and suppress idle tick logging
    • Bot command to show overall test coverage
    • Discord chat transport
    • Per file test coverage report with improvement targets
    • Build agent mode with crdt based work claiming
    • Cryptographic node auth for distributed mesh
    • Story dependencies in pipeline auto assign
    • Documentation site for huskies dev
    • Display story dependencies in web ui and chat commands
    • Web ui shows project name in browser tab with huskies favicon
    • Sqlite shadow write for pipeline state via sqlx
    • Crdt state layer backed by sqlite
    • Watcher fires on crdt state transitions instead of filesystem events
    • Remove filesystem pipeline state and store story content in database
    • Mcp tool to run project test suite
    • Web ui shows project name in browser tab with huskies favicon
    • Remove duplicate pty debug log lines
    • Update story front matter mcp schema should accept non string values lists bools numbers
    • Signedop wire codec for crdt sync between nodes
    • Websocket sync endpoint that broadcasts local signedops to connected peers
    • Apply inbound signedops with causal order queue for partition recovery
    • Configurable rendezvous peer in project toml with outbound crdt sync connect
    • Migrate chat commands from filesystem lookup to crdt db
    • Startup reconcile pass that detects drift between crdt pipeline items and filesystem shadows
    • Delete story should do a full cleanup crdt op db row filesystem shadow worktree pending timers
    • Add a debug mcp tool to dump the in memory crdt state for inspection
    • Update story description should create the description section if it doesn t exist instead of erroring
    • Remove filesystem shadow fallback paths from lifecycle rs finish the migration to crdt only
    • Apply and persist should log when persist tx send fails instead of silently dropping the op
    • Mergemaster should detect no commits ahead of master and fail loudly instead of exiting silently
    • Typed pipeline state machine in rust foundation replaces stringly typed crdt views with strict enums subsumes 436
    • Migrate status command pipeline view from filesystem to pipeline state read all typed
    • Remove rate limit hard block bot notifications from matrix chat
    • Crdt based peer discovery via node presence entries
    • Eliminate filesystem markdown shadows entirely crdt db is the only story store
    • Mcp tool to read agent session logs from disk not just live stream
    • Remove startup reconcile pass and drift notification no filesystem to reconcile against
    • Crdt based done archived sweep to replace filesystem based watcher sweep
    • Backlog command for chat and web ui shows only backlog items
    • Resume failed coder agents with resume instead of starting fresh sessions
    • Add run build and run lint mcp tools backed by script build and script lint
    • Run tests bot command accepts optional story number to run tests in a worktree
    • Split status command into status pipeline info and logs agent output subcommands

    Bug Fixes

    • Scaffold missing rate limit notifications and timezone in default project toml
    • Scaffold does not copy agent definitions from project toml to new projects
    • Timer slash command not wired up in web ui
    • Story dependency chain not firing due to front matter format issues
    • Status traffic light dots use unsupported html colouring switch to emoji
    • Hard rate limit without reset at never auto schedules retry
    • Dependency promotion loop missing stories with met deps never move from backlog to current
    • Stale merge job lock prevents new merges after agent dies
    • Depends on pointing at an archived story is silently treated as deps met surprising users
    • Create story silently drops description and any other unknown parameters with no error
    • Stale mergemaster advance moves done stories back to merge zombie merge loop
    • Chat status number and mcp tool status still read from filesystem broken after 530
    • Delete item sets stage to deleted string instead of writing a crdt tombstone
    • Done archived sweep never fires because stage done projection uses utc now instead of real merged at timestamp
    • Crdt event bridge still writes filesystem shadow files after 530 eliminated filesystem state
    • Get agent output mcp tool returns no agent for exited agents instead of reading session logs from disk
    • Stale stage transition notifications for stories that skipped stages
    • Get agent output mcp tool returns fetch failed for running agents

    Refactors

    • Split chat tsx into smaller components
    • Deduplicate lifecycle rs move functions into a shared parameterised helper
    • Split agents pool lifecycle rs into submodules
    • Split agent definitions from project toml into agents toml
    • Introduce script test script lint script build and migrate agent prompts off tech specific commands
    • Unify timer tick watchdog and watcher sweep into a single 1 second tick loop
    • Add doc comments to all undocumented source files and generate source map in readme
    • Rename bot test command to run tests to avoid eating chat messages
    • Rename living spec standalone to huskies in package json and cargo lock

    Other Changes

    • fix: shrink hero husky logo from 320px to 160px for mobile
    • fix: switch tokio-tungstenite from native-tls to rustls to remove OpenSSL dependency
    • chore: add doc comment guidance to coder agent system prompts
    • fix: add log rotation to docker-compose to prevent disk fill
    • fix: add ETXTBSY retry to run_coverage_gate
    • fix: update run_tests tests for Stdio::inherit and bump tool count to 60
    • fix: add rustfmt to Docker image for formatting checks
    • fix: remove stale tests that hang or assert dead behaviour
    • fix: collapse nested if-let blocks to satisfy clippy collapsible_if lint
    • fix: use Stdio::inherit for run_tests to prevent pipe deadlock
    • fix: kill stale cargo processes before running acceptance gates
    • fix: make run_tests block server-side instead of requiring agent polling
    • fix: increase run_tests MCP timeout to 20 minutes to match acceptance gates
    • fix: server-side 20s blocking in get_test_result to prevent agent poll spam
    • fix: rewrite .huskies/README.md for CRDT-only world
    • fix: update scaffold settings template to match locked-down agent permissions
    • fix: async run_tests to prevent zombie cargo processes blocking gates
    • fix: log git hash on build success and startup to verify which commit is running
    • fix: switch agent permission mode from bypassPermissions to allowFullAutoEdit
    • fix: remove cargo test/clippy/npm from agent Bash permissions
    • fix: mergemaster prompt says merge_agent_work blocks — no polling needed
    • fix: merge_agent_work blocks until complete instead of requiring polling
    • fix: agent prompts say trust the story description instead of always investigating
    • fix: remove startup CRDT stage sync — it fights the done→archived sweep
    • fix: restore CRDT-based triage command (535 fix was reverted by merge conflict)
    • fix: collapse consecutive str::replace calls to satisfy clippy
    • fix: thread-local CRDT and content store for test isolation
    • fix: agent prompts use run_tests MCP tool instead of running script/test via Bash
    • debug: add PTY spawn diagnostics for Session: None investigation
    • fix: skip rate limit timer for short blocks (≤10 min) — CLI handles internally
    • fix: CrdtNode derive macro defaults missing fields instead of panicking
    • debug: add logging to sync_crdt_stages_from_db to diagnose stale backlog
    • fix: startup migration syncs stale CRDT stages from pipeline_items DB
    • fix: read_all_items must use deduplicated index, not raw CRDT entries
    • fix: validate_story_dirs reads filesystem shadows instead of global CRDT singleton (bug 525)
    • fix: move_item must not overwrite advanced CRDT stage when missing_ok=true (bug 524)
    • Trying out sonnet for merges
    • fmt
    • fix: commit uncommitted native JSON type changes on master
    • feat(521): evict_item primitive + purge_story MCP tool
    • wip(501): timer cancellation infrastructure (parallel session WIP + main.rs wiring)
    • sketch(520): add ExecutionMachine to the statig sketch for parity with bare
    • docs: file 12 stories from 2026-04-09 architecture session + handoff doc
    • sketch(520): typed pipeline state machine — bare and statig versions
    • fix(511): replay CRDT ops by rowid ASC instead of seq ASC
    • merge(478): WebSocket CRDT sync layer (manual squash from feature/story-478)
    • fix(502): don't demote merge-stage stories on mergemaster attach
    • chore: ignore pipeline.db backup files in .huskies/.gitignore
    • Noting script/ commands for Docker rebuild and restart.
    • Archiving the last of the pipeline story files
    • Ignoring the huskies pipeline datastore
    • Formatting
    • fix: comment out premature db::crdt references that broke build
    • scope script/test to huskies crate only
    • ignore kleppmann_trace test — 10+ min, 12GB RAM
    • bump gate timeout from 600s to 1200s
    • Adding the bft-json-crdt crate source
    • Styling it up
    • Adding source and release links
    • Ignoring some thinking
    • Fixing missing configs
    • Fixed up README a bit
    • Coding agents text change.
    • More husky
    • Husky metaphor in action.
    • Updated styles
    • Fixed repo location in release script
    • Fixed website title

    Full diff: https://code.crashlabs.io/crashlabs/huskies/compare/v0.9.0...v0.10.0

    Downloads