Repository navigation
Modernize Graphlink Composer to a production-grade request surface - #11
Merged
Merged
Conversation
dovvnloading
added a commit
that referenced
this pull request
Jul 29, 2026
… (findings #10, #11) (#174) Two dead settings from the R8a audit, both with real backend/UI wiring already in place on one side only. - Notification-type gating (finding #10): Settings' Info/Success/Warning/ Error checkboxes persisted real preferences via SettingsManager. set_notification_preferences, and get_notification_type_enabled already existed to read them back - nothing ever called it. NotificationState.show() set visible=True unconditionally regardless of what the user had unchecked. register_notifications now takes an optional SettingsManager; show() early-returns (leaving the current banner, if any, untouched) when the message's type is disabled. Gating lives in the one method every call site already goes through, so every existing notifications.show(...) call across canvas.py, agents.py, chat_library.py, settings.py, plugins.py, autosave.py, and crash_recovery.py is covered without touching any of them. - View popover FONT section (finding #11): the family/size/color controls already round-tripped real setFontFamily/setFontSize/setFontColor intents into scene state - nothing consumed scene.fontFamily/fontSizePt/fontColor as CSS. SceneCanvas now writes them as --gl-node-font-family/-size/-color custom properties on the canvas wrapper (fontSizePt is points, not pixels - the existing 8-16 range and 9pt default only make sense that way, and pt is a real CSS unit). .scene-node/.scene-node-title/ .scene-node-body reference the tokens with their prior literal values as fallbacks, so every node's title and generic body text now responds to the FONT section live. Scoped to the shared base rules rather than each node kind's own content styling (markdown headings, code blocks) so typographic hierarchy and monospace code stay intact. Live-verified end to end in a running instance: changing the font size slider, family select, and color swatch each visibly restyled a real canvas node's title and body text; toggling a notification type off suppressed that type's banner while leaving others unaffected. Co-authored-by: Claude Opus 5 <noreply@anthropic.com>
dovvnloading
added a commit
that referenced
this pull request
Jul 29, 2026
…(findings #7, #11) (#179) Two composer-control issues from the audit, same component. - Finding #7: .control-value used max-width (a cap, not a fixed size), so switching reasoning levels (or the active model) resized the button itself, visibly shoving the adjacent control sideways. Changed to a fixed width - both the Reasoning and Model controls now stay one stable size regardless of which option is selected; long model ids still ellipsis- truncate, they just no longer resize the button while doing it. - Finding #11: the Reasoning button had no title at all, unlike its Attach and Model neighbours, which both explain their disabled state. Added a conditional title distinguishing "provider doesn't support this" from "a request is in flight" - the same two reasons the button can be disabled for. Live-verified against a running instance: the Reasoning control's rendered width stayed at 238.5625px across all four levels (Off/Low/Medium/High). Co-authored-by: Claude Opus 5 <noreply@anthropic.com>
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.
What changed
ComposerController.Why
The previous Composer split visual controls from the request lifecycle. Context was implicit, send/recovery state was distributed across
ChatWindowandWindowActionsMixin, and failed sends cleared user work. The new shell gives the user a single, inspectable interaction surface while keeping the migration compatible with the existing graph worker contracts.Validation
QT_QPA_PLATFORM=offscreen python -m pytest graphlink_app/tests -qpython -m compileall -q graphlink_appgit diff --checkThe local-only proposal at
doc/COMPOSER_SOTA_REFACTOR_PLAN.mdremains ignored and is intentionally not part of this PR.