Repository navigation
fix(bundled): reach the newest Pi, install the music player on request, and fix the profiles screen - #2599
Conversation
…ished Pi A bundled install could only reach the Pi its Gentle Shell release pins. 'update --latest' (also pi|self|--self|--all forms) resolves the newest stable Pi with the bundled pnpm, installs it beside the active version without the release lockfile after a warning, and activates it through the same launcher check and rollback as 'upgrade'. A plain upgrade never downgrades that Pi for the same Gentle Shell version. Docs list the audited Pi 1.3.0/1.4.0 editors.
…p the tab flicker /gentle:models opened the same screen as /gentle:profiles, so it is retired: its routing file verbs move to '/gentle:profiles export-routing' and 'restore-routing' (they move the global routing, not a profile), and the command palette lists one 'Models and profiles' entry. Switching profile tabs closed the overlay and reopened it after awaiting the model catalog, painting the screen below for a frame. The panel now switches profiles in place through a switcher callback, saving first when asked.
…ed Gentle Shell /gentle:music in a bundled install without gentle-stream, uvx or uv now asks to install the player instead of pointing at manual steps. On consent it fetches a pinned, sha256-verified uv 0.13.6 into runtime/ and installs the uv-managed Python 3.13 and gentle-stream from a pinned GitHub archive (no git) under music/, isolated from any user uv, Python or virtualenv settings. A pnpm or npm install keeps the existing hint.
When the latest dist-tag names a Pi older than the active one, --latest now changes nothing instead of installing it. The install test pins the --no-frozen-lockfile flag, the installVersion comment no longer claims pnpm writes no lockfile, and the reference documents --latest outside a bundled install.
…on and pip settings The /gentle:music extension now accepts the prefix player only when it resolves to a regular file inside music/, the same rule the installer uses, and the player's uv no longer inherits any PYTHON* or PIP_* variable.
|
No actionable comments were generated in the recent review.
|
| Layer / File(s) | Summary |
|---|---|
Latest-Pi update routing lib/gentle-shell-bundled.ts, runtime/gentle-shell-bundled.mjs, bin/gentle-shell.mjs, scripts/pi-update.mjs, lib/gentle-shell-launcher.ts, runtime/gentle-shell-launcher.mjs, tests/gentle-shell-bundled.test.ts, tests/pi-update.test.ts, tests/gentle-shell-launcher.test.ts, README.md, docs/gentle-shell.md, docs/readme-reference.md, odd/tasks/bundled-pi-latest.md |
Bundled update planning recognizes --latest for Pi self-updates and preserves extension-update arguments. The CLI routes the request to the bundled installer. Documentation describes the option and its behavior. |
Install and activate the published Pi version scripts/bundled-install.mjs, tests/bundled-install.test.ts |
The installer accepts stable published Pi versions, performs unverified installation without the release lockfile, verifies the result, and activates it. It leaves the active version unchanged when the published version is not newer. |
Update the Pi pin and editor audit scripts/installer-preflight.mjs, lib/vim-editor-adapter.ts, tests/vim-editor-adapter.test.ts, docs/gentle-shell.md, docs/readme-reference.md |
The Pi pin and editor adapter allowlist include version 1.4.0. The audited editor versions include 1.3.0 and 1.4.0. |
Bundled Gentle Music installation
| Layer / File(s) | Summary |
|---|---|
Pin and verify the bundled uv runtime scripts/installer-downloads.mjs, scripts/bundled-install.mjs, tests/installer-downloads.test.ts, tests/bundled-install.test.ts |
The installer pins uv 0.13.6 for supported platforms, validates its archive and version, and places its runtime paths inside the bundle. |
Install and resolve the bundled player extensions/gentle-music.ts, scripts/bundled-install.mjs, tests/gentle-music.test.ts, tests/bundled-install.test.ts, docs/gentle-music.md, docs/gentle-shell.md |
Gentle Music checks PATH, the bundled player, uvx, and uv. When no player is available in a bundled install, it can offer installation. The installer validates the player, retries without samples when needed, and reports installation progress and results. |
Unified models and profiles screen
| Layer / File(s) | Summary |
|---|---|
Consolidate the screen and routing commands extensions/gentle-ai.ts, lib/command-palette-catalog.ts, tests/gentle-ai.test.ts, tests/command-palette.test.ts, tests/gentle-shell.test.ts, tests/runtime-harness.mjs, tests/model-profiles-preservation.test.ts, README.md, docs/readme-reference.md |
/gentle:profiles replaces /gentle:models as the models-and-profiles screen. Routing export and restore use export-routing and restore-routing subcommands. |
Switch profiles in place extensions/gentle-ai.ts, tests/gentle-ai.test.ts, docs/readme-reference.md |
The open screen switches profiles in place. It can save or discard the current draft, and a failed save leaves the current profile and its edits displayed. |
Priority:
Estimated code review effort: 4 (Complex) | ~60 minutes
Change: Feature · Severity of issue fixed: Medium
Sequence Diagram(s)
sequenceDiagram
actor User
participant GentleMusic
participant BundledInstaller
participant uv
participant GentleStream
User->>GentleMusic: Request music playback
GentleMusic->>BundledInstaller: Check bundled player
GentleMusic->>User: Offer installation when no player is found
User->>GentleMusic: Accept installation
GentleMusic->>BundledInstaller: Install player and report progress
BundledInstaller->>uv: Install Gentle Stream with managed Python
uv-->>BundledInstaller: Provide installed player
BundledInstaller-->>GentleMusic: Return player path and samples status
GentleMusic->>GentleStream: Start playback
Possibly related issues
- bug(bundle): upgrading 4.3.0 → 4.4.0 leaves bundled Pi at 1.2.0 while Pi 1.4.0 is available; no way to update Pi #2593 — Reports that bundled Pi cannot advance to a newer published version; this change adds a latest-Pi update path.
- bug(bundle): bundled Pi pinned to 1.0.0 does not register claude-bridge/claude-haiku-5-5 #2136 — Connects the bundled Pi pin to unavailable model registration; this change updates the pin and adds an opt-in newer-Pi path.
gentle-shell updateleaves installation unlaunchable: "global package lacks authenticated metadata" (Pi 1.3.0 → 1.4.0) #2559 — Concerns update verification failures; this change tests that failed verification preserves the active version and removes the new version.- bug(vim): Pi 1.4.0 bundles pi-tui 1.4.0, outside AUDITED_PI_EDITOR_VERSIONS (top 1.2.0) — Gentle Vim degrades to ordinary editing #2449 — Reports that Pi 1.4.0 is blocked by the editor audit; this change adds 1.4.0 to the audited versions.
- feat(models): one models screen with profiles as tabs for /gentle:models and /gentle:profiles #2586 — Requests one profile-based models screen and routing operations; this change consolidates the command and moves routing operations.
- bug(models): /gentle:models does not reflect a session-bound profile applied with Enter in /gentle:profiles #2451 — Reports inconsistent routing display between models and profile panels; this change makes
/gentle:profilesthe unified screen.
Possibly related PRs
- Gentleman-Programming/gentle-shell#2496 — Defines the existing Gentle Stream lookup flow that this change extends with a bundled-player option.
- Gentleman-Programming/gentle-shell#2588 — Changes the same models and profiles command surface and panel behavior.
- Gentleman-Programming/gentle-shell#2493 — Changes the profile panel code and tests that this change consolidates into one screen.
Suggested labels: type:feature
Suggested reviewers: decode2, danielgap
Merge Risk: 
Minimal · up to e33ce
-
No actionable issue remains from this review; the change is mergeable after normal checks.
Pre-merge checks: 
3 · 
1 · 
1
-
Failed checks: 1 warning · 1 inconclusive Passed checks: 3 passed-
Full details: Linked Issues check
-
Explanation
Issue
#2598has three coding objectives. The PR pins bundled Pi to 1.4.0, adds the explicit bundledupdate --latestpath, verifies and activates the result with rollback, and prevents downgrades. It adds consent-based/gentle:musicinstallation with pinned and SHA-256-verified uv, uv-managed Python 3.13, and a pinned archive under the Gentle Shell prefix. Focused tests and the reported macOS end-to-end test cover these behaviors. The ignoredpnpm-lock.yamlis not used as evidence of absence.
-
Full details: Out of Scope Changes check
-
Explanation
The PR also retires
/gentle:models, moves routing commands to/gentle:profiles, and changes profile-tab rendering. These changes affect the profiles UI and command surface. Issue#2598only covers bundled Pi updates and/gentle:musicinstallation. The profile changes have no stated connection to either objective, even though the current PR description includes them.Resolution
Remove the profiles command, routing, and tab-switching changes from this PR, or link an active issue that directly requires those coding changes.
Full details: Docstring Coverage
-
Explanation
Docstring coverage is 65.71% which is insufficient. The required threshold is 80.00%. Docstring coverage is scoped to functions touched by this diff. Documentation-only edits and deletions within surviving functions are included; unchanged diff context and fully deleted functions are excluded. Analyzed 35 functions across 24 files. (6 skipped: 5 unsupported, 1 too large.)
Resolution
Write docstrings for the functions missing them to satisfy the coverage threshold.
-
Finishing Touches: 💡 1
-
📝 Generate docstrings: 💡
-
- Commit to this branch
- Create a new PR
🧪 Generate unit tests (beta)
-
- Commit to this branch
- Create a new PR
-
- Autofix · Keep fixing CodeRabbit findings and required CI, and resolving merge conflicts
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.
Comment @coderabbitai help to get the list of available commands.
Linked Issue
Closes #2598
PR Type
Summary
gentle-shell update --latestfor bundled installs: the newest published stable Pi, installed after a warning without the release's verified lockfile, verified and activated likeupgrade, with rollback. Neitherupgradenor--latestever downgrades Pi./gentle:musicin a bundled install offers, with consent, to install the gentle-stream player inside Gentle Shell: a pinned, sha256-verified uv 0.13.6 plus the uv-managed Python 3.13 and gentle-stream from a pinned GitHub archive (no git), all under the Gentle Shell prefix./gentle:profilesis now the only entry to the models and profiles screen (/gentle:modelsis retired; its routing file verbs become/gentle:profiles export-routing|restore-routing), and switching profile tabs no longer flickers (the panel switches in place instead of closing and reopening its overlay).Changes
3cf1c20d8697d2e4b6gentle-shell update --latest(scripts/bundled-install.mjs,lib/gentle-shell-bundled.ts,bin/gentle-shell.mjs, help, docs)536277e3c/gentle:models, move its verbs, fix the profile tab flicker (extensions/gentle-ai.ts, palette, docs)685c4b8e7/gentle:musicopt-in player install (scripts/installer-downloads.mjs,scripts/bundled-install.mjs,extensions/gentle-music.ts, docs)ebf11fb6e--latest, verification follow-ups9abed718ePYTHON*/PIP_*odd/tasks/bundled-pi-latest.mdfeature recordTest Plan
pnpm test(macOS arm64, Node 24): 7760 tests, 7649 pass, 36 fail, 75 skipped. Every failure is pre-existing in the local environment: the same suite onorigin/main(b577f39) gives 7622 pass and 38 fail in the same files (agent-home,gentle-agents,orchestrator-scope,notification-audio-native,notification-pulse-client,notification-pulse-stream, plusnotification-customizeon main).provider-contractandruntime-harnessstages pass.pnpm run typecheck: 0 diagnostics.Focused suites per commit, observed RED before GREEN for each new rule.
Independent verification of
697d2e4b6: S1/S3 PASS, 0 blockers; 6175updateinputs without--latestproduce identical plans before and after.Independent verification of
685c4b8e7+ebf11fb6e: S3/S5 PASS, 0 blockers; uv pins re-hashed; archive extraction rejects traversal and links; a corrupted download publishes nothing; the uv environment is confined to the prefix; nothing installs without consent; the non-bundled hint is byte-identical. Its two hardening advisories are fixed in9abed718e.Real macOS arm64 end-to-end of the music install in a scratch prefix: pinned uv acquired and verified, gentle-stream installed,
gentle-stream --helpexit 0, second run idempotent.Size
size:exception: the maintainer chose one PR for this release (Pi pin,--latest, music install, profiles fixes).Contributor Checklist
type:*labelCo-Authored-BytrailersSummary by CodeRabbit
New Features
gentle-shell update --latestto install the newest published Pi, with a warning that some features may be unavailable. Later upgrades won’t downgrade that Pi.Changes
/gentle:modelshas been removed; use/gentle:profilesfor models and profiles.