## 1. 基础设施 - [x] 1.1 创建 embedfs/assets/.gitkeep 和 embedfs/frontend-dist/.gitkeep,解决 embedfs 编译阻塞 - [x] 1.2 创建 backend/.golangci.yml 配置文件,启用 13 个 linter 并配置所有规则(forbidigo、errorlint、errcheck、staticcheck、revive、gocritic、gosec、bodyclose、noctx、nilerr、gofumpt、goimports、gocyclo) - [x] 1.3 配置 .golangci.yml 中测试代码差异化规则(exclude-rules for *_test.go and tests/) - [x] 1.4 配置 .golangci.yml 排除生成代码(exclude-dirs: tests/mocks, exclude-generated: true) - [ ] 1.5 运行 make backend-lint 验证配置可正常执行(无 embedfs 报错) - [x] 1.6 创建 lefthook.yml 配置文件,配置 pre-commit hook 仅检查 staged Go 文件 - [ ] 1.7 运行 lefthook install 安装 git hooks 并验证 hook 生效 ## 2. 存量代码修复 — 错误比较 - [x] 2.1 修复 internal/handler/model_handler.go 中 4 处 err == sentinel → errors.Is() - [x] 2.2 修复 internal/handler/provider_handler.go 中 4 处 err == sentinel → errors.Is() - [x] 2.3 修复 internal/provider/client.go:223 err == io.EOF → errors.Is(err, io.EOF) ## 3. 存量代码修复 — 忽略错误返回值 - [x] 3.1 修复 internal/conversion/openai/adapter.go 中 3 处 _ = json.Marshal → 正确处理错误 - [x] 3.2 修复 internal/conversion/anthropic/adapter.go 中 2 处 _ = json.Marshal → 正确处理错误 - [x] 3.3 修复 internal/conversion/anthropic/decoder.go 中 1 处 _ = json.Marshal → 正确处理错误 - [x] 3.4 修复 internal/conversion/engine.go:394 _ = json.Marshal → 正确处理错误(fallback 场景) - [x] 3.5 修复 internal/provider/client.go:144 _ = io.ReadAll → 正确处理错误 - [x] 3.6 为 internal/handler/proxy_handler.go 中 2 处 _ = statsService.Record 添加 //nolint:errcheck 注释(goroutine fire-and-forget 模式) ## 4. 存量代码修复 — 日志字段 - [x] 4.1 修复 internal/handler/proxy_handler.go 中 zap.String("error", err.Error()) → zap.Error(err)(约 6 处) - [x] 4.2 修复 internal/provider/client.go:187 zap.String("error", err.Error()) → zap.Error(err) - [x] 4.3 修复 internal/conversion/engine.go 中 zap.String("error", err.Error()) → zap.Error(err)(约 6 处) ## 5. 存量代码修复 — 桌面端日志 - [x] 5.1 修复 cmd/desktop/dialog_linux.go 中 2 处 fmt.Fprintf(os.Stderr, ...) → 改用 zap logger ## 6. 验证与文档 - [ ] 6.1 运行 make backend-lint 确认所有 linter 通过 - [ ] 6.2 运行 make backend-test 确认所有测试通过 - [x] 6.3 更新 backend/README.md 编码规范部分:补充 zap.Error(err) 优先于 zap.String("error", err.Error()) 的规范 - [x] 6.4 更新 backend/README.md 编码规范部分:补充强制使用 errors.Is/As 而非 == 比较的说明 - [x] 6.5 更新 README.md 添加 lefthook 安装说明(首次克隆项目后需执行 lefthook install)