# 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

# Extensionless executables (top-level setup script + bin/gstack-* helpers).
# These are bash scripts checked into git without a `.sh` suffix. Without
# explicit eol=lf, Windows checkout with core.autocrlf=true converts them
# to CRLF and breaks both `\n`-anchored regex tests (test/setup-codesign.test.ts)
# and shebang resolution if the script is ever executed on Linux.
setup        text eol=lf
bin/*        text eol=lf
**/scripts/* 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

# The committed diagram-render bundle is hash-pinned (BUILD_INFO sha256);
# a CRLF rewrite on Windows checkout would break the drift test and change
# the content-addressed staged filename.
lib/diagram-render/dist/*.html text eol=lf
lib/diagram-render/dist/*.json text eol=lf
