Skip to content

Discover viewed-object settings in the existing sidebar - #1753

Merged
trissim merged 1 commit into
mainfrom
fix/view-sidebar-discovery
Nov 13, 2026
Merged

trissim merged 1 commit into
mainfrom
fix/view-sidebar-discovery

Conversation

@trissim

@trissim trissim commented Nov 13, 2026

Copy link
Copy Markdown

The viewed-object bar now has one dropdown. Its settings entries come from that view's admitted dataclass fields; native agent panels join those entries through their existing declared family. No settings roster or third bar is added. The context menu opens the same entries over the same ObjectState.

OpenHCS's ConfigWindow binds each selected config to its original ObjectState and builds its editor lazily. This change follows that ownership: one retained view state inherits the live global defaults, and only the selected form is built. Explicit overrides, reset, persistence and field-source metadata stay with ObjectConfiguration and DeclaredField.

Channel views no longer create Connection/Comms agent panels using the sender's identity. File, channel and native views inherit the same sidebar resource and selection lifecycle. Settings entries retain their actual DottedFieldPath identity, rather than matching display labels. Native role panels retain their nominal widget identity.

Accordion-specific relationship, context, project and plan readers now use an inherited panel-host capability. A dropdown page and a collapsible both own their visibility and reveal behavior. Hidden dropdown pages stop asking for observations. Plan arrival can select its original panel; keyboard focus goes to the view's own control.

One focused actual UI control passed in 14.63s: channel and file selection, declaration discovery, lazy forms, nonempty painted fields, dropdown switching, live default inheritance, explicit override/reset, return-to-view retention, shared context editor state, native relationship-panel activation and hidden-panel visibility. Earlier attempts exposed the shell descriptor limit and a redundant abstract override hiding the inherited sidebar factory; both were corrected. No paid provider, broad suite or profiler was used. The final keyboard focus change was source-traced; no extra run added. Physical reopened Toad trial remains Tristan's.

Copilot AI balanced review requested due to automatic review settings November 13, 2026 01:59

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 insufficient remaining quota. Try requesting a review at a lower effort level.

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 90f9691 into main Nov 13, 2026
1 of 2 checks passed
@github-actions

Copy link
Copy Markdown

debt-src at 63e1a45 blocks on 17 lines:

grew BooleanChainTerms:src/toad/widgets/thread_comms.py +4
grew ForeignAbsenceProbe:src/toad/widgets/side_bar.py +1
grew NoneAbsence:src/toad/widgets/side_bar.py +1
grew StringIdentity:.verification/view-sidebar-discovery/author.py +4
grew StringIdentity:.verification/view-sidebar-discovery/finish_author.py +4
grew StringIdentity:.verification/view-sidebar-discovery/hosts_author.py +4
grew StringIdentity:.verification/view-sidebar-discovery/lifecycle_author.py +2
grew TypeErrors:src/toad/widgets/session_thread_panels.py +1
grew UnannotatedParameter:src/toad/configured_view.py +1
grew UnannotatedParameter:src/toad/widgets/side_bar.py +5
found BooleanChainTerms:src/toad/widgets/thread_comms.py at src/toad/widgets/thread_comms.py:385 src/toad/widgets/thread_comms.py:385 src/toad/widgets/thread_comms.py:385 src/toad/widgets/thread_comms.py:385 src/toad/widgets/thread_comms.py:432 src/toad/widgets/thread_comms.py:432 src/toad/widgets/thread_comms.py:432 src/toad/widgets/thread_comms.py:432
found ForeignAbsenceProbe:src/toad/widgets/side_bar.py at src/toad/widgets/side_bar.py:1343
found NoneAbsence:src/toad/widgets/side_bar.py at src/toad/widgets/side_bar.py:1343 src/toad/widgets/side_bar.py:982 src/toad/widgets/side_bar.py:966 src/toad/widgets/side_bar.py:965 src/toad/widgets/side_bar.py:955 src/toad/widgets/side_bar.py:954 src/toad/widgets/side_bar.py:493 src/toad/widgets/side_bar.py:492 src/toad/widgets/side_bar.py:437 src/toad/widgets/side_bar.py:287 src/toad/widgets/side_bar.py:260
found TypeErrors:src/toad/widgets/session_thread_panels.py at src/toad/widgets/session_thread_panels.py:74 ("SidebarPanelWidget" has no attribute "entries"  [attr-defined])
found UnannotatedParameter:src/toad/configured_view.py at src/toad/configured_view.py:28 src/toad/configured_view.py:45 src/toad/configured_view.py:94
found UnannotatedParameter:src/toad/widgets/side_bar.py at src/toad/widgets/side_bar.py:216 src/toad/widgets/side_bar.py:259 src/toad/widgets/side_bar.py:584 src/toad/widgets/side_bar.py:584 src/toad/widgets/side_bar.py:1311 src/toad/widgets/side_bar.py:1331 src/toad/widgets/side_bar.py:1336 src/toad/widgets/side_bar.py:1350 src/toad/widgets/side_bar.py:1371 src/toad/widgets/side_bar.py:1374 src/toad/widgets/side_bar.py:1374 src/toad/widgets/side_bar.py:1393 src/toad/widgets/side_bar.py:1393
introduced NoneAbsence:src/toad/widgets/side_bar.py at lines [1343]
Warn-only, never blocks (2)
src/toad/screens/session_view.py: LintFindings +3
found LintFindings:src/toad/screens/session_view.py at src/toad/screens/session_view.py:3 (F401 [*] `abc.abstractmethod` imported but unused) src/toad/screens/session_view.py:4 (F401 [*] `functools.cached_property` imported but unused) src/toad/screens/session_view.py:25 (F401 [*] `toad.session_tracker.SidebarState` imported but unused)

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