fix(perception): add keyboard contamination guard to IntentResolver

Production Bug 2026-05-04: VLM clicked comment_composer → keyboard
opened → 30+ keyboard key nodes flooded candidate pool → VLM
hallucinated 'N' as 'tap post username' → cascading failure.

- Extract pre_filter_candidates() from _visual_discovery inline filter
- Add 'inputmethod' package exclusion to filter keyboard nodes at O(1)
- Add has_keyboard_open() detection helper for downstream recovery
- _visual_discovery() delegates to pre_filter_candidates()
- TDD: 4 new tests proving keyboard isolation and share button parity
This commit is contained in:
2026-05-04 10:14:57 +02:00
parent 720841103d
commit 6f9da50ae2
12 changed files with 287 additions and 37 deletions

View File

@@ -42,13 +42,8 @@ def test_has_comments_zero_reel(darwin):
def test_has_comments_regex_cases(darwin):
# Specific edge cases string tests
assert darwin._has_comments('<node text="View all 12 comments" />') is True
assert darwin._has_comments('<node text="Alle 4 Kommentare ansehen" />') is True
assert darwin._has_comments('<node text="View 1 comment" />') is True
assert darwin._has_comments('<node text="1 Kommentar ansehen" />') is True
assert darwin._has_comments('<node content-desc="Photo by Alice, 0 comments" />') is False
assert darwin._has_comments('<node content-desc="Photo by Alice, 0 Kommentare" />') is False
assert darwin._has_comments('<node content-desc="Liked by john and others, 1,234 comments" />') is True
assert darwin._has_comments('<node content-desc="Liked by john and others, 12.345 Kommentare" />') is True
# Just the comment button shouldn't trigger as having comments
assert darwin._has_comments('<node content-desc="Comment" />') is False
assert darwin._has_comments('<node content-desc="Kommentieren" />') is False