# A shebang plus CRLF makes vite's SSR transform emit a literal `#!` mid-module, # so any suite importing the script dies at load with a SyntaxError. Pin the whole # directory rather than the scripts that happen to have a test today. /config/scripts/**/*.mjs text eol=lf /skill-guides/*.md text eol=lf /skill-stubs/*.md text eol=lf /skill-stubs/_shared/*.md text eol=lf /skills/*/SKILL.md text eol=lf /src/cli/bundled-skill-guides.ts text eol=lf # Bundled plugin trees are byte-hashed; CRLF checkout would break the pinned hash. /resources/plugins/** text eol=lf # Relay assets are copied verbatim into the bundle and hashed byte-for-byte into # .version, which names the immutable remote install dir. A CRLF checkout makes a # Windows-built client disagree with a mac/Linux-built one on the same release, # so one host ends up with two relay trees (#17886 review). /config/relay-assets/** text eol=lf # Pin the bytes so a patch reads and diffs identically on every host. It is NOT # what makes the hash right: pnpm hashes a patch LF-normalized, so a CRLF checkout # cannot change it. Believing otherwise put a hand-computed raw digest in the # lockfile twice and broke every install (#17886). # These files are stored LF, which is not always the encoding they were written # against -- @vscode/windows-process-tree ships CRLF sources -- so any code that # runs `git apply` on one must force `-c core.autocrlf=input` rather than trust # the host's setting. See config/scripts/windows-process-tree-gyp-rebuild.mjs. /config/patches/*.patch -text # Same reason, and pnpm parses these too: a CRLF checkout makes the mobile # patches unparseable, so Windows packaging dies on ERR_PNPM_INVALID_PATCH. /mobile/patches/*.patch -text # The xterm bundle hunks also make a diff nobody can read; review the hand-written # source patch under xterm-src/ instead. The sibling patches stay diffable. /config/patches/@xterm__xterm@*.patch -diff /config/patches/xterm-src/*.patch text eol=lf # pnpm parses these unified diffs during Windows installs; keep checkout bytes stable. /mobile/patches/*.patch -text # Generated wrapper fixtures: collapse them in the PR diff so they stop drowning # the reviewable change, and pin LF because they are compared byte-for-byte. # Not -diff: the shell diff is the review surface when a wrapper does change. /src/main/__fixtures__/shell-wrapper-snapshots/*.txt linguist-generated=true text eol=lf # Captured agent PTY transcripts. -text, not `text eol=lf` like the wrapper snapshots above: # these carry real CR and CRLF bytes as the terminal emitted them, and line-ending # normalisation on a Windows checkout would rewrite the evidence the fixture exists to be. /src/main/runtime/__fixtures__/*.txt -text # Generated runtime English subset: compared byte-for-byte by # verify:localization-runtime-catalog, so a CRLF checkout would fail the gate. /src/renderer/src/i18n/en-runtime-required.json linguist-generated=true text eol=lf # Generated method->params catalog: compared byte-for-byte by # verify:rpc-params-catalog, so a CRLF checkout would fail the gate. /src/shared/rpc-contract/rpc-params-catalog.generated.ts linguist-generated=true text eol=lf # Mobile web bundle source. Every text byte here is hashed into an asset digest and # from there into buildId, so a CRLF checkout produces a different bundle id for the # same commit (91af2897 vs 9d78435e). The PNG is -text because it must not be touched. /src/mobile-web/index.html text eol=lf /src/mobile-web/src/*.ts text eol=lf /src/mobile-web/src/*.css text eol=lf /src/mobile-web/src/*.png -text # Mobile web page source. Same buildId hazard as src/mobile-web above: these bytes are # hashed into the Phase C bundle, so a CRLF Windows checkout would ship a different # buildId for identical source. web-entry/ does not exist yet; the pin lands ahead of it. /mobile/src/** text eol=lf /mobile/app/** text eol=lf /mobile/web-entry/** text eol=lf # The blanket pin above would mark a future binary as text; exempt the asset types an # RN page actually carries, the same way src/mobile-web exempts its PNG. /mobile/src/**/*.png -text /mobile/src/**/*.jpg -text /mobile/src/**/*.jpeg -text /mobile/src/**/*.gif -text /mobile/src/**/*.ico -text /mobile/src/**/*.webp -text /mobile/src/**/*.ttf -text /mobile/src/**/*.otf -text /mobile/src/**/*.woff -text /mobile/src/**/*.woff2 -text /mobile/app/**/*.png -text /mobile/app/**/*.jpg -text /mobile/app/**/*.jpeg -text /mobile/app/**/*.gif -text /mobile/app/**/*.ico -text /mobile/app/**/*.webp -text /mobile/app/**/*.ttf -text /mobile/app/**/*.otf -text /mobile/app/**/*.woff -text /mobile/app/**/*.woff2 -text /mobile/web-entry/**/*.png -text /mobile/web-entry/**/*.jpg -text /mobile/web-entry/**/*.jpeg -text /mobile/web-entry/**/*.gif -text /mobile/web-entry/**/*.ico -text /mobile/web-entry/**/*.webp -text /mobile/web-entry/**/*.ttf -text /mobile/web-entry/**/*.otf -text /mobile/web-entry/**/*.woff -text /mobile/web-entry/**/*.woff2 -text