Skip to content

Own GoalBar widgets and remove the selector family - #698

Closed
trissim wants to merge 1 commit into
fix/channel-kind-compositionfrom
refactor/goalbar-widget-references
Closed

trissim wants to merge 1 commit into
fix/channel-kind-compositionfrom
refactor/goalbar-widget-references

Conversation

@trissim

@trissim trissim commented Oct 16, 2026

Copy link
Copy Markdown

Change

GoalBar's widgets already have a clear lifetime. Repeatedly reconstructing their identity from CSS selectors was pointless, especially the conversation-wide resize/mouse lookups.

  • GoalBar owns its actual header, document, text, execution and pulse widgets. The conversation binding owns its optional GoalBar handle.
  • Each GoalControl receives its declared GoalInteraction at construction. Delete the widget-ID-to-action decode; IDs remain derived from the declaration for styling/accessibility.
  • GoalControlRow owns declaration-derived controls, their projection and responsive layout. Move the existing layout algorithm there unchanged; no second action roster.
  • Prompt owns its delivery-controls widget and reports actual visibility. A native DeliveryControlsChanged message informs the composing binding; delete Prompt's inverse sibling search/import.
  • Goal presentation resize/mouse/invalidation handling lives with the existing ConversationSessionBinding, which already owns goal observation/control state. The main Conversation still records the original mouse offset.

Core goals, actions, source fences, polling behavior, CSS, pulse painting and layout calculations are unchanged. No widget stores a second goal/queue snapshot. No cache, timer, selector wrapper, alias or alternate codec.

Source evidence

Stacked on #697 /c028764d; head8aa06062. Four production files, +115/−74.

Family Before After
Full GoalBar-related query calls (including class selectors) 19 0
Literal/f-string selectors in goal_bar.py 12 0
UI widget-ID → GoalInteraction decode 1 0
Repeated action-family discovery sites 2 1 (row construction)
Prompt import/search of sibling GoalBar 1 0

Existing NRA Package parser: Toad281 + Core328 + Textual254 = 863 parsed, zero omissions. Before/after declarations, writes, checks, imports, inheritance and consumers: .artifacts/selector-queries/goal-{before,after}.txt; query inventory goal-query-sites{,-after}.txt. Widget and slash-command GoalControl are distinct qualified types; only the widget constructor changes.

The Textual source message_pump.py:912-961 dispatches handlers through the C3 MRO, so the binding's goal mouse handler still follows Conversation's offset handler; stop() is not prevent_default(). AST does not prove this execution. Source has no GoalBar recompose caller; native widget ownership lasts with the containing view.

Receiving ratchet againstc028764d exit0, zero positive deltas (goal-ratchet.json). No automated Toad tests or fixtures. Source checks do not prove application behavior or frame time.

Shared-file check: #689 changes HistoryInteraction only; this changes CollapseInteraction only. #670's GoalControl activation hunk is already present here and preserved; no competing Forms work. #682 is deferred owned work. Paint/layout algorithms and CSS were preserved; theme owner was notified before editing.

Required live check

Pending review/normal installation by Codex, not a source-overlay app. Use the accepted XvfbDisplay.input helper read-only by path, real st / isolated display and saved sessions: goal push/return, collapse/expand, border resize, narrow controls, readonly History/editor cancel, queue separator changes, and channel/DM opening. Do not mutate original goals or replay uncertain input. No installed/live/frame-performance claim yet.

Draft; do not hold the accepted #693 usage fix behind this follow-up.

@trissim

trissim commented Oct 19, 2026

Copy link
Copy Markdown
Author

Closing: 1468 commits behind main with conflicts. The same deletion of GoalBar's CSS-selector lookups is ordered fresh on current main as P705 (core-commander-2).

@trissim trissim closed this Oct 19, 2026
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.

1 participant