# Dynamic Tooltip Crop Evidence ## Acceptance Evidence - Browser geometry: a 1920 x 1080 reference keeps an intrinsic canvas of 1920 x 1080 and renders at 3840 x 2160. The stage scroll width grows to 3888 px, so the image is not squeezed back into the panel. See [calibration-2x.png](./calibration-2x.png). - Browser pointer smoke: drawing on the 2x canvas creates calibration regions and advances through all six calibration steps. The marker drag from display `(326.6, 604)` to `(426.6, 642)` mapped to source `(288, 259)` through `(338, 278)` and was subsequently found by anchor matching at 99.8%. - Real tooltip fixture: the complete calibration check finished 6/6 stages and parsed `Sword of Revolution`, quantity `1`, and `1,700,000 Adena` at 70% OCR confidence. The third descriptive tooltip row was not passed to item parsing. See [tooltip-diagnostics.png](./tooltip-diagnostics.png). - The wide tooltip region is used only for the `Price :` anchor search. The item OCR preview contains the fitted name and price rows, not the full search band. ## Verification - `node.exe --test`: 18 tests passed, including white/yellow pixel masks, stopping a text run before distant UI noise, and fitting a short row whose legacy saved width crosses the frame edge. - `node.exe node_modules/vite/bin/vite.js build`: production build passed. Vite reports the existing large OpenCV chunk warning. - `git diff --check`: passed; Git only reported LF-to-CRLF conversion warnings. ## Review Notes - PRE plan review: aligned after clarifying the single owner of the dynamic right edge, the no-wide-OCR fallback, and legacy calibration behavior. - POST plan review: aligned; saved screenshots and the unbounded-run regression close the evidence and no-wide-fallback gates. - Correctness review: no remaining findings after isolating fitted rows in a masked composite and applying yellow pixels only to the price row. - Maintainability review: no remaining findings after reading pixels directly from the source canvas and simplifying the text-run control flow.