You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
BLOCKED — do not implement yet. Adding windows-latest today turns CI red on every push (#1803: the failing set moves 7–9 run to run at the same commit). A matrix everyone ignores is worse than no matrix, because it manufactures the coverage illusion this work exists to remove. Sequence: resolve #1803 → triage the failing set → fix or explicitly quarantine each → then add the row and keep it green from day one.
The ask
.github/workflows/squad-ci.yml runs ubuntu-latest only. The single Windows matrix in the repo is squad-agents-ai-ci.yml, a .NET job that does not run the TypeScript suite. So no Windows signal exists for the main test suite.
Why this is worth doing — five instances from one night
This is filed as a list rather than a principle because the list is the argument. Each of these is a defect CI structurally could not see, and — the part that matters — each was found inside the remedy for the previous one.
#
Defect
Where it hid
1
#1770 — repo-health reporters crashed on any finding message containing a backtick
The gate that catches unsafe git operations crashed precisely when it found one. A crashed reporter is indistinguishable from a clean run.
2
#1786 — the test fixture for the backtick fix triggered the backtick bug in CI
The fixture quoted a denylisted git command; the scanner wrapped it in backticks; the base-branch reporter died with the exact production error.
3
#1788 — a CRLF shebang made check-changeset-drift.test.ts load 0 of 8 tests
Dead since #1481 (2026-07-19). Green on Linux the whole time. Then check-shebang-eol.mjs — the lint written to catch this — reproduced the bug on its first run, because it was authored with CRLF.
4
#1804 — *.js text eol=lf, added in #1790, created CRLF-blob churn in 2 files
The gate shipped in the same PR reported passed: all 45 shebanged files are pinned to LF, exit 0, while app.js and rss.xml.js churned. The rule and its blind spot landed together.
5
#1805 — widening that gate from 45 → ~1800 files blew Windows' 32767-char command-line limit
A Windows-only crash of the gate itself, introduced inside the fix for a Windows-only defect. Invisible on Linux, where the same argv is fine.
Every one was found by a human working on a Windows box. Not one was caught by CI, and #3 in particular sat green for a month.
The specific shape CI misses
EOL defects come in two mirror-image forms with an identical git status symptom, opposite causes, and opposite remedies — and the wrong remedy is silent in both directions:
The ask
.github/workflows/squad-ci.ymlrunsubuntu-latestonly. The single Windows matrix in the repo issquad-agents-ai-ci.yml, a .NET job that does not run the TypeScript suite. So no Windows signal exists for the main test suite.Why this is worth doing — five instances from one night
This is filed as a list rather than a principle because the list is the argument. Each of these is a defect CI structurally could not see, and — the part that matters — each was found inside the remedy for the previous one.
check-changeset-drift.test.tsload 0 of 8 testscheck-shebang-eol.mjs— the lint written to catch this — reproduced the bug on its first run, because it was authored with CRLF.*.js text eol=lf, added in #1790, created CRLF-blob churn in 2 filespassed: all 45 shebanged files are pinned to LF, exit 0, whileapp.jsandrss.xml.jschurned. The rule and its blind spot landed together.Every one was found by a human working on a Windows box. Not one was caught by CI, and #3 in particular sat green for a month.
The specific shape CI misses
EOL defects come in two mirror-image forms with an identical
git statussymptom, opposite causes, and opposite remedies — and the wrong remedy is silent in both directions:.mjs(#1788)git add --renormalize.snap(#1790)--renormalize: stages nothing, appears to succeedThat second row is the dangerous one: the obvious repair returns success while changing nothing. Linux never reaches either state.
Scope when unblocked
windows-latestto thetestjob matrix insquad-ci.yml.check-changeset-drift.test.tssat in that bucket and was nothing of the kind — it was a dead gate (check-changeset-drift.test.ts silently runs zero tests on Windows (shebang + CRLF) #1788). Assume the rest are similarly unexamined until each is individually re-derived.Blocked by #1803. Related: #1770, #1786, #1788, #1793, #1804, #1805.