Skip to content

test(e2e): retain runtime errors and recover interrupted runs - #446

Merged
chhoumann merged 4 commits into
masterfrom
test/e2e-reliability
Oct 13, 2026
Merged

chhoumann merged 4 commits into
masterfrom
test/e2e-reliability

Conversation

@chhoumann

@chhoumann chhoumann commented Oct 13, 2026 •

Copy link
Copy Markdown
Owner

Summary

Recover temporary recorders after interrupted E2E runs and preserve runtime errors through test cleanup, renderer reloads, and final restoration. Each checkpoint consumes its errors once, and cleanup restores the vault even when assertions fail.

  • Preserve app settings and workspace state. V-446 identified the Settings failure mechanism: app.json became {} at restart, losing settingsPopoutWindow: false and moving Settings into a popout. This matches V-427d's missing main-window controls. Restart repairs the runner's required settings before relaunch; cleanup restores the original runtime config and file bytes.
  • Accept Obsidian's exact known ResizeObserver message only during popout cleanup. Ordinary reloads keep strict error checks. Reused-vault recovery checks the config actually seeded, including other enabled plugins.
  • Open a usable left sidebar during each suite and restore it afterward. Diagnose Settings popouts and covering Notices.
  • Make J-EDGE-05 reject any new Notice during empty-feed loading. Use one jsLiteral helper for eval values, rejecting non-finite numbers and negative zero. NOTE1 feat(notes): find notes and links by episode GUID, capture where you write, and create episode notes without playing #442 is merged and its added helper is migrated too.

Fixes #380
Fixes #382
Fixes #383

Verification

  • Linux, Node v22.23.2, real isolated Obsidian on ebf88bb. Three consecutive 1.14.4 full runs passed 115/115 each: reused vault with another plugin enabled, four CPU workers, and a fresh vault/profile. The 1.13.7 run passed 115/115 using PODNOTES_OBSIDIAN_APP=/opt/Obsidian/obsidian npm run test:e2e. All used the same commit. The app and workers are stopped.
  • Passed npm run lint, npm run format:check, npm run typecheck, npm run build, npm run test (2,132 tests), npm run test:tooling (11 tests), and npm run docs:build (18 pages, 112 legacy fragments).
  • Before/after focused proofs cover the popout error, another enabled plugin, and app-config loss at restart. Mutating out save cancellation, runtime restoration, or exact-byte restoration makes the new regression fail. An unrelated popout error remains fatal. The combined focused run passed 22/22; J-TS-09 passed separately. All 12 lossy numeric probes now throw.

The prior head 76d3fa9 passed the author's four full runs but failed V-446's four unmutated runs (112/113, 111/113, 112/113 on 1.14.4 and 112/113 on 1.13.7). This revision addresses all three blockers and the requested nits. It restores the suite hook budget to 60 seconds.

CodeQL on 76d3fa9 reported zero results against 14 on master (12-22 and 28-30); none was dismissed. The new head ebf88bb also has zero findings in both CodeQL analyses, with no errors or warnings (JavaScript/TypeScript analysis).

Read the V-446 response and verification record and before/after logs, mutations, scripts, and full-run results. The original investigation remains in the initial evidence archive.

Release impact

None. Changes are confined to E2E tests and harness documentation. No product code or persisted user-data format changes.

Docs at release

None. AGENTS.md documents harness restoration, restart settings, and the layout left by an interrupted run.

@cloudflare-workers-and-pages

cloudflare-workers-and-pages Bot commented Oct 13, 2026 •

Copy link
Copy Markdown

Deploying podnotes with  Cloudflare Pages  Cloudflare Pages

Latest commit: ebf88bb
Status: ✅  Deploy successful!
Preview URL: https://99d857ef.podnotes.pages.dev
Branch Preview URL: https://test-e2e-reliability.podnotes.pages.dev

View logs

@chhoumann
chhoumann merged commit 25ca793 into master Oct 13, 2026
15 checks passed
@chhoumann
chhoumann deleted the test/e2e-reliability branch October 13, 2026 12:23
chhoumann added a commit that referenced this pull request Oct 13, 2026
Brings in 25ca793, test(e2e): retain runtime errors and recover
interrupted runs (#446), and keeps both sides of every conflict:

- journey/actions.ts: the v3 selectors (.pn-head back button,
  button.pn-gridcard with its failed label, .pn-ep-main/.pn-ep-title,
  button.pn-result) built through #446's jsLiteral and byAttribute.
  ui.removePodcast stays deleted; #447 removes podcasts through the
  podcast menu. failedPodcastCard and shownResults referenced the q
  alias #446 deleted, so they use byAttribute and jsLiteral.
- journey/fixtures.ts: the iTunes stub's search and lookup handler,
  with the results literal written by jsLiteral.
- journey-feeds.test.ts: the empty feed shows no feed error banner and
  raises no new Notice.
- journey-mobile.test.ts: the new-install test checks runtime errors
  with assertNoNewRuntimeErrors, #446's replacement for
  assertNoRuntimeErrors.
- local-files-runtime and marketplace-review-runtime: .pn-ep-title
  with jsLiteral values.
- private-feeds.test.ts: the Library menu path for Set feed address;
  the settings-tab path stays removed.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

1 participant