Skip to content

Release: Merge development into main#4715

Merged
dcrjodle merged 19 commits into
mainfrom
development
Jul 14, 2026
Merged

Release: Merge development into main#4715
dcrjodle merged 19 commits into
mainfrom
development

Conversation

@dcrjodle

Copy link
Copy Markdown
Collaborator

Automated release PR to merge development into main.

Includes Rustino.NET 0.3.9 bump (fix for macOS "Where is use_default?" notification dialog, Ivy-Tendril#1682).

🤖 Generated with Claude Code

rorychatt and others added 19 commits July 10, 2026 09:25
feat(desktop): update Rustino.NET to 0.3.8 and expose About app API
Adds global keydown handler to prevent Backspace from navigating back when
pressed outside text input fields. The browser's "Backspace = go back"
behavior is inappropriate in single-page desktop apps and causes loss of
application state.

- Add preventDefault() for Backspace outside INPUT/TEXTAREA/contentEditable
- Install listener at module load to ensure protection is always active
- Add tests for backspace prevention and registered shortcut interaction
- Update test to reflect listener always being installed

Plan: 00093
Update _resetForTesting() to reinstall the listener after cleanup, matching
module-load state. This ensures backspace prevention tests work correctly
since the listener is always installed at module load for production use.

Plan: 00093
…ckspaceBrowserBackNavigationInDesktopApps

[00093] Disable Backspace Browser Back Navigation in Desktop Apps
The showCompleted state machine was inverted in two places.

showCompleted was set whenever cardCount > 0, so the flag meaning "the
user just cleared the last card, briefly show the caught-up message" was
true from first render. And the early return read

    if (cards.length === 0 && showCompleted) return null;

which bails out precisely when the message should be visible.

For a single-article feed the result was: dismissing the card returned
null immediately (the "You're all caught up!" message never appeared),
then 2700ms later the timer flipped showCompleted to false, the guard
stopped firing, and the component rendered again -- as nothing but its
invisible sizer div, which reserved the card's full height and clipped
the sidebar menu beneath it.

Set showCompleted only on a real >0 -> 0 transition, and return null when
there is nothing to show and the message is not being displayed, so the
widget unmounts for good and the menu reflows.

hasDismissedNews no longer gates anything and the dismissedNews === null
branches were unreachable (it is typed string[] and its initializer never
returns null), so both are removed.
Change toolbarVariant density classes from pb-* to py-* to give the
paperclip icon symmetric vertical spacing from the container edge.
This fixes the visual alignment issue where the icon row was flush
against the top border.

tendril/00641

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
Use npx vp instead of bare vp in MSBuild Exec commands to resolve
the tool from local node_modules/.bin/ without requiring PATH setup.

tendril/00641

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
…onMissingTopSpacingInContentInput

[00641] Fix Clip Icon Missing Top Spacing in ContentInput
Picks up the fix for the macOS "Where is use_default?" dialog on first
desktop notification (Ivy-Interactive/Rustino#20, Ivy-Tendril#1682).

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
@dcrjodle
dcrjodle merged commit eb4c807 into main Jul 14, 2026
17 of 21 checks passed
@artem-ivy-ai

Copy link
Copy Markdown
Collaborator

Staging removed

Staging environment has been deleted for this PR.

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.

4 participants