Skip to content

Tier 1 and Tier 2 Gates: full matrix, Go 1.21.x, zero leftover, browser pin assertion #54

Closed

Description

@Fly-Playgroud

Parent

Spec: #33 (Baseline release). Section numbers refer to its Implementation Decisions.

What to build

Every push and pull request proves wand on all four Tier 1 platforms with a real browser and -race, on the Go floor on both Linux runners, on the Companion Chromium on linux/amd64, and builds for the three Tier 2 targets; every browser job ends by proving no process was left behind. Spec section 13; ticket #20.

Acceptance criteria

  • The pins name a Target Chrome of 153 or later (re-run the Roll tool by hand if needed, as its own roll-titled commit), so linux/arm64 has a downloadable build.
  • Tier 1 jobs: ubuntu-latest on Go stable and 1.21.x, ubuntu-24.04-arm on stable and 1.21.x, windows-latest on stable, macos-latest on stable, and ubuntu-latest on the Companion Chromium; each runs every package from the workspace root with -race; browsers come through the launcher's own download on every run.
  • Tier 2 jobs: macos-15-intel and windows-11-arm natively, linux/loong64 cross-compiled on ubuntu-latest; each runs build, vet and go test -run '^$' on 1.21.x and stable.
  • Each Tier 1 job asserts the printed browser version equals the pin, and ends with an if: always() step that waits up to 30 s and fails on any surviving chrome or chromium process or leftover temporary user-data directory.
  • All jobs are required status checks on main; SHA pins, permissions, GOTOOLCHAIN=local, concurrency and artifacts as in the minimal Gate.
  • Three consecutive green runs on main after the merge.

Blocked by

Activity

  1. Fly-Playgroud commented on Sep 6, 2026

    @Fly-Playgroud
    ContributorAuthor

    Input from #36 (minimal Gate, #71). Two runner facts the full matrix inherits from .github/workflows/gate.yml, beside the SHA pins, permissions, GOTOOLCHAIN=local, concurrency and artifacts this ticket already lists:

    • ubuntu-latest (24.04) confines unprivileged user namespaces through AppArmor, so a Chromium launched without --no-sandbox dies with No usable sandbox!. The Gate runs sudo sysctl -w kernel.apparmor_restrict_unprivileged_userns=0 before the tests, keeping the sandbox on rather than spreading --no-sandbox over the suite (spec section 12 rules out a test-only browser knob; rod #1070 stays a documented limitation for users). ubuntu-24.04-arm will need the same step; Windows and macOS have no equivalent.
    • The Managed browser is pre-fetched with go run ./cmd/wand-fetch-browser before go test: Browser.Get serializes downloads and validations behind one port lock, and a package suite that starts while another package is still downloading spends its timing budgets behind that lock (TestManaged blew its budget that way). Still no cache action: every run downloads. -count=1 is also needed, since setup-go restores the Go build cache and go test otherwise replays cached results for unchanged packages.

    Numbers from the linux/amd64 job on Go 1.27.1: about 2.5 minutes in all, 20 s of it the browser download, 1 min 50 s the suite with -race.

  2. Fly-Playgroud commented on Sep 7, 2026

    @Fly-Playgroud
    ContributorAuthor

    Landed by #88 (merge 8eba045); #91 (merge 97ecb1e) then limited the Gate's push runs to main (spec #33, section 13, amended on #33).

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    ready-for-agentFully specified, ready for an AFK agent

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions