Retarget the seated-decision tests onto a widget that declares the seat - #151
Conversation
The two guards over the split between the reader's list and the unanswered decisions — a thread standing in a widget's own `x-conversation` seat takes it off the reader's list without answering it — rested on `lf-options`, the one shipped entry that both awaited and seated. 292de9c made the reader's cell an add form and dropped `x-conversation`, so the pair could no longer be produced and both tests have failed on every `ci` run since. The split is layer-generic on both sides (`seat_with_agent`, `seatWithAgent`), so declare the pair in the test layer rather than borrowing whichever shipped tag happens to carry it: a project-package entry and module supplied through `serve`'s `layer_registry`/`layer_widgets`, the way `lf-feed` and `lf-tally` already are. Whether `lf-options` should seat a conversation again is left open. Closes #147
05fd797 to
35b9a26
Compare
|
Rebased onto Verified on the rebased tree: Dispatched by the nightly run 33342915540 on |
Problem
cion main has been red on two nightly browser tests since 292de9c, and #147 diagnosed why: both guard the layer's one split between the reader's list and the unanswered decisions — a thread standing in a widget's ownx-conversationseat takes it off the reader's list without answering it — andlf-optionswas the only shipped entry that both awaited and seated. That commit made the reader's cell an add form and droppedx-conversation, so the pair the split needs can no longer be produced by the shipped layer, and neither test could reach the behaviour it was written for.Solution
The split is layer-generic on both sides (
seat_with_agentin Python,standingInreadingunansweredDecisionsin the runtime), and both halves are still implemented and still described. So the pair is declared in the test layer rather than borrowed from whichever shipped tag happens to carry it: a project-package entry and module handed toservethroughlayer_registry/layer_widgets, the waylf-feedandlf-tallyalready are. Its module paints the answer before it sends, which is whatlf-optionsdoes with a pick and the reason the browser door matters as much as the POST one.This is option 2 of the three #147 lays out, and the only one that decides nothing about the product: it changes no shipped registry entry, module, theme rule or runtime file. Whether
lf-optionsshould seat a conversation again (option 1, which would also give an options group its inline thread view back) and whether the split should be retired (option 3) are both still open — this just stops main being red while they are.tests/CLAUDE.mdgains the rule the change follows, so the next guard over a declaration-driven reading is written against a widget that declares it rather than against today's shipped carrier.Why the substitutions #147 tried do not work
Reproduced from #147's analysis, all three confirmed here:
chosenpick takes the group off the reader's list but answers it, soactionAvailable'sawaitingprerequisite legitimately refuses the press;lf-task talkseat isx-awaits: {rollup: true}, so it never enters the visible list, and a localx-awaitsadded in an overlay is refused at the registry door (x-awaits local decision declares no answer verbs);x-conversationback onlf-optionsin a test overlay builds a layer the render gate rejects (missingConversations), becauseconversationBoxplacement is the module's.Testing
On this branch, rebased onto
aa41f7a:uv run pytest tests— 740 passed, 6 skipped. Run one rebase earlier, on7d219d1; the two named tests were re-run after the rebase ontoaa41f7aand pass there.--run-nightly, and both were mutation-checked against the reading they exist for. FlippingansweredContexttocontext(false)(the reader's list) fails the controls test atassert [] == ['settle']— the same shape as theassert [] == ['choose']the old fixture produced. FlippingstandingInto readopenDecisions()fails the navigation test at the ring:#shape-decisionwears nodata-lf-decision.uv run pytest tests/test_render_controls.py tests/test_render_navigation.py --run-nightly— 119 passed, 6 failed. I re-ran all six on a cleanmainand each failed identically there, so none is caused by this branch. Update the option-group tests for the removed seat, and ring the add field #148 edits two of them (test_a_questions_digits_are_drawn_whole,test_c_in_a_seated_conversation_reaches_the_thread_it_is_in) and itstheme.csschange is the fix its body claims fortest_every_ring_the_layer_draws_is_shown_whole_somewhere_in_the_corpus; the remaining three —test_a_label_press_keeps_the_controls_keyboard_standing,test_the_responsive_action_shelf_keeps_primary_actions_in_reachandtest_coarse_pointer_resize_reach_stays_reachable_without_trapping_scroll— are red onmainindependently of both branches.pre-commit run --filesover the diff — passed.No overlap with #148, which fixes the other seventeen failures from the same commit and explicitly leaves these two here.
Closes #147