Skip to content

fix(core): reject disabled semantic-node actions - #101

Draft
seonghobae wants to merge 2 commits into
feat/semantic-node-dispatch-revalidationfrom
fix/semantic-node-disabled-action
Draft

fix(core): reject disabled semantic-node actions#101
seonghobae wants to merge 2 commits into
feat/semantic-node-dispatch-revalidationfrom
fix/semantic-node-disabled-action

Conversation

@seonghobae

@seonghobae seonghobae commented Aug 12, 2026

Copy link
Copy Markdown
Contributor

Partial implementation of #28, stacked on exact PR #96 head c93b90a316b83a160cf80008cc25c78aa32302f9.

Buyer/correctness gap

SemanticNodeActionTarget::from_observation previously checked only whether an observation advertised the requested node-local action. An observation could simultaneously report an interactive action such as Click and enabled=false, allowing a known-disabled control to become an action target. The first real Chromium vertical slice should fail closed on that internally inconsistent semantic state instead of leaving a trusted adapter to rediscover it after policy authorization.

Dependency

This Draft targets PR #96 branch feat/semantic-node-dispatch-revalidation. Keep Draft while #96/#95/#93/#58/#57/#52/#40 remain active. No prerequisite check, review, status, or mergeability evidence transfers.

TDD / implementation

Exact test-only head f845e51c5f31d7b700aeaf65ce7818d9d5f940e8 required known-disabled interactive Click to fail as typed NodeNotEnabled, while ScrollIntoView remained targetable because scrolling does not require the node itself to be enabled. Current exact production head bd75a43ddcd0a7afa4f032ecc2b930d742c3ece5 implements that narrow invariant in SemanticNodeActionTarget::from_observation and exposes the stable credential-free NodeNotEnabled error.

The rule deliberately applies to every currently interactive node action (Click, TypeText, SelectOption, SetChecked) while preserving ScrollIntoView. The observation's advertised-action check remains separate and still fails first when the requested action was not observed as supported.

Exact-head proof

On unchanged exact head bd75a43ddcd0a7afa4f032ecc2b930d742c3ece5 against unchanged exact prerequisite #96 head c93b90a316b83a160cf80008cc25c78aa32302f9:

  • CI run 31552510321: success, including repository contracts, canonical formatting, locked workspace/all-target check, full tests, strict Clippy, rustdoc, and exact owned production function/line/region/branch coverage;
  • Manifest V3 Compatibility run 31552510348: success;
  • GitHub reports the Draft mergeable against its exact prerequisite base; and
  • no formal reviews or inline review threads are currently returned for this exact head.

No predecessor-head result is transferred.

Truth boundary

This slice validates only the semantic observation presented when the target is constructed. It does not prove current enabled state at dispatch time, authenticate the browser adapter, rotate document epochs on semantic mutation, authorize policy, dispatch Chromium input, or prove a post-condition. Immediate current-authority/state observation remains a trusted runtime responsibility.

@coderabbitai

coderabbitai Bot commented Aug 12, 2026

Copy link
Copy Markdown

Important

Review skipped

Draft detected.

Please check the settings in the CodeRabbit UI or the .coderabbit.yaml file in this repository. To trigger a single review, invoke the @coderabbitai review command.

⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro Plus

Run ID: 58739890-1cd8-404b-b43b-738ac418aca4

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

Use the checkbox below for a quick retry:

  • 🔍 Trigger review

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant