Skip to content

chore: bump version to v2.4.0 - #4401

Merged
SpicyMarinara merged 13 commits into
stagingfrom
release/v2.4.0
Aug 1, 2026
Merged

chore: bump version to v2.4.0#4401
SpicyMarinara merged 13 commits into
stagingfrom
release/v2.4.0

Conversation

@SpicyMarinara

@SpicyMarinara SpicyMarinara commented Aug 1, 2026

Copy link
Copy Markdown
Collaborator

Why

Marinara Engine has accumulated enough substantial work since v2.3.5 to warrant a minor release. This publishes that work as v2.4.0 and keeps the application, installers, release notes, Home surfaces, and final UI polish on one release identity.

Closes #4400
Closes #4404

Translation follow-up: #4402

Changes

  • promote the current Unreleased changelog entries to 2.4.0 while preserving the historical 2.3.5 section
  • synchronize the canonical and derived package versions, shared APP_VERSION, PWA manifest, Windows installer, and Android metadata
  • increment Android versionCode from 40 to 41
  • update the README/Home release link and add the v2.4.0 What's New announcement
  • refresh the generated Home credits contributor count
  • simplify English search, selection, and input placeholders by removing trailing ellipses, including Presets and the matching Connections guide reference
  • remove the installed World Maps launchers from the Chats sidebar and top bar while preserving access from Agents and Chat Settings
  • make the empty No messages yet chat hover preview inherit the configured app accent instead of the fixed muted-theme color
  • standardize resource-panel sort controls on the shared 6.5rem width so Lorebooks matches the other tabs
  • make Noodle and NoodleR choose their existing mobile or desktop shells from the center pane's usable width, including space lost to open sidebars
  • match Read how this agent works to the shared install, update, and uninstall action styling in Download Agents
  • route release/* Engine builds through the Marinara-Agents staging catalog so v2.4.0 candidates receive compatible package manifests and artifacts
  • consolidate pending Agent update notices into one dismissible dialog with Update all and Not now actions
  • align UI smoke coverage with the v2.4.0 announcement and ellipsis-free labels, assert the restored Noodle desktop header state, and wait on sidebar motion instead of a fixed delay

Impact

The Home version label and What's New notice now identify v2.4.0, and release and installer metadata consistently target tag v2.4.0. World Maps follows the standard Agent navigation path instead of adding dedicated app-chrome shortcuts. Sidebar controls now use consistent accent and geometry tokens rather than one-off styling. Noodle remains usable when desktop sidebars squeeze the center pane or the desktop window is narrowed, without duplicating its compact interface. Download Agents now presents its detail actions with one consistent button vocabulary. Release branches also follow the Agent staging channel, allowing v2.4.0 release candidates to install the matching Agent packages without weakening runtime compatibility checks. When several installed Agents have updates, users now receive one consolidated, dismissible update decision instead of a cascade of pop-ups.

The translated Connections guides still quote the old ellipsis-bearing label; #4402 tracks the required docs-i18n mirror update.

Root causes

  • the empty chat preview used the fixed --muted-foreground theme token rather than the configurable chat-chrome accent token
  • resource panels shared .mari-chrome-sort-field, but its canonical width existed only as a Chats-tab utility class, allowing longer Lorebooks options to expand the native select
  • Noodle's responsive visibility rules watched the browser viewport instead of Marinara's center-pane container, so open desktop sidebars could leave the wide shell without enough room
  • the documentation action omitted the shared primary-action modifier used by install, update, and uninstall, producing different weight, sizing, and active text treatment
  • Agent channel selection recognized only the literal staging branch, so release/v2.4.0 read the stable catalog and rejected Long-Term Memory at its former <2.4.0 ceiling
  • the update prompter always selected the first pending Agent update, then cache invalidation advanced the queue one item at a time and produced a separate modal for every outdated Agent

Validation evidence

  • pnpm version:check — passed
  • pnpm credits:check — passed after the required generated credits refresh
  • pnpm localization:check — passed as part of the final repository check
  • pnpm --filter @marinara-engine/server exec tsx ../../scripts/regressions/capability-package-lifecycle.regression.ts — passed
  • pnpm check — passed after the release-channel correction
  • pnpm smoke:ui — 168 passed and 92 skipped; exposed six stale v2.4.0 label/announcement assertions or timing assumptions
  • pnpm exec playwright test e2e/core-flows.e2e.ts --grep "What's New opens once|Professor Mari chat fills|Conversation media searches match|mobile topbar remains reachable" — 6 passed, 2 skipped after repairing all six smoke failures
  • pnpm exec playwright test e2e/core-flows.e2e.ts --project=desktop-chromium --grep 'Noodle uses its mobile shell when the desktop center pane is narrow' — passed with the desktop-restoration header assertion
  • pnpm exec playwright test e2e/core-flows.e2e.ts --project=mobile-chromium --grep 'mobile topbar remains reachable while sidebars switch' — passed after the CodeRabbit bounding-box correction
  • pnpm exec playwright test e2e/core-flows.e2e.ts --project=desktop-chromium --grep 'World Maps stays in Agents and Chat Settings' — passed
  • pnpm exec playwright test e2e/core-flows.e2e.ts --project=desktop-chromium --grep 'empty chat hover previews inherit the configured accent|resource panel sort fields share the canonical width' — 2 passed
  • pnpm exec playwright test e2e/core-flows.e2e.ts --project=desktop-chromium --grep 'Noodle uses its mobile shell when the desktop center pane is narrow' — passed
  • pnpm exec playwright test e2e/core-flows.e2e.ts --grep 'downloadable agent catalog is usable on desktop and mobile' — 2 passed
  • pnpm localization:check — passed after the consolidated update-dialog copy was added
  • pnpm exec playwright test e2e/core-flows.e2e.ts --grep "Agent updates share one dismissible prompt" — 2 passed across desktop and mobile
  • pnpm check — passed after the [Issue]: Consolidate or disable agent update pop-ups on refresh #4404 implementation

Manual verification

  • Run pnpm smoke:ui
  • Manually verify the Home menu displays v2.4.0
  • Manually verify the What's New modal shows the v2.4.0 announcement
  • Manually verify the edited English placeholders, including Presets, have no trailing ellipses
  • Manually verify installed World Maps has no Chats-tab or top-bar launcher on desktop and mobile
  • Manually verify World Maps remains accessible through Agents and Chat Settings
  • Manually verify No messages yet follows a changed custom app accent
  • Manually verify the Lorebooks sorting control matches the sorting controls in neighboring resource tabs
  • Manually verify Noodle switches to its mobile shell when both desktop sidebars are open and returns to desktop after they close
  • Manually verify Noodle uses its mobile shell in a desktop window narrower than 1024px
  • Manually verify Read how this agent works matches install, update, and uninstall typography, sizing, and action styling on desktop and mobile
  • Manually verify a release/v2.4.0 checkout can refresh Download Agents and install Long-Term Memory from the staging catalog
  • Manually verify several outdated Agents appear in one scrollable dialog, Not now dismisses the current notices, and Update all applies the batch

Summary by CodeRabbit

  • New Features
    • Added the v2.4.0 release announcement and updated version information across supported platforms.
    • Improved responsive layouts to adapt navigation and content more smoothly to available space.
    • Simplified World Maps access through the Agents panel.
    • Combined pending agent updates into a single prompt with individual success and error feedback.
  • Bug Fixes
    • Improved chat preview styling and sorting-control sizing.
    • Standardized search labels and removed unnecessary trailing ellipses.
  • Documentation
    • Updated release references and examples to v2.4.0.
  • Tests
    • Expanded coverage for responsive layouts, navigation, styling, sorting, and agent updates.

@coderabbitai

coderabbitai Bot commented Aug 1, 2026

Copy link
Copy Markdown

Review Change Stack

Warning

Review limit reached

@SpicyMarinara, you've reached your PR review limit, so we couldn't start this review.

Next review available in: 36 seconds

Enable usage-based reviews in Billing to review now. Otherwise, wait until the next included review is available.
You're only billed for reviews past your plan's rate limits ($0.25/file).

How can I continue?

After more reviews become available, a review can be triggered using the @coderabbitai review command as a PR comment. Alternatively, push new commits to this PR.

To avoid repeated limits, reduce automatic review volume by pausing incremental auto-reviews earlier, using label-based review opt-in, excluding WIP or generated PR titles, or requesting reviews manually when the PR is ready. If your team needs uninterrupted high-volume reviews, an organization admin can enable usage-based reviews.

How do review limits work?

CodeRabbit enforces per-developer PR review limits for each organization. Most developers receive the normal plan review availability.

For paid Pro and Pro+ PR reviews, CodeRabbit uses adaptive limits for sustained high-volume activity. When a developer's recent PR review activity reaches the 95th percentile or higher among CodeRabbit users, additional reviews become available more gradually as earlier reviews age out of the rolling window.

Please refer docs for additional details.

Review details
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: ASSERTIVE

Plan: Pro Plus

Run ID: e98d1d5d-6a11-40ff-be3d-35813881f7d5

📥 Commits

Reviewing files that changed from the base of the PR and between 46db700 and 2b264ab.

📒 Files selected for processing (1)
  • packages/client/src/components/agents/AgentUpdatePrompter.tsx
📝 Walkthrough

Walkthrough

The PR prepares the repository for v2.4.0, synchronizes release metadata, updates client navigation and responsive layouts, batches agent update prompts, normalizes search and sort controls, and changes capability catalog branch resolution.

Changes

Release and interface updates

Layer / File(s) Summary
Synchronize v2.4.0 release metadata
CHANGELOG.md, README.md, TRADEMARKS.md, package.json, packages/*/package.json, packages/client/public/manifest.json, packages/shared/src/constants/defaults.ts, android/app/build.gradle, win/installer/*, packages/client/src/components/modals/WhatsNewModal.tsx, packages/client/src/components/chat/HomeCreditsModal.tsx
Release references, package versions, installer metadata, Android metadata, credits, and the release announcement now use v2.4.0.
Restructure World Maps and agent actions
packages/client/src/components/layout/ChatSidebar.tsx, packages/client/src/components/layout/TopBar.tsx, packages/client/src/components/agents/AgentCatalogView.tsx, packages/client/src/localization/locales/en.json
Dedicated World Maps launchers were removed. Agent detail actions now share styling. Agent-panel activation includes hierarchical-map details.
Align Noodle container breakpoints
packages/client/src/components/noodle/*
Noodle layouts now use explicit container-query breakpoints for desktop and mobile transitions.
Normalize search and sort controls
packages/client/src/components/layout/ChatRowPeek.tsx, packages/client/src/components/panels/*, packages/client/src/localization/locales/en.json, packages/client/src/styles/globals.css, docs/connections/organizing-connections.md
Search labels no longer use trailing ellipses. Empty chat previews use accent styling. Sort fields use a canonical width.
Batch agent update prompts
packages/client/src/components/agents/AgentUpdatePrompter.tsx, packages/client/src/localization/locales/en.json
The update prompt lists all unhandled updates in one dialog. Confirmed updates install sequentially. Dismissed updates are processed independently.
Resolve official capability branches
packages/server/src/services/capability-packages/package-manager.service.ts, scripts/regressions/capability-package-lifecycle.regression.ts
The exported branch resolver maps release branches to staging. Regression coverage verifies staging, main, release, and feature branch mappings.
Validate release interface changes
e2e/core-flows.e2e.ts
End-to-end coverage validates the release announcement, styling, agent controls, World Maps entry flow, responsive layouts, accessible selectors, and sidebar behavior.

Estimated code review effort: 3 (Moderate) | ~25 minutes

Possibly related issues

  • Issue 4400 — Covers the v2.4.0 version synchronization implemented by this PR.
  • Issue 4402 — Covers the shared “Search connections” label update in documentation.

Possibly related PRs

Suggested reviewers: thetopham

🚥 Pre-merge checks | ✅ 3 | ❌ 2

❌ Failed checks (2 warnings)

Check name Status Explanation Resolution
Out of Scope Changes check ⚠️ Warning Several UI, navigation, responsive-layout, sorting, and release-channel changes are not required by [#4400] or [#4404]. Split unrelated feature and fix changes into separate issue-linked PRs, or link the issues that define this additional scope.
Docstring Coverage ⚠️ Warning Docstring coverage is 5.56% which is insufficient. The required threshold is 80.00%. Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (3 passed)
Check name Status Explanation
Title check ✅ Passed The title clearly identifies the primary release version bump to v2.4.0.
Description check ✅ Passed The description covers the linked issues, changes, validation evidence, pending manual checks, and release impact.
Linked Issues check ✅ Passed The PR synchronizes the v2.4.0 release requirements in [#4400] and consolidates Agent updates into one dismissible prompt in [#4404].
✨ Finishing Touches 💡 1
📝 Generate docstrings 💡
  • Create stacked PR
  • Commit on current branch
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch release/v2.4.0

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@SpicyMarinara

Copy link
Copy Markdown
Collaborator Author

@coderabbitai review

@coderabbitai

coderabbitai Bot commented Aug 1, 2026

Copy link
Copy Markdown
✅ Action performed

Review finished.

Note: CodeRabbit is an incremental review system and does not re-review already reviewed commits. This command is applicable only when automatic reviews are paused.

@coderabbitai coderabbitai Bot 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.

Actionable comments posted: 4

🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@e2e/core-flows.e2e.ts`:
- Around line 10781-10816: Run the required client validation for the responsive
shell test covering NoodleView, including pnpm check and pnpm smoke:ui, and
complete the pending manual browser verification before merge.
- Around line 10807-10808: Add an assertion in the desktop restoration test near
the existing checks for desktopAccountSwitcher and mobileBottomNav to verify
mobileHeader is hidden as well, ensuring simultaneous desktop and mobile headers
fail the test.

In `@packages/client/src/components/noodle/NoodleShell.tsx`:
- Line 238: Align the responsive container breakpoint with the intended 1024px
desktop/mobile transition by adding a 1024px container to the relevant Noodle
layout wrapper. Update the rules at NoodleShell.tsx lines 238, 384, and 527-535
and NoodleBrowserChrome.tsx line 24 to use that container consistently for
NoodleShell and BrowserChrome visibility, preserving their existing desktop and
mobile behavior.

In `@win/installer/install.bat`:
- Around line 14-16: Update the installer metadata near RELEASE_TAG and
RELEASE_COMMIT to reference an existing repository tag, or create the intended
v2.4.0 tag, and pin RELEASE_COMMIT to the corresponding commit SHA so the
default installation resolves a valid commit without relying on
MARINARA_RELEASE_COMMIT.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: ASSERTIVE

Plan: Pro Plus

Run ID: 6f1ac195-c726-4603-9a1b-7b31a436e4ae

📥 Commits

Reviewing files that changed from the base of the PR and between 78f9e2c and 8a3fa09.

📒 Files selected for processing (30)
  • CHANGELOG.md
  • README.md
  • TRADEMARKS.md
  • android/app/build.gradle
  • docs/connections/organizing-connections.md
  • e2e/core-flows.e2e.ts
  • package.json
  • packages/client/package.json
  • packages/client/public/manifest.json
  • packages/client/src/components/agents/AgentCatalogView.tsx
  • packages/client/src/components/chat/HomeCreditsModal.tsx
  • packages/client/src/components/layout/ChatRowPeek.tsx
  • packages/client/src/components/layout/ChatSidebar.tsx
  • packages/client/src/components/layout/TopBar.tsx
  • packages/client/src/components/modals/WhatsNewModal.tsx
  • packages/client/src/components/noodle/NoodleBrowserChrome.tsx
  • packages/client/src/components/noodle/NoodleHome.tsx
  • packages/client/src/components/noodle/NoodleShell.tsx
  • packages/client/src/components/noodle/NoodlerHome.tsx
  • packages/client/src/components/panels/ConnectionsPanel.tsx
  • packages/client/src/components/panels/PresetsPanel.tsx
  • packages/client/src/localization/locales/en.json
  • packages/client/src/styles/globals.css
  • packages/server/package.json
  • packages/server/src/services/capability-packages/package-manager.service.ts
  • packages/shared/package.json
  • packages/shared/src/constants/defaults.ts
  • scripts/regressions/capability-package-lifecycle.regression.ts
  • win/installer/install.bat
  • win/installer/installer.nsi

Comment thread e2e/core-flows.e2e.ts
Comment thread e2e/core-flows.e2e.ts
Comment thread packages/client/src/components/noodle/NoodleShell.tsx
Comment thread win/installer/install.bat
@SpicyMarinara

Copy link
Copy Markdown
Collaborator Author

@coderabbitai review

@coderabbitai

coderabbitai Bot commented Aug 1, 2026

Copy link
Copy Markdown
✅ Action performed

Review finished.

Note: CodeRabbit is an incremental review system and does not re-review already reviewed commits. This command is applicable only when automatic reviews are paused.

@coderabbitai coderabbitai Bot 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.

Actionable comments posted: 1

🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@e2e/core-flows.e2e.ts`:
- Around line 11750-11752: Update the bounding-box polling assertion for
mobileChatSidebar so a null boundingBox result cannot satisfy the closed-sidebar
position check; replace the 0 fallback with a non-passing value such as
Number.POSITIVE_INFINITY while preserving the existing x-position threshold.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: ASSERTIVE

Plan: Pro Plus

Run ID: 2d6ca07c-5cab-4a83-9fa2-20ee9b806b6e

📥 Commits

Reviewing files that changed from the base of the PR and between 8a3fa09 and 4c9cd54.

📒 Files selected for processing (1)
  • e2e/core-flows.e2e.ts

Comment thread e2e/core-flows.e2e.ts
@SpicyMarinara

Copy link
Copy Markdown
Collaborator Author

@coderabbitai review

@coderabbitai

coderabbitai Bot commented Aug 1, 2026

Copy link
Copy Markdown
✅ Action performed

Review finished.

Note: CodeRabbit is an incremental review system and does not re-review already reviewed commits. This command is applicable only when automatic reviews are paused.

@SpicyMarinara

Copy link
Copy Markdown
Collaborator Author

@coderabbitai review

@coderabbitai

coderabbitai Bot commented Aug 1, 2026

Copy link
Copy Markdown
✅ Action performed

Review finished.

Note: CodeRabbit is an incremental review system and does not re-review already reviewed commits. This command is applicable only when automatic reviews are paused.

@coderabbitai coderabbitai Bot 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.

Caution

Some comments are outside the diff and can’t be posted inline due to platform limitations.

⚠️ Outside diff range comments (1)
packages/client/src/components/agents/AgentUpdatePrompter.tsx (1)

20-92: 🩺 Stability & Availability | 🟡 Minor | ⚡ Quick win

Re-check pending updates when the prompt flow ends.

pendingUpdates wraps a TanStack query, so pendingUpdates.refetch() is available. Call it in finally after activeUpdate.current = null so updates that arrive during the dialog/install/decline flow are evaluated with fresh data instead of staying unprompted until another dependency changes.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@packages/client/src/components/agents/AgentUpdatePrompter.tsx` around lines
20 - 92, The prompt flow in the effect must refresh pending updates when it
finishes. In the existing finally block around activeUpdate.current, set it to
null and then call pendingUpdates.refetch() so updates arriving during the
dialog, installation, or dismissal flow are re-evaluated with fresh query data;
include the refetch function’s dependency as required by the effect.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Outside diff comments:
In `@packages/client/src/components/agents/AgentUpdatePrompter.tsx`:
- Around line 20-92: The prompt flow in the effect must refresh pending updates
when it finishes. In the existing finally block around activeUpdate.current, set
it to null and then call pendingUpdates.refetch() so updates arriving during the
dialog, installation, or dismissal flow are re-evaluated with fresh query data;
include the refetch function’s dependency as required by the effect.

ℹ️ Review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: ASSERTIVE

Plan: Pro Plus

Run ID: ce0982b8-8bd1-4041-9673-b70d658c726a

📥 Commits

Reviewing files that changed from the base of the PR and between 4b3e7d2 and 46db700.

📒 Files selected for processing (3)
  • e2e/core-flows.e2e.ts
  • packages/client/src/components/agents/AgentUpdatePrompter.tsx
  • packages/client/src/localization/locales/en.json

@SpicyMarinara
SpicyMarinara marked this pull request as ready for review August 1, 2026 13:10
@SpicyMarinara

Copy link
Copy Markdown
Collaborator Author

@coderabbitai review

@coderabbitai

coderabbitai Bot commented Aug 1, 2026

Copy link
Copy Markdown
✅ Action performed

Review finished.

Note: CodeRabbit is an incremental review system and does not re-review already reviewed commits. This command is applicable only when automatic reviews are paused.

@SpicyMarinara
SpicyMarinara merged commit 43e23a4 into staging Aug 1, 2026
8 of 10 checks passed
@SpicyMarinara
SpicyMarinara deleted the release/v2.4.0 branch August 1, 2026 13:42
@coderabbitai coderabbitai Bot mentioned this pull request Aug 1, 2026
7 tasks
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant