# Force LF on shell scripts and Docker-related files so Windows checkouts # don't ship CRLF into Linux containers (the container would fail to exec # a `#!/bin/sh\r` shebang). *.sh text eol=lf Dockerfile text eol=lf docker-entrypoint.sh text eol=lf docker/Caddyfile text eol=lf docker/crontab.* text eol=lf # Generated taxonomy registry is compared byte-for-byte by `npm run # taxonomy:check` (CI); keep LF on Windows checkouts so the local check # matches what the generator writes. lib/bokslut/ixbrl/taxonomy/generated/*.json text eol=lf linguist-generated=true # The extension registry is rewritten with LF by `setup:extensions` on every # dev/build, and Vitest rewrites snapshots with LF. With core.autocrlf=true # git would expect CRLF and flag these as phantom modifications; pin LF so # the working tree matches what the generators write. lib/extensions/_generated/** text eol=lf linguist-generated=true *.snap text eol=lf linguist-generated=true # DECISIONS.md is an append-only log that every concurrent PR writes to, so # two PRs touching it always conflict at EOF. That is worse than it sounds: # GitHub runs ZERO Actions on a conflicting PR, so `gh pr checks` returns a # short all-pass list that looks green while nothing actually ran. A union # merge keeps both sides' lines (the file has no ordering contract beyond # the date prefix), which is exactly the right semantics for an append log. DECISIONS.md merge=union