## Summary
The desktop browser suite can mount `InteractiveArea` before its utility
styles settle, then scroll history while the reply composer is still
expanding. A pending Virtua tail scroll can replace the message that the
test selected and make the scrollport assertion fail.
This addresses the pre-existing browser-test failure reported during
#2506 ([CI
failure](https://github.com/moeru-ai/airi/actions/runs/34448585692/job/102804067154)).
- Scan desktop and shared Vue components before the initial test
stylesheet is served. Load the desktop UnoCSS config explicitly so
config discovery does not replace the scan.
- Give each fixture a window-sized host, reset the viewport, and dispose
the component, host, and Pinia after each test.
- Wait for the reply transition and virtual-list measurements to settle
before scrolling. Cover both 200 ms and 1 s transitions, and assert the
requested scroll position throughout the existing message-mount checks.
Only browser tests and their configuration change.
## Validation
The complete desktop browser suite passed with three shuffled seeds: **6
files, 65 tests per run**, with no skipped tests.
```sh
for seed in 2508 2506 2507; do
npm_config_registry=https://registry.npmjs.org/ NODE_OPTIONS=--no-experimental-webstorage \
pnpm exec vitest run --config apps/stage-tamagotchi/vitest.config.ts \
--project browser --sequence.shuffle --sequence.seed="$seed" --bail=1
done
npm_config_registry=https://registry.npmjs.org/ pnpm run typecheck
npm_config_registry=https://registry.npmjs.org/ pnpm run lint
git diff --check
```
Typecheck passed all 52 tasks. Lint passed with existing repository
warnings. ResizeObserver loop warnings remain visible; this change does
not suppress them. Linux CI validation is pending.
## Description
<!-- Please insert your description here and especially provide info
about the "what" this PR is solving -->
### As-is
Depending on the size, the Controls Island area gets cut off, making the
buttons in the cropped area inaccessible.
### To-be
The Controls Island is managed via scrolling, allowing interaction with
buttons regardless of the size.
If the main controls also exceed the available space, the entire
Controls Island becomes scrollable. Horizontal scrolling is available
for narrow windows.
#### narrow & smaill
https://github.com/user-attachments/assets/1a44ff4f-8fe2-4a05-96a8-59ebf7dafcff
#### somewhat generous size
https://github.com/user-attachments/assets/c73dbee4-8c8f-4937-ae1a-eda00178274c
## Linked Issues
<!-- Optional, if you have any -->
close#2400
## Additional Context
<!-- e.g. is there anything you'd like reviewers to focus on? -->
Although the size is somewhat less than ideal, the issue has been
resolved, and this serves as a universal solution.
---------
Co-authored-by: leafyy <wuqizq@outlook.com>
## Summary
- Send a serializable Live2D expression snapshot from the stage renderer
to the separate Settings window.
- Route expression changes back to the renderer that owns the loaded
model, with owner ID checks for stale-window isolation.
- Add browser regressions for the component boundary and the complete
BroadcastChannel round trip.
Fixes#2450
## Verification
- `pnpm typecheck`
- `pnpm lint`
- `../../node_modules/.bin/vitest run --project browser
src/components/scenarios/settings/model-settings/live2d.browser.test.ts`
- `node_modules/.bin/vitest run --config
apps/stage-tamagotchi/vitest.config.ts --project browser
apps/stage-tamagotchi/src/renderer/composables/model-settings-runtime.browser.test.ts`
- `./node_modules/.bin/electron-vite build`
- Vishot Electron capture with the issue Live2D fixture on the merge
base and this branch
- `sem diff upstream/main...HEAD --no-cosmetics -v --file-exts .ts .tsx`
## Visual changes
| Before | After |
|---|---|
|

|

|
| Settings / Models / Live2D expressions: empty list | Settings / Models
/ Live2D expressions: model entries are available |
## Description
Let `dev` and `start` scripts run `install-electron` before
`electron-vite`.
Electron 42 removed the `postinstall` script. The `electron` package now
downloads its binary on its `bin` entry's first run. `electron-vite`
reads `node_modules/electron/path.txt` directly, so it never starts that
download. A fresh install therefore fails with:
```
error during start dev server and electron app:
Error: Electron uninstall
at getElectronPath (...)
...
```
`install-electron` runs the same code as the removed `postinstall`
script. It returns immediately when the binary is already present.
## Description
I understand that flatpak workflow already left my hand last year, and
this is not suitable for my ability and role at AIRI. However, I'd like
to ask if I have permissions to post my opinion to solve this:
- It may be better to manage sandbox permissions with smaller
boundaries.
- It is considerable to copy a desktop shortcut, and the metainfo to
properly trigger an app.
```
diff --git a/apps/stage-tamagotchi/ai.moeru.airi.flatpak.yml b/apps/stage-tamagotchi/ai.moeru.airi.flatpak.yml
index c8f9c33fd..311af5d74 100644
--- a/apps/stage-tamagotchi/ai.moeru.airi.flatpak.yml
+++ b/apps/stage-tamagotchi/ai.moeru.airi.flatpak.yml
@@ -22,7 +22,10 @@ finish-args:
- --talk-name=org.freedesktop.portal.Desktop
- --system-talk-name=org.freedesktop.login1
- --system-talk-name=org.freedesktop.UPower
- - --filesystem=home:rw
+ # Filesystem permissions
+ - --filesystem=xdg-download:rw
+ - --filesystem=xdg-config/airi:create
+ - --filesystem=~/.config/airi:create
modules:
- name: AIRI-App
@@ -34,6 +37,9 @@ modules:
- install airi.sh /app/bin/airi.sh
- chmod +x /app/bin/airi/airi.sh
- chmod +x /app/bin/airi/airi
+ - install -Dm644 ai.moeru.airi.desktop /app/share/applications/ai.moeru.airi.desktop
+ - install -Dm644 ai.moeru.airi.metainfo.xml /app/share/metainfo/ai.moeru.airi.metainfo.xml
+ - install -Dm644 build/icons/icon.png /app/share/icons/hicolor/512x512/apps/ai.moeru.airi.png
sources:
- type: dir
only-arches: [x86_64]
```
This block is an overview of this patch.
This bug was reported at Discord AIRI chatroom by Scarface.
```
OS: Bazzite DX 44.20260714.0
DE: KDE Plasma 6.7.2
Wayland
Hey. I wanted to give this a try but I'm facing some issues with the flatpak.
Unfortunately, I can't get it to run and it doesn't seem to even print out any logs whatsoever.
I tried running it from the terminal and noticed the following:
1) The flatpak runs
2) Processes are created
3) There is no output in the terminal even when using the verbose flag
4) A blank taskbar icon appears that when clicked on creates a KDE toast pop up that says "No exec field in"
I went with the manual installation (git clone -> pnpm ...) and it works fine but if possible i'd like to keep using the Flatpak
Couldn't find anyone else with the same issue on Github or here. Any suggestions are appreciated.
```
## Linked Issues
Scarface mentioned that he `Couldn't find anyone else with the same
issue on Github or here. Any suggestions are appreciated.`
I could not find a same bug for this, too.
---------
Co-authored-by: autofix-ci[bot] <114827586+autofix-ci[bot]@users.noreply.github.com>
Co-authored-by: Liet Blue <127093491+lietblue@users.noreply.github.com>
Co-authored-by: Liet Blue <lietblue@posteo.net>