# PR 395 merge resolution Head: 1408a63b6dd62ef05e5a5f00ea18655b8d42c8f0. Parents: 08484287464fc715154beb125d927be0cb5988f1 and f7400ba6c0453f891fe79fd0ace2e68a1a49f609. Command: `git merge --no-ff origin/master`. No rebase or force push. Only conflicting hunk: the JSDoc above `restartObsidian` in `tests/e2e/journey/actions.ts`. The resolution keeps the native-runner explanation that startup must skip provisioning to preserve the recorder-first plugin list, the macOS quit explanation, and #388's sentence describing the renderer `beforeClose` callback 50 ms before closing. The code merged automatically. #388's optional third `beforeClose` parameter and renderer execution before the scheduled platform quit are intact. OE-ADOPT's profile guard still validates captured argv before quitting; restart still calls `launchObsidianInstance` followed by `waitForInstanceReady`. The local `relaunchIsolatedApp` implementation remains deleted. All other #388 changes are inherited unchanged. Validation uses Node 22.23.2, TMPDIR=/data/home/tmp/podnotes-OE-ADOPT, Linux headless Obsidian 1.13.7. A fresh vault was provisioned after archiving the previous fixture vault inside ignored artifacts. The raw-ps recorder in `run-suite.mjs` samples the real instance throughout each full E2E run and checks every observed PID and launcher process group after the suite stops itself. It imports no upstream process matcher. The proof also asserts no instance argv, no profile and no xvfb-run.* dirs in TMPDIR. Both sequential full E2E runs passed 53 tests in 11 files. Raw process sampling tracked 42 PIDs and four groups in run 1, then 37 PIDs and four groups in run 2. Both cleanup JSONs show zero survivors, group members, owned argv and xvfb-run.* directories, with the profile removed. All six standing checks passed. Unit tests passed 1386 tests across 86 files, with zero Svelte errors or warnings. Docs built 15 pages and validated 73 legacy fragments. Size passed at 314794 raw bytes and 99368 gzip bytes at level 9. The final stop dry-run reports pids: none. Commands were sequential, so builds did not overlap either E2E suite. Unit tests used --maxWorkers=2 for this shared host. GitHub checks are pending publication of this head. Claude Opus 5.5 independently audited this merge and found no blockers. Cleanup JSONs record successful assertions; the empty survivor arrays are written after checking raw ps output. The runner passes an explicit Xauthority path and creates no xvfb-run temporary directory. The directory check verifies that absence and guards against the old launcher returning. Process-group exit and profile removal provide the cleanup proof. The original verify walk predates this merge; macOS restart smoke and runtime post-spawn failure injection remain untested.