Skip to content

gate: split macOS leg to forks only; drop (macos-14) from LFG required checks#46

Merged
AceHack merged 7 commits intomainfrom
split-matrix-linux-lfg-fork-full
Apr 22, 2026
Merged

gate: split macOS leg to forks only; drop (macos-14) from LFG required checks#46
AceHack merged 7 commits intomainfrom
split-matrix-linux-lfg-fork-full

Conversation

@AceHack
Copy link
Copy Markdown
Member

@AceHack AceHack commented Apr 21, 2026

Summary

  • .github/workflows/gate.yml computes the build-and-test matrix from github.repository at plan time. On Lucent-Financial-Group/Zeta only ubuntu-22.04 expands; on any fork (e.g. a contributor's AceHack/Zeta) both ubuntu-22.04 and macos-14 expand. Byte-identical YAML on both sides.
  • main branch protection's required-checks list no longer includes build-and-test (macos-14) (from 6 checks down to 5). Classic branch-protection API updated on the same change; the ruleset had no required_status_checks rule so no ruleset change needed.
  • docs/GITHUB-SETTINGS.md and tools/hygiene/github-settings.expected.json updated to match. Drift detector (tools/hygiene/check-github-settings-drift.sh) confirms zero drift.

Why

Maintainer signal 2026-04-21: "Mac is very very expensive to run" + "we should leave [LFG's] build as linux only if that's possible where acehack also builds mac". macOS runner minutes run ≈10× Linux minutes on GitHub-hosted runners. Moving that leg to the fork keeps cross-platform parity coverage on the contributor side (where the fork owner pays their own bill) without billing it against the canonical-repo cost surface.

The github.repository context is a built-in — no configured variable to set per repo, no second workflow file to sync. A fresh fork inherits full-matrix behaviour automatically; the canonical repo automatically drops macOS.

Design notes

Job-level if: matrix.os != 'macos-14' || github.repository != 'Lucent-Financial-Group/Zeta' was the first attempt. actionlint rejected it: the matrix context is not available at job-level (only github, inputs, needs, vars). Moving the split to strategy.matrix.os via fromJSON achieves the same outcome at plan time — a matrix leg that doesn't exist produces no check, whereas a job-level skip would still report a skipped status on the PR (and historically has raised the "does skipped pass required-checks?" question).

Test plan

  • Local dotnet build Zeta.sln -c Release clean (0W/0E).
  • actionlint .github/workflows/gate.yml clean.
  • tools/hygiene/check-github-settings-drift.sh prints no drift.
  • CI on this PR runs build-and-test (ubuntu-22.04) only (no macos-14 leg appears).
  • All 5 required checks green.

🤖 Generated with Claude Code

Copilot AI review requested due to automatic review settings April 21, 2026 14:49
@AceHack AceHack enabled auto-merge (squash) April 21, 2026 14:49
@AceHack AceHack force-pushed the split-matrix-linux-lfg-fork-full branch from 60b318a to 1f79716 Compare April 21, 2026 14:51
Copy link
Copy Markdown

Copilot AI left a comment

Choose a reason for hiding this comment

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

Pull request overview

Adjusts the CI “gate” workflow and repo-settings-as-code snapshot so the canonical repo runs the Linux leg only, while forks still run Linux+macOS, and branch protection no longer requires the macOS check that won’t exist on the canonical repo.

Changes:

  • Compute build-and-test OS matrix at plan time based on github.repository, yielding Linux-only on Lucent-Financial-Group/Zeta and Linux+macOS on forks.
  • Remove build-and-test (macos-14) from the required status checks snapshot.
  • Update docs/GITHUB-SETTINGS.md to reflect the reduced required-check set and rationale.

Reviewed changes

Copilot reviewed 3 out of 3 changed files in this pull request and generated 2 comments.

File Description
.github/workflows/gate.yml Changes matrix expansion to conditionally omit the macos-14 leg on the canonical repo.
tools/hygiene/github-settings.expected.json Updates expected branch protection required contexts to drop build-and-test (macos-14).
docs/GITHUB-SETTINGS.md Updates documentation to reflect 5 required checks and explains why macOS isn’t required on canonical.

Comment thread .github/workflows/gate.yml Outdated
Comment thread docs/GITHUB-SETTINGS.md Outdated
…uired checks

Matrix is now computed from `github.repository` via `fromJSON` at
plan time. On LFG/Zeta only `ubuntu-22.04` expands; on any fork
(e.g. AceHack/Zeta) both Linux + macOS expand. Keeps YAML byte-
identical on both sides — no repo-scoped variable, no second
workflow file.

`build-and-test (macos-14)` removed from main branch protection's
required-checks list on LFG on the same change (ruleset has no
required-status-checks rule; only classic branch-protection
does). `docs/GITHUB-SETTINGS.md` and `github-settings.expected.json`
updated to match; drift detector confirms zero drift.

Job-level `if:` with `matrix.*` was the first attempt but
actionlint rejects it (matrix context not available at job-level).
The strategy-expansion pattern is the clean way to achieve the
same split without generating a skipped check on LFG — a matrix
leg that doesn't exist produces no check, whereas a skipped leg
would still appear in the PR's checks list.

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 acehack also builds mac". macOS runner minutes
run ≈10× Linux minutes; moving them to the fork keeps parity
coverage on the contributor side without billing canonical-repo
cost surface.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
@AceHack AceHack force-pushed the split-matrix-linux-lfg-fork-full branch from 1f79716 to 77c2450 Compare April 21, 2026 14:56
…e attribution'

Copilot's PR #46 review flagged two `AceHack/Zeta` contributor-handle
references in the gate.yml comment block + GITHUB-SETTINGS.md note as
BP violations (AGENT-BEST-PRACTICES.md:284-290 — "No name attribution
in code, docs, or skills. Direct names of contributors (human or
agent) appear only in persona memory directories").

The references were in bodies that read stable across contributor
turnover — the role-based rewrite matches the rule's intent without
losing information. Maintainer quote inside the blockquote keeps the
"[the canonical repo's]" bracket-edit pattern already used for
anonymisation in this repo.

Files:
- `.github/workflows/gate.yml:52` — "a contributor's AceHack/Zeta"
  → "any fork"; "acehack also builds mac" → "a contributor fork also
  builds mac".
- `docs/GITHUB-SETTINGS.md:152` — "forks (e.g. `AceHack/Zeta`)" →
  "contributor forks"; "LFG" → "the canonical repo"; maintainer quote
  anonymised to "[the canonical repo's]".

The no-name-attribution rule has an explicit carve-out for
`memory/persona/<name>/` and `docs/BACKLOG.md` capture, which is why
historical-record files (ROUND-HISTORY.md, HUMAN-BACKLOG.md, the
transfer-event documentation) keep their concrete repo-name
references.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
Copilot AI review requested due to automatic review settings April 21, 2026 15:04
Copy link
Copy Markdown

Copilot AI left a comment

Choose a reason for hiding this comment

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

Pull request overview

Copilot reviewed 3 out of 3 changed files in this pull request and generated no new comments.

Copilot AI review requested due to automatic review settings April 21, 2026 15:26
Copy link
Copy Markdown

Copilot AI left a comment

Choose a reason for hiding this comment

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

Pull request overview

Copilot reviewed 3 out of 3 changed files in this pull request and generated 1 comment.

Comment thread .github/workflows/gate.yml
@AceHack
Copy link
Copy Markdown
Member Author

AceHack commented Apr 22, 2026

Resolving the two P1 contributor-handle threads — fixes already applied in db02741 ("review: apply Copilot P1 findings — role-based wording per BP 'No name attribution'"); Copilot filed against the original 77c2450 text before the follow-up commit. Current gate.yml and docs/GITHUB-SETTINGS.md both use role-based wording ("contributor forks" / "a contributor fork") with no direct handles.

On the third thread (structural signal for the matrix split): keeping github.repository == 'Lucent-Financial-Group/Zeta' as the keying expression is intentional. github.event.repository.fork has sharper fork-vs-not-fork semantics, but the cost decision here is canonical-vs-not-canonical, not fork-vs-not-fork — a GitHub-renamed or transferred canonical repo needs a workflow update regardless (many other docs + branch-protection configs embed the canonical name), so the brittleness surfaces uniformly rather than silently via a false-positive fork flag. If we adopt an explicit repo-transfer workflow later we can revisit.

Copilot AI review requested due to automatic review settings April 22, 2026 04:26
Copy link
Copy Markdown

Copilot AI left a comment

Choose a reason for hiding this comment

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

Pull request overview

Copilot reviewed 3 out of 3 changed files in this pull request and generated no new comments.

AceHack added a commit that referenced this pull request Apr 22, 2026
* Round 44 tick-history: auto-loop-2 PR refresh row

Second post-compaction tick. PR #91 refresh after PR #90 merged
4ac3ec3 on main mid-tick; PR #46 refresh after stale-local
reset (bc93188..63720e5). Fork PRs #88/#85/#52/#54 noted as
un-refreshable from current agent harness.

Tick-commits-on-PR-branch = live-loop class (row 112) preserved
via separate branch land-tick-history-autoloop-2-append off
origin/main.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>

* tick-history row fixes — Copilot findings on PR #92

Three fixes to the auto-loop-2 row:
1. Drop "AceHack" handle → "fork ownership outside the canonical
   repo" (BP-L284-L290 compliance)
2. Full ISO8601 timestamp (2026-04-22T04:20:00Z) per file schema
3. Drop self-referential "(row 112 of this file)"

Pre-check grep expanded to include "acehack" handle — prior
grep only caught "aaron" + memory/* refs.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 4.7 <noreply@anthropic.com>
@AceHack AceHack merged commit 2053f04 into main Apr 22, 2026
11 checks passed
@AceHack AceHack deleted the split-matrix-linux-lfg-fork-full branch April 22, 2026 05:56
AceHack added a commit that referenced this pull request Apr 22, 2026
…ution + persistent-fork-list correction (#103)

* Round 44 tick-history: auto-loop-10 append row (unblock tick-history PR chain)

Auto-loop #10 investigated BLOCKED status on tick-history PR chain
(#97, #99, #100 all open at tick-start). Root cause: Copilot review
comments unresolved despite all-green required checks.

Unblock cascade:
- Fixed PR #97 brittle L3 reference with shape-description replacement
- Rejected both ideass typo suggestions (#97, #99) with verbatim-quote
  + chronology-preservation reasoning
- Resolved both review threads
- Resolved cross-merge conflicts (HEAD + main auto-loop-8/9 rows)
- Preemptively applied L3-fix to PR #99's auto-loop-7 row to prevent
  re-conflict (generalizes to: pre-empt anticipated conflicts in
  current merge when the anticipated next merge will touch the same
  row)
- PR #97 merged as `e5a2ed1`
- Closed PR #99 as redundant after zero-content-delta verification
  (PR #100's stacked squash-merge had already landed its row)

Row narrates:
- Split Copilot-suggestion policy: accept reference-rot fixes, reject
  orthographic-normalization on quoted maintainer speech (per the
  spelling-baseline memory)
- Stacked-dependency PR cascade-merge semantics (BLOCKED alone doesn't
  reveal redundancy — `git diff main..HEAD` does)
- Preemptive-conflict-resolution as new discipline
- open-pr-refresh-debt meta-measurable gets second data point: -3 net
  this tick (refresh-capacity > BEHIND-count)

Lands via separate branch per row-112 live-loop-class discipline.

* Fix MD038 — remove nested backtick-escape code-span from auto-loop-10 row

Root cause: embedded code-span with escaped backticks (\`...\`) produced
malformed markdown at col 886 — markdownlint parsed it as a code-span with
spaces inside.

Replaced the embedded code-span with plain prose shape-description + single
clean code ref to docs/CONTRIBUTOR-PERSONAS.md. Semantic content unchanged;
only the quoting shape is fixed.

Verified locally clean via `npx markdownlint-cli2`.

* auto-loop-11 tick-history row — PR #101 MD038 fix + PR #93 three-finding all-reject + PR #93 merge

Row 121 narrates:
- Fix PR #101 markdownlint MD038 (nested backtick-escape code span); commit 1dc4de5
- Resolve PR #101 Copilot thread (independent identification of same MD038)
- Refresh PR #93 via tmp-worktree-clone; address 3 Copilot findings with all-reject verdict:
  - P1 stale-rationale + self-contradicting-suggestion
  - P2 partial-meta-win already-matches (prior c1a4863)
  - P2 reviewer-robot grammatical attributive-adjective convention
- PR #93 auto-merged 4819e22 mid-tick
- PR #101 refreshed against advancing main, pushed 62076e4

Row lands on fresh branch off main with PR #101's branch merged in locally
(stacked-dependency pattern) to preserve row-121-after-row-120 ordering.

Pre-check grep: EXIT=1 clean (no cross-tree memory paths, no contributor handles).
Markdownlint: clean locally.

* docs/hygiene-history/loop-tick-history.md: auto-loop-12 tick row

PR #46 refresh + single live Copilot thread resolution (hardcoded-repo
brittleness rejected with principled reasoning) + prior-tick memory
correction (PR #46 is non-fork, refreshable; auto-loop-9 row misclassified).

Three new observables this tick:
- verify-fork-status-at-tick-open hygiene step (not from memory)
- design-intrinsic-hardcode rejection-ground (4th in catalog)
- git-blame-before-accepting-new-content-finding meta-pattern

open-pr-refresh-debt trajectory: +3/-3/-2/-1 = net -3 over 4 ticks.
AceHack added a commit that referenced this pull request Apr 23, 2026
…r cadenced audit)

Aaron 2026-04-23 directive: "we probalby need some meta
iteam to refactor the backlog base on current knowledge and
look for overlap, this is hygene we could run from time to
time so our backlog is not just a dump".

Landed as FACTORY-HYGIENE row #54 (PR #166) + per-user
feedback memory. 5-pass audit (overlap / staleness /
priority / knowledge-absorb / document). Same cadence as
sibling meta-hygiene rows (#5 / #23 / #38 / #46).

Numbered #54 to avoid collision with #53 on the AutoDream
branch (PR #155, still open).

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
AceHack added a commit that referenced this pull request Apr 23, 2026
Aaron 2026-04-23: "we probalby need some meta iteam to
refactor the backlog base on current knowledge and look
for overlap, this is hygene we could run from time to
time so our backlog is not just a dump".

Wires the directive to the existing meta-hygiene cadence
(same 5-10 round cadence as rows #5 / #23 / #38 / #46).
Five passes per firing: overlap cluster / stale retire /
re-prioritize / knowledge absorb / document via
ROUND-HISTORY.

Row #54 (rather than #53) to avoid collision with the
AutoDream cadenced consolidation row on the
research/autodream-extension-and-cadence branch (PR #155,
still open) which already claimed #53.

Classification per row #50: detection-only-justified —
accumulated drift (overlap, staleness, priority-drift,
knowledge-gap) is inherently post-hoc.

Governing rule lives in per-user memory:
feedback_backlog_hygiene_cadenced_refactor_look_for_overlap_not_just_dump_2026_04_23.md

Self-scheduled free work under the 2026-04-23 scheduling-
authority rule.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
AceHack added a commit that referenced this pull request Apr 23, 2026
…#166)

* hygiene: row #54 — backlog-refactor cadenced audit

Aaron 2026-04-23: "we probalby need some meta iteam to
refactor the backlog base on current knowledge and look
for overlap, this is hygene we could run from time to
time so our backlog is not just a dump".

Wires the directive to the existing meta-hygiene cadence
(same 5-10 round cadence as rows #5 / #23 / #38 / #46).
Five passes per firing: overlap cluster / stale retire /
re-prioritize / knowledge absorb / document via
ROUND-HISTORY.

Row #54 (rather than #53) to avoid collision with the
AutoDream cadenced consolidation row on the
research/autodream-extension-and-cadence branch (PR #155,
still open) which already claimed #53.

Classification per row #50: detection-only-justified —
accumulated drift (overlap, staleness, priority-drift,
knowledge-gap) is inherently post-hoc.

Governing rule lives in per-user memory:
feedback_backlog_hygiene_cadenced_refactor_look_for_overlap_not_just_dump_2026_04_23.md

Self-scheduled free work under the 2026-04-23 scheduling-
authority rule.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>

* hygiene #54: address Copilot review — contributor-name + memory-path

Two of the three findings addressed:
- Replace "Aaron 2026-04-23" with "the human maintainer
  2026-04-23" (+ "Aaron-scope boundary" → "Maintainer-scope
  boundary") per contributor-name guidance
- Clarify the governing-rule memory lives in per-user memory
  (not in-repo); absolute path given; no in-repo pointer to
  a non-existent file

Third finding (row #54 out of numeric order) will be replied
inline with rationale — #53 is reserved for PR #155's
AutoDream cadenced-consolidation row still open; #54 gives
clean numbering on merge. Not a bug — intentional reservation.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 4.7 <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants