mark-tasks-donelisted
Install: claude install-skill snowzhaozhj/claude-devtools-rs
# mark-tasks-done
模型不能自主调用——勾选是有副作用的修改动作,且与 opsx-apply-cadence 的"每勾一项 = TaskUpdate 一项"节拍冲突,必须用户**显式点名 change** 才进。
**典型使用场景**(用户明确这么说时才用):
- "把 port-foo 的任务勾上" / "把 port-foo 的任务批量勾上"——显式指定 change
- "一次性勾完 port-foo" / "/mark-tasks-done port-foo"
- 早期完成但忘记勾的 change,临 archive 前发现 tasks.md 还是空 checkbox
- 多人协作时别人完成了某节但没勾,自己补勾
**不适用场景**(用 TaskUpdate / 逐项 Edit 代替):
- `/opsx:apply` 推进中正常勾——按节拍走,模型禁止在 apply 中调本 skill
- 用户没点名具体 change(只说"勾一下任务")——单项勾用 Edit 即可,多 change 不确定的让用户先明确
## 输入
1. **change name**(必需):openspec 变更名,形如 `port-tool-execution-linking`
2. **sections**(可选):section 区间,默认 `1-<最大活动节号>`。备忘节(通常是最后一节)永远被排除
## 工作步骤
1. **定位文件**:`openspec/changes/<name>/tasks.md`。若不存在���报错退出。
2. **解析 section 头**:识别所有 `^## N\. ` 形式的标题,按数字排序。记录每段 section 的行号区间。
3. **识别备忘节**:
- 标题文本匹配正则 `(下次|future|notes|同步位点|备忘|carry[- ]over)` 之一的 section
- 或者紧跟 section 头后面有一行 blockquote `^> ` 以"以下"或"these"开头
- 或者标题含"N.X 发布"(N.1-N.4 发布尾段——这些应该在 wait-ci 后手动勾,不是这里批量勾的对象)
→ 这些 section **不要**勾选。
4. **计算要勾选的行**:用户传入 `--sections N-M`(默认 `1-<最大活动节号>`),跳过备忘节;对范围内的每条 `- [ ] ` 行替换为 `- [x] `。
5. **使用 Edit 工具修改文件**,不要用 Bash 的 `sed`/`perl`——模型友好的精准替换减少误伤。
6. **输出摘要**:
```
marked N tasks done in openspec/changes/<name>/tasks.md
sections: 1..M (excluded: <备忘节编号与标题>)
preserved: K unchecked items in 备忘节
```
## 硬性约束
- **只操作 `- [ ] `**(精确前缀 2 空格 + 括号 + 空格),不要匹配 `-[ ]` 或 `* [ ]` 等变体
- 备忘节里的任何 checkbox **必须**保持原状,即使它是 `- [ ] `
- 发布尾段 `N.X` 始终视为备忘节排除——`.claude/rules/opsx-apply-cadence.md` 明