Skip to content

fix(desktop): make lint and unit-test gates work on Windows#2943

Open
TheSeydiCharyyev wants to merge 1 commit into
block:mainfrom
TheSeydiCharyyev:fix/windows-desktop-checks
Open

fix(desktop): make lint and unit-test gates work on Windows#2943
TheSeydiCharyyev wants to merge 1 commit into
block:mainfrom
TheSeydiCharyyev:fix/windows-desktop-checks

Conversation

@TheSeydiCharyyev

Copy link
Copy Markdown

Summary

On a Windows checkout the desktop quality gate does not work. This fixes four defects in it. Two checks report success without examining anything, one fails on every file, and one reports violations that its own allowlist already covers.

1. pnpm test finds no tests and still exits 0. The test script quotes the glob with single quotes. On Windows pnpm runs scripts through cmd.exe, which does not strip single quotes, so node receives them as part of the pattern and matches nothing. The run prints # tests 0 and exits 0 — a silent green. Double quotes are stripped by cmd.exe and by POSIX shells alike, so Linux CI behaviour is unchanged.

2. Every text file is checked out as CRLF. There is no .gitattributes, and core.autocrlf=true is the Git for Windows default. Biome formats with LF, so biome check . fails on 1632 of 1633 files. desktop/src/features/messages/ui/virtuaWheelModePatch.test.mjs fails too, because it matches patches/*.patch with \n-joined patterns. The stored blobs are already LF, so eol=lf adds no renormalisation churn — git status stays clean after the change.

3. check:px-text never finds its own allowlist. scripts/check-px-text-core.mjs builds the key from path.relative, which returns \ separators on Windows, while the allowlist in desktop/scripts/check-px-text.mjs is written with /. Nothing matches, so the check reports 5 false violations on a clean tree.

4. check:file-sizes examines nothing at all. findRule compares against `${rule.root}${path.sep}`. The roots are multi-segment (src/app, src/features, src-tauri/src), so on Windows src/app\ never matches src\app\.... No rule matches any file: the check walks 0 of 1097 files and exits 0.

scripts/check-pubkey-truncation-core.mjs already normalises paths this way (relativePath.split(path.sep).join("/")). This applies the same idiom to the other two.

Related issue

None found — no open issue covers this. The closest open PR is #2758, which fixes a fifth Windows defect in desktop/test-loader-hooks.mjs; it is required before the desktop unit tests can pass here, and it does not overlap with these files. I checked the changed-file list of every open PR: none touch .gitattributes, desktop/package.json, scripts/check-px-text-core.mjs or scripts/check-file-sizes-core.mjs.

Testing

Windows 11 (10.0.26200), node 22.17.1, pnpm 11.4.0, clean checkout with the default core.autocrlf=true.

Command Before After
pnpm test # tests 0, exit 0 374 test files discovered, exit 1
biome check . 1632 of 1633 files fail 1633 checked, 0 errors
pnpm check:px-text 5 false violations passes
pnpm check:file-sizes 0 of 1097 files examined, exit 0 1097 examined

check:file-sizes now reports src-tauri/src/managed_agents/runtime.rs: 2220 lines (limit 2216). That violation is pre-existing and not introduced here — main currently fails on the same line in CI (Desktop Core, run 30185213010, commit c2a4ee7). Before this change Windows reported success while CI was red; now the Windows result agrees with CI.

Desktop unit tests still fail on Windows until #2758 lands. With #2758 applied on top of this branch the full suite passes: 3515 tests, 0 failures. This change stops hiding those failures rather than fixing them.

The desktop quality gate does not work on a Windows checkout: two checks
pass without examining anything, one fails on every file, and one reports
violations its own allowlist already covers.

pnpm test quoted the test glob with single quotes. On Windows pnpm runs
scripts through cmd.exe, which does not strip them, so node received the
quotes literally and matched no files - reporting 0 tests with exit code 0,
a silent green. Double quotes are stripped by cmd.exe and POSIX shells
alike, so CI behaviour on Linux is unchanged.

With no .gitattributes, core.autocrlf=true (the Git for Windows default)
checks every text file out as CRLF. Biome formats with LF, so biome check
failed on 1632 of 1633 files, and virtuaWheelModePatch.test.mjs, which
matches patches/*.patch with newline-joined patterns, failed with it. The
stored blobs are already LF, so pinning eol=lf causes no renormalisation
churn.

check-px-text-core and check-file-sizes-core compare path.relative output
against roots and allowlist keys authored with forward slashes. On Windows
the separator is a backslash, so the px-text allowlist never matched
(5 false violations) and findRule matched no rule at all: check:file-sizes
examined 0 of 1097 files and still exited 0. check-pubkey-truncation-core
already normalises the same way; this applies it to the other two.

After the change the Windows run agrees with CI - check:file-sizes reports
the same runtime.rs violation main is currently failing on. Desktop unit
tests still fail on Windows until block#2758 lands; this stops hiding those
failures rather than fixing them.

Signed-off-by: Seydi Charyyev <seydi.charyev@gmail.com>
@TheSeydiCharyyev
TheSeydiCharyyev requested a review from a team as a code owner July 26, 2026 04:42
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