# OE-ADOPT runtime evidence Linux headless, Obsidian 1.13.7 (installer 1.13.7), Node 22.23.2, npm 10.9.8. TMPDIR=/data/home/tmp/podnotes-OE-ADOPT. Every npm shell initializes fnm before selecting Node 22. The isolated vault is podnotes-chore-obsidian-e2e-0.13. Its plugin files link this worktree. Fresh vaults were provisioned for acceptance and the separate verify walk. Baseline and post-suite vaults were archived inside ignored artifacts, not published. ## Commands and results - npm ci, npm run build, npm run start:e2e-obsidian: passed. - npm run obsidian:e2e -- eval code='Boolean(app.plugins.plugins.podnotes)': true. - npm run test:e2e: 41/41 passed twice, first against a warm instance and then against a suite-owned instance. Baseline also passed 41/41. - node .obsidian-e2e-artifacts/oe-adopt/verify-walk.mjs: passed feed subscription in Settings, playback from the grid, palette note creation, palette timestamp capture, direct URI seek and local-file menu playback. The script asserts API state and persisted data.json/note content. Exact commands are in verify-walk.log. - npm run screenshot:e2e-obsidian -- .obsidian-e2e-artifacts/oe-adopt/npm-player.png: passed. - npm run record:e2e-obsidian -- .obsidian-e2e-artifacts/oe-adopt/flow.mp4 -- .obsidian-e2e-artifacts/oe-adopt/record-driver.sh: passed, toggle pause/resume. - Contact sheets for the toggle recording and default three-second recording: generated and inspected, as were all five screenshots. - npm run stop:e2e-obsidian: terminated nine owned processes, killed zero, removed profile. Process proof asserts every observed PID exited, no current owned processes, no xvfb-run.* dirs in TMPDIR, profile absent. Warm, automatic suite and final stop proofs passed. Final dry-run prints pids: none. - Deletion grep: no desktop shim symbols, xvfb-run or XDG_RUNTIME_DIR handling in the wrapper, journey actions or verify helpers. Fixture feed: http://127.0.0.1.nip.io:35476/feed.xml. Local file: Fixtures/Local Fixture.wav, 60 seconds. No runtime errors captured. Full E2E also tests clicked note URI links and both restart journeys, including error-recorder ordering. ## Limits and follow-ups macOS restart was reviewed through upstream code but not run on this Linux host. J-PLAY-11 and J-EDGE-03 need a macOS smoke check. Failure cleanup after launch was established through code tracing, not injected runtime failure. The screenshots show broken local-file artwork; this is tracked in https://github.com/chhoumann/PodNotes/issues/394 and outside the tooling migration scope. No src changes were made. Final CI-equivalent checks after merging origin/master e23969a all passed: npm run lint, npm run format:check, npm run typecheck, npm run build, npm run test -- --maxWorkers=2 and npm run docs:build. Astro built 15 pages, all internal links were valid, and all 73 legacy fragments resolved. npm run size also passed. Pre-merge checks passed lint, format, typecheck, build, 1296 unit tests and size (307131 raw bytes, 97161 gzip bytes). The old MkDocs command could not run because mkdocs was absent; origin/master replaces it with Astro. Independent raw-ps cleanup check also passed: all nine recorded PIDs exited, the detached native launcher process group has no members, and no argv references this instance. No upstream process matcher was imported for this check. Evidence: independent-cleanup.json. No upstream v0.13.0 or 0.13.0 tag was found; the npm0.13.0 tarball and installed dist were compared byte-for-byte (28 files). The second E2E suite overlapped a build of identical source during pre-merge checks. The bound worktree began clean at origin/master; acceptance used npm ci and fresh vaults instead of creating another worktree.