Releases: Anyrainel/GOODScanner
Releases · Anyrainel/GOODScanner
v2026.04.23
fix(character): unpin OCR pool, remove racy no-results exit The character scanner held a v5 (and previously v4) pool guard on the main thread for the entire run. On a 1×v4 pool this deadlocked the worker's process_scan_captures, which then produced zero results and tripped a `viewed_count > 3 && characters.is_empty()` early-exit that also fired whenever the worker was merely slow to warm up. Together they looked like the scanner bailing after navigating four characters. Main now acquires v5 + v4 per name-OCR call (same pattern the inventory scanner already uses for its count OCR), so worker and main share the pool atomically. Removed both no-results exits; only `consecutive_failures >= 5` and `max_count` can stop Phase 1 now. Phase 2 takes `&OcrPool` and acquires per call as well. Pool sizing now has three RAM tiers (≥8 GB → 2+4, ≥4 GB → 2+2, <4 GB → 1+1) and a new advanced setting `ocr_pool_v5_override` / `ocr_pool_v4_override` lets users force a specific size from the Scan tab's Advanced Options (0 = auto). Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
v2026.04.21
refactor: co-locate annotator calls with pixel detection logic Move record_pixel/record_pixel_colored calls inside the detection functions (detect_artifact_rarity, detect_weapon_rarity, detect_artifact_lock, detect_artifact_astral_mark, detect_weapon_lock, detect_elixir_crafted) so annotation is a side effect of detection rather than duplicated at each callsite. Remove external annotation blocks from artifact and weapon scanners. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
v2026.04.19
fix: consolidate server tests (13→5) and serialize with Mutex Consolidate 13 server tests into 5 by sharing server instances across related test scenarios (standard flow, cache invalidation, busy/delayed, disabled, init failure). Add static SERVER_LOCK Mutex to serialize all server tests, preventing concurrent tiny_http teardown that caused STATUS_HEAP_CORRUPTION on Windows during test process exit. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
v2026.04.17
refactor: remove dead code — unused export, profiler, draw_capture_re…
v2026.04.16
fix(gui): make stop scan button responsive and export partial data
Clicking "Stop Scan" felt broken: the queued OCR workers kept processing
(15-45s delay), no visual feedback appeared, and the final status showed
as a "Failed" error instead of a clean stop.
- weapon/artifact scanners: worker closures check the cancel token and
drain their queues instead of running 16 more items
- run_scan_core: per-phase errors during cancellation are swallowed so
whatever was collected before the stop still exports
- TaskHandle::stop(): immediately overwrites status with "Stopping..."
and the phase-update closure refuses to clobber that message
- scanner_tab: button relabels to "Stopping..." and disables while the
cancel token is tripped but the worker hasn't exited
- cancelled runs now surface as Completed ("Stopped" / "partial data
exported to ...") rather than Failed
Button click and right-click abort now share the same CancelToken path.
Also documents GOODCapture in CLAUDE.md.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
v2026.04.14
fix: detect corrupted onnxruntime.dll + fix flaky test heap corruption - check_onnxruntime() now validates file size (>= 5 MB) instead of just existence; corrupted/truncated DLLs are auto-deleted and re-downloaded - run_server() now joins its internal threads (shutdown watcher + HTTP handler) before returning, preventing heap corruption from concurrent thread teardown during test process exit - Consolidate 13 read-only/busy-state server tests into 2 shared-server tests, reducing concurrent server instances from 21 to 13 Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
v2026.04.10
fix(server): strip trailing slash from Origin header for CORS matching Some browsers send Origin with a trailing slash (e.g. https://ggartifact.com/) which doesn't match the spec-canonical form. Strip it before both the allowlist check and the Access-Control-Allow-Origin echo to prevent CORS mismatch errors. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
v2026.04.09
fix: lock/astral detection — drop broken X calibration The grid calibration's X pass summed lightness in candidate column-gap rectangles, but card interiors contain dark content (text shadows, icon edges, borders) that outscored the true inter-card gaps. The optimizer consistently latched onto a stripe ~22 base px right of the actual grid on 12 of 13 sampled pages, shifting the 8×8 lock-icon sample window completely off the icon → 1500+ false unlocks across the inventory. Grid X is anchored by the UI and never drifts — only vertical scroll displaces cards — so off_x is always 0. Removed the X search entirely and documented the pitfall. Verified end-to-end against packet-sniffed GT: 2191/2191 matches, 0 lock diffs, 0 astral diffs for both the plain artifact scanner and the manager snapshot. Also: - lock_manager: distinguish "锁定成功" vs "解锁成功" in logs - ocr_pool: raise small-pool threshold from 4 GB to 8 GB - scripts: add diff and deep-analysis tools used to isolate the bug Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
v2026.04.05
feat: shared OCR pools with memory-adaptive sizing Create OCR model pools once per session and share across all scanners and managers, instead of each component creating and destroying its own. Pool sizes adapt to available RAM (small: 1×v5+2×v4 under 4 GB, normal: 2×v5+4×v4 otherwise). Also includes: - Lenient u64 deserialization for config fields (accepts strings/floats from old config versions instead of failing) - Character scanner: delay tips on OCR failures to guide users toward increasing timing settings, clearer log wording for re-read passes Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
v2026.04.02
refactor: simplify log files — remove server log and result log, rena…