Skip to content

ci: windows-known-failing - #940

Merged
fizzy-pm[bot] merged 1 commit into
mainfrom
ci/windows-known-failing
Oct 28, 2026
Merged

fizzy-pm[bot] merged 1 commit into
mainfrom
ci/windows-known-failing

Conversation

@fizzy-macos

@fizzy-macos fizzy-macos Bot commented Oct 27, 2026 •

Copy link
Copy Markdown
Contributor

Part of fizzyedit/work#549

Goal

Stop the merge queue ejecting PRs on Windows' intermittent fizzy-control-server-tests crash, which fails on main too, without hiding any other failure. This changes a required check: the maintainer's yes is the card windows-flaky (2026-10-27), recorded on fizzyedit/work#549. ci-ok and pm-approval are untouched.

What changed and why

  • .github/known-failing-windows.txt: one known failure per line, <test binary>: <test name> | work#N (owner). Today Ops' one line; it names work#549 until the PM files an owner for the fix.
  • scripts/ci-known-failing.sh <list> <command...>: runs the command unchanged; on a non-zero exit it passes only when the output proves every failure is listed, fail-closed: a Build Summary: exists; its failed-step count equals the run test steps reporting failing tests (so a compile error or any other failed step fails); every error: '<name>' ... in those steps' blocks is a listed <bin>: <name>, at least one per failing test, with no other error: line there; and the summary's failed/crashed/timed-out totals match. A listed test whose binary ran clean is a ::notice:: and a line in the step summary, so the list shrinks; a tolerated one is a ::warning:: naming its owner. Bash + awk only (no Python on the Windows runner).
  • ci.yml: only the Windows row's Run tests on merge_group goes through the wrapper (inside ci-retry.sh, so each retry is judged on its own output). The wrapper's test runs in the Format job (Linux awk) and on the Windows row (Git Bash's awk).

How it was verified

  • scripts/test-ci-known-failing.sh (13 cases) on the real Windows output of run 40559487600 and edits of it: the listed crash passes (with the warning and step summary); an unlisted name in the same binary, the listed name in another binary, a second failure beside the listed one, an unnamed failing test, a runner error in the listed block, a compile error beside it, an unlisted leak, a missing Build Summary, and an ownerless list line all fail with the command's status; a green run reports the listed test as passing.
  • Dry run with real Zig 0.17 output on macOS (a throwaway 3-test package): green → 0 with the "passed" notice; listed crash (terminated with signal ABRT) → 0; listed assertion failure → 0; unlisted failure → 1; listed crash + unlisted failure → 1; a compile error → 1.
  • The workflow YAML parses (ruby); bash -n on both scripts. The repo has no workflow linter, and actionlint/shellcheck could not be installed on this Mac.

Not done / follow-ups

  • Not yet seen in a real merge-group run: the proof that the Windows merge group passes with the baseline failure comes on the first queued run after merge (the PM/maintainer can requeue a PR to see it).
  • The Windows awk path is exercised by the new Windows-row step only once the PR is ready (drafts run only changes).
  • The crash itself needs an owner issue; replace work#549 in the list when it exists.
Changes (5 files, +490/-1)
 .github/known-failing-windows.txt                  |   5 +
 .github/workflows/ci.yml                           |  19 +-
 scripts/ci-known-failing.sh                        | 178 +++++++++++++++++++
 .../fixtures/ci-known-failing/windows-crash.txt    | 197 +++++++++++++++++++++
 scripts/test-ci-known-failing.sh                   |  92 ++++++++++
 5 files changed, 490 insertions(+), 1 deletion(-)
Gates: 6 of 6 passed

scripts/check-fmt.sh (exit 0)

check-fmt: listing tracked files
check-fmt: checking 560 files

scripts/zb build --summary all (exit 0)

... (earlier output omitted)
|     +- compile lib tree-sitter debug native (reused)
|     +- compile lib freetype debug native (reused)
|     +- compile lib tree-sitter debug native (reused)
|     +- options (reused)
|     +- options (reused)
|     +- translate-c dvui-c success 1s
|     |  +- compile exe translate-c debug native (+21 more reused dependencies)
|     +- options success
|     +- options success
+- install text success
|  +- compile lib text debug native success 24s MaxRSS:548M
|     +- WriteFile plugin_root.zig success
|     +- WriteFile freetype (reused)
|     +- compile lib freetype debug native (reused)
|     +- WriteFile . (reused)
|     +- compile lib tree-sitter debug native (reused)
|     +- compile lib freetype debug native (reused)
|     +- compile lib tree-sitter debug native (reused)
|     +- options (reused)
|     +- translate-c dvui-c (+1 more reused dependencies)
|     +- options (reused)
|     +- options (reused)
+- install markdown success
|  +- compile lib markdown debug native success 28s MaxRSS:776M
|     +- WriteFile plugin_root.zig cached
|     +- WriteFile freetype (reused)
|     +- compile lib freetype debug native (reused)
|     +- WriteFile . (reused)
|     +- compile lib tree-sitter debug native (reused)
|     +- compile lib freetype debug native (reused)
|     +- compile lib tree-sitter debug native (reused)
|     +- options (reused)
|     +- translate-c dvui-c (+1 more reused dependencies)
|     +- options (reused)
|     +- options (reused)
|     +- translate-c (reused)
+- install image success
   +- compile lib image debug native success 17s MaxRSS:523M
      +- WriteFile plugin_root.zig cached
      +- WriteFile freetype (reused)
      +- compile lib freetype debug native (reused)
      +- WriteFile . (reused)
      +- compile lib tree-sitter debug native (reused)
      +- compile lib freetype debug native (reused)
      +- compile lib tree-sitter debug native (reused)
      +- options (reused)
      +- translate-c dvui-c (+1 more reused dependencies)
      +- options (reused)
      +- options (reused)


scripts/zb build test --summary all (exit 0)

... (earlier output omitted)
      +- WriteFile freetype cached
      +- compile lib freetype debug native cached 312ms MaxRSS:31M
      +- WriteFile . cached
      +- compile lib tree-sitter debug native cached 230ms MaxRSS:30M
      +- compile lib freetype debug native (reused)
      +- compile lib tree-sitter debug native (reused)
      +- translate-c dvui-c cached
      |  +- compile exe translate-c debug native cached 194ms MaxRSS:31M
      |     +- options cached
      |     +- options cached
      |     +- options cached
      |     +- run exe generate-def (aarch64.zig) cached
      |     |  +- compile exe generate-def debug native cached 350ms MaxRSS:31M
      |     +- run exe generate-def (amdgcn.zig) cached
      |     |  +- compile exe generate-def debug native (reused)
      |     +- run exe generate-def (arm.zig) cached
      |     |  +- compile exe generate-def debug native (reused)
      |     +- run exe generate-def (bpf.zig) cached
      |     |  +- compile exe generate-def debug native (reused)
      |     +- run exe generate-def (common.zig) cached
      |     |  +- compile exe generate-def debug native (reused)
      |     +- run exe generate-def (hexagon.zig) cached
      |     |  +- compile exe generate-def debug native (reused)
      |     +- run exe generate-def (loongarch.zig) cached
      |     |  +- compile exe generate-def debug native (reused)
      |     +- run exe generate-def (mips.zig) cached
      |     |  +- compile exe generate-def debug native (reused)
      |     +- run exe generate-def (neon.zig) cached
      |     |  +- compile exe generate-def debug native (reused)
      |     +- run exe generate-def (nvptx.zig) cached
      |     |  +- compile exe generate-def debug native (reused)
      |     +- run exe generate-def (powerpc.zig) cached
      |     |  +- compile exe generate-def debug native (reused)
      |     +- run exe generate-def (riscv.zig) cached
      |     |  +- compile exe generate-def debug native (reused)
      |     +- run exe generate-def (s390x.zig) cached
      |     |  +- compile exe generate-def debug native (reused)
      |     +- run exe generate-def (ve.zig) cached
      |     |  +- compile exe generate-def debug native (reused)
      |     +- run exe generate-def (wasm.zig) cached
      |     |  +- compile exe generate-def debug native (reused)
      |     +- run exe generate-def (x86_64.zig) cached
      |     |  +- compile exe generate-def debug native (reused)
      |     +- run exe generate-def (x86.zig) cached
      |     |  +- compile exe generate-def debug native (reused)
      |     +- run exe generate-def (xcore.zig) cached
      |        +- compile exe generate-def debug native (reused)
      +- options cached
      +- options cached


scripts/zb build test-integration --summary all (exit 0)

... (earlier output omitted)
|     +- options (reused)
+- run test fizzy-plugin-loader-tests 2 pass (2 total) 236ms MaxRSS:3M
|  +- compile test fizzy-plugin-loader-tests debug native success 9s MaxRSS:321M
|     +- WriteFile freetype (reused)
|     +- compile lib freetype debug native (reused)
|     +- WriteFile . (reused)
|     +- compile lib tree-sitter debug native (reused)
|     +- compile lib freetype debug native (reused)
|     +- compile lib tree-sitter debug native (reused)
|     +- translate-c dvui-c (+1 more reused dependencies)
|     +- options (reused)
|     +- options (reused)
+- run test fizzy-text-plugin-tests 101 pass (101 total) 1s MaxRSS:24M
|  +- compile test fizzy-text-plugin-tests debug native success 8s MaxRSS:604M
|     +- options (reused)
|     +- WriteFile freetype (reused)
|     +- compile lib freetype debug native (reused)
|     +- WriteFile . (reused)
|     +- compile lib tree-sitter debug native (reused)
|     +- compile lib freetype debug native (reused)
|     +- compile lib tree-sitter debug native (reused)
|     +- translate-c dvui-c (+1 more reused dependencies)
|     +- options (reused)
|     +- options (reused)
+- run test fizzy-chat-plugin-tests 2 pass (2 total) 245ms MaxRSS:3M
|  +- compile test fizzy-chat-plugin-tests debug native success 9s MaxRSS:327M
|     +- options (reused)
|     +- WriteFile freetype (reused)
|     +- compile lib freetype debug native (reused)
|     +- WriteFile . (reused)
|     +- compile lib tree-sitter debug native (reused)
|     +- compile lib freetype debug native (reused)
|     +- compile lib tree-sitter debug native (reused)
|     +- translate-c dvui-c (+1 more reused dependencies)
|     +- options (reused)
|     +- options (reused)
+- run test fizzy-workbench-plugin-tests 1 pass (1 total) 197ms MaxRSS:3M
   +- compile test fizzy-workbench-plugin-tests debug native success 9s MaxRSS:262M
      +- options (reused)
      +- options (reused)
      +- WriteFile freetype (reused)
      +- compile lib freetype debug native (reused)
      +- WriteFile . (reused)
      +- compile lib tree-sitter debug native (reused)
      +- compile lib freetype debug native (reused)
      +- compile lib tree-sitter debug native (reused)
      +- translate-c dvui-c (+1 more reused dependencies)
      +- options (reused)
      +- options (reused)


scripts/zb build check-web --summary all (exit 0)

... (earlier output omitted)
|  |     +- run exe generate-def (amdgcn.zig) cached
|  |     |  +- compile exe generate-def debug native (reused)
|  |     +- run exe generate-def (arm.zig) cached
|  |     |  +- compile exe generate-def debug native (reused)
|  |     +- run exe generate-def (bpf.zig) cached
|  |     |  +- compile exe generate-def debug native (reused)
|  |     +- run exe generate-def (common.zig) cached
|  |     |  +- compile exe generate-def debug native (reused)
|  |     +- run exe generate-def (hexagon.zig) cached
|  |     |  +- compile exe generate-def debug native (reused)
|  |     +- run exe generate-def (loongarch.zig) cached
|  |     |  +- compile exe generate-def debug native (reused)
|  |     +- run exe generate-def (mips.zig) cached
|  |     |  +- compile exe generate-def debug native (reused)
|  |     +- run exe generate-def (neon.zig) cached
|  |     |  +- compile exe generate-def debug native (reused)
|  |     +- run exe generate-def (nvptx.zig) cached
|  |     |  +- compile exe generate-def debug native (reused)
|  |     +- run exe generate-def (powerpc.zig) cached
|  |     |  +- compile exe generate-def debug native (reused)
|  |     +- run exe generate-def (riscv.zig) cached
|  |     |  +- compile exe generate-def debug native (reused)
|  |     +- run exe generate-def (s390x.zig) cached
|  |     |  +- compile exe generate-def debug native (reused)
|  |     +- run exe generate-def (ve.zig) cached
|  |     |  +- compile exe generate-def debug native (reused)
|  |     +- run exe generate-def (wasm.zig) cached
|  |     |  +- compile exe generate-def debug native (reused)
|  |     +- run exe generate-def (x86_64.zig) cached
|  |     |  +- compile exe generate-def debug native (reused)
|  |     +- run exe generate-def (x86.zig) cached
|  |     |  +- compile exe generate-def debug native (reused)
|  |     +- run exe generate-def (xcore.zig) cached
|  |        +- compile exe generate-def debug native (reused)
|  +- options cached
|  +- options success
|  +- options cached
|  +- options cached
|  +- options cached
|  +- options cached
|  +- options cached
|  +- options cached
|  +- options cached
|  +- options cached
|  +- translate-c success 72ms MaxRSS:31M
+- compile obj rehome-fixture-web debug wasm32-freestanding success 518ms MaxRSS:172M
   +- translate-c dvui-c (+1 more reused dependencies)
   +- options (reused)
   +- options (reused)


scripts/zb build test-sdk-version --summary all (exit 0)

... (earlier output omitted)
   +- WriteFile . cached
   +- compile lib tree-sitter debug native cached 46ms MaxRSS:30M
   +- compile lib freetype debug native (reused)
   +- compile lib tree-sitter debug native (reused)
   +- options cached
   +- options cached
   +- translate-c dvui-c cached
   |  +- compile exe translate-c debug native cached 44ms MaxRSS:31M
   |     +- options cached
   |     +- options cached
   |     +- options cached
   |     +- run exe generate-def (aarch64.zig) cached
   |     |  +- compile exe generate-def debug native cached 43ms MaxRSS:31M
   |     +- run exe generate-def (amdgcn.zig) cached
   |     |  +- compile exe generate-def debug native (reused)
   |     +- run exe generate-def (arm.zig) cached
   |     |  +- compile exe generate-def debug native (reused)
   |     +- run exe generate-def (bpf.zig) cached
   |     |  +- compile exe generate-def debug native (reused)
   |     +- run exe generate-def (common.zig) cached
   |     |  +- compile exe generate-def debug native (reused)
   |     +- run exe generate-def (hexagon.zig) cached
   |     |  +- compile exe generate-def debug native (reused)
   |     +- run exe generate-def (loongarch.zig) cached
   |     |  +- compile exe generate-def debug native (reused)
   |     +- run exe generate-def (mips.zig) cached
   |     |  +- compile exe generate-def debug native (reused)
   |     +- run exe generate-def (neon.zig) cached
   |     |  +- compile exe generate-def debug native (reused)
   |     +- run exe generate-def (nvptx.zig) cached
   |     |  +- compile exe generate-def debug native (reused)
   |     +- run exe generate-def (powerpc.zig) cached
   |     |  +- compile exe generate-def debug native (reused)
   |     +- run exe generate-def (riscv.zig) cached
   |     |  +- compile exe generate-def debug native (reused)
   |     +- run exe generate-def (s390x.zig) cached
   |     |  +- compile exe generate-def debug native (reused)
   |     +- run exe generate-def (ve.zig) cached
   |     |  +- compile exe generate-def debug native (reused)
   |     +- run exe generate-def (wasm.zig) cached
   |     |  +- compile exe generate-def debug native (reused)
   |     +- run exe generate-def (x86_64.zig) cached
   |     |  +- compile exe generate-def debug native (reused)
   |     +- run exe generate-def (x86.zig) cached
   |     |  +- compile exe generate-def debug native (reused)
   |     +- run exe generate-def (xcore.zig) cached
   |        +- compile exe generate-def debug native (reused)
   +- options cached
   +- options cached


The Windows row's Run tests step, on merge_group only, runs through
scripts/ci-known-failing.sh with .github/known-failing-windows.txt. The
step passes on a failing run only when every failure is a listed
`<binary>: <test name>` pair; anything else (an unlisted test, a compile
error, a runner error, no Build Summary) keeps the command's status. A
listed test that passed is reported in the job summary so the list
shrinks. scripts/test-ci-known-failing.sh checks it on the real output of
run 40559487600 and variants, on Linux and on Windows' own awk.

Agent-Team: macos
Worker: claude
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@fizzy-pm

fizzy-pm Bot commented Oct 27, 2026

Copy link
Copy Markdown

PM note: how this PR will be handled

What it is for: ci: windows-known-failing
Issue #549: ci: Windows merge group ignores the known-failing baseline suites (work#436), nothing else
Done when (from the issue): a PR whose merge-group run on Windows passes with the baseline failures, and a test (or a documented dry run) proving an unlisted failing test still fails the job.

Rules that apply: touches CI or workflows.
Reviews needed: 2, from two different kinds.
Needs the maintainer's explicit yes before merge: yes

Things to watch (checked by rule):

  • the body names its work issue (Part of fizzyedit/work#N)
  • size within 800 lines outside tests and docs (491)
  • a gates section with what was run

What happens next:

  1. Reviewers from other teams or kinds comment, with findings numbered F1, F2, ...
  2. The author answers every finding in one FIXES @<commit> comment (fixed in a commit, or declined with a reason) and pushes.
  3. Reviewers re-review the new commit on their own.
  4. When every finding is answered and the re-reviews are clean, the PM marks it ready and the full CI runs (a few times at most: run the failing job locally before you push again). Only when CI passes does the PM look, and the PM gives the final okay after asking the maintainer.

A living status comment below is kept current. Nothing here is a merge decision.

@fizzy-pm

fizzy-pm Bot commented Oct 27, 2026 •

Copy link
Copy Markdown

Where this PR stands

Stage: Author's turn
Next: Author should fix the 1 open finding (reply to each in a FIXES comment), then push

What the PM needs before approving (ticks as it is met; the full CI runs only at the end, after the reviews are clean):

  • The body names its basis (Part of fizzyedit/work#N or a plan step)
  • Within the size limit: 491 of 800 lines outside tests and docs
  • The body shows which gates the author ran
  • No open findings at this commit (1 open)
  • Every earlier finding was answered in a FIXES comment
  • Clean reviews at this commit from 2 different kinds: linux/claude (has 1)
  • Marked ready, which starts the full CI (the PM does this the moment the items above are met)
  • The full CI passes at this commit (CI is green)
  • The maintainer's explicit yes (ci)
  • The PM's final okay (pm-approval)

Rules that apply: touches CI or workflows.

Reviews at the current commit (e1ed21d):

Reviewer Verdict Findings
linux/agy changes 1
linux/claude clean 3
linux/codex inconclusive none

Updated 2026-10-28 00:09 UTC by the PM. This comment is edited in place.

@fizzy-linux fizzy-linux Bot added reviewing:linux-codex a linux/codex review is running reviewing:linux-agy a linux/agy review is running reviewing:linux-claude a linux/claude review is running and removed reviewing:linux-claude a linux/claude review is running reviewing:linux-agy a linux/agy review is running reviewing:linux-codex a linux/codex review is running labels Oct 27, 2026
@fizzy-pm
fizzy-pm Bot marked this pull request as ready for review October 27, 2026 23:07
@fizzy-pm fizzy-pm Bot added pm:approve PM approval, CI, merge queue and removed pm:approve PM approval, CI, merge queue labels Oct 27, 2026
@fizzy-pm
fizzy-pm Bot added this pull request to the merge queue Oct 28, 2026
@fizzy-windows fizzy-windows Bot added the reviewing:windows-codex a windows/codex review is running label Oct 28, 2026
Merged via the queue into main with commit 2b4756a Oct 28, 2026
32 checks passed
@fizzy-pm
fizzy-pm Bot deleted the ci/windows-known-failing branch October 28, 2026 00:25
@fizzy-macos fizzy-macos Bot mentioned this pull request Oct 28, 2026
@fizzy-windows fizzy-windows Bot removed the reviewing:windows-codex a windows/codex review is running label Oct 28, 2026
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.

0 participants