Repository navigation
Explorer: judge a tap by the control under it and by its identifier - #77
Draft
brentvatne wants to merge 1 commit into
Draft
brentvatne wants to merge 1 commit into
brentvatne wants to merge 1 commit into
Conversation
…and name --allow-destructive in a refusal - riskOf splits identifiers into words before matching, so btn_delete, deleteAccount and sign-out read as destructive; \b does not split them. - A coordinate tap is judged by the smallest hittable control under the point, by its own label and identifier, as well as by the target the model wrote. A tap over no control is still allowed and recorded as unknown. - A control allowed by its label stays allowed however it is targeted, even when its identifier reads as risky. - A refusal tells whoever runs Explore that --allow-destructive allows a safe control; it reaches them through flow and replay results. - The README and the explore-binary skill say that a secret is recognised in the accessibility tree only, so one drawn without an accessible label is not.
|
Viewer preview of c919c42 · reports from brentvatne/euxy#163
The link stays the same on every push. Deploy run |
This branch has not been deployed
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 and why
Two gaps let a model-driven exploration tap a destructive control.
riskOfmatched\bdelete\b, which doesn't matchbtn_deleteordeleteAccount:_is a word character, and camelCase has no boundary. It now splits identifiers into words before matching.target), or recorded asunknownand let through. It is now also judged by the smallest hittable control under the point, using that control's label and identifier. A tap over no control is still allowed and recorded asunknown, so unlabelled icon buttons keep working.A control allowed with
--allow-destructive "Label"stays allowed however it is tapped, even when its identifier reads as risky (resetFilters). A refusal now mentions--allow-destructive, for whoever runs Explore: the model can't pass it, but the message reaches people through flow and replay results.The README and the explore-binary skill now say that a secret is recognised only in the accessibility tree, so a value drawn without an accessible label (in a canvas or an image) gets no such protection.
This comes from comparing Explore's safety rules against what a model can actually send.
Screenshots
No visible change.
Code examples
Try it
npx @expo/explore explore:binary ./MyApp.tar.gz --simulator localA coordinate tap on an icon button whose identifier is
btn_deleteis refused, and the attempt is recorded with riskdestructive.Testing
test/node/binary-explorer.test.mjs:npm testpasses (1711 tests),tscis clean, and lint shows only the 6 existing Viewer warnings.🤖 Generated with Claude Code