Repository navigation
Replace sidebar worker absence with a nominal unscheduled value - #1356
Merged
Merged
Conversation
There was a problem hiding this comment.
Copilot was unable to review this pull request because the user who requested the review has insufficient remaining quota.
An organization owner can choose the repository organization as the billing source for reviews requested by members with a paid Copilot license. Learn about Copilot code review billing.
trissim
enabled auto-merge
October 30, 2026 07:31
trissim
disabled auto-merge
October 30, 2026 09:06
trissim
force-pushed
the
fix/sidebar-worker-presence
branch
from
October 30, 2026 09:06
3845bd8 to
85d3543
Compare
trissim
enabled auto-merge
October 30, 2026 09:07
This was referenced Oct 30, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
1 coherent correction across 3 files (+50/-22): the sidebar's
Worker[None] | Noneslot becomesWorker[None] | NoWorker; 3 worker-slot absence decisions become 0. The short-list assertion now checks that no worker replaced the original unscheduled value. A running-worker identity assertion also rejects duplicate admission.Requested by claude-code, bus 44043, as the remaining P972 sidebar annotation correction after #1344 merged. This is not a claim that P972's application qualification is complete.
Worker ownership: before / after
Before,
SidebarGroup._row_mountingusedNonefor unscheduled work. Productionreconcile_rowsand two tests each interpreted that encoding before asking the worker about its state. IDEN-3 / BOUND-1: the unscheduled answer was supplied separately by consumers (paper1 §1, Theorems 4.6–4.7).After:
NoWorkerdeclares the unscheduled answers: finished, not running, no error. It creates no coroutine, native worker, task, manager entry or state mirror.Worker[None]returned byDOMNode.run_worker.is_finished; the lifetime test asksis_running; the frame test asksis_finished. NoNone,isinstance, tag switch, wrapper or Protocol reconstructs which case is present.No existing abstraction, key or required worker distinction is erased. The original
Nonestate and its replacement give the same admission answer; pending/running workers still refuse another start and terminal native workers still permit one.Broken test consumer removed in the same correction
test_sidebar_rows_in_steps.pystill called a deleted four-positionalreconcile_rows(keys, members, create, update)API, mounted its group outside the requiredTargetTree, and kept its own member map. It now implements the existingmember_keys,new_row,show_memberandsync_members(changed=...)hooks, inherits native row-position painting throughAlternatingTone, and mounts under a realTargetTreewith the real reconciliation owner.The frame-growth, order, paint-once, partial-first-step and no-frame-hold assertions remain. The short case preserves a stronger observation than merely checking a finished worker: the unscheduled value's identity must never be replaced. The real channel lifetime case retains its hide/finish/error/reveal assertions and adds the same-worker assertion across a second pending reconciliation.
Source evidence
20d7971c0294451c4ad63dbd4c3411b3e9c43bb3, pushed the fresh branch, and verifiedls-remote = HEADbefore editing.c59b3766249f928c710a981e1fc40d491141e5b1, retaining main's P954: reland paired narrow relationship readers and complete controls #1349 revert. No edits to the paired producer or reverted caller code.git grep -n -E '_row_mounting|sidebar-rows|NoWorker|AbsentWorker|IdleWorker' -- src tests toolsidentified the complete named slot family:sidebar_tree.py,test_channel_member_mount_lifetime.py,test_sidebar_rows_in_steps.py. After migration, all named slot absence checks andassertIsNoneare gone.ModuleSyntaxIndexcensus: original 638 Python files, 2006 class declarations, zero parse omissions, plus original slot reads/writes/decisions/imports. The corpus covers all Toad src/tests/tools and Textual worker.py, worker_manager.py and dom.py. Post-change/current-main census and exact command/results are retained under/home/ts/.cache/agent-scratch/awareness-schema/p972-worker-source-{before,current}.jsonand corresponding logs.ChannelGroup,RelationshipRows,WelcomeSectionand the test group as all declared SidebarGroup consumers. The shared base handles their admission. Other independent optional-worker lifetimes were observed but are outside this assigned slot correction.git diff --checkpassed. No local NRA gate, collection, import probe, pytest, app/provider run or installation was performed.p972-worker-source-before.log; the corrected bounded collector filters the NRA index before extracting the relevant sites. No production operation or original input was replayed.Current-main correction
Current head
85d3543b75ded5343b2db68797c1f564f33509e7rebases the single correction onto maina78684c4b1b440186c46f3701c75cf4506a39601. Remote SHA equals HEAD. Auto-merge was disabled before rewriting my owned branch, and the push used an exact old-head lease (3845bd8a3d803c7b7d8057b181ceb98d3f6ff864). No other branch was rewritten.My earlier head lacked #1321 (
643d2a5e6) and hosted run41016985257failed during collection on the oldBoardRowimport: 504 tests collected, 72 errors, exit 2, zero executed tests. Main having the fix was not enough: I had left the PR on its stale caller. The rebased head now contains #1321 and #1358's Core relock. Whole src/tests/tools grep finds noBoardRowcaller. A direct old-head/new-head comparison of all three owned files exits 0: the reviewed sidebar and test blobs are byte-identical, and the main-relative diff remains +50/-22. Earlier checks and review belong to the earlier head, not this one; no new executed test or application proof is claimed.Integration still required
The integration owner must run one combined necessary selection under its test lease:
tests/textual/test_channel_member_mount_lifetime.pytests/textual/test_sidebar_rows_in_steps.pyThen exercise the installed sidebar: short lists without scheduled work; long-list stepped growth; repeated reconciliation without a duplicate worker; hide while waiting for a frame; terminal completion; reveal/resume; view/tab return. Existing configured application acceptance remains integration-owned. Source/AST evidence is not execution proof (paper1 Corollary 4.10; paper4 §1).
Assumed: the assigned unscheduled case should permit admission while reporting not-running; native Worker.is_finished continues to own pending/running/terminal distinctions. No assumption of passing tests, merged delivery, installed behavior or improved latency.