Skip to content

feat(grammar): selecting four options selected one, and said nothing - #329

Merged
AminChirazi merged 1 commit into
relanded/2-count-capturefrom
relanded/3-multi-select
Aug 1, 2026
Merged

feat(grammar): selecting four options selected one, and said nothing#329
AminChirazi merged 1 commit into
relanded/2-count-capturefrom
relanded/3-multi-select

Conversation

@AminChirazi

Copy link
Copy Markdown
Contributor

Re-landed onto main. The original stack (#317/#319/#321/#322/#326) merged into each other's branches rather than up to main, so only #316 actually landed. These five commits are the unchanged remainder, rebased onto current main.\n\nStacked. Re-land of #321. Moves obstacle 94441.

Select commits through the value setter, which is a replacement — so four Select steps at one <select multiple> left the last option standing, fired four change events at an app expecting one, and reported success. Confirmed against a real page before writing anything.

Select "A", "B" and "C" from the "<label>" field drives it to exactly that set in one commit, one input+change. Set-a-state like Check.

Every item is quoted, and that is the design. "Rock, Paper and Scissors" is one option on somebody's page; a split on commas and "and" would read it as three, silently.

Names resolve before anything is selected, so a typo in the third leaves the control untouched, and the step reads the selection back to verify it took.

This is where the call_js_fn bug surfaced: a JS exception does not reach Rust as an Err, so the first version reported success on an option that does not exist. The outcome is now a status value that comes back and is inspected.

Red path: a missing option, and a single <select> given a list. Proved live: four options in exactly one change event, asserted on an event counter.

The one question: still a recording — one target, one set of names, no branch or repetition.

🤖 Generated with Claude Code

`Select` commits through the control's value setter, which is correct and is
also a replacement. So the obvious spelling — four `Select` steps at one
`<select multiple>` — left the last option standing, fired four `change`
events at an app expecting one, and reported success. Nothing was available
to write instead: a multi-selection is not a sequence of selections, it is
one state the control ends up in.

`Select "A", "B" and "C" from the "<label>" field` drives it to exactly that
set in one commit, with one input+change. Set-a-state like `Check`, so the
step means the same thing however the environment arrived.

Every item is quoted, and that is the design. Option text is arbitrary app
text: "Rock, Paper and Scissors" is one option on somebody's page, and a
list split on commas and the word "and" would read it as three, silently.

Names resolve before anything is selected, so a typo in the third option
leaves the control untouched rather than half-applied, and the step reads
the selection back to verify it took. Writing that check turned up why it
was needed: a JS exception inside the driver does not reach Rust as an
error, so the first version reported success on an option that does not
exist. The outcome is now a value that comes back and is inspected.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
@AminChirazi
AminChirazi force-pushed the relanded/2-count-capture branch from 545335d to 6b1ca15 Compare August 1, 2026 10:00
@AminChirazi
AminChirazi force-pushed the relanded/3-multi-select branch from 4fb301d to 99680a3 Compare August 1, 2026 10:00
@AminChirazi
AminChirazi merged commit a7d4310 into relanded/2-count-capture Aug 1, 2026
9 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.

1 participant