Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
81 changes: 52 additions & 29 deletions .github/workflows/gate.yml
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
#
# Discipline (design doc: docs/research/ci-workflow-design.md, Aaron-
# reviewed 2026-04-18; parity-swap landed round 32):
# - Runners digest-pinned (ubuntu-22.04, macos-14), not -latest.
# - Runners use -latest tags (maintainer Otto-212 discipline).
Copy link

Copilot AI Apr 24, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The header comment says runners use -latest tags, but the matrix below is pinned to specific versions (e.g., ubuntu-24.04, macos-26). Please update the discipline comment (or the matrix) so the documentation matches the actual runner-tag policy.

Suggested change
# - Runners use -latest tags (maintainer Otto-212 discipline).
# - Runners are pinned to explicit GitHub-hosted image tags in the
# matrix (for example `ubuntu-24.04` and `macos-26`).

Copilot uses AI. Check for mistakes.
Comment on lines 6 to +8
Copy link

Copilot AI Apr 24, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This comment block includes a direct contributor name ("Aaron-") in a workflow comment. Repo guidance is to avoid name attribution in code/docs (see docs/AGENT-BEST-PRACTICES.md around the "No name attribution in code, docs, or skills" section). Consider switching this to a role reference (e.g., "human maintainer") and removing the stray trailing hyphen.

Copilot uses AI. Check for mistakes.
# - Third-party actions SHA-pinned by full 40-char commit SHA;
# trailing `# vX.Y.Z` comments for humans.
# - permissions: contents: read at the workflow level; no job
Expand Down Expand Up @@ -46,35 +46,58 @@ concurrency:

jobs:
build-and-test:
# Matrix is computed from `github.repository` at plan time so the
# macos-14 leg (≈10× Linux cost) only exists on contributor forks,
# not on the canonical Lucent-Financial-Group/Zeta repo. On any
# fork both legs exist; on the canonical repo only the ubuntu leg
# exists. This keeps the YAML byte-identical on both sides — no
# repo-specific variable, no second workflow file — with runtime
# differentiation driven by the built-in `github.repository`
# context.
# Matrix covers three standard GitHub-hosted runners
Copy link

Copilot AI Apr 24, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This comment says the matrix covers "three" standard runners, but the matrix/list includes four (ubuntu-slim, ubuntu-24.04, ubuntu-24.04-arm, macos-26). Update the count to avoid confusion.

Suggested change
# Matrix covers three standard GitHub-hosted runners
# Matrix covers four standard GitHub-hosted runners

Copilot uses AI. Check for mistakes.
# (all free on public repos per the Otto-210 URL:
# https://docs.github.com/en/actions/how-tos/write-workflows/choose-where-workflows-run/choose-the-runner-for-a-job#standard-github-hosted-runners-for-public-repositories
# exact quote: "Use of the standard GitHub-hosted
# runners is free and unlimited on public
# repositories."):
#
# Job-level `if:` with `matrix.*` is rejected by actionlint (the
# matrix context is not available at job-level), so the split is
# done at strategy-expansion time via `fromJSON`. The expression
# evaluates once per workflow run; each matrix leg that survives
# creates its own check status.
# - ubuntu-slim minimal Linux x64 image,
# standard runner (faster
# boot than ubuntu-24.04 for
# jobs that don't need the
# full image)
# - ubuntu-24.04 Linux x64, standard runner
# (latest GA Ubuntu LTS as of
# 2026-04-24 per GitHub docs)
# - ubuntu-24.04-arm Linux arm64, standard runner
# (no -latest rolling arm tag
# exists yet; 24.04-arm is
# current)
# - macos-26 macOS 26 Tahoe on Apple
# Silicon (arm64), standard
# runner, GA'd 2026-02-26 per
# GitHub changelog. Explicitly
# NOT macos-*-intel (that's
# the Intel family); we want
# M1 per maintainer Otto-211.
#
# Rationale: maintainer 2026-04-21 "Mac is very very expensive
# to run" + "we should leave [LFG's] build as linux only if
# that's possible where a contributor fork also builds mac".
# `build-and-test (macos-14)` is NOT in the canonical repo's
# required-checks list — it was removed from branch protection
# on the same change that introduced this matrix split so PRs
# don't block on a leg that
# no longer exists there.
# Windows coverage deferred per maintainer Otto-211
# directive ("windows will come later on both zeta
# and acehack"). When it lands, add windows-latest
# to the matrix above.
#
# Compounding discipline (maintainer Otto-212): use
# `-latest` tags where available instead of pinning
# to a version — avoids creating upgrade debt every
# time the runner image rolls forward. The `ubuntu-
# 24.04-arm` exception is because no rolling arm
# alias exists.
#
# Pricing history: earlier "Mac is very expensive"
# (2026-04-21) + Otto-164 "macOS NOT free" findings
# were INCORRECT. Otto-210 primary-source check
# confirmed standard runners free-for-public
# including macOS. See feedback_macos_is_free_on_
# public_repos_otto_164_verification_was_wrong_*
# memory for the correction trail.
Comment on lines +92 to +94
Copy link

