Skip to content

ci: make the Windows desktop-install job blocking - #176

Merged
github-actions[bot] merged 1 commit into
mainfrom
claude/daily-repo-scan-v8fvqs
Aug 11, 2026
Merged

ci: make the Windows desktop-install job blocking#176
github-actions[bot] merged 1 commit into
mainfrom
claude/daily-repo-scan-v8fvqs

Conversation

@dizhaky

@dizhaky dizhaky commented Aug 11, 2026

Copy link
Copy Markdown
Owner

The Windows lane is green, so it can now block.

It's green

Run 31450975252, job 93655123817all eight steps success:

step
npm ci with postinstall 84s
Electron binary actually unpacked
VC++ runtime guard (#172)
test:desktop:win-install (4 files)

First fully green run, after the two rounds of narrowing in #174 and #175.

How "required" works here

Not branch protection — ci.yml already has an All required checks pass aggregator with if: always() over a needs list, and that's the real gate. So this is a one-line file change, no admin rights or repo settings.

The trap I checked rather than assumed

A required check that never runs blocks PRs forever, and this job is gated on the frontend lane — so it is skipped on Python-only PRs. The aggregator's logic:

failed = [name for name, info in needs.items() if info['result'] == 'failure']
icon = '✅' if result in ('success', 'skipped') else '❌'

skipped counts as passing. So the job blocks on frontend PRs and is a no-op on Python-only ones. That's the same property that already lets installer-tests and the hard-disabled e2e-desktop sit safely in that list.

Also verified all 16 needs entries resolve to real job ids.

Sequencing, on purpose

Green first, then blocking. Making a red job required would have blocked every PR in the repo — and this job had been red on main through three merges (#173, #174, #175) precisely because nothing was waiting on it. That gap is what this closes.

Follow-ups, unchanged

  • electron-builder can't be imported under vitest on Windows (likely upstream).
  • Windows' no-mux SSH path has no coverage — the well-covered mux path is the one Windows never takes.
  • update-relaunch.test.ts:54 and windows-hermes-path.test.ts:177 are Linux-only by accident, not design.

Generated by Claude Code

The lane is green — run 31450975252, job 93655123817, all eight steps success:
npm ci in 84s, Electron unpacked, the VC++ guard satisfied, and the four-file
test:desktop:win-install set passing. That is the first fully green run, after
two rounds of narrowing.

Listed it in the `needs` of the existing `All required checks pass`
aggregator. That is this repo's own gate, so this is a one-line file change
rather than a branch-protection setting.

The conditional-job trap was checked rather than assumed: a required check
that never runs blocks PRs forever, and this job is gated on the `frontend`
lane. The aggregator counts only `result == 'failure'` and renders `skipped`
as passing, so the job blocks on frontend PRs and is a no-op on Python-only
ones — the same property that lets installer-tests and the disabled
e2e-desktop already sit in that list. All 16 needs entries were verified to
resolve to real job ids.

Sequenced on purpose: green first, then blocking. Making a red job required
would have blocked every PR — and this job had been red on main through three
merges precisely because nothing was waiting on it.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_012689txgT12g2hjRczcUZi8
@github-actions
github-actions Bot merged commit 127ca5f into main Aug 11, 2026
12 checks passed
@github-actions
github-actions Bot deleted the claude/daily-repo-scan-v8fvqs branch August 11, 2026 02:04
github-actions Bot pushed a commit that referenced this pull request Aug 11, 2026
The last open item from the Windows-lane work. Seven files now.

Inspected before adding rather than adding and hoping: over-including
unverified files caused rounds #174 and #175, and since #176 the lane is a
required check, so being wrong now blocks everyone's PRs rather than just
mine. The sweep covered Windows-hostile syscalls, separator-dependent
assertions and shell assumptions.

It found a third instance of the defect class behind #177:
`assert.match(a, /\/[0-9a-f]{16}\.sock$/)` against controlSocketPath, which
builds with path.join — a leading-slash regex can only match on POSIX. Now
asserted on path.basename(a), which is separator-independent and is what the
sun_path limit is actually about. Checked under both path flavours.

Everything else in the file is safe for stated reasons rather than by
assumption: the /var/folders/ check is a negative assertion; ControlPath
passes through baseSshOptions verbatim, which does no path joining; the
`cd '/home/me/project'` assertion is a remote shell command and remotes are
always POSIX; and the path.join calls create directories inside the two tests
that already carry win32 guards.

Also corrects the workflow header, which #179 had made false — it still said
ssh-connection was POSIX-only and that making it cross-platform was tracked as
follow-up, which is precisely what #179 did.

Remaining exposure is unknown-unknowns across ~40 tests that cannot be
executed from this sandbox. If the lane goes red on this, the fix is to drop
ssh-connection back out of the list — one word, and the test repairs stand on
their own.


Claude-Session: https://claude.ai/code/session_012689txgT12g2hjRczcUZi8

Co-authored-by: Claude <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