agent: dev launcher — own Linux env-var contract, add dev:tauri, doc sweep
The 2026-05-12 engine-slop pass removed runtime std::env::set_var mutation from src-tauri/src/lib.rs and replaced it with warn_if_x11_env_unset_on_wayland. With no launcher owning the contract, Linux Wayland dogfood was about to regress. run.sh: - now owns Linux launcher env defaults via case "$(uname -s)" LIBCLANG_PATH=/usr/lib64/llvm21/lib64 (user-set wins) WEBKIT_DISABLE_DMABUF_RENDERER=1 (always on Linux; user-set wins) GDK_BACKEND=x11, WINIT_UNIX_BACKEND=x11 (Wayland only; user-set wins) - 60s Vite readiness timeout - detects early Vite exit (kill -0 + wait) instead of hanging forever - trap installed before wait so Ctrl-C cleans up - args forwarded: ./run.sh --release etc. - non-exec final Tauri launch preserved so cleanup trap fires package.json: - "dev:tauri": "./run.sh" — canonical discoverable dev command Docs: - README, dev-setup, architecture-map runtime + launcher pages updated with the new contract; canonical command is npm run dev:tauri (./run.sh as direct equivalent) - dev-launcher-and-scripts.md replaces the incorrect "kills process group" claim with honest "kills the spawned npm process" - dev-setup.md path /CORBEL-Projects/magnotia → /CORBEL-Projects/transcription-app - gpu-tuning/plan.md gets a superseded note rather than rewriting the original rationale - engine-slop-residuals.md gains Area F (packaged-binary launcher contract) with honest wrapper-vs-.desktop trade-off documented Verification: bash -n run.sh; shellcheck clean; cargo check -p magnotia green; npm pkg get 'scripts.dev:tauri' returns "./run.sh"; stale-ref sweep clean across living docs.
This commit is contained in:
@@ -151,6 +151,57 @@ Each area is independent. They can be tackled in any order, but the suggested or
|
||||
|
||||
**Acceptance:** No `Result<T, String>` in `src-tauri/src/commands/`. Frontend has typed error access. `cargo test --workspace` green; frontend builds.
|
||||
|
||||
### F. Packaged-binary launcher contract (Linux)
|
||||
|
||||
**Status:** identified, not started. Direct follow-on from the 2026-05-12 dev-launcher fix; same contract, distribution-time scope.
|
||||
|
||||
**Scope:** Set the rendering env-vars at app launch time for distributed Linux builds.
|
||||
|
||||
**Env-var contract per distribution path:**
|
||||
|
||||
- `WEBKIT_DISABLE_DMABUF_RENDERER=1` — always set on Linux (iGPU idle-cost workaround, applies on X11 and Wayland alike).
|
||||
- `GDK_BACKEND=x11`, `WINIT_UNIX_BACKEND=x11` — set only when `XDG_SESSION_TYPE=wayland`. Static `.desktop` `Exec=env` cannot do this conditional; either ship a wrapper or accept always-on X11 backend.
|
||||
|
||||
**Preferred — wrapper script:**
|
||||
|
||||
A wrapper preserves user-set values via shell defaults:
|
||||
|
||||
```sh
|
||||
#!/usr/bin/env bash
|
||||
export WEBKIT_DISABLE_DMABUF_RENDERER="${WEBKIT_DISABLE_DMABUF_RENDERER:-1}"
|
||||
if [ "${XDG_SESSION_TYPE:-}" = "wayland" ]; then
|
||||
export GDK_BACKEND="${GDK_BACKEND:-x11}"
|
||||
export WINIT_UNIX_BACKEND="${WINIT_UNIX_BACKEND:-x11}"
|
||||
fi
|
||||
exec /usr/lib/magnotia/magnotia-bin "$@"
|
||||
```
|
||||
|
||||
Per-format wrapper locations:
|
||||
|
||||
- `.deb` / `.rpm`: ship the wrapper as `/usr/bin/magnotia`; binary lives elsewhere.
|
||||
- AppImage: `AppRun` is the wrapper.
|
||||
- Flatpak: wrapper under `/app/bin/`; the manifest's `command` points at it.
|
||||
|
||||
**Fallback — static `.desktop` `Exec`:**
|
||||
|
||||
```desktop
|
||||
Exec=env WEBKIT_DISABLE_DMABUF_RENDERER=1 GDK_BACKEND=x11 WINIT_UNIX_BACKEND=x11 magnotia %U
|
||||
```
|
||||
|
||||
User-set values do not win through this path (the `env` invocation hardcodes them in the child env). Document the terminal-launch override path in user-facing docs.
|
||||
|
||||
**Decisions needed:**
|
||||
|
||||
- Wrapper vs hardcoded-`Exec` per format. Default to wrapper.
|
||||
- For Flatpak: finish-args env defaults vs wrapper — both work; pick consistency.
|
||||
|
||||
**Acceptance:**
|
||||
|
||||
- Each Linux distribution path sets the contract on launch.
|
||||
- Where the packaging format uses a wrapper, user-set values still win.
|
||||
- Where the `.desktop` `Exec` hardcodes env directly, the terminal-launch override path is documented in user docs.
|
||||
- `lib.rs::warn_if_x11_env_unset_on_wayland` continues to surface missed contracts during dev/diagnostics.
|
||||
|
||||
## Suggested sequencing
|
||||
|
||||
1. **B (eprintln sweep)** first — mechanical, low-risk, immediate observability win.
|
||||
@@ -158,6 +209,7 @@ Each area is independent. They can be tackled in any order, but the suggested or
|
||||
3. **D (property-based DSP)** in parallel with A — independent surface, can be done by anyone any time.
|
||||
4. **E (FE/BE error boundary)** after A — depends on storage error shape.
|
||||
5. **C (actor model)** last — biggest surface, deserves its own brainstorm + plan + likely its own branch.
|
||||
6. **F (packaged launcher contract)** when packaging resumes — independent of A–E but required before distributed Linux builds are treated as covered.
|
||||
|
||||
## Cross-cutting deferrals (Phase 10a-blocking)
|
||||
|
||||
|
||||
Reference in New Issue
Block a user