M5: Tangled CI for the e2e lanes (ENG-278) #29

Merged demi.dev
targeting main from stoopkidddd/eng-278-m5-tangled-ci-for-the-e2e-lanes-server-web-docker
Merged opened by and assigned to demi.dev
targeting main from stoopkidddd/eng-278-m5-tangled-ci-for-the-e2e-lanes-server-web-docker

Linear: https://linear.app/engineereddev/issue/ENG-278

What's in this PR (3 files):

  • .tangled/workflows/e2e.yml (nixery): one workflow sharing the Nix and pnpm install --frozen-lockfile setup, then e2e:server with native MinIO (PNEUMO_E2E_MINIO=native) and e2e:web with Playwright 1.64.1 Chromium from a pinned nixpkgs revision (Chromium and headless shell only, PLAYWRIGHT_BROWSERS_PATH), --workers=2. PR trigger unfiltered (hosted quirk); push trigger path-filtered. pnpm store cached.
  • MinIO for the test fixture comes from an archived nixpkgs pin, because unstable refuses the abandoned package; loopback-only, documented.
  • scripts/ci/run-nixery.sh: writes a minimal /etc/passwd when missing (server subprocesses without HOME still call os.homedir() via the AWS SDK).
  • docs/agents/tangled.md: CI coverage table rows for e2e server/web (CI), e2e docker and e2e android (local-only, with reasons), plus the timing budget.

Verify (implementer, local): native e2e:server 17 passed; native e2e:web 42 passed (also with CI=true --workers=2); the exact workflow commands on native Linux arm64 with Nix passed (server 11 s, web 57 s); e2e:docker cold amd64 270 s (why it stays local-only). Lead: mise run check:infra exit 0 (4 workflows valid).

Hosted verification is this PR's acceptance: the lead reads this PR's pipeline (cold and warm) and updates the coverage table with measured durations before review.

🤖 Generated with Claude Code

Commits 0