gate: split macOS leg to forks only; drop (macos-14) from LFG required checks#46
gate: split macOS leg to forks only; drop (macos-14) from LFG required checks#46
Conversation
60b318a to
1f79716
Compare
There was a problem hiding this comment.
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-testOS matrix at plan time based ongithub.repository, yielding Linux-only onLucent-Financial-Group/Zetaand Linux+macOS on forks. - Remove
build-and-test (macos-14)from the required status checks snapshot. - Update
docs/GITHUB-SETTINGS.mdto 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. |
…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>
1f79716 to
77c2450
Compare
…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>
|
Resolving the two P1 contributor-handle threads — fixes already applied in On the third thread (structural signal for the matrix split): keeping |
* 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>
…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.
…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>
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>
…#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>
Summary
.github/workflows/gate.ymlcomputes thebuild-and-testmatrix fromgithub.repositoryat plan time. OnLucent-Financial-Group/Zetaonlyubuntu-22.04expands; on any fork (e.g. a contributor'sAceHack/Zeta) bothubuntu-22.04andmacos-14expand. Byte-identical YAML on both sides.mainbranch protection's required-checks list no longer includesbuild-and-test (macos-14)(from 6 checks down to 5). Classic branch-protection API updated on the same change; the ruleset had norequired_status_checksrule so no ruleset change needed.docs/GITHUB-SETTINGS.mdandtools/hygiene/github-settings.expected.jsonupdated 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.repositorycontext 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.actionlintrejected it: thematrixcontext is not available at job-level (onlygithub,inputs,needs,vars). Moving the split tostrategy.matrix.osviafromJSONachieves the same outcome at plan time — a matrix leg that doesn't exist produces no check, whereas a job-level skip would still report askippedstatus on the PR (and historically has raised the "does skipped pass required-checks?" question).Test plan
dotnet build Zeta.sln -c Releaseclean (0W/0E).actionlint .github/workflows/gate.ymlclean.tools/hygiene/check-github-settings-drift.shprintsno drift.build-and-test (ubuntu-22.04)only (no macos-14 leg appears).🤖 Generated with Claude Code