Root cause: v8.21 added a top-level `function jitterDelay()` helper.
In some Tampermonkey/cache scenarios the helper is undefined inside
the `handleCaptchaDirectInPage` async closure, throwing
`ReferenceError: jitterDelay is not defined`. The catch block then
resets `captchaSent = false` and `lastCaptchaText = ''`, so the
`setInterval(checkCaptchaPrompt, 50)` loop resends the same captcha
to the backend every 50ms ("dead loop sending captcha").
Fix: inline the ±20% jitter math at both call sites
(line 1814 and 1117), drop the helper entirely. Also added
`Number(...) || default` guards so a stale `CFG.CAPTCHA_CLICK_DELAY`
or `CFG.RL_RETRY_DELAY` of NaN/null/undefined falls back to the
DEF value rather than making `setTimeout(NaN)` fire instantly.
Side effect that confirmed the bug: the captcha bg element lost
its layout during the storm, so `rect.width = 0` and
`nx * rect.width = 0`, but `rect.left` was ~-9992 from a stale
frame ref — hence the marker spamming `(-9992, -10029)`.
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
Windows PowerShell 5.1 (the default on most Windows installs) reads
.ps1 files using the system ANSI codepage (GBK on Chinese Windows)
when no BOM is present. UTF-8 Chinese strings like [信息] are then
parsed as invalid characters, causing ParserError at startup.
Symptoms (before fix):
表达式中缺少字串 (missing string terminator)
表达式中包含意外的标记 'else'
Adding the EF BB BF BOM tells PowerShell 5.1 to interpret the file
as UTF-8, fixing the parser errors. PowerShell 7+ (pwsh) doesn't
need this, but 5.1 does.
Verified end-to-end: backend starts, /health returns 200 OK,
4 workers (1 YOLO + 3 OCR on 6-core) all ready.
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
Update the pipeline backend section and 常用文件 table to surface
the new double-click launcher, alongside the existing
python backend/server.py invocation.
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
- start-backend-pipeline.cmd: double-click entry point
- start-backend-pipeline.ps1: venv auto-detect, dep check (fastapi/uvicorn/psutil),
auto pip install if missing, Chinese port occupancy prompt with PID/process info,
user confirmation required before killing existing process
PR #17 was merged as v8.19 (matching the rush mode feature label),
but our v8.19 was already the golden-time extension. Bump to v8.20
to reflect the combined feature set: golden-time 9:30-11:00 + rush
mode + tabEl 1-index fix + findAndClickConfirm payment-button guard.
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
isGoldenTime() now covers 9:30-11:00 (was 9:30-10:10) so late-morning
restock windows are treated as rush mode: no page refresh, no MAX_RL
cap on 555 retries. Bump userscript to v8.19 and add CHANGELOG entry.
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
- change openMultipleWindows prompt default from 3 to 2 (max stays 10)
- add prominent RPM warning box in README rush section after GLM upgraded RPM limits
- strengthen language in step 5 and 重要提醒 from "may trigger" to "has caused widespread failure"
- sync root and scripts/userscripts/ copies
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
4 network functions changed to try fetch() first, fallback to GM_xmlhttpRequest:
- fetchImageDataUrl
- postDirect
- serverRequest
- fetchCaptchaImageDirect
fetch() has no 6-connection limit per domain (unlike GM_xmlhttpRequest),
eliminating the bottleneck when multiple windows/iframes hit localhost:8888.
GM_xmlhttpRequest is kept as fallback for CORS-restricted contexts.
Both userscript copies synced, SHA256 identical, trailing whitespace cleaned.