Files
2026-09-10 07:14:55 +02:00

46 lines
4.6 KiB
Markdown

# Firefox browser acceptance
## Werkdock startup diagnosis
On 2026-09-10 the CI Firefox suite stalled at `BrowserContext.newPage`, before
the application received its first request. A standalone Playwright 1.62.0
probe in the actual CI image (`werkator-buildenv-ac87f8617d92`) reproduced the
failure using only a local HTML heading. Firefox reported repeated
`Sandbox: writing /proc/self/uid_map: EPERM` failures and content-process crashes.
The probe was terminated by its 45-second timeout.
Repeating the same probe with `MOZ_ASSUME_USER_NS=0` reached `LAUNCHED`,
`CONTEXT`, `PAGE`, rendered `Werkjournal probe`, and exited normally.
This tells Firefox that additional user namespaces are unavailable, leaving
the other sandbox mechanisms enabled. The interpretation follows Mozilla's
[SandboxInfo.cpp](https://github.com/mozilla/gecko-dev/blob/master/security/sandbox/linux/SandboxInfo.cpp)
and [SandboxLaunch.cpp](https://github.com/mozilla/gecko-dev/blob/master/security/sandbox/linux/launch/SandboxLaunch.cpp).
Werkator sets the application-specific test flag
`WERKJOURNAL_FIREFOX_NO_USER_NS=1`; only the `firefoxAcceptance` task translates
it to the Firefox environment setting. Local runs retain their normal behavior
unless the flag is explicitly set. Production application configuration is
unaffected. The Firefox task also has a 15-minute timeout so a stalled page
creation fails the build instead of indefinitely blocking deployment.
The targeted WJ-061 Firefox acceptance scenario passed locally with this flag
enabled. Full CI verification then passed for commit `b81e9c4` (0.1.77-SNAPSHOT),
build `main_jvm-5c494a9689b3-2026-09-10T05_03_26.959491317Z-947e9bc133c5`:
all 20 Firefox scenarios / 134 steps passed in 2m 59.726s, followed by the
production acceptance scenario / five steps. The preceding JVM suite also
passed. The pipeline completed successfully in 486 seconds and deployed that
exact commit with a PASS result. The public info endpoint independently
reported 0.1.77-SNAPSHOT. The Werkbaum repair node is complete; the bookkeeping
commit increments the version to 0.1.78-SNAPSHOT.
The `firefoxAcceptance` Gradle task executes every browser-tagged scenario in the work, habits, identity and UX feature files using the real Firefox engine supplied by Playwright. The same browser steps and assertions are used for Chromium and Firefox. Each scenario owns its application, database, captured mail and browser contexts. Failure screenshots are separated by browser engine.
Firefox uses desktop contexts at both 1280px and 360px width. Playwright does not support mobile Firefox emulation; narrow desktop windows establish responsive-layout behavior, not physical Android acceptance. Android PWA installation and actual background notification delivery remain separate open checks.
`tools/ci-jvm` runs this suite after the JVM/Chromium and frontend checks and before the production smoke and release packaging. Undefined or failed Firefox scenarios fail the pipeline. The pinned Werkdock image already installs both browser engines and their system dependencies. Its report is `build/reports/cucumber/firefox.json`.
The first full Firefox run passed 17 of 19 examples and exposed two differences. Calendar selection now explicitly opens the picker before confirming the grid date. Firefox's offline Flow fallback uses a same-origin iframe: Spring Security now permits SAMEORIGIN framing only for the public offline documents, retaining DENY elsewhere. HTML entities preserve the punctuation through Vaadin's generated offline stub. The regression verifies both the offline stub header and the unchanged login framing restriction. A targeted rerun of both failing scenarios passed.
The final run exposed a redundant JVM test execution in the second Gradle invocation. The pipeline now excludes `test` only from that second invocation, after the mandatory first full JVM test command has succeeded. Standalone acceptance tasks retain their dependency on `test`.
Final verification on 0.1.68-SNAPSHOT: all 19 Firefox examples (127 steps), all 19 Chromium examples, 193 executed JVM tests (41 filtered reports), 68 operations tests, 17 frontend tests and the production/admin-recovery smoke passed. The shell wrapper was edited during this local run and consequently failed when resuming after Gradle; the unchanged packaging tail was then executed successfully against the passing smoke report. Shell syntax, operations tests and a Gradle dry run verified the final exclusion of the duplicate test task. The final optimized wrapper still requires its CI execution; no claim of a green CI run for this change is made. Completion version: 0.1.69-SNAPSHOT.