Repository navigation
Carry Core presentation members into status paint and activity consumers - #681
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 reached their quota limit.
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.
This was referenced Oct 16, 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.
Fix the owner
Core #943 carries one ThreadPresentationStatus through ThreadPresentation, ThreadStatusModel and ThreadRowModel. Idle/working are immutable declared members; attention retains the original activity, so warnings do not stop real work. ActivityState declares its member once and busy derives from it. Readiness no longer takes a second busy answer.
SessionDetails decides paint once in title_role from row.status and returns the existing MutedRole/WorkingRole/NoticeRole directly. It reads the member’s owned read-only attention then busy capabilities, never the deleted carrier flags. SessionDetails has only two local overrides: history detail attention and delivery current/error. Unobserved standalone ACP derives through its original TurnOwner/ActivityState; native TurnState permissions remain unchanged. The four forwarding SessionStatus classes, separate projection instance and member-to-role MroProjection table are all deleted (Codex10762/Claude10763). There is no additional frontend identity, mapping table or store. Native Content value comparison still avoids unchanged title assignments.
Complete consumer migration
Eight production consumer methods: Core ThreadStatusModel.known, ThreadRowModel.of, SidebarModel.derive; Toad ThreadTab.busy, ThreadStatusRow.busy, ChannelParticipants.prepare_participants, ObservedThreadActivity.working, SessionDetails.title_status. All old presentation.busy/attention and row.busy/working/attention reads are absent across both production roots. The three Core carriers have only the typed status field, not stored flag copies.
Before/after owner evidence uses refactor-audit ParsedModule: 857 modules before and 879 after across Toad, actual paired Core, installed Textual/ui_theme/metaclass_registry; zero parse omissions. Declaration/import/decision/write/consumer sites retained in owned scratch before-ast.json/after-ast.json; dynamic callbacks/MRO inspected semantically. Status family declarations: agent_comms/thread_presentation.py; three carrier fields in that file and ui_model/{status,sidebar}.py. No new registry, compatibility alias, timer or styles store. No tests/fakes/provider input or authored pin changes.
Real saved-session source check
Core70f53cba + Toadbc14bcb55 (before the forwarding-only deletion; current head 54f07ba) after normal integration of current main d8d99a4. Plain st on newly owned :210. Original toad-theme/nra-architecture views plus a different active peer DM. Idle, working and attention title colours physically inspected; all three repaint on Atom One Dark and Solarized Light, including offscreen titles. Repeated equal titles preserve native Content identity. Busy Core row keeps the sole sweep running under local history/delivery attention. Frontend closed normally; owned Xvfb stopped; Core source loan released.
Evidence: /home/ts/.cache/agent-scratch/toad-activity-disclosure/owned-thread-status/main-integrated/{live.json,status-observations.jsonl,working-light.png,idle-light-return.png,attention-light-return.png}. Core Working/Idle members observed directly; UI attention came from genuine local overrides, not an observed Core Attention member. This is paired source-preview acceptance, not installation or performance evidence.
Honest history limits
A frozen run on the older source base retained a DM body after native-tab return and showed the existing read-marker paging failure. No refresh/retry; raw failure retained. After merging current main and using a different peer, native-tab return showed its correct original body/composer without that error. The new DM body itself remained Loading messages, so full DM/history acceptance remains with UX. No claim that this status change fixes history or scrolling.
Shipping
Ready for paired review with Core #943/70f53cba and Toad 54f07ba. The latest merge normally incorporates #679/ddafcf89e, deleting its forwarding classes on both paths; actual native C3/imports and AST parse verified, with zero role-handler/table declarations, no repeat full UI journey per Codex10762. Codex retains the installed check with me. Core status API is required. #679 remains independently shippable first; its accepted class-writer deletion is also in this ancestry. Retargeted to main so unrelated main merges do not appear as this change. Native geometry deletion remains blocked on core-route-counts’ shared foundation. Neither paired PR is merged or installed.