Skip to content

feat(grammar): a row that needs two columns to name it could not be named - #330

Merged
AminChirazi merged 1 commit into
relanded/3-multi-selectfrom
relanded/4-conjunctive-anchors
Aug 1, 2026
Merged

feat(grammar): a row that needs two columns to name it could not be named#330
AminChirazi merged 1 commit into
relanded/3-multi-selectfrom
relanded/4-conjunctive-anchors

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 #322. Moves obstacle 92248.

The row target identifies by content instead of position — but it took one anchor, and one column is often not unique. With two people called John and two called Doe, no single anchor finds John Doe's row. containing "Doe" fails with matches 2 rows, correctly and unhelpfully, leaving only tr:nth-child(2) — the positional selector this target was built to remove.

- Click the "Edit" in the item containing "John" and "Doe"

Every anchor must be in the same row, so the conjunction narrows rather than widens.

Not the selector growth the charter declines — that clause is about adopting another framework's idioms; this is flowproof's own identity-not-position principle reaching a table where one column identifies nothing.

Two red paths, both on a real ambiguous table: anchors in different rows match nothing rather than picking one, and a still-ambiguous conjunction keeps the existing matches N rows error. The pre-existing grid_cell_e2e and scoped_container_e2e suites pass unchanged, which is the evidence the single-anchor path did not move.

The one question: still a recording — more of one, replacing a hand-written positional selector.

🤖 Generated with Claude Code

…amed

The row target identifies by content instead of position, which is the whole
reason it exists — but it took one anchor, and one column is often not
unique. A table with two people called John and two called Doe has no single
anchor that finds John Doe's row. `containing "Doe"` failed with
`matches 2 rows`, correctly and unhelpfully, and the only thing left to write
was `tr:nth-child(2)`: the positional selector this target was built to
remove, reintroduced by hand.

`containing "John" and "Doe"` requires every anchor in the SAME row, so the
conjunction narrows rather than widens. Anchors in different rows match
nothing rather than picking one, and a conjunction that is still ambiguous
gives the same `matches N rows` error a single anchor does.

The quotes delimit and `and` is a separator, the same rule the multi-option
Select uses and for the same reason: an anchor is arbitrary page text.

Carried beside the primary anchor as a new key, so a reader that knows only
one anchor still finds the field it expects, and a trace written before
conjunction decodes to the single-anchor behaviour unchanged.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
@AminChirazi
AminChirazi force-pushed the relanded/3-multi-select branch from 4fb301d to 99680a3 Compare August 1, 2026 10:00
@AminChirazi
AminChirazi force-pushed the relanded/4-conjunctive-anchors branch from fc9dc8e to ffecad0 Compare August 1, 2026 10:00
@AminChirazi
AminChirazi merged commit 13fb4fe into relanded/3-multi-select 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