Skip to content

Releases: moduloTech/autodev

v0.6.3

30 Mar 15:06

Choose a tag to compare

Added

  • --status now shows the worker assigned to each active issue (e.g. [worker-3]), matching the poll status summary. Worker assignments are persisted to ~/.autodev/workers.json by 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') and datetime('now', '+N seconds') stored as literal strings instead of being evaluated by SQLite for started_at, finished_at, and next_retry_at fields. This broke automatic error retries since next_retry_at comparisons never matched.

v0.6.2

30 Mar 13:12

Choose a tag to compare

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 --all to show all.

Fixed

  • Fix branch checkout on shallow clones: explicit refspec to bypass --single-branch restriction.
  • Fix Could not process image API 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

30 Mar 11:22

Choose a tag to compare

Fixed

  • Fix crash on transient network errors (DNS resolution, connection refused) during issue polling. The rescue clause caught only AutodevError instead of StandardError, letting Socket::ResolutionError and similar exceptions kill the process.

v0.6.0

30 Mar 11:09

Choose a tag to compare

Added

  • Dashboard: autodev --status displays 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 Time objects instead of raw strings. SQLite's datetime('now') format and GitLab's ISO 8601 format were compared lexicographically, causing needs_clarification issues to never detect human replies.
  • Fix clarification_requested_at stored 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::HTTP does not follow redirects automatically.

v0.5.1

27 Mar 16:34

Choose a tag to compare

Fixed

  • Add logger gem to inline Gemfile for Ruby 4.0 compatibility (logger was removed from default gems).
  • Fix AASM + Sequel compatibility on Ruby 4.0: name the Issue class via const_set before include AASM so that AASM's StateMachineStore registers under the correct key ("Issue" instead of the anonymous class name).

v0.5.0

26 Mar 14:33

Choose a tag to compare

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_reason before 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-fixer subagent with persistent memory via danger-claude's new -a flag. Accumulates fix patterns across conversations. Auto-injected if not present in the project.
  • Split implementation mode (split_implementation: true): run implementer and test-writer agents 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

26 Mar 10:41

Choose a tag to compare

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 point bin/autodev reduced from ~2200 to 340 lines.
  • Extract shared DangerClaudeRunner module: 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 ShellHelpers and GitlabHelpers modules.

Added

  • AASM state machine: formalized all status transitions using the aasm gem with Sequel::Model. Each state corresponds to exactly one action. Events with guards enforce valid transitions.
  • Pipeline monitoring: checking_pipeline state 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_pipeline state). Full job logs written to tmp/ci_logs/ files (no truncation). Each failed job fixed in a separate danger-claude call + commit.
  • blocked status for issues requiring manual intervention (non-code pipeline failures, canceled/skipped pipelines).
  • checking_spec state: specification clarity check is now a dedicated state.

Changed

  • State machine rationalized: eliminated pass-through states done and mr_fixed. Direct transitions from reviewing/fixing_* to checking_pipeline.
  • Status renamed: mr_pipeline_runningchecking_pipeline, mr_fixingfixing_discussions, mr_pipeline_fixingfixing_pipeline. Automatic migration of existing DB records.
  • Database module simplified: replaced manual helpers with Issue Sequel::Model + AASM events.
  • over is the terminal success status, reached only when pipeline is green and no open conversations remain.

v0.3.0

24 Mar 14:39

Choose a tag to compare

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: donemr_fixingmr_fixed → ... → over. Configurable max_fix_rounds (default: 3, per-project overridable). Only processes issues that still have the autodev trigger 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 --branch to git clone so the target branch is fetched even with --depth 1.

v0.2.0

23 Mar 09:38

Choose a tag to compare

Added

  • Shallow clone by default (--depth 1) for faster cloning of large repos.
  • Per-project clone_depth config option (0 for full clone, default: 1).
  • Per-project sparse_checkout config option for monorepo support.
  • Better branch slug generation using i18n transliteration (incohérentincoherent instead of incohrent).
  • --dry-run flag to poll and display which issues would be processed without side effects.
  • Capture and store danger-claude stdout/stderr (dc_stdout, dc_stderr columns) from all calls (-p and -c) in the database for debugging and audit.
  • Configurable danger-claude timeout (dc_timeout, default: 1800s/30min). Global or per-project. Uses Process.spawn with 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 via log_dir and log_level in config.
  • Retry with exponential backoff and max retries per issue (max_retries default: 3, retry_backoff default: 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

23 Mar 06:53

Choose a tag to compare

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.
  • --once flag for single poll cycle.
  • Auto-generation of CLAUDE.md for projects that lack one.