Copilot AI Apr 24, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The comment references a memory entry feedback_macos_is_free_on_public_repos_otto_164_verification_was_wrong_*, but that file doesn’t exist under memory/ in this repo. Please update this reference to the correct existing memory filename or remove it so cross-references stay valid.

Suggested change
# including macOS. See feedback_macos_is_free_on_
# public_repos_otto_164_verification_was_wrong_*
# memory for the correction trail.
# including macOS.

Copilot uses AI. Check for mistakes.
name: build-and-test (${{ matrix.os }})
timeout-minutes: 45
strategy:
fail-fast: false
matrix:
os: ${{ fromJSON(github.repository == 'Lucent-Financial-Group/Zeta' && '["ubuntu-22.04"]' || '["ubuntu-22.04","macos-14"]') }}
os: [ubuntu-slim, ubuntu-24.04, ubuntu-24.04-arm, macos-26]
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P1 Badge Preserve required check context when renaming matrix legs

This matrix rename drops the build-and-test (ubuntu-22.04) status context that main branch protection currently requires; the checked-in protection snapshot still lists that exact context (tools/hygiene/github-settings.expected.json line 134), and the latest branch-protection audit in docs/HUMAN-BACKLOG.md (2026-04-23 entry) also records it as required. If branch protection is not updated atomically with this workflow change, PRs will be blocked by a permanently missing required check.

Useful? React with 👍 / 👎.

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P1 Badge Add architecture to cache partitioning for Linux matrix

Adding ubuntu-24.04-arm to this matrix introduces mixed Linux architectures, but cache keys in this job are still partitioned only by runner.os (Linux), so x64 and arm64 legs will collide on the same cache entries. Because cached paths include architecture-specific tool binaries (for example mise/elan/.dotnet payloads), one architecture can restore incompatible artifacts produced by the other, causing flaky setup/build behavior; include runner.arch in the keys when running both Linux architectures.

Useful? React with 👍 / 👎.

runs-on: ${{ matrix.os }}

steps:
Expand Down Expand Up @@ -152,7 +175,7 @@ jobs:
# elevation design (docs/research/threat-model-elevation.md).
name: lint (semgrep)
timeout-minutes: 10
runs-on: ubuntu-22.04
runs-on: ubuntu-24.04

steps:
- name: Checkout
Expand Down Expand Up @@ -183,14 +206,14 @@ jobs:
# See openspec/specs/static-analysis/profiles/shell.md.
name: lint (shellcheck)
timeout-minutes: 5
runs-on: ubuntu-22.04
runs-on: ubuntu-24.04

steps:
- name: Checkout
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2

- name: Run shellcheck
# shellcheck ships pre-installed on ubuntu-22.04 runners.
# shellcheck ships pre-installed on ubuntu-24.04 runners.
# Scope: Zeta's own scripts under `tools/setup/` only —
# `tools/lean4/.lake/packages/**` is Lean/Mathlib vendored
# code not governed by Zeta standards.
Expand Down Expand Up @@ -220,7 +243,7 @@ jobs:
# github-actions.md.
name: lint (actionlint)
timeout-minutes: 5
runs-on: ubuntu-22.04
runs-on: ubuntu-24.04

steps:
- name: Checkout
Expand Down Expand Up @@ -260,7 +283,7 @@ jobs:
# No untrusted input used in run: — only a fixed repo path.
name: lint (no empty dirs)
timeout-minutes: 3
runs-on: ubuntu-22.04
runs-on: ubuntu-24.04

steps:
- name: Checkout
Expand All @@ -276,7 +299,7 @@ jobs:
# See openspec/specs/static-analysis/profiles/markdown.md.
name: lint (markdownlint)
timeout-minutes: 5
runs-on: ubuntu-22.04
runs-on: ubuntu-24.04

steps:
- name: Checkout
Expand Down
111 changes: 0 additions & 111 deletions .github/workflows/nightly-cross-platform.yml

This file was deleted.

Loading