The test-lane overhaul newly runs launcher/main.test.ts in CI via
test:launcher:unit:src. Three playback tests spawn the real launcher,
which on Linux runs ensureLinuxRuntimePluginAvailable — a preflight that
spawns the app with --ensure-linux-runtime-plugin-assets and polls up to
30s for an install response. The fake apps just exited, so the launcher
hung and the tests timed out (they passed on macOS only because the
preflight is a no-op off Linux).
Teach the fake apps to handle the preflight command: install the managed
plugin/theme under XDG_DATA_HOME and write the response file, mirroring
launcher/smoke.e2e.test.ts. Pin XDG_DATA_HOME under the temp home so the
app and preflight agree on the managed asset paths deterministically.
Auto-discovery in the new test lanes runs clipboard-queue.test.ts, which
was never in the old hand-maintained lists. It wrote its stub media file
to dist/, which does not exist during the source-test step on a fresh CI
checkout (build runs later), so the suite failed. Use a real temp dir.
- bash 3.2: guard BLOCKERS/PATH_ARGS empty-array expansion under set -u
- run-coverage-lane: surface collectLaneFiles errors instead of throwing
- run-test-lane: cap per-file output at 1 MB; track and SIGKILL children on SIGINT/SIGTERM
- extract test lane config to scripts/test-lanes.ts (single source of truth)
- run-test-lane.mjs: per-file bun process isolation with wall timeout; --jobs N, --single-process flags
- drop hand-listed test file lists from package.json; lanes now discovered by directory
- add test:stats (stats/src) and test:scripts (scripts/**) lanes; wire both into CI
- test:fast now: test:src + launcher-unit + test:scripts + test:runtime:compat
- remove obsolete test:full, test:core, test:core:dist, test:config:dist scripts
- Move What's Changed/New Contributors before Installation in release notes
- Preserve committed attribution when regenerating via writeReleaseNotesForVersion
- Change notificationType default from 'both' to 'overlay' for new installs
- Add `submodules` target that runs `git submodule update --init --recursive`
- `deps` now depends on `submodules` so fresh checkouts work out of the box
- Update docs to replace manual install steps with `make deps`
- Fix Windows build-from-source steps to include stats and submodule init