Skip to content

Update the option-group tests for the removed seat, and ring the add field - #148

Merged
max-sixty merged 1 commit into
mainfrom
fix/ci-33337626485
Aug 31, 2026
Merged

Update the option-group tests for the removed seat, and ring the add field#148
max-sixty merged 1 commit into
mainfrom
fix/ci-33337626485

Conversation

@leaf-agent

Copy link
Copy Markdown
Collaborator

Problem

The nightly ci on 292de9c ("Make reader-added answers real options") went from 14 failures to 35 in run 33337626485, and the 19 that commit added were still there at 9283316 the next run. That commit replaced the options group's catch-all conversation with an add-option form and dropped x-conversation/x-work from lf-options, took the status rule out of the option gutter, reworded the pick mark from chosen to selected, and moved the keyboard ring off the decision onto the exact option row. Nineteen browser tests still read the page as it was.

Solution

Seventeen of the nineteen are fixed here, and two of them turned out to be product findings rather than stale assertions.

Fourteen durable-draft tests and test_c_in_a_seated_conversation_reaches_the_thread_it_is_in used #jobs's conversation seat as their subject — a seat only lf-options supplied. They now stand on a lf-task talk seat from command-hub, which is the seat the shipped layer still has; the id, the say:jobs draft key and the {section: "jobs"} anchors are unchanged, so the tests read the same coordinate they always did. Two of them asked whether the composer disappears after a send. A seat that can hold keeps it standing (renderConversations), so they ask of the words in it instead, which is the claim either way: a settled draft is words the next view must not be handed.

The remaining assertion updates: the digit test drops the status rule from its gutter relation and reads the digit against the cell's own edge; the retired-slot test moves to a settled group's summary, since relabel(..., {says: false}) means a pick mark is no longer one of the page's words and the fixture would have stopped exercising its case; the ring test reads the band off the row the keyboard is on and keeps its one-band comparison against the suggestion's decision, which still wears the ring itself.

Two findings the walk turned up:

  • The add field has no focus indication in a settled group. .lf-another input sets outline: none, so the row has to answer the keyboard for it — and that rule was scoped :not([settled]). A reader who opens a settled group's disclosure and Tabs into its "Another option" field gets nothing on screen saying where they are. That is what test_every_ring… was reporting as four unseen stops.
  • RINGS_DRAWN mis-reads an inset ring on butted cells. It sampled half a pixel inside the ring's outer edge, which for an inset ring is also the control's last fraction of a pixel; hit testing rounds that to the device pixel it shares with the next cell, so the row below reported as painting over the ring's bottom edge. Measured: an option's border box ends at 489.71875 and elementsFromPoint at 489.21875 returns the next option, at 489.0 the option itself. It now samples the middle of the ring's own band, floored at half a pixel so a hairline ring still lands inside itself.

Not fixed here

test_a_seat_conversation_leaves_the_pick_it_is_about_live and test_the_ring_holds_on_a_seat_the_agent_has_still_to_answer both need a widget that is on the reader's ask list and seats a conversation. lf-options was the only one, and the split those two guard — seat_with_agent taking a decision off the reader's list without answering it — can no longer be produced by the shipped layer. Tracked in #147; the options are a design call rather than a test edit.

Why the obvious substitutions do not work
  • An honored chosen pick takes the group off the reader's list, but it also makes it answered, so actionAvailable's awaiting prerequisite legitimately refuses the press and the log stays empty — the opposite of what the eligibility test asserts. Tried; it fails at assert [] == ['choose'].
  • A lf-task talk seat seats a conversation but is x-awaits: {rollup: true}, so it never enters the visible list, and _answered is not consulted for a rollup record. Adding a local x-awaits to it in an overlay is refused by the registry: <lf-task> x-awaits local decision declares no answer verbs.
  • Putting x-conversation back on lf-options in a test overlay makes an invalid layer: the render gate's missingConversations probe reports "declares x-conversation but rendered 0 matching hosts; its module must place exactly one conversationBox".

The other pre-existing failures in that run are untouched: the catalog preview digest is #134 / #133, and test_a_coined_class_cannot_reach_the_chromes_rules came in with 360c40a. This branch does change theme.css, which is one of the 142 files example-previews.py digests, so the manifest will want another run of that script whenever #134's treadmill is settled.

