-
v0.10.0 Stable
released this
2026-04-12 23:31:35 +00:00 | 332 commits to master since this releaseWhat'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