All notable changes to cc-taskrunner will be documented in this file.
Format follows Keep a Changelog.
-
Blast radius preflight gate (#20) — Mission briefs now compute a blast radius via
charter blast --format jsonon file paths extracted from the prompt. Severity ladder:low(0–4 affected),medium(5–19),high(20–49),critical(50+). Tasks classified asauto_safewithcriticalseverity are refused — the runner logsTASK_BLOCKED, marks the task failed with an explanation, and returns without spawning Claude.highandcriticalseverities inject a## Blast Radius Warningsection into the mission brief so the agent knows the scope.Requires
@stackbilt/cli >= 0.10.0on PATH. Graceful no-op when charter is unavailable. Opt out entirely viaCC_DISABLE_BLAST=1. Thresholds configurable viaCC_BLAST_WARN(default20) andCC_BLAST_BLOCK(default50). Timeout viaCC_BLAST_TIMEOUT(default60s). Seed file count capped at 10 to prevent runaway prompts from exploding the blast call.Applied symmetrically to
taskrunner.shandplugin/taskrunner.sh.
-
Empty stash accumulation (#19) — The auto-stash preflight in
taskrunner.shandplugin/taskrunner.shused[[ -n "$(git status --porcelain)" ]]as the dirty-state check combined withgit stash push --include-untracked. That triggered on any dirty state including untracked noise (charter telemetry, build artifacts), which created empty stash objects that piled up indefinitely. Downstream evidence: one operator found 10 accumulated stashes, 9 of which were empty and the 10th contained only 36 lines of telemetry noise.New logic only stashes when
git diff --quietorgit diff --cached --quietdetect real tracked changes. The--include-untrackedflag was removed. After thestash push, the stash is verified against its parent; empty stashes are dropped immediately as a belt-and-suspenders guard against races.
- Project fingerprint injection — Mission briefs now include a
## Project Context (auto-generated)section whencharter surface --markdownis available on PATH. Gives Claude Code an immediate map of routes + schema tables so it doesn't burn turns exploring the codebase. Degrades gracefully if charter is not installed. Opt out viaCC_DISABLE_FINGERPRINT=1. Output capped at 80 lines to protect the prompt budget.
- Branch conflict resolution (#14) — branch cleanup now checks both local AND remote refs before creating task branches. Prior bug: only checked local refs, missed remote-only branches left by worktree cleanup. Stale PRs are auto-closed with comment. Push uses
--force-with-leasefor clean branch reuse. - max_turns_exceeded detection (#15) — Claude's
error_max_turnsJSON subtype is now detected and annotated in result text as[max_turns_exceeded]. Consumers can distinguish this from generic failures and decide whether to retry with more turns. Tasks that hit max_turns but created PRs may still be successful.
- Repo alias resolution via
repo-aliases.conffile (CC_REPO_ALIASESenv var) CC_REPOS_DIRenv var for configurable base directory for repo lookups.gitattributesto enforce LF line endings for shell scripts
- CRLF line endings across all shell scripts (caused bash parse errors on Linux/WSL)
- Repo resolution now checks: alias → direct path →
REPOS_DIR/resolved→REPOS_DIR/original
- DAG task dependencies via
blocked_byfield with automatic cascade cancellation - Issue dedup guard — skips tasks targeting the same GitHub issue as a running/completed task
- Robust completion signal detection — reduces false Exit Code 3 failures
- CLAUDE.md and
.ai/governance files - Hero banner and Discord invite badge in README
- Restructured LICENSE for GitHub detection
- OSS standardization: license copyright, branding footer
- Reliability features synced from AEGIS: PR state check, auth probe, LOC guardrail, completion heuristics, circuit breaker, failure classification, preflight
- Claude Code plugin (
plugin/) for submission to anthropics/claude-code - Deploy pipeline script (
scripts/deploy.sh)
- Background output truncation — force line-buffered stdout via
stdbuf - Git operation timeouts
- Windows-path directory pollution in
.gitignore - Redirect stdin from
/dev/nullto prevent SIGTSTP hang
- Only auto-commit task-created files, not pre-existing changes
- Initial release — autonomous task queue for Claude Code
- Safety hooks (block-interactive, safety-gate, syntax-check)
- Branch-per-task isolation with automatic PR creation
- Queue management via JSON file
--dry-run,--max,--loopflags