sylpheed-port closed their last harness gap on a control that never asked whether the measurement was LIVE -- an empty band list made identity and the real pair both pass. Applying that to ring_row.py, which underpins every focus finding I have made and had no self-test at all. It found a real defect immediately: main_menu_item(ring_row(f)) is not None was being used as a main-menu test, and on a TITLE frame the gutter carries a bright cluster at y=243, inside tolerance of row 0, so the title reads as NEW GAME. Glyph 714 against the menu's 327 separates them cleanly; the ring row alone does not. It never misfired in the sweeps, because B from a submenu goes to the menu rather than the title -- the test was simply weaker than it was being trusted to be. Added is_main_menu(), which requires the row AND the glyph signature, and the sweep's two menu tests now use it. The self-test asserts the defect it guards, and includes a liveness case: a blanked frame must return None rather than a number. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Wuu56cE8vJGTBtn1ppsk8v
11 KiB
11 KiB