Skip to content

Carry Core presentation members into status paint and activity consumers - #681

Merged
trissim merged 7 commits into
mainfrom
refactor/owned-thread-status
Oct 16, 2026
Merged

trissim merged 7 commits into
mainfrom
refactor/owned-thread-status

Conversation

@trissim

@trissim trissim commented Oct 16, 2026 •

Copy link
Copy Markdown

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.

@trissim
trissim changed the base branch from refactor/activity-theme-state to main October 16, 2026 04:08
@trissim
trissim marked this pull request as ready for review October 16, 2026 04:08
Copilot AI balanced review requested due to automatic review settings October 16, 2026 04:08

Copilot AI left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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.

@trissim
trissim merged commit f5dab0c into main Oct 16, 2026
2 checks passed
@trissim
trissim deleted the refactor/owned-thread-status branch October 17, 2026 20:51
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