Repository navigation
flow: take extra looks before stopping on a look-alike record ID - #1333
Merged
Merged
Conversation
On a pixel surface, an OCR identity read that abstains only because the record ID has a look-alike glyph (1/l, 0/O) now takes extra looks before the run stops: two fresh frames, the 2x re-read, the known-ID list, and, where configured, a select-and-copy of the identifier's text box. Only the list or a copy equal to a run parameter can settle the record; any look that names another record is final. Each look is recorded on the step's identity check. The copy look is input, so only the step-entry check takes it; the actuation check reuses it only on matching pixels. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- The copy drag now runs to the edges of the identifier's text box; it stopped inside the last glyph and copied one character short. - A split identifier (103 045 against 103045) is matched as one string, against the read and the known-ID list. - The check just before the click reuses the step-entry verdict when the identifier shows the same pixels, instead of re-reading the selected text. - A run-parameter mismatch that is only a look-alike misread (C0X1234 read as COX1234) gets the same looks. The mismatch stands unless the list or an exact copy of the run value settles the record. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- identity_looks_dense: pass a typed click point and ActionKind (mypy). - LIMITS.md: name identity_looks.py by its package path, which the docs consistency check resolves. - The look-alike twin test asserts the stop; it accepts a read that is already final, as Linux OCR builds read it. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
What
On pixel surfaces (RDP, Citrix, canvas), the right-record check abstains when a record ID has a look-alike glyph (1/l, 0/O). Before this PR the run then stopped. Now it takes extra looks first, and stops only if they don't settle it:
runtime.identity_copy_lookin deployment.yaml, off by default).Each look is recorded on the step's identity check (
IdentityCheck.looks).Fail-closed rules
A1001recorded asAlo01), so in recorded-record mode the copy can stop a run but never accept one.look_halt).C0X1234read asCOX1234) gets the same looks; the mismatch stands unless the list or an exact copy of the run value settles it. It is never softened into an abstain.103 045against103045) is matched as one string, against the read and the list.Tests
tests/test_identity_looks.py: decision rule, copy look, crop matching (pure).tests/test_identity_looks_replayer.py: real render and real OCR on the replayer path. Correct row verifies with copy + run parameter; look-alike twinAC5OO61stops; recorded mode cannot accept; a screen change outside the cell halts; governed runs take no copy; the pre-click check reuses the copy only on matching pixels.tests/test_known_ids_replayer.pyupdated: the list now needs 3 agreeing frames instead of 2.test_pixel_identity_probe) are a local scikit-image/numpy ABI mismatch and also fail on main.Measurement
python -m openadapt_flow.validation.identity_looks_densedrives the real replayer against a live browser render of the dense record list, with real mouse drags. On 288 correct-row clicks, false stops went from 232 to 24 with the copy look and the ID as a run parameter, and wrong-record accepts stayed 0 of 288 in every configuration. Numbers and docs: #1340.No new commands.
🤖 Generated with Claude Code