Files
gstack/.gitattributes
T
Garry Tan bfa579515c fix(windows-ci): enforce LF + build server-node.mjs in CI
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) <noreply@anthropic.com>
2026-04-27 23:53:18 -07:00

31 lines
969 B
Plaintext

# 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