4.7.0 (2026-05-07)
🚀 Features
- sandcastle: add roundHistory to LoopResult and plannerOutput to TaskSpec (32e774c)
- sandcastle: enrich planner with acceptance criteria and root cause hypothesis (92bffdf)
🐞 Bug Fixes
- sandcastle: add configurable agent provider (pi/opencode) (b37c57b)
- sandcastle: add missing JSDoc descriptions to satisfy lint rules (e735e7a)
- sandcastle: assign opus to actor, sonnet to planner, increase planner iterations (9f00f3d)
- sandcastle: improve PR metadata accuracy (2c4fc85)
- sandcastle: increase validation timeout to 600s (26faa36)
- sandcastle: log planner error details instead of swallowing (158355d)
- sandcastle: pre-create .local/share dirs in Dockerfile (4d43636)
- sandcastle: remove corepack prepare from Dockerfile (bd40364)
- sandcastle: revert idle timeout to 300s and remove redundant copyToWorktree (ad6edff)
- sandcastle: run validation across all workspace packages (43ea60f)
- ui: allow changing status of individual connectors (#1834) (2a98dc8)
✨ Polish
- sandcastle: add error observability and type-safe sentinels (8f159e2)
- sandcastle: generalize actor/critic loop with LoopContext and coherent API (16acd0d)
- sandcastle: improve separation of concerns and API clarity (5d9bb84)
- sandcastle: organize constants by domain with coherent naming (51b8731)
- sandcastle: remove plannerOutput from TaskSpec (fc72801)
- sandcastle: remove redundant lastFindings from LoopResult (6dec364)
- sandcastle: remove StrategyConfig type alias, inline intersection (d3aa90e)
- sandcastle: rename implement-prompt.md to actor-prompt.md (3b293b4)
- sandcastle: split AGENT_MODEL into per-role constants (8c3c3b9)
📚 Documentation
- sandcastle: fix stale JSDoc referencing empty string sentinel (dc6de0e)