You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
node -e "const fs = require('node:fs'); for (const key of ['TEMP', 'TMP']) { const value = process.env[key]; if (!value) { console.error(key + ' is not set'); process.exitCode = 1; continue; } const real = fs.realpathSync(value); if (real === value) continue; if (real.toLowerCase() === value.toLowerCase()) { console.log('::warning::' + key + ' differs from its real path only by casing: ' + value + ' -> ' + real); continue; } console.error(key + ' carries a short alias: ' + value + ' -> ' + real); process.exitCode = 1; }"
Copy file name to clipboardExpand all lines: .github/workflows/qwen-autofix.md
+41Lines changed: 41 additions & 0 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -249,6 +249,7 @@ task-oriented guides — what a maintainer types and what happens next — see:
249
249
-[145. review-address · Report dry-run / failure — CUMULATIVE timeout breaker — the sibling of the consecutive one above, for the…](#af-145)
250
250
-[146. review-address · Report dry-run / failure — The agent committed (verify recorded committed=true before any gate could fail),…](#af-146)
251
251
-[147. review-address · Report dry-run / failure — Same byte-budget hygiene as the English excerpt above. 3000 bytes ≈ 1000 CJK…](#af-147)
252
+
-[148. route — Persistent pool, not hosted: a hosted backlog queued route past the cron period, and af-005's…](#af-148)
252
253
253
254
---
254
255
@@ -3727,3 +3728,43 @@ forbids HTML in failure.zh.md), but must not be able to open
3727
3728
or close a <details>/<summary> that swallows the closing tag
3728
3729
the workflow emits below.
3729
3730
```
3731
+
3732
+
<aid="af-148"></a>
3733
+
3734
+
### 148. route — Persistent pool, not hosted: a hosted backlog queued route past the cron period, and af-005's supersede then starved every scan round.
3735
+
3736
+
In `route` and `review-scan`.
3737
+
3738
+
```text
3739
+
route and review-scan run on the persistent pool, not the
3740
+
hosted one. They are short trusted base-repo jobs, but they
3741
+
gate the WHOLE fan-out: while they sit queued, no
3742
+
review-address leg starts. On 2026-08-25 a hosted-runner
3743
+
backlog queued route for over 20 minutes — longer than the
3744
+
cron period — and af-005's newer-tick-supersedes-older rule
3745
+
then cancelled every still-queued round: nine consecutive
3746
+
schedule runs died without scanning while the ecs-qwen pool
3747
+
stood mostly idle. The supersede rule stays — it is right
3748
+
once route gets a runner in seconds; the fix is taking the
3749
+
hosted queue out of the critical path. review-scan moves
3750
+
with it because it shares the gate, and its own hosted waits
3751
+
delayed every fan-out by the same backlog. Both keep the
3752
+
fork-trust clause of the sibling lanes: pull_request and
3753
+
pull_request_review resolve this file from the PR's own
3754
+
merge commit, so only same-repo heads and write-access
3755
+
authors may reach the persistent pool; everything else stays
3756
+
hosted, and the kill-switch wins everywhere. Neither job
3757
+
checks code out — route only decides phases, and review-scan
3758
+
only calls the API — so the shared workspace needs no
3759
+
restore or wipe step here. The pool still leaves two marks
3760
+
on the lane, both closed in the same change. One: gh reads
3761
+
its config from the shared, attacker-writable $HOME, so both
3762
+
steps carry the heavy jobs' gh hardening preamble — a planted
3763
+
~/.config/gh/config.yml could reroute their gh calls into a
3764
+
local socket, taking CI_DEV_BOT_PAT with the scan and forged
3765
+
collaborator-permission answers with route. Two: review-scan
3766
+
fills a per-run WORKDIR with API dumps that no VM teardown
3767
+
removes on the pool, so it gets a fixed autofix* per-run path
3768
+
(the age sweep can reclaim it after a hard kill), an EXIT
3769
+
trap, and an always() cleanup step mirroring issue-autofix.
0 commit comments