fix(multi-review): fix CI crashes and clean comment output#86
Conversation
Fix two issues that prevented multi-review from working in production: 1. OIDC crash: USE_GITHUB_TOKEN=false caused opencode CLI to attempt OIDC auth fallback, crashing with "undefined is not an object". Fixed by using USE_GITHUB_TOKEN=true. 2. Parallel SQLite conflicts: Shared XDG_CACHE_HOME between parallel opencode instances caused database lock issues. Fixed by isolating each reviewer with its own temp cache directory. 3. Noisy PR comments: Raw opencode CLI output (ANSI codes, log lines, session metadata) polluted the synthesized review comment. Added _clean_output() to strip noise before posting. Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
|
发现遗漏 摘要PR 标题和 body 描述了 4 项改动,其中 3 项已实现,1 项完全缺失。 MEDIUM
|
分析看了完整代码和 diff,PR 包含以下变更:
关键发现:PR 描述和 commit message 声称添加了 有条件合并 阻塞项:
建议项:
|
|
架构合理 该 PR 对
阻塞项:无 建议项:
|
有条件合并PR 实现了 4 项声称改动中的 3 项(OIDC crash 修复、SQLite 并行冲突修复、script 存在性检查),但 阻塞项
建议项
|
|
以下是对 commit 分析本次 PR 共涉及 4 项变更:
安全风险识别
|
|
不可合并 综合审查意见所有 reviewer 一致认为 PR 实现了 4 项声称改动中的 3 项(OIDC crash 修复、SQLite 并行冲突修复、script 存在性检查),但 阻塞项:
建议项:
|
|
Asserting permissions for user Svtter... 综合审查意见所有 reviewer 一致认为 PR 实现了 4 项声称改动中的 3 项(OIDC crash 修复、SQLite 并行冲突修复、script 存在性检查),但 阻塞项:
建议项:
详细审查报告: ✅ qualityPerforming one time database migration, may take a few minutes... �[96m�[1m| �[0m�[90m Read �[0m{"filePath":"/home/runner/work/opencode-actions/opencode-actions/multi-review/run-multi-review.py"} �[91m�[1m| �[0m�[90m Shell �[0m{"command":"git diff HEAD~1 -- multi-review/run-multi-review.py 2>/dev/null || git diff main...HEAD -- multi-review/run-multi-review.py 2>/dev/null || git log --oneline -5","description":"Show diff of the PR changes","workdir":"/home/runner/work/opencode-actions/opencode-actions"} �[94m�[1m| �[0m�[90m Grep �[0m{"pattern":"clean_output|ansi|ANSI|escape|strip_ansi","path":"/home/runner/work/opencode-actions/opencode-actions/multi-review"} �[91m�[1m| �[0m�[90m Shell �[0m{"command":"gh pr view ${{ github.event.pull_request.number }} --repo ${{ github.repository }} --json title,body,state,mergeable,reviews,statusCheckRollup 2>/dev/null || echo "Cannot fetch PR details"","description":"Check PR metadata from GitHub","workdir":"/home/runner/work/opencode-actions/opencode-actions"} �[91m�[1m| �[0m�[90m Shell �[0m{"description":"Get current branch and PR number","command":"gh pr list --head fix/multi-review-ci --json number,title,statusCheckRollup --jq '.[0]' 2>/dev/null || echo "Cannot fetch"","workdir":"/home/runner/work/opencode-actions/opencode-actions"} 本次 PR 修复了三个真实问题:OIDC crash( 阻塞项:无 建议项:
�[96m�[1m| �[0m�[90m Read �[0m{"filePath":"/home/runner/work/opencode-actions/opencode-actions/multi-review/run-multi-review.py"} �[91m�[1m| �[0m�[90m Shell �[0m{"command":"git diff origin/main...HEAD -- multi-review/run-multi-review.py 2>/dev/null || git diff HEAD~1 -- multi-review/run-multi-review.py 2>/dev/null || echo "Could not get diff"","workdir":"/home/runner/work/opencode-actions/opencode-actions","description":"Get diff of PR changes"} �[91m�[1m| �[0m�[90m Shell �[0m{"description":"Get actual git diff from PR","command":"git log --oneline -5 && echo "---" && git diff HEAD~1 -- multi-review/run-multi-review.py 2>/dev/null | head -100","workdir":"/home/runner/work/opencode-actions/opencode-actions"} �[91m�[1m| �[0m�[90m Shell �[0m{"command":"git diff 985bca7 HEAD -- multi-review/run-multi-review.py","description":"Check diff between PR commit and current HEAD","workdir":"/home/runner/work/opencode-actions/opencode-actions"} �[91m�[1m| �[0m�[90m Shell �[0m{"command":"git diff origin/main HEAD -- multi-review/run-multi-review.py 2>/dev/null || git diff 0040e7f HEAD -- multi-review/run-multi-review.py","description":"Get full PR diff from base to head","workdir":"/home/runner/work/opencode-actions/opencode-actions"} �[91m�[1m| �[0m�[90m Shell �[0m{"command":"git show 2a875ad --stat","description":"Check what files 2a875ad changes","workdir":"/home/runner/work/opencode-actions/opencode-actions"} ✅ securityAsserting permissions for user Svtter... �[91m�[1m| �[0m�[90m Shell �[0m{"command":"git diff main...fix/multi-review-ci -- multi-review/run-multi-review.py","description":"Show diff for the PR changes"} �[91m�[1m| �[0m�[90m Shell �[0m{"command":"git fetch origin fix/multi-review-ci 2>/dev/null && git diff origin/main...origin/fix/multi-review-ci -- multi-review/run-multi-review.py 2>/dev/null || git log --oneline -5","description":"Fetch PR branch and show diff"} �[96m�[1m| �[0m�[90m Read �[0m{"filePath":"/home/runner/work/opencode-actions/opencode-actions/multi-review/run-multi-review.py"} �[94m�[1m| �[0m�[90m Grep �[0m{"pattern":"_clean_output","path":"/home/runner/work/opencode-actions/opencode-actions"} �[91m�[1m| �[0m�[90m Shell �[0m{"command":"git fetch origin fix/multi-review-ci 2>&1 && git diff origin/main...origin/fix/multi-review-ci -- multi-review/run-multi-review.py 2>&1 || echo "Fetch failed, checking alternative approach"","description":"Fetch and show PR diff"} �[91m�[1m| �[0m�[90m Shell �[0m{"command":"git log --oneline origin/fix/multi-review-ci -10 2>&1 || git log --oneline FETCH_HEAD -10 2>&1","description":"Check available refs"} �[91m�[1m| �[0m�[90m Shell �[0m{"command":"git show --stat FETCH_HEAD 2>&1","description":"Show FETCH_HEAD details"} �[91m�[1m| �[0m�[90m Shell �[0m{"command":"git diff HEAD 安全分析摘要本次 PR 修改涉及 5 处变更(+33/-3):将 阻塞项:无 建议项:
�[96m�[1m| �[0m�[90m Read �[0m{"filePath":"/home/runner/work/opencode-actions/opencode-actions/multi-review/run-multi-review.py"} �[91m�[1m| �[0m�[90m Shell �[0m{"command":"git diff main...fix/multi-review-ci -- multi-review/run-multi-review.py","description":"Get diff of PR changes","workdir":"/home/runner/work/opencode-actions/opencode-actions"} �[91m�[1m| �[0m�[90m Shell �[0m{"command":"git log --oneline -20","description":"View recent git history","workdir":"/home/runner/work/opencode-actions/opencode-actions"} �[91m�[1m| �[0m�[90m Shell �[0m{"command":"git branch -a","description":"List all branches","workdir":"/home/runner/work/opencode-actions/opencode-actions"} |
…se filtering The _clean_output() function was lost during cherry-pick. It strips ANSI codes, opencode log lines, session metadata, and tool call output from reviewer outputs before posting to PR comments. Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
核查步骤
发现遗漏 摘要PR Body 声称 4 项改动,其中 3 项已实现并正确集成,1 项存在配置死代码问题。 MEDIUM
导致用户即使设置 其他改动(确认无遗漏)
|
|
可合并 摘要PR 当前 HEAD(含二次 commit 阻塞项:无 建议项:
|
|
架构有疑虑 架构分析摘要该 PR 对 阻塞项:无建议项
|
|
存在风险 安全分析摘要PR 实现了 4 项改动, 阻塞项阻塞项:无 建议项
|
|
可合并 综合审查意见PR 实现了全部 4 项声称改动, 阻塞项:无 建议项:
|
|
permission: admin 可合并 综合审查意见PR 实现了全部 4 项声称改动, 阻塞项:无 建议项:
service: "session.prompt", 详细审查报告:
|
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>











Summary
USE_GITHUB_TOKEN=falsecaused opencode CLI to crash withundefined is not an object (evaluating 'k.rest'). Changed totrue.XDG_CACHE_HOMEtemp directory._clean_output()to strip ANSI codes, log lines, session metadata from opencode CLI output before posting to PR.run_scriptexistence check.Test plan
🤖 Generated with Claude Code