#4848·openwork

Nightly Full regression: build the packaged enterprise desktop once and run the packaged journeys against it

Author: yomguiCreated Sep 10, 2026Updated Sep 11, 2026

Context

.github/workflows/daytona-e2e.yml (scheduled Full regression) selects the packaged enterprise journeys as local jobs but never builds a packaged binary or sets OPENWORK_EVAL_ELECTRON_BINARY, so they could only ever SkipError. Since #4849 the lane reports them as skipped: lane cannot satisfy prerequisites (N journeys skipped (prerequisites unmet) in the plan and verdict summaries) instead of scheduling red jobs — but it still does not exercise them. That is a coverage reclassification, not restored coverage; this issue owns restoring it.

Today the only automated coverage of these journeys against a real enterprise build is apps/desktop/scripts/packaged-smoke.mjs in ci-tests.yml (every full-lane PR and every push to dev), which runs five of the six spec files unfiltered against an electron-builder --linux --dir enterprise package:

  • packaged-first-launch (cloud + enterprise)
  • packaged-preactivation-updater
  • packaged-preactivation-egress
  • packaged-activated-launch
  • desktop-quit-path

released-enterprise-activated needs a released binary, an older released baseline binary (OPENWORK_EVAL_RELEASED_BASELINE_BINARY, evals/specs/released-enterprise-activated.e2e.test.ts:18–20) and a real Den; it runs nowhere automatically.

Proposal (option A from the gate report)

Add a packaged-journey job to the Full regression lane that:

  1. builds the enterprise flavor once on Linux (electron-build.mjs --server-built, then electron-builder --config electron-builder.enterprise.yml --linux --dir), reusing the cache keys from ci-tests.yml's openwork-tests-build;
  2. runs each packaged journey in the catalog with OPENWORK_EVAL_ELECTRON_BINARY set (matrix over the journeys whose needs.env includes it), recording one journey-result.json per journey so the verdict aggregates them like any other lane;
  3. declares that env in the lane passed to unmetLaneNeeds (ciLane in evals/scripts/journey-catalog.mjs) so those journeys leave the skipped list. Note the catalog's needs are whole-file blockers only: released-enterprise-activated declares the main binary, and its update case skips itself without the baseline (that skip is counted not tested by the verdict), so this lane must provide both binaries for that journey to pass;
  4. for released-enterprise-activated: downloads the current released enterprise binary and the previous released baseline (or a release-verification lane does), sets OPENWORK_EVAL_ELECTRON_BINARY and OPENWORK_EVAL_RELEASED_BASELINE_BINARY, and runs it against a real Den.

Cost: one electron-builder run (~2 min warm in ci-tests) plus ~5 journeys of 2–5 min each, per nightly.

Acceptance criteria (measurable)

  • A scheduled Full regression run's verdict summary lists all six packaged journeys — packaged-first-launch, packaged-activated-launch, packaged-preactivation-updater, packaged-preactivation-egress, desktop-quit-path, released-enterprise-activated — with result passed (not "not tested", not skipped), executed against a built enterprise binary whose OPENWORK_EVAL_ELECTRON_BINARY path is visible in the job log.
  • The same summary reads 1 journeys skipped (prerequisites unmet) with only computer-use-window-scope (run on darwin) remaining; the 0 skipped state for packaged journeys holds for 3 consecutive scheduled runs.
  • released-enterprise-activated runs its update case with a released baseline binary (OPENWORK_EVAL_RELEASED_BASELINE_BINARY set) and records passed; the run URL is linked here.
  • journey-ci.test.mjs's lane test asserts the new lane's provided env and the parity guard still passes (catalog needs ⇔ spec/world guards).
  • No change to packaged-smoke.mjs coverage on PRs (it stays the fast pre-merge gate; this lane is the scheduled one).

Out of scope: computer-use-window-scope (needs a local macOS host with AppKit; stays skipped in this lane). Native macOS crash-report assertions and updater download/install coverage are tracked separately in #4885.

Refs

  • #4849 — reclassification PR (skipped: lane cannot satisfy prerequisites)
  • Gate report: reports/e2e-gate-baseline-2026-09-10.md (headline finding)
  • Journeys unverified by the nightly today: #4809 (egress gate), #4787 (quit path), #4805