Skip to content

ci: unbreak the soak, lint workflow files, fingerprint the runner - #67

Merged
deadpoets merged 3 commits into
mainfrom
ci/unbreak-soak-and-lint-workflows
Aug 19, 2026
Merged

ci: unbreak the soak, lint workflow files, fingerprint the runner#67
deadpoets merged 3 commits into
mainfrom
ci/unbreak-soak-and-lint-workflows

Conversation

@deadpoets

@deadpoets deadpoets commented Aug 19, 2026

Copy link
Copy Markdown
Owner

The soak has not run since #63

The comment I added in #63 contains a literal empty ${{ }}. Actions expands
expressions in run: before any shell sees them, so the # protects nothing —
the file has been unparseable ever since.

last success   2026-08-19T00:27:43Z  workflow_dispatch  704806f
first failure  2026-08-19T01:54:52Z  push               f6218b4  (#63)

It fails invisibly: a zero-job run against a push, never against the PR. #64,
#65 and #66 each reported 22/22 green while the soak was dead.

Commits

  1. 8b18b5a — drop the delimiter. Verified: dispatched run
    32210902399
    completed successfully, 20 iterations.
  2. 390695dactionlint in the lint job, pinned to v1.7.12. Verified to
    exit 1 on the pre-fix file and 0 on the fixed one.
  3. ca25dbc — fingerprint the runner on every soak run.

Fingerprint, first result

workstation windows-latest
OS Win 11 Insider 26220 (client) Server 2025 Datacenter 26100
CPU Intel Core Ultra 7 265KF, 20 logical AMD EPYC 7763, 4 logical
Mandatory ASLR ON off
HVCI running not running
Defender realtime on off
Scheduler quantum 2 2 — same

Two differences I expected turned out not to exist: both hosts are build 261xx,
and both run the client quantum. Worth having measured rather than assumed.

Separately: GOMAXPROCS=4 does not emulate a 4-CPU machine. It caps Go's Ps
while the OS still spreads sysmon, GC workers and the race detector's threads
across all cores — so the ~1190 local samples were never the runner's contention
profile.

…rting

The comment added in #63 contains a literal empty `${{ }}`. Actions expands
expressions in `run:` before any shell sees them, so the `#` protects nothing
and the file has been unparseable since f6218b4 — zero-job runs against pushes,
nothing on any PR's checks, so #64/#65/#66 all looked green.
A workflow file with a bad expression fails invisibly: GitHub records a
zero-job run against a push and shows nothing on any PR. actionlint catches it.
Verified to exit 1 on the pre-fix file and 0 on the fixed one.

shellcheck/pyflakes integration off on purpose — this checks that the workflow
files are valid, and a noisy required check gets removed.
"The runner image" has been carrying the explanation for 2 hits on CI versus
0-for-1190 locally, unmeasured. Measured, five differences survive (CPU, core
count, mandatory ASLR, HVCI, Defender) and two expected ones do not — both
hosts are build 261xx and both use the client scheduler quantum.

Diagnostic only: every probe is optional and the step always exits 0.
@deadpoets
deadpoets force-pushed the ci/unbreak-soak-and-lint-workflows branch from 0466731 to ca25dbc Compare August 19, 2026 03:13
@deadpoets
deadpoets merged commit b664227 into main Aug 19, 2026
22 checks passed
@deadpoets
deadpoets deleted the ci/unbreak-soak-and-lint-workflows branch August 19, 2026 03:49
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