Skip to content

GDK-1702: a cheaper CI run — the static-analysis gate skips Go-free pushes, browser shards are dealt by measured seconds - #100

Merged
midagedev merged 1 commit into
mainfrom
fix-h
Sep 9, 2026
Merged

GDK-1702: a cheaper CI run — the static-analysis gate skips Go-free pushes, browser shards are dealt by measured seconds#100
midagedev merged 1 commit into
mainfrom
fix-h

Conversation

@midagedev

Copy link
Copy Markdown
Owner

Audit axis 9 of the v0.22 release audit (GDK-1698). The census measured the run growing across releases: since v0.19 the race job went 300 → 434 s, E2E 314 → 403 s, staticcheck 219 → 309 s, wall time 317 → 438 s, and billable minutes 2,241 → 3,358 across 60 runs — with 0 failures and 13 cancels in that window.

Three changes, none of which drops a gate.

The static-analysis job runs only when a push touches Go. A first step diffs the change and gates every step below on its output; the path list is the Go surface plus the job's own inputs (tools/staticcheck.sh and this workflow). It fails open — a forced push whose before is unreachable, a first push, workflow_dispatch, an empty base, or any diff error runs the job — because a gate skipped by mistake is the failure mode that matters, and a gate run for nothing is five minutes. The round was written when this job was warning-only; --warn-only was dropped in 90e27bd and the resolved workflow keeps it dropped, so the skip logic now guards a real gate.

Browser shards are dealt by measured time, not file order. tools/e2e-partition.sh partitions the specs into N bins by longest-processing-time over e2e/shard-weights.tsv (measured seconds); the three bins come out at 247.6 / 247.1 / 247.7 s. --check verifies the partition against the spec list, so a new spec with no weight row is visible rather than silently dumped into one bin.

Five assertions that never needed a browser moved to vitest — menu loading, settings copy, palette entry, activity visibility, and mirror-status wording. Same claims, no page.

Gates on this branch:

e2e-partition --check 3   107 spec files, 3 shards, 742.4 s weighted, 0 median fallback, 0 stale rows
vitest                    129 files, 1306 tests, all passed
make typecheck            clean
playwright                483 passed, 3 skipped, 0 failed (8.2m)
yaml parse                ok
doc-checks                all passed

Opened as a PR rather than pushed to main because it edits .github/workflows/ci.yml, which no local gate can judge.

🤖 Generated with Claude Code

…nce by measured weight, five browser specs move to vitest

Staticcheck runs only when a push touches Go, go.mod/go.sum, the script
or the workflow (fail-open: a filter error runs it). tools/e2e-partition.sh
partitions e2e specs into N bins by longest-processing-time over
e2e/shard-weights.tsv (measured seconds) instead of file order, and
--check keeps the weights file honest against the spec list. Assertions
that need no browser (menu loading, settings copy, palette entry,
activity visibility, mirror-status wording) leave Playwright for vitest.
Audit axis 9 of the v0.22 release audit (GDK-1698).

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
@midagedev
midagedev merged commit ea4f050 into main Sep 9, 2026
13 checks passed
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.

1 participant