Releases: moduloTech/autodev
Releases · moduloTech/autodev
v0.6.3
Added
--statusnow shows the worker assigned to each active issue (e.g.[worker-3]), matching the poll status summary. Worker assignments are persisted to~/.autodev/workers.jsonby the running instance.--errors [IID]shows error details (message, stderr) for issues in error state. Without IID, shows all; with IID, shows a specific issue.--reset [IID]resets errored issues to pending (retry_count zeroed). Without IID, resets all; with IID, resets a specific issue.
Fixed
- Fix
datetime('now')anddatetime('now', '+N seconds')stored as literal strings instead of being evaluated by SQLite forstarted_at,finished_at, andnext_retry_atfields. This broke automatic error retries sincenext_retry_atcomparisons never matched.
v0.6.2
Added
- Poll status summary: compact status of active issues printed after each poll cycle, with worker assignments.
Changed
- Dashboard (
--status) hides completed issues by default. Use--status --allto show all.
Fixed
- Fix branch checkout on shallow clones: explicit refspec to bypass
--single-branchrestriction. - Fix
Could not process imageAPI error: validate Content-Type before passing images to Claude. - Fix Ctrl+C marking issues as errored: detect SIGINT on subprocess and re-raise
Interrupt. - Fix garbled stdout: truncate multiline log messages on console, close stdin on subprocesses.
v0.6.1
v0.6.0
Added
- Dashboard:
autodev --statusdisplays a table of all tracked issues with their state, project, MR link, and contextual comments. Color-coded by status with a summary line.
Fixed
- Fix clarification detection: compare timestamps as parsed
Timeobjects instead of raw strings. SQLite'sdatetime('now')format and GitLab's ISO 8601 format were compared lexicographically, causingneeds_clarificationissues to never detect human replies. - Fix
clarification_requested_atstored as literal string"datetime('now')"instead of evaluated timestamp.Sequel.lit()is not interpreted by Sequel::Model#update — use dataset-level update instead. - Fix GitLab image download failing with 302: follow HTTP redirects (up to 3 hops) when downloading issue attachments. GitLab redirects authenticated upload URLs, and
Net::HTTPdoes not follow redirects automatically.
v0.5.1
Fixed
- Add
loggergem to inline Gemfile for Ruby 4.0 compatibility (loggerwas removed from default gems). - Fix AASM + Sequel compatibility on Ruby 4.0: name the Issue class via
const_setbeforeinclude AASMso that AASM'sStateMachineStoreregisters under the correct key ("Issue"instead of the anonymous class name).
v0.5.0
Added
- Skills injection: auto-detect project stack (Ruby version, Rails version, database, test framework) and inject default Claude Code skills (
rails-conventions,test-patterns,database-patterns) into.claude/skills/of the cloned repo when the project doesn't provide its own. Skills are version-aware (Rails 4.x through 8.x) and DB-aware (PostgreSQL, MySQL). Existing skills are always preserved. Also detects Devise, Pundit, CanCanCan, Sidekiq, RuboCop, and API-only mode for targeted guidance. - MR discussion fix context: enrich context passed to danger-claude with issue title/description, MR description, exact line numbers, and the relevant diff hunk extracted via
git diff. Eliminates the exploration turn Claude previously needed to locate the code. - Pipeline pre-triage: classify pipeline failures using GitLab
failure_reasonbefore cloning or calling Claude. Infrastructure failures are blocked immediately — no clone, no tokens spent. Code failures skip the Claude evaluation call and go straight to fix. - Pipeline fix categorization: classify failed jobs as test/lint/build by job name, stage, and log patterns. Fix prompts are tailored per category.
- MR fixer subagent: use project-level
mr-fixersubagent with persistent memory via danger-claude's new-aflag. Accumulates fix patterns across conversations. Auto-injected if not present in the project. - Split implementation mode (
split_implementation: true): runimplementerandtest-writeragents in parallel using git worktrees. Code errors are fatal; test-writer errors are non-fatal. - Parallel agents mode (
parallel_agents: true): evaluate issue complexity and decompose into up to 4 tasks, each executed by a specialized agent in its own git worktree in parallel.
v0.4.0
Refactored
- Split single-file script into
lib/autodev/modules: errors, logger, config, database, shell_helpers, gitlab_helpers, danger_claude_runner, issue_processor, mr_fixer, pipeline_monitor, worker_pool. Entry pointbin/autodevreduced from ~2200 to 340 lines. - Extract shared
DangerClaudeRunnermodule:run_with_timeout,danger_claude_prompt,danger_claude_commit,clone_and_checkout,notify_issue, logging. Included by IssueProcessor, MrFixer, and PipelineMonitor, eliminating ~200 lines of duplication. - Extract
ShellHelpersandGitlabHelpersmodules.
Added
- AASM state machine: formalized all status transitions using the
aasmgem with Sequel::Model. Each state corresponds to exactly one action. Events with guards enforce valid transitions. - Pipeline monitoring:
checking_pipelinestate checks MR pipeline status each poll cycle. Green + no conversations →over, green + conversations →fixing_discussions, running → skip, red → retrigger once then evaluate via danger-claude. - Pipeline code fix: code-related pipeline failures are fixed directly by PipelineMonitor (
fixing_pipelinestate). Full job logs written totmp/ci_logs/files (no truncation). Each failed job fixed in a separate danger-claude call + commit. blockedstatus for issues requiring manual intervention (non-code pipeline failures, canceled/skipped pipelines).checking_specstate: specification clarity check is now a dedicated state.
Changed
- State machine rationalized: eliminated pass-through states
doneandmr_fixed. Direct transitions fromreviewing/fixing_*tochecking_pipeline. - Status renamed:
mr_pipeline_running→checking_pipeline,mr_fixing→fixing_discussions,mr_pipeline_fixing→fixing_pipeline. Automatic migration of existing DB records. - Database module simplified: replaced manual helpers with Issue Sequel::Model + AASM events.
overis the terminal success status, reached only when pipeline is green and no open conversations remain.
v0.3.0
Added
- MR comment fixing: automatically fix unresolved MR discussions (from mr-review or humans). One discussion = one danger-claude call = one commit. Discussions are resolved after fixing. Status lifecycle:
done→mr_fixing→mr_fixed→ ... →over. Configurablemax_fix_rounds(default: 3, per-project overridable). Only processes issues that still have theautodevtrigger label. - Random suffix in branch names (
autodev/{iid}-{slug}-{hex8}) to allow re-processing the same issue. Reuses the existing branch from the database if it still exists on the remote; otherwise generates a new name. - Download GitLab images from issue descriptions and comments into
.autodev-images/in the workdir so Claude can see screenshots and diagrams during implementation.
Changed
- Exclude autodev's own comments from the issue context passed to the implementation prompt.
- Log all danger-claude prompts at DEBUG level for troubleshooting.
Fixed
- Shallow clone with
target_branch: pass--branchtogit cloneso the target branch is fetched even with--depth 1.
v0.2.0
Added
- Shallow clone by default (
--depth 1) for faster cloning of large repos. - Per-project
clone_depthconfig option (0 for full clone, default: 1). - Per-project
sparse_checkoutconfig option for monorepo support. - Better branch slug generation using
i18ntransliteration (incohérent→incoherentinstead ofincohrent). --dry-runflag to poll and display which issues would be processed without side effects.- Capture and store danger-claude stdout/stderr (
dc_stdout,dc_stderrcolumns) from all calls (-pand-c) in the database for debugging and audit. - Configurable danger-claude timeout (
dc_timeout, default: 1800s/30min). Global or per-project. UsesProcess.spawnwith TERM/KILL for reliable subprocess cleanup. - Structured logging with levels (DEBUG/INFO/WARN/ERROR), timestamps, dual output (stdout + file), daily log rotation. Global logs in
~/.autodev/logs/autodev/, per-project logs in~/.autodev/logs/{project}/. Configurable vialog_dirandlog_levelin config. - Retry with exponential backoff and max retries per issue (
max_retriesdefault: 3,retry_backoffdefault: 30s). Global or per-project. Issues that exceed max retries are skipped. Backoff doubles each attempt (30s → 60s → 120s). - Partial progress recovery: on retry, if the branch was already pushed, skip directly to MR creation instead of re-implementing from scratch.
- Issue notifications: post comments on GitLab issues when processing starts, succeeds (with MR link), or fails (with error summary).
- Specification check: before implementation, analyse the spec for ambiguities via a dedicated danger-claude call. If unclear, post a comment listing questions and mark as
needs_clarification. On each poll, check for new human comments to automatically resume.
Fixed
- Label guard: labels are now updated after MR creation succeeds, preventing issues from being left in a bad state if MR creation fails.
v0.1.0
Added
- Automated GitLab issue implementation via danger-claude.
- Poll configured projects for issues with a trigger label (default:
autodev). - Clone repo, create branch, implement changes, commit, push, create MR automatically.
- GitLab label management: remove configured labels, add completion label.
- Optional headless mr-review on created MRs.
- SQLite persistence for issue tracking with status lifecycle.
- Concurrent worker pool (configurable, default 3 threads).
- 4-layer configuration: defaults,
~/.autodev/config.yml, environment variables, CLI flags. - Graceful shutdown on SIGINT/SIGTERM.
- Auto-retry of errored issues on restart.
--onceflag for single poll cycle.- Auto-generation of CLAUDE.md for projects that lack one.