目标
构建一个把任务存进 JSON 文件的待办 CLI,支持 add/list/done/remove/search 及按状态与标签过滤,并在并发或失败写入下绝不损坏存储文件。
要点
三层严格分层:CLI 层只翻译 argv 与输出;service 层是纯函数、不碰磁盘;storage 层独占文件访问并经单一写队列串行化,用临时文件加重命名实现原子写。done 返回 updated/alreadyDone/missing 三组结果,重复与未知 id 都是一等结果。
提示
直接对目标文件 writeFile 存在半写窗口;跨进程安全被明确列为已知局限而非半吊子方案。
验证
npx vitest 三层测试全绿:纯逻辑测试覆盖过滤交叉积,存储测试模拟崩溃后文件仍可解析,CLI 测试以子进程驱动真实二进制断言退出码与 stdout。 项目目录骨架:
todo-cli/
├── bin/todo.js
├── src/
│ ├── commands.js
│ ├── service.js
│ └── storage.js
├── test/
│ ├── service.test.js
│ └── storage.test.js
├── package.json
└── README.md
实施阶段:Storage foundation → Task service → CLI wiring → Tests and hardening。