diff --git a/.workbuddy/memory/MEMORY.md b/.workbuddy/memory/MEMORY.md index 7478b76..8a73d83 100644 --- a/.workbuddy/memory/MEMORY.md +++ b/.workbuddy/memory/MEMORY.md @@ -104,10 +104,19 @@ TUI 是纯客户端,同时开放 HTTP + SSE 接口给 AI/脚本调用(服务 - Windows 上**文件句柄还开着就 `os.remove()` 会失败**(PermissionError / WinError 32); 若被 `except OSError` 吞掉就是静默不生效(`clear_pid_file` 曾因此永远删不掉 pid 文件)。 一律"先读完 → 关掉句柄 → 再删"。 -- Bash 的 coreutils 残缺(`ls`/`head`/`tail`/`grep` 缺失),**不要用管道**,会整条命令失败; +- Bash 的 coreutils 残缺(`ls`/`head`/`tail`/`grep`/**`cat`** 缺失),**不要用管道**,会整条命令失败; 查看/删除文件一律写 Python 脚本。跑测试也一样:`cd /d/SimpleFarm && uv run python -m unittest ... 2>&1` 必须**整条无管道**(`| tail -40` 会让命令直接 127 退出,看起来像"没输出")。 PowerShell 跑原生命令的 `*>` 重定向会写成 UTF-16 + 中文乱码,**别用它读输出**。 +- **写多行 git commit message 不要用 `git commit -m "$(cat <<'EOF' ... EOF)"`**:本机没有 `cat`, + 会报 `cat: command not found` 然后 git 以为消息为空直接 `Aborting commit due to empty commit message` + (此时 `git add -A` 已经成功,暂存区是好的)。正确做法:把消息写进一个文件 + (用 Write 工具,再 `read_bytes().replace(b"\r\n", b"\n")` 归一化成 LF,避免 CRLF 混进消息), + 然后 `git commit -F <文件>`,最后删掉它。**注意顺序**:先 `git add -A` 再建消息文件, + 这样消息文件不会进暂存区(而且见下条,它本来也会被忽略)。 +- `.gitignore` 里有 **`/_*`**(根目录下划线开头的文件全部忽略):好处是临时补丁脚本 + (`_splice_app.py`、`_commit_msg.txt` 之类)默认就不会污染 `git status`,跑完删不删都不碍事; + 代价是**放在根目录、以 `_` 开头的正经文件也会被静默忽略**,要提交就换名字或放子目录。 - 环境设了 `HTTP_PROXY` 但没有 `no_proxy`:任何本机 HTTP 访问都要走 `farm/net.py` 的 `open_url()`(回环直连),否则会拿到 502 并误判为"服务器没起来"。 - Windows 下守护进程的 pid 必须由**服务进程自己**写(见 `farm/server/__main__.py`),