Repository navigation
fix(server): boot-service editor launches read the session display over D-Bus, as upstream does - #1920
Conversation
🧩 Effect Service Conventions
|
3b3d562 to
16ea723
Compare
🩺 Aftercare
|
| Head | Result | Time | Check |
|---|---|---|---|
dad5d8a |
🟡 1 open · 1 fixed · 1 held | 4 min | run |
16ea723 |
🟡 2 open · 2 new | 7 min | run |
…er D-Bus, as upstream does Adopt the reader from upstream `pingdotgg#25228`: `busctl --user --json=short` returns raw values where `systemctl show-environment` shell-quotes ones with spaces, and only editor launches get the display, so browsers stay on the server's own environment. The fork keeps one extra hook: file-manager detection also reads the session display. Drop this commit once upstream ships `pingdotgg#25228`; keep the `readBrowserLaunchEnv` hook if upstream has no equivalent. Fork-Domain: upstream-fixes Fork-Tier: bugfix Fork-Upstreamable: yes
16ea723 to
dad5d8a
Compare
A1: drop the timeout only reaches the same |
…er D-Bus, as upstream does (#1920) ## Problem The boot-service display fix from #1919 has two flaws upstream's version avoids. - **Quoting:** spaced values come back as `$'…'` - **Browsers:** they also got the session display A quoted `XAUTHORITY` path with a space breaks the editor's X auth. Upstream keeps browsers off it so the pairing page never opens on another session's screen. Upstream has the same fix open as `pingdotgg#25228` (maintainer branch, green). ## Change `externalLauncher.ts` carries the `pingdotgg#25228` reader line for line: - **Source:** `busctl --json=short`, raw values - Only `DISPLAY`, `WAYLAND_DISPLAY`, `XAUTHORITY` - **Scope:** editor launches only - **Fallback:** error or timeout keeps server env One fork-only hook keeps the file-manager entry available on a boot service; `pingdotgg#25228` leaves detection unchanged. ```diff +// Fork: the boot service's file-manager entry also needs the session display. const readBrowserLaunchEnv = Effect.gen(function* () { const env = yield* BrowserLaunchEnvConfig.pipe(Effect.orElseSucceed(() => ({}))); - return { ...env, ...(yield* readSessionDisplayEnv(env)) }; + return { ...env, ...(yield* readGraphicalSessionEnv()) }; }); ``` **Retirement:** once a tagged upstream release ships `pingdotgg#25228`, the rebase drops this commit and keeps only that hook. ## Scope and approval Follow-up to #1919 in the same function and `upstream-fixes` domain. ## Verification - [x] Fork test: raw `XAUTHORITY` with a space - [x] Fork test: file manager discovered and launched - [x] Fork test: browser launch gets only `PATH` - [x] Fork test: bad JSON or no `busctl` falls back - [x] Fork test fails on the old code - [x] Fork test fails without the fork hook - [x] 21 launcher tests pass, display set or unset - [x] Real launcher, display unset, stub `code` - Stub saw `DISPLAY=:1`, `WAYLAND_DISPLAY=wayland-1` - [x] Diffed against the `pingdotgg#25228` head: same code - [x] `vp run typecheck` (server) → exit 0 - [x] `vp run fork:ci` → exit 0 - [ ] Not run: full reboot cycle on this branch Claude Opus 5.5 in T3 Code (Claude Code harness). ## Fork trailers Fork-Domain: upstream-fixes Fork-Tier: bugfix Fork-Upstreamable: yes Co-authored-by: donjor <38745786+donjor@users.noreply.github.com>
…er D-Bus, as upstream does (#1920) ## Problem The boot-service display fix from #1919 has two flaws upstream's version avoids. - **Quoting:** spaced values come back as `$'…'` - **Browsers:** they also got the session display A quoted `XAUTHORITY` path with a space breaks the editor's X auth. Upstream keeps browsers off it so the pairing page never opens on another session's screen. Upstream has the same fix open as `pingdotgg#25228` (maintainer branch, green). ## Change `externalLauncher.ts` carries the `pingdotgg#25228` reader line for line: - **Source:** `busctl --json=short`, raw values - Only `DISPLAY`, `WAYLAND_DISPLAY`, `XAUTHORITY` - **Scope:** editor launches only - **Fallback:** error or timeout keeps server env One fork-only hook keeps the file-manager entry available on a boot service; `pingdotgg#25228` leaves detection unchanged. ```diff +// Fork: the boot service's file-manager entry also needs the session display. const readBrowserLaunchEnv = Effect.gen(function* () { const env = yield* BrowserLaunchEnvConfig.pipe(Effect.orElseSucceed(() => ({}))); - return { ...env, ...(yield* readSessionDisplayEnv(env)) }; + return { ...env, ...(yield* readGraphicalSessionEnv()) }; }); ``` **Retirement:** once a tagged upstream release ships `pingdotgg#25228`, the rebase drops this commit and keeps only that hook. ## Scope and approval Follow-up to #1919 in the same function and `upstream-fixes` domain. ## Verification - [x] Fork test: raw `XAUTHORITY` with a space - [x] Fork test: file manager discovered and launched - [x] Fork test: browser launch gets only `PATH` - [x] Fork test: bad JSON or no `busctl` falls back - [x] Fork test fails on the old code - [x] Fork test fails without the fork hook - [x] 21 launcher tests pass, display set or unset - [x] Real launcher, display unset, stub `code` - Stub saw `DISPLAY=:1`, `WAYLAND_DISPLAY=wayland-1` - [x] Diffed against the `pingdotgg#25228` head: same code - [x] `vp run typecheck` (server) → exit 0 - [x] `vp run fork:ci` → exit 0 - [ ] Not run: full reboot cycle on this branch Claude Opus 5.5 in T3 Code (Claude Code harness). ## Fork trailers Fork-Domain: upstream-fixes Fork-Tier: bugfix Fork-Upstreamable: yes Co-authored-by: donjor <38745786+donjor@users.noreply.github.com>
…er D-Bus, as upstream does (#1920) ## Problem The boot-service display fix from #1919 has two flaws upstream's version avoids. - **Quoting:** spaced values come back as `$'…'` - **Browsers:** they also got the session display A quoted `XAUTHORITY` path with a space breaks the editor's X auth. Upstream keeps browsers off it so the pairing page never opens on another session's screen. Upstream has the same fix open as `pingdotgg#25228` (maintainer branch, green). ## Change `externalLauncher.ts` carries the `pingdotgg#25228` reader line for line: - **Source:** `busctl --json=short`, raw values - Only `DISPLAY`, `WAYLAND_DISPLAY`, `XAUTHORITY` - **Scope:** editor launches only - **Fallback:** error or timeout keeps server env One fork-only hook keeps the file-manager entry available on a boot service; `pingdotgg#25228` leaves detection unchanged. ```diff +// Fork: the boot service's file-manager entry also needs the session display. const readBrowserLaunchEnv = Effect.gen(function* () { const env = yield* BrowserLaunchEnvConfig.pipe(Effect.orElseSucceed(() => ({}))); - return { ...env, ...(yield* readSessionDisplayEnv(env)) }; + return { ...env, ...(yield* readGraphicalSessionEnv()) }; }); ``` **Retirement:** once a tagged upstream release ships `pingdotgg#25228`, the rebase drops this commit and keeps only that hook. ## Scope and approval Follow-up to #1919 in the same function and `upstream-fixes` domain. ## Verification - [x] Fork test: raw `XAUTHORITY` with a space - [x] Fork test: file manager discovered and launched - [x] Fork test: browser launch gets only `PATH` - [x] Fork test: bad JSON or no `busctl` falls back - [x] Fork test fails on the old code - [x] Fork test fails without the fork hook - [x] 21 launcher tests pass, display set or unset - [x] Real launcher, display unset, stub `code` - Stub saw `DISPLAY=:1`, `WAYLAND_DISPLAY=wayland-1` - [x] Diffed against the `pingdotgg#25228` head: same code - [x] `vp run typecheck` (server) → exit 0 - [x] `vp run fork:ci` → exit 0 - [ ] Not run: full reboot cycle on this branch Claude Opus 5.5 in T3 Code (Claude Code harness). ## Fork trailers Fork-Domain: upstream-fixes Fork-Tier: bugfix Fork-Upstreamable: yes Co-authored-by: donjor <38745786+donjor@users.noreply.github.com>
…er D-Bus, as upstream does (#1920) ## Problem The boot-service display fix from #1919 has two flaws upstream's version avoids. - **Quoting:** spaced values come back as `$'…'` - **Browsers:** they also got the session display A quoted `XAUTHORITY` path with a space breaks the editor's X auth. Upstream keeps browsers off it so the pairing page never opens on another session's screen. Upstream has the same fix open as `pingdotgg#25228` (maintainer branch, green). ## Change `externalLauncher.ts` carries the `pingdotgg#25228` reader line for line: - **Source:** `busctl --json=short`, raw values - Only `DISPLAY`, `WAYLAND_DISPLAY`, `XAUTHORITY` - **Scope:** editor launches only - **Fallback:** error or timeout keeps server env One fork-only hook keeps the file-manager entry available on a boot service; `pingdotgg#25228` leaves detection unchanged. ```diff +// Fork: the boot service's file-manager entry also needs the session display. const readBrowserLaunchEnv = Effect.gen(function* () { const env = yield* BrowserLaunchEnvConfig.pipe(Effect.orElseSucceed(() => ({}))); - return { ...env, ...(yield* readSessionDisplayEnv(env)) }; + return { ...env, ...(yield* readGraphicalSessionEnv()) }; }); ``` **Retirement:** once a tagged upstream release ships `pingdotgg#25228`, the rebase drops this commit and keeps only that hook. ## Scope and approval Follow-up to #1919 in the same function and `upstream-fixes` domain. ## Verification - [x] Fork test: raw `XAUTHORITY` with a space - [x] Fork test: file manager discovered and launched - [x] Fork test: browser launch gets only `PATH` - [x] Fork test: bad JSON or no `busctl` falls back - [x] Fork test fails on the old code - [x] Fork test fails without the fork hook - [x] 21 launcher tests pass, display set or unset - [x] Real launcher, display unset, stub `code` - Stub saw `DISPLAY=:1`, `WAYLAND_DISPLAY=wayland-1` - [x] Diffed against the `pingdotgg#25228` head: same code - [x] `vp run typecheck` (server) → exit 0 - [x] `vp run fork:ci` → exit 0 - [ ] Not run: full reboot cycle on this branch Claude Opus 5.5 in T3 Code (Claude Code harness). ## Fork trailers Fork-Domain: upstream-fixes Fork-Tier: bugfix Fork-Upstreamable: yes Co-authored-by: donjor <38745786+donjor@users.noreply.github.com>
…er D-Bus, as upstream does (#1920) ## Problem The boot-service display fix from #1919 has two flaws upstream's version avoids. - **Quoting:** spaced values come back as `$'…'` - **Browsers:** they also got the session display A quoted `XAUTHORITY` path with a space breaks the editor's X auth. Upstream keeps browsers off it so the pairing page never opens on another session's screen. Upstream has the same fix open as `pingdotgg#25228` (maintainer branch, green). ## Change `externalLauncher.ts` carries the `pingdotgg#25228` reader line for line: - **Source:** `busctl --json=short`, raw values - Only `DISPLAY`, `WAYLAND_DISPLAY`, `XAUTHORITY` - **Scope:** editor launches only - **Fallback:** error or timeout keeps server env One fork-only hook keeps the file-manager entry available on a boot service; `pingdotgg#25228` leaves detection unchanged. ```diff +// Fork: the boot service's file-manager entry also needs the session display. const readBrowserLaunchEnv = Effect.gen(function* () { const env = yield* BrowserLaunchEnvConfig.pipe(Effect.orElseSucceed(() => ({}))); - return { ...env, ...(yield* readSessionDisplayEnv(env)) }; + return { ...env, ...(yield* readGraphicalSessionEnv()) }; }); ``` **Retirement:** once a tagged upstream release ships `pingdotgg#25228`, the rebase drops this commit and keeps only that hook. ## Scope and approval Follow-up to #1919 in the same function and `upstream-fixes` domain. ## Verification - [x] Fork test: raw `XAUTHORITY` with a space - [x] Fork test: file manager discovered and launched - [x] Fork test: browser launch gets only `PATH` - [x] Fork test: bad JSON or no `busctl` falls back - [x] Fork test fails on the old code - [x] Fork test fails without the fork hook - [x] 21 launcher tests pass, display set or unset - [x] Real launcher, display unset, stub `code` - Stub saw `DISPLAY=:1`, `WAYLAND_DISPLAY=wayland-1` - [x] Diffed against the `pingdotgg#25228` head: same code - [x] `vp run typecheck` (server) → exit 0 - [x] `vp run fork:ci` → exit 0 - [ ] Not run: full reboot cycle on this branch Claude Opus 5.5 in T3 Code (Claude Code harness). ## Fork trailers Fork-Domain: upstream-fixes Fork-Tier: bugfix Fork-Upstreamable: yes Co-authored-by: donjor <38745786+donjor@users.noreply.github.com>
…er D-Bus, as upstream does (#1920) ## Problem The boot-service display fix from #1919 has two flaws upstream's version avoids. - **Quoting:** spaced values come back as `$'…'` - **Browsers:** they also got the session display A quoted `XAUTHORITY` path with a space breaks the editor's X auth. Upstream keeps browsers off it so the pairing page never opens on another session's screen. Upstream has the same fix open as `pingdotgg#25228` (maintainer branch, green). ## Change `externalLauncher.ts` carries the `pingdotgg#25228` reader line for line: - **Source:** `busctl --json=short`, raw values - Only `DISPLAY`, `WAYLAND_DISPLAY`, `XAUTHORITY` - **Scope:** editor launches only - **Fallback:** error or timeout keeps server env One fork-only hook keeps the file-manager entry available on a boot service; `pingdotgg#25228` leaves detection unchanged. ```diff +// Fork: the boot service's file-manager entry also needs the session display. const readBrowserLaunchEnv = Effect.gen(function* () { const env = yield* BrowserLaunchEnvConfig.pipe(Effect.orElseSucceed(() => ({}))); - return { ...env, ...(yield* readSessionDisplayEnv(env)) }; + return { ...env, ...(yield* readGraphicalSessionEnv()) }; }); ``` **Retirement:** once a tagged upstream release ships `pingdotgg#25228`, the rebase drops this commit and keeps only that hook. ## Scope and approval Follow-up to #1919 in the same function and `upstream-fixes` domain. ## Verification - [x] Fork test: raw `XAUTHORITY` with a space - [x] Fork test: file manager discovered and launched - [x] Fork test: browser launch gets only `PATH` - [x] Fork test: bad JSON or no `busctl` falls back - [x] Fork test fails on the old code - [x] Fork test fails without the fork hook - [x] 21 launcher tests pass, display set or unset - [x] Real launcher, display unset, stub `code` - Stub saw `DISPLAY=:1`, `WAYLAND_DISPLAY=wayland-1` - [x] Diffed against the `pingdotgg#25228` head: same code - [x] `vp run typecheck` (server) → exit 0 - [x] `vp run fork:ci` → exit 0 - [ ] Not run: full reboot cycle on this branch Claude Opus 5.5 in T3 Code (Claude Code harness). ## Fork trailers Fork-Domain: upstream-fixes Fork-Tier: bugfix Fork-Upstreamable: yes Co-authored-by: donjor <38745786+donjor@users.noreply.github.com>
…er D-Bus, as upstream does (#1920) ## Problem The boot-service display fix from #1919 has two flaws upstream's version avoids. - **Quoting:** spaced values come back as `$'…'` - **Browsers:** they also got the session display A quoted `XAUTHORITY` path with a space breaks the editor's X auth. Upstream keeps browsers off it so the pairing page never opens on another session's screen. Upstream has the same fix open as `pingdotgg#25228` (maintainer branch, green). ## Change `externalLauncher.ts` carries the `pingdotgg#25228` reader line for line: - **Source:** `busctl --json=short`, raw values - Only `DISPLAY`, `WAYLAND_DISPLAY`, `XAUTHORITY` - **Scope:** editor launches only - **Fallback:** error or timeout keeps server env One fork-only hook keeps the file-manager entry available on a boot service; `pingdotgg#25228` leaves detection unchanged. ```diff +// Fork: the boot service's file-manager entry also needs the session display. const readBrowserLaunchEnv = Effect.gen(function* () { const env = yield* BrowserLaunchEnvConfig.pipe(Effect.orElseSucceed(() => ({}))); - return { ...env, ...(yield* readSessionDisplayEnv(env)) }; + return { ...env, ...(yield* readGraphicalSessionEnv()) }; }); ``` **Retirement:** once a tagged upstream release ships `pingdotgg#25228`, the rebase drops this commit and keeps only that hook. ## Scope and approval Follow-up to #1919 in the same function and `upstream-fixes` domain. ## Verification - [x] Fork test: raw `XAUTHORITY` with a space - [x] Fork test: file manager discovered and launched - [x] Fork test: browser launch gets only `PATH` - [x] Fork test: bad JSON or no `busctl` falls back - [x] Fork test fails on the old code - [x] Fork test fails without the fork hook - [x] 21 launcher tests pass, display set or unset - [x] Real launcher, display unset, stub `code` - Stub saw `DISPLAY=:1`, `WAYLAND_DISPLAY=wayland-1` - [x] Diffed against the `pingdotgg#25228` head: same code - [x] `vp run typecheck` (server) → exit 0 - [x] `vp run fork:ci` → exit 0 - [ ] Not run: full reboot cycle on this branch Claude Opus 5.5 in T3 Code (Claude Code harness). ## Fork trailers Fork-Domain: upstream-fixes Fork-Tier: bugfix Fork-Upstreamable: yes Co-authored-by: donjor <38745786+donjor@users.noreply.github.com>
Problem
The boot-service display fix from #1919 has two flaws upstream's version avoids.
$'…'A quoted
XAUTHORITYpath with a space breaks the editor's X auth.Upstream keeps browsers off it so the pairing page never opens on another session's screen.
Upstream has the same fix open as
pingdotgg/t3code#25228(maintainer branch, green).Change
externalLauncher.tscarries the#25228reader line for line:busctl --json=short, raw valuesDISPLAY,WAYLAND_DISPLAY,XAUTHORITYOne fork-only hook keeps the file-manager entry available on a boot service;
#25228leaves detection unchanged.Retirement: once a tagged upstream release ships
#25228, the rebase drops this commit and keeps only that hook.Scope and approval
Follow-up to #1919 in the same function and
upstream-fixesdomain.Verification
XAUTHORITYwith a spacePATHbusctlfalls backcodeDISPLAY=:1,WAYLAND_DISPLAY=wayland-1#25228head: same codevp run typecheck(server) → exit 0vp run fork:ci→ exit 0Claude Opus 5.5 in T3 Code (Claude Code harness).
Fork trailers
Fork-Domain: upstream-fixes
Fork-Tier: bugfix
Fork-Upstreamable: yes