error-handling-keeperlisted
Install: claude install-skill fongzhizhi/claude-skill-lab
# error-handling-keeper
修复存量代码的错误处理,使其符合 TS 错误处理规范。核心原则:**错误是值,不是事故**——预期错误显式处理,非预期错误记录并上报。本技能是 keeper 家族中最保守的一个:**错误处理改动大多是控制流改动,不擅自改变程序行为**。
## 参考规范(开始前必须加载)
按顺序读取以下两份文档,作为本次调整的唯一依据:
1. `~/.claude/rules/ts-error-handling.md` —— 强制规则(精简版)
2. `~/.claude/docs/ts-error-handling-guide.md` —— 错误处理详细指南(错误分层与分类、传播与包装、日志规范、审查清单)
若第二份缺失,提示用户先运行 `lab deploy docs/ts-code-guide`,不跳过规范直接动手。
## 确定改动范围
### 模式一:默认(git diff 变更文件)
```bash
git diff --name-only HEAD # 已暂存 + 未暂存的修改
git status --porcelain # 检出 untracked 新增文件
```
合并结果,过滤出 `.ts` / `.tsx` / `.d.ts` 文件(含 `.test.ts` / `.spec.ts`),排除 `node_modules/`、构建产物目录。无 TS 文件时告知用户并结束。
### 模式二:手动指定
| 参数 | 处理方式 |
| --- | --- |
| 文件路径 | 只处理该文件 |
| 目录路径 | 递归处理目录下所有 `.ts` / `.tsx` / `.d.ts`(排除 `node_modules/`、构建产物) |
## 逐文件修复流程
对每个文件对照规则逐项扫描,**按"是否改变程序行为"分两轨处理**:
### 语义等价改动(不改变行为,直接做)
1. **`catch {}` / `catch (error)` 无类型** → `catch (error: unknown)`(TypeScript 4.0+ 默认即为 unknown,显式写出并配套收窄)
2. **静默吞错补日志**:空 catch 补 `console.error` 或项目日志体系的错误记录,包含操作、输入、原始错误信息——只增加记录,不改变抛出/继续执行的行为
3. **`throw` 裸字符串/对象/数字 → `Error` 实例或自定义错误类**(规则第 3 条):
- 替换前**核对调用方**:是否有 `catch` 依赖 `err.message` 判断错误来源(裸字符串 throw 的 message 与 `new Error(msg).message` 一致,一般安全);依赖错误类型的(`typeof err === 'string'` 判断)→ 一并更新或列清单
4. **错误链丢失 → 保留 `cause`**:包装异常时补 `cause: originalError` / 原始错误引用(规则第 6 条)
5. **`console.log` 代替错误日志 → `console.error`**(无项目日志体系时;有则接入项目日志函数)
### 控制流改动(改变程序行为,只列清单不动手)
6. **未处理的异步错误 → 补 `try/catch` 或 `.catch()`**(规则第 1 条):新增 catch 会改变失败路径行为(从"静默