From bfa579515c2a2e12ebe30278d258d51ffbe84249 Mon Sep 17 00:00:00 2001 From: Garry Tan Date: Mon, 27 Apr 2026 23:53:18 -0700 Subject: [PATCH] fix(windows-ci): enforce LF + build server-node.mjs in CI MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Second round of windows-free-tests fixes after the first push. Curated subset went from 386/34 to 58/4 fails. Remaining 4 fails + 1 error trace to two root causes: 1. Line-ending sensitivity. Windows checkout with core.autocrlf=true converts .md/.tmpl files to CRLF. Tests that parse YAML frontmatter with `/^---\n([\\s\\S]+?)\n---/` then return zero matches — skill-collision- sentinel.test.ts:120 enumerated 0 skills on Windows, cascading into 3 downstream test failures (sanity, KNOWN_COLLISIONS, /checkpoint resolved). Fix: add .gitattributes that pins LF for .md/.tmpl/.yml/.json/.toml/.sh/ .ts/.tsx/.js/.mjs/.cjs/.bash. Root-cause fix; prevents future similar tests from hitting the same trap. Also keeps bash scripts LF on Linux runners (CRLF in shebangs produces "bad interpreter" errors). 2. Module-level Windows assertion in browse/src/cli.ts:82 throws if browse/dist/server-node.mjs is missing. Any test that transitively loads cli.ts (e.g., browse/test/tab-isolation.test.ts via shard mate imports) then fails to even start. server-node.mjs is generated by bash browse/scripts/build-node-server.sh, which `bun run build` calls but `bun install` does not. Fix: add a "Build server-node.mjs" step to .github/workflows/ windows-free-tests.yml. Calls only the node-server build script, not full `bun run build` — we don't need the compiled binaries for tests and the full build is slow. Expected: skill-collision-sentinel goes 0→3 pass (sanity, KNOWN_COLLISIONS, /checkpoint resolved). tab-isolation's "unhandled error between tests" disappears. Remaining tests should be green. Co-Authored-By: Claude Opus 4.7 (1M context) --- .gitattributes | 30 ++++++++++++++++++++++++ .github/workflows/windows-free-tests.yml | 10 ++++++++ 2 files changed, 40 insertions(+) create mode 100644 .gitattributes diff --git a/.gitattributes b/.gitattributes new file mode 100644 index 00000000..b7b48b19 --- /dev/null +++ b/.gitattributes @@ -0,0 +1,30 @@ +# Force LF on text files we parse with `\n`-anchored regexes (frontmatter, +# YAML, markdown structure tests). Without this, Windows checkouts with +# core.autocrlf=true convert these to CRLF and break tests that match +# /^---\n...\n---/ against SKILL.md.tmpl frontmatter, etc. +*.md text eol=lf +*.tmpl text eol=lf +*.yml text eol=lf +*.yaml text eol=lf +*.json text eol=lf +*.toml text eol=lf + +# Bash scripts must always use LF — CRLF in bash scripts produces bizarre +# "Bad interpreter" / "command not found" errors on Linux runners. +*.sh text eol=lf +*.bash text eol=lf + +# TypeScript/JavaScript: LF for portability across the bun toolchain. +*.ts text eol=lf +*.tsx text eol=lf +*.js text eol=lf +*.mjs text eol=lf +*.cjs text eol=lf + +# Binary files — never touch. +*.png binary +*.jpg binary +*.jpeg binary +*.gif binary +*.ico binary +*.pdf binary diff --git a/.github/workflows/windows-free-tests.yml b/.github/workflows/windows-free-tests.yml index bc43976b..0c7e69e2 100644 --- a/.github/workflows/windows-free-tests.yml +++ b/.github/workflows/windows-free-tests.yml @@ -47,6 +47,16 @@ jobs: - name: Install dependencies run: bun install --frozen-lockfile + - name: Build server-node.mjs (required by Windows browse path) + # browse/src/cli.ts module-level throws on Windows if server-node.mjs + # is missing — Bun can't drive Playwright's Chromium on Windows + # (oven-sh/bun#4253). The bundle must exist for any test that + # transitively loads cli.ts to even import. We build only the + # Node-compatible server bundle here; full `bun run build` would + # also compile every binary which is slow and unnecessary for tests. + run: bash browse/scripts/build-node-server.sh + shell: bash + - name: Show curated subset (for build log audit trail) run: bun run scripts/test-free-shards.ts --windows-only --list shell: bash