Testing

On this branch rebased onto 92b54ae:

  • uv run pytest tests — 724 passed, 6 skipped.
  • uv run pytest tests/test_render_drafts.py tests/test_render_options.py tests/test_render_options_addition.py tests/test_render_options_settled.py --run-nightly — 101 passed.
  • uv run pytest tests/test_render_projection.py tests/test_render_navigation.py --run-nightly — 139 passed, 1 failed (test_the_ring_holds_on_a_seat…, the one left above).
  • uv run pytest tests/test_render_controls.py tests/test_render_conversations.py --run-nightly — the four standing failures plus test_a_seat_conversation_leaves_the_pick…; test_every_ring_the_layer_draws_is_shown_whole_somewhere_in_the_corpus passes on its own (-n0, 54s) and reaches its last assertion under -n4, where it reported four unseen stops before this change.
  • pre-commit run --files over the diff — passed.

Each assertion here was reproduced red before it was changed, and .lf-another's ring was measured both ways in a settled group: ['none','3px','rgb(28,27,24)'] before, ['solid','2px','rgb(47,84,128)'] after.


Automated fix for failed run

…field

`Make reader-added answers real options` (292de9c) replaced the options
group's catch-all conversation with an add-option form, dropped
`x-conversation`/`x-work` from `lf-options`, took the status rule out of the
option gutter, reworded the pick mark, and moved the keyboard ring from the
decision onto the exact option row. Nineteen browser tests still read the old
page.

The durable-draft corpus and one navigation test used `#jobs`'s conversation
seat as their subject; they now stand on a `lf-task talk` seat, which is the
seat the shipped layer still has. Two of them asked whether the composer
disappears after a send — a seat that can hold keeps it standing — so they ask
of the words instead. The digit test drops the status rule from its gutter
relation, the retired-slot test moves to a settled group's summary, which is
the generated label that is still one of the page's words, and the ring test
reads the band off the row the keyboard is on.

Two product findings came out of the same walk. The add field's own outline is
off, so its row has to answer the keyboard for it — and the rule was scoped to
`:not([settled])`, leaving a reader who opened a settled group and tabbed into
its field with nothing on screen saying where they were. And the row ring is
inset on butted cells, so `RINGS_DRAWN` sampling half a pixel inside its outer
edge hit-tested the seam and reported the next row as painting over it; it now
samples the middle of the ring's own band.

Two tests are not fixed here. `test_a_seat_conversation_leaves_the_pick_it_is
_about_live` and `test_the_ring_holds_on_a_seat_the_agent_has_still_to_answer`
both need a widget that is on the reader's ask list *and* seats a conversation,
which no shipped widget now is.
@leaf-agent

Copy link
Copy Markdown
Collaborator Author

ci failed again on run 33340079817 (1ad72bc, #117) with 33 red — the same set this branch is against, two commits further along. I was dispatched on that run, reproduced it at 786c513, and arrived at this branch's fix independently, so this is a second reading of it rather than new work: the 14 durable-draft tests plus test_c_in_a_seated_conversation_reaches_the_thread_it_is_in bisect to 292de9c, and lf-task talk is the only seat the shipped layer still offers. Nothing to add to the diff; I've dropped mine.

One thing worth pinning down for #147, since it is the obvious next attempt: the test-overlay route passes as a browser test and still declares an invalid layer, exactly as this PR's <details> says. With options["x-conversation"] = {"when": {"choose": [True]}} added to the overlay test_a_seat_conversation_leaves_the_pick_it_is_about_live already writes, and the same entry handed to serve(..., layer_registry=...) in test_the_ring_holds_on_a_seat_the_agent_has_still_to_answer, both go green in about 2s each — because seat_with_agent reads the declaration and neither test opens the render gate. missingConversations filters on entry["x-conversation"] alone and requires hosts === 1 for every matching instance, so any page under that overlay fails version check --render while its two tests report green. That is the shape tests/CLAUDE.md warns about, and it is why the leaves in #147 are a design call and not a test edit.

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