新增 .gitattributes 把文本文件钉死为 LF:否则 git 在 Windows 的 autocrlf 会把仓库的 LF 转成工作区 CRLF,与 ruff format 的 line-ending=auto 互相打架, 每次格式化都在改行尾。
在引入 uv 依赖管理、ruff 静态检查与格式化、pyright 类型检查之前, 先把当前可正常运行的状态固定下来,作为后续大规模自动改动的回滚点。 此时状态:97 项测试全绿,HTTP + WebSocket 多牧场服务器可用。