# Shell scripts must stay LF so they run under bash on any platform — a Windows checkout must not
# flip them to CRLF (which would break the script under WSL with `$'\r': command not found`).
*.sh text eol=lf
claude-starter/hooks/pre-commit text eol=lf
claude-starter/hooks/commit-msg text eol=lf
# The plugin edition ships the same two hooks under a different root, and being extensionless they are not
# covered by *.sh either. They were left out when that edition was added: measured on a Windows checkout, both
# claude-starter copies came out LF and both plugin copies came out CRLF. Git Bash happens to tolerate that
# (verified: the trace scan still blocks), but WSL does not — which is the exact failure the note above is
# about — and a gate that dies with `$'\r': command not found` is a gate that is not running.
plugin/hooks/pre-commit text eol=lf
plugin/hooks/commit-msg text eol=lf
# Config the installers parse line-by-line: a CRLF checkout would leave '\r' on every parsed value, so a
# profile lookup would silently miss and the install would fall back to "prune nothing". The scripts also
# strip '\r' defensively, but keeping these LF means the parsers never see one.
claude-starter/profiles.conf text eol=lf
*.conf text eol=lf
# Blocklists/allowlists and other data files the hooks read line-by-line as patterns: a CRLF checkout leaves a '\r'
# on every pattern, which then never matches the LF diff — silently blinding the trace/secret gate on Windows. The
# pre-commit also strips a trailing '\r' defensively, but keeping these LF means it never sees one.
*.txt text eol=lf
# VERSION is read by the shell — `head -1` in start.sh:345, adopt.sh:203 and adopt.sh:633, and `read -r`
# in session-update-check.sh. Measured on a Windows checkout: the file comes out `2.9.0\r\n`, and both of
# those forms keep the CR (doctor.sh strips it with `tr -cd`, the others do not). Today the only visible
# damage is cosmetic — adopt.sh:216 prints it mid-line, so the carriage return overwrites the start of the
# status row — but a CR-bearing value also compares unequal to a clean one, so the first version comparison
# anyone writes would be silently wrong. And `head` itself is not consistent about it: it kept the CR here
# and dropped it under MSYS, which is the shape of a defect that only appears on someone else's machine.
VERSION text eol=lf
# Markdown carries no shell parsing, so this is not about correctness — it is about the release tarball
# being the same bytes wherever it is built. Measured: a Windows-built archive of v2.9.0 came to 509.004
# bytes against the published 507.410, and the 1.594-byte difference was CRLF in unpinned files, of which
# claude-starter/CLAUDE.md alone carried 198. The tarball's SHA is what the Homebrew formula pins, and a
# SHA that depends on the build machine is the class of defect that took a release down once already.
*.md text eol=lf
LICENSE text eol=lf
