Skip to content

Releases: Anyrainel/GOODScanner

v2026.04.23

23 Apr 20:16

Choose a tag to compare

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

21 Apr 02:23

Choose a tag to compare

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

19 Apr 15:59

Choose a tag to compare

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

17 Apr 11:35

Choose a tag to compare

refactor: remove dead code — unused export, profiler, draw_capture_re…

v2026.04.16

16 Apr 20:24

Choose a tag to compare

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

14 Apr 18:30

Choose a tag to compare

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

10 Apr 05:37

Choose a tag to compare

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

09 Apr 15:12

Choose a tag to compare

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

06 Apr 00:02

Choose a tag to compare

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

02 Apr 22:04

Choose a tag to compare

refactor: simplify log files — remove server log and result log, rena…