Skip to content

feat: add click-move-click range selection and VOM state - #516

Merged
iuyo5678 merged 2 commits into
mainfrom
feat/click-move-click-range
Oct 29, 2026
Merged

iuyo5678 merged 2 commits into
mainfrom
feat/click-move-click-range

Conversation

@iuyo5678

@iuyo5678 iuyo5678 commented Oct 29, 2026 •

Copy link
Copy Markdown
Collaborator

Some range controls select by clicking/releasing the start, moving with no button held, and clicking/releasing the end. A held drag can finish successfully without selecting those controls. Add explicit --mode click-move-click and observable selection evidence.

Dependency and review boundary

Stacked on #513 (feat/drag-interactions at 8465b04); merge #513 first. The diff against that branch contains only range selection and its protocol, VOM, documentation, fixtures and tests. Observation saving/folding, view, step, and shared business-RPC cancellation changes are in #517.

Behavior

  • bsk drag --mode click-move-click releases the start before moving with buttons=0, rechecks the destination, then clicks/releases the end. It requires a destination and zero hold; held drag remains the default.
  • Both endpoints must be usable before input. After the first click, moved/covered/replaced/disabled/inert destinations are rejected without silently retargeting. Interruption can leave the first click applied; return uncertain effects and require fresh observation rather than replay.
  • Protocol 1.7 identifies these new wire semantics. The ordinary drag CLI rejects an older daemon, and the daemon rejects an older extension before forwarding the new mode. Legacy drags remain supported.
  • VOM distinguishes accessibility selection from class/data hints, preserves unselected state, and labels otherwise unnamed interactive indexed cells. These hints do not prove a completed booking or a time range.
  • Include gesture identification/recovery documentation, range fixtures, browser/CLI compatibility regressions and eval registration. Keep the standalone skill within LF/CRLF entry budgets.
bsk drag @e3 --to @e8 --mode click-move-click --session "$SESSION" --context "$CONTEXT"
bsk cooperate sync --session "$SESSION"

Validation

On the standalone range branch (macOS arm64):

  • Rust workspace: 916 passed, 0 failed, 1 existing ignored test; formatting and Clippy with warnings denied passed.
  • Full default extension suite: 3268 passed, 332 optional/browser tests skipped. VOM: 148 passed. Node script/eval tests: 47 passed.
  • Full lint (including 565 DSH tests), extension TypeScript, skill LF/CRLF budgets and Cargo skill packaging passed.
  • Explicit Chrome drag suite: 55/56 passed on isolated rerun. The remaining inherited background-tab readiness test timed out locally; the first run also failed background-focus cleanup. Existing pre-split baseline logs reproduce the background-test failures. No parent gesture/input implementation or timeout was altered to hide them. All 16 new click–move–click cases also passed in a separate focused Chrome run.

The previously failing frontend CI had two tests that assumed a fixed protocol 1.7 was newer than the extension. These tests now derive the next minor version, preserving their original compatibility assertions. No connection-controller production behavior changed.

The existing pointer transaction implementation remains inherited unchanged from #513. This PR introduces no observation cache or public step command and does not change shared business-RPC cancellation. CI on this split head must pass before merge.

@iuyo5678
iuyo5678 changed the base branch from feat/drag-interactions to main October 29, 2026 14:33
@iuyo5678
iuyo5678 merged commit 8cff976 into main Oct 29, 2026
11 checks passed
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.

2 participants