diff --git a/.github/workflows/windows-free-tests.yml b/.github/workflows/windows-free-tests.yml index 8a17adbbf..d5ec9bb6e 100644 --- a/.github/workflows/windows-free-tests.yml +++ b/.github/workflows/windows-free-tests.yml @@ -23,6 +23,11 @@ name: Windows Free Tests on: pull_request: branches: [main] + # Also on main pushes, as free-tests.yml does: trains dispatch only the + # Linux free workflow, so without this no Windows run ever sees a train's + # combined tree or main after a merge. + push: + branches: [main] workflow_dispatch: inputs: record_durations: diff --git a/CHANGELOG.md b/CHANGELOG.md index 325076f25..c63216445 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,15 @@ # Changelog +## [1.91.217.0] - 2026-10-25 + +**Windows free tests now also run on every push to main.** `windows-free-tests.yml` ran on pull requests and dispatch only: 194 PR runs, 6 dispatches and 0 pushes in its last 200 runs. Merge trains dispatch only `free-tests.yml` on the train branch. So no Windows run ever saw a train's combined tree or main after a merge, and a Windows break caused by two individually green PRs only surfaced on the next unrelated PR. Found while working on GSTA-68. + +### Fixed +- **`.github/workflows/windows-free-tests.yml`**: adds `push: branches: [main]`, the same trigger free-tests.yml already has. The run uses the existing per-run concurrency group, and `record_durations` stays dispatch-only (on a push, `inputs.record_durations` is empty, so the lane runs and the recorder skips). Cost: about 40 job-minutes on GitHub's free `windows-latest` runners per merge. + +### Tests +- `test/windows-native-workflows.test.ts` pins the new trigger set and requires the push trigger to be limited to main. + ## [1.91.216.0] - 2026-10-25 **/sync-gbrain refuses an active autopilot before it touches the brain's source list (#3360, part 2; ported from #3362 by @exGeni).** The code stage checked for a running `gbrain autopilot` only right before its destructive walk. By then it had already cleaned up legacy sources, renamed a source and run `gbrain sources add`, so a refused run still registered a source it never synced. diff --git a/VERSION b/VERSION index e3ddd732f..9df4ba64f 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -1.91.216.0 +1.91.217.0 diff --git a/agents-digest/gstack-AGENTS.md b/agents-digest/gstack-AGENTS.md index 0d9aff51c..a188bc268 100644 --- a/agents-digest/gstack-AGENTS.md +++ b/agents-digest/gstack-AGENTS.md @@ -1,4 +1,4 @@ -# gstack digest v1.91.216.0 — regenerate/re-copy after upgrading gstack +# gstack digest v1.91.217.0 — regenerate/re-copy after upgrading gstack Behavioral rules from gstack (https://github.com/garrytan/gstack), compressed for agent hosts without a full skill install. The full skills add workflows, diff --git a/package.json b/package.json index 486c51a4a..a6ce78121 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "gstack", - "version": "1.91.216", + "version": "1.91.217", "description": "Garry's Stack — Claude Code skills + fast headless browser. One repo, one install, entire AI engineering workflow.", "license": "MIT", "type": "module", diff --git a/test/windows-native-workflows.test.ts b/test/windows-native-workflows.test.ts index 013e89fed..04fd70868 100644 --- a/test/windows-native-workflows.test.ts +++ b/test/windows-native-workflows.test.ts @@ -23,7 +23,8 @@ const native = load('native-qualification.yml'); const WINDOWS_CURATED_FLOOR = 638; test('the Windows lane plans, runs one strict shard per job and verifies every result', () => { - expect(Object.keys(windows.on).sort()).toEqual(['pull_request', 'workflow_call', 'workflow_dispatch']); + expect(Object.keys(windows.on).sort()).toEqual(['pull_request', 'push', 'workflow_call', 'workflow_dispatch']); + expect(windows.on.push).toEqual({ branches: ['main'] }); expect(Object.keys(windows.on.workflow_dispatch.inputs)).toEqual(['record_durations']); expect(Object.keys(windows.on.workflow_call.inputs)).toEqual(['record_durations']); const plan = windows.jobs['windows-plan'];