qwen-code/.github
Shaojin Wen c003e17181
fix(autofix): answer every review thread, resolve the ones actually fixed (#7758)
* fix(autofix): answer every review thread, resolve the ones actually fixed

Two gaps made a handled finding look unhandled on #7731.

A finding the bot declined, deferred, or escalated keeps its thread open,
but its reason was recorded only in the round summary — a separate
comment. The reviewer who opens that thread sees their finding answered
by silence. The agent now writes comment-replies.json and the push step
posts each reason as a reply on that finding's own thread, leaving the
thread open. Replies are neutralised like the summary body, since a
reply is model output posted verbatim under the bot identity.

Resolution was also keyed on "did I edit a file this round", so a
Critical an earlier commit had already fixed stayed open and read as
unaddressed. Key it on the finding being resolved in the code, which
covers a prior commit's fix the agent re-verified still holds.

* style: apply prettier to the new review-reply test

* test(autofix): update stale escape-site comment from five to six sites

* fix(autofix): reply at thread roots and guard the reply id, per review (#7758)

Address the maintainer review on the in-thread reply mechanism:

- Map each reply to its thread's top-level comment before posting. The
  feedback step lists every review comment, replies included, so an rc:<id>
  can be a reply id; GitHub rejects a reply aimed at another reply, which
  would have left escalated findings answered by silence. Hoist the threads
  GraphQL fetch above both the resolve and reply blocks so a reply-only
  round still has it, and fall back to the id as given past the page cap.
- Skip any id already present in resolved-comments.txt so a finding is never
  both resolved and replied to; the match tolerates the rc: prefix and a
  trailing CR like the resolve block's own parsing.
- Mutation-verify the previously untested ^[0-9]+$ id guard (the boundary
  between a model-authored id and an arbitrary API path), the -f body= field
  name, the type=="array" skip, and the new cross-check.

---------

Co-authored-by: wenshao <wenshao@example.com>
2026-07-26 23:39:13 +00:00
..
actions/post-coverage-comment Upgrade GitHub Actions to latest versions (#3683) 2026-06-27 17:03:32 +00:00
assets/worktree-toggle feat(web-shell): surface worktree isolation in the new-session empty state (#7365) 2026-07-21 07:38:33 +00:00
ISSUE_TEMPLATE chore: re-organize labels for better triage results (#819) 2025-10-17 19:49:11 +08:00
scripts fix(ci): don't fail triage cleanup when there is nothing to clean (#7688) 2026-07-24 17:44:25 +00:00
workflows fix(autofix): answer every review thread, resolve the ones actually fixed (#7758) 2026-07-26 23:39:13 +00:00
actionlint.yaml ci: matrix ECS runner update + sudo install + repository_dispatch trigger (#7513) 2026-07-23 05:50:04 +00:00
CODEOWNERS chore: simplify CODEOWNERS to package-level rules (#7376) 2026-07-21 02:39:33 +00:00
dependabot.yml Limit dependabot PRs to security updates (#6657) 2025-08-20 22:24:43 +00:00
pull_request_template.md docs(agents,pr-template): add Working Principles and restructure PR template (#4496) 2026-05-25 19:15:35 +08:00
release.yml ci: auto-skip internal CI changes in release notes (#7251) 2026-07-20 11:10:55 +00:00