mirror of
https://github.com/QwenLM/qwen-code.git
synced 2026-11-07 06:19:43 -10:00
* ci(autofix): loosen issue candidate filters so the agent finds work The scheduled issue phase had been finding 0 candidates on every run. Tier-1 requires the rarely-applied status/ready-for-agent label, and tier-2's "unattended = no human comment at all" rule fought its ">2 days old" age gate: on a busy repo every aged bug already has a community reply, so the funnel collapsed (128 aged bugs -> 0 survivors) purely on the comment rule. - Unattended now keys off maintainer engagement (OWNER/MEMBER/COLLABORATOR comments, excluding our own bots), not any human comment. Community "+1"/"me too" no longer disqualifies an issue. - Tier-1 and tier-2 are always both gathered (tier-1 prioritized, then de-duped by number) so a single weak ready-for-agent issue can't starve the run. - Tier-2 scans a bounded age window via MIN_ISSUE_AGE_DAYS..MAX_ISSUE_AGE_DAYS (1..15) to focus on fresh, settled bugs instead of an unbounded set. Co-authored-by: Qwen-Coder <[email protected]> * fix(ci): preserve autofix issue tier priority * fix(ci): keep ready autofix issues in tier one * fix(ci): reserve autofix tier two slots * fix(ci): tolerate tier two autofix scan failures * fix(ci): tolerate tier one autofix scan failures * fix(ci): harden autofix candidate merging * fix(ci): harden autofix issue scanning * fix(ci): harden autofix diagnostics * fix(ci): skip unsafe autofix comment fallbacks * fix(ci): drop unused autofix comments payload * test(ci): strengthen autofix comment refresh guard * test(ci): satisfy autofix workflow lint * test(ci): tighten autofix tier two assertion * test(ci): cover autofix tier merge guards * test(ci): cover autofix unattended filter * fix(ci): summarize autofix comment refresh drops * fix(ci): bound autofix tier-2 comment-refresh API calls Cap the tier-2 issues fed into the comment-refresh loop to 15 (a margin above the ~10 ever selected, since filter_unattended_candidates drops attended issues afterward) and request full pages with per_page=100, to avoid GitHub secondary rate limits. Add workflow tests asserting the forced-issue skip/in-progress exclusion and the tier-2 ready-for-agent label exclusion stay in place. Co-Authored-By: Qwen-Coder <[email protected]> * fix(ci): refresh all scanned tier-2 autofix issues, not just first 15 The previous change capped comment-refresh to the first 15 tier-2 issues before filter_unattended_candidates runs. The scan still fetches 30, so valid unattended bugs at positions 16-30 were never refreshed nor filterable: if the first 15 were all maintainer-attended/dropped, the run could end with zero candidates again — the failure this PR set out to fix. Drop the .[0:15] refresh cap and refresh the full scanned set (already bounded by --limit 30 on the scan). per_page=100 stays as the pages-per-issue rate-limit mitigation, and the drop summary total/counters reflect the full refreshed set again. Top-N selection after filtering is unchanged. Co-Authored-By: Qwen-Coder <[email protected]> * fix(ci): order tier priority before recency in autofix assess prompt The assess prompt gave two conflicting selection rules: the tier note says not to pick a tier-2 issue over a comparably actionable tier-1 one, while the recency tiebreaker says to prefer the most recently reported. Since tier-1 has no age bound and tier-2 is the recent (1-15 day) tier, these point in opposite directions for comparable confidence. Make recency apply only after the tier preference and only within the same tier, removing the contradiction. Prompt text only; no shell/jq change. Co-Authored-By: Qwen-Coder <[email protected]> * fix(ci): guard forced-issue jq and derive autofix comment scratch path Address two review suggestions on the autofix candidate scan step. - Wrap the forced-issue candidate jq in the same error guard the other jq calls use (tier-1/tier-2 stamp, tier merge): on malformed forced-issue JSON it now emits a ::warning:: and falls back to an empty candidate list instead of silently producing an empty candidates.json with no diagnostic. - Make refresh_issue_comments reuse-safe by deriving its NDJSON scratch path from the output_file parameter (${output_file%.json}.ndjson) instead of hardcoding tier2-with-comments.ndjson, so a second call or a different tier can't clobber a shared scratch file. Behavior for the current single call is unchanged. Co-Authored-By: Qwen-Coder <[email protected]> --------- Co-authored-by: Qwen-Coder <[email protected]> Co-authored-by: Qwen-Coder <[email protected]>