Repository navigation
hotfix(termux): keep 2.5.0 Android installs running (sharp runtime) and refresh the APK - #7194
Conversation
Explain that updating repairs Sharp's WebAssembly runtime on Termux, give the manual repair for a server that stops when Engine is opened, and say what stays off while Sharp cannot load. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
The rebuilt APK pins the hotfix commit, so Android must treat it as an update of the installed 2.5.0 build. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
|
No actionable comments were generated in the recent review. 🎉 ℹ️ Recent review info⚙️ Run configuration
⛔ Files ignored due to path filters (1)
📒 Files selected for processing (18)
Included review availability: This review used your included allowance. Your plan provides up to 4 included reviews per hour; 1 remain after this review. 📝 WalkthroughWalkthroughThe changes update Tracker Panel toggling and covered-chat behavior, adjust Termux dependency installation and Sharp loader failure handling, and revise related regression tests and troubleshooting guidance. They also update the Android version code and message-trash batching test assertions. ChangesTracker Panel coverage
Termux installation and Sharp handling
Message trash batching test
Multiplayer asset troubleshooting
Android app version
Priority: ⬆️ High Estimated code review effort: 3 (Moderate) | ~25 minutes Change: Bug fix Sequence Diagram(s)sequenceDiagram
actor User
participant TrackerPanelBubble
participant AppShell
participant ChatControls
User->>TrackerPanelBubble: Activate the Tracker Panel button
TrackerPanelBubble->>AppShell: Open or close the panel
AppShell->>ChatControls: Mark chat as covered when inactive
AppShell->>AppShell: Move focus to the visible panel when chat focus is covered
sequenceDiagram
participant SharpLoader
participant Process
participant ServerHandler
participant SharpClassifier
SharpLoader-->>Process: Emit an unhandled loader rejection
Process->>ServerHandler: Deliver the rejection
ServerHandler->>SharpClassifier: Classify the rejection origin
SharpClassifier-->>ServerHandler: Return whether it is a Sharp loader rejection
ServerHandler-->>Process: Warn and return for a Sharp loader rejection
Merge Risk: ⚪ Minimal · up to The documentation follow-up is in place, and the inspected Termux upgrade paths attempt to install the new dependency. No actionable merge-blocking risk remains after normal checks. 🚥 Pre-merge checks | ✅ 4 | ❌ 1❌ Failed checks (1 warning)
✅ Passed checks (4 passed)
Full details: Docstring CoverageExplanation Docstring coverage is 20.00% which is insufficient. The required threshold is 80.00%. Docstring coverage is scoped to functions touched by this diff. Analyzed 10 functions across 12 files. (6 skipped: 6 unsupported.)
✨ Finishing Touches 💡 1📝 Generate docstrings 💡
🧪 Generate unit tests (beta)
Warning Review was content moderated. The following message was provided by the moderation system: 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 |
…tton close its panel Narrow, touch and foldable layouts (the overlay shell) keep the chat mounted under the Agents list, editors, Characters, Settings and the Tracker Panel, but the chat's window bubbles and windows only drop below those layers at phone width (767px). In between, at an 856px foldable for example, they drew on top of the other screen and covered its Save, back and close buttons. AppShell now marks the chat as covered whenever it is not the showing surface, and CSS hides its windows and bubbles until it shows again, at every width. The Trackers (d20) button now toggles the Tracker Panel like the Chat Settings button, with a plain accessible name. Refs #7176 Cherry-picked from staging #7181 (8d31dd9) for the 2.5.0 Termux hotfix. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Back from the agent editor always restores the Agents list in the overlay shell, so assert that and close it, instead of checking its visibility once. Refs #7176 Cherry-picked from staging #7181 (5eefb03) for the 2.5.0 Termux hotfix. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Pin Chat Settings at 856px, then check it stays open but hidden behind the Agents list and the agent editor, and shows again with the chat. Without .mari-window in the covered-chat rule this now fails. Refs #7176 Cherry-picked from staging #7181 (1f2ed10) for the 2.5.0 Termux hotfix. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
…the chat In overlay layouts (phones, foldables, narrow windows) the Tracker Panel now hides the Trackers button that opened it. A keyboard user who pressed that button lost focus to the page. Focus now moves into the panel, Tab reaches its close button, and closing returns focus to the Trackers button. Cherry-picked from staging #7181 (a8908a3) for the 2.5.0 Termux hotfix. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
…ebKit CI mobile-webkit (run 37542395904, shard 8) failed both tests twice: - The first render of the 5,001 mocked rows blocked WebKit for 15-17 s, past the 10 s wait for "Restore all". Raise that wait, the busy-state checks that re-render every row (7.8 s of 10 s in the same run) and the test timeout. - The warning toast's 6 s timer starts when it mounts, and the following 5,001-row re-render blocked the page for about as long, so the toast was dismissed about 0.5 s after it first painted and the follow-up toHaveAttribute found no element. Record each toast's type, title and description as it mounts with a MutationObserver and assert on that, which also replaces the description checks that raced the same timer. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
The previous commit replaced the locator wait for the warning toast with a record taken as each toast mounts. Record whether the toast was visible by Playwright's definition (non-empty box, not visibility: hidden) too, so the test still proves the warning was shown, not only mounted. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
|
Ready to merge into
|
pnpm 10 reads supportedArchitectures only from pnpm-workspace.yaml, the
package.json "pnpm" field, or the --os/--cpu/--libc flags, so the lines
start-termux.sh appended to .npmrc never applied and Termux installs
already used pnpm's default android/<arch> target.
That target is the right one: esbuild, rollup, lightningcss, the
Tailwind oxide and @napi-rs/canvas all ship android-arm64 builds, every
loader picks its binary by process.platform ("android"), and Sharp's WASM
fallback is a regular server dependency. Moving the block to CLI flags
would add about 540 MB of glibc/musl and WASM binaries that never load.
Drop the block and its TERMUX_FORCE_INSTALL trigger, and pin the Android
coverage of each native loader in a lockfile regression. Existing device
.npmrc files keep their inert lines.
Closes #7178
Cherry-picked from staging #7198 (904834b) for the 2.5.0 Termux hotfix.
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
|
Update: the hotfix now also carries the Termux launcher fix from #7198 (#7178). Without it, every start from the Android app ran |
Linked issue
Refs #7173, #7189 (both closed as fixed on
stagingby #7179), #7176 parts 1–2 (fixed onstagingby #7181) and #7178 (#7198).Why this change
On v2.5.0, Termux installs updated in place from 2.4.6 crash the server on the first image request (a background or gallery thumbnail), so Engine is unusable on Android (#7173, #7189). The fix is on
staging, but:origin/main, andMARINARA_RELEASE_COMMIT) and starts Engine with--skip-update.So the fix only reaches Android users if it is on
mainand the APK is rebuilt from that commit. This is a hotfix tomainwithout a new tag or release. Afterwards the 2.5.0 APK assets on the release page will be replaced with a build from this commit.What changed
@emnapi/runtimeis now a direct server dependency, so pnpm installs it even where a 2.4.6-era install recorded it as skipped (lockfile +3 lines).isSharpLoaderRejectionin the unhandled-rejection handler).sharp-wasm-runtime-missingregression.start-termux.sh's dead.npmrcarchitecture block. pnpm 10 ignored those lines, and because the APK's setupgit checkout -fwiped them, every start from the Android app re-ranpnpm store pruneand a full dependency install. Includes thetermux-native-depsregression.versionCode49 (versionNamestays 2.5.0), so phones install the rebuilt APK as an update.staging.Validation
pnpm checkpasses locallyCONTRIBUTING.mdAgent-run checks on this branch:
pnpm check;chat-controls-covered,phone-bubblesandtracker-window-routinge2e on desktop-chromium and mobile-webkit: 21 passed, with one failure inphone-bubbles› "large themed tools scroll inside a short phone viewport". That test also fails 1 run in 3 on untouchedmain, so it is pre-existing flakiness, not this change;sharp-wasm-runtime-missing,termux-sharp,termux-postmortemandserver-signal-shutdownregressions all pass;pnpm version:checkis in sync for 2.5.0. #7179's verifier replayed the real 2.4.6 → fix update with pnpm 10.34.5 and Termux-like--os linux --cpu arm64 --cpu wasm32.Manual verification notes
./start-termux.shupdates to this commit and the server no longer exits on the first image.Docs and release impact
docs-i18nbranch updated to match, or a[docs-i18n]follow-up issue opened (see CONTRIBUTING.md § Translated documentation) — [docs-i18n] docs/TROUBLESHOOTING.md #7185🤖 Generated with Claude Code
Summary by CodeRabbit