Skip to content

RFC-0029: RFC 文档脚手架命令(/new-rfc)

概述

新增一个项目级 Claude Code slash 命令 /new-rfc,按团队 RFC 模板自动生成结构规范的新提案文档,让所有人用 Claude 写 RFC 时都遵循统一格式。

背景与动机

仓库已有 docs/rfc/template.md,但「复制模板」完全靠自觉:CI 只跑 markdownlint 和构建,不校验章节结构;Claude 也不知道模板的存在,随手生成的 RFC 章节五花八门。结果是同类文档结构不一致,Review 时缺乏统一锚点。把模板做成一个可调用的命令,能在写作入口处就把结构固定下来,成本低且对所有人生效。

目标

  • /new-rfc <主题> 即可生成符合 docs/rfc/template.md 全部章节的草稿。
  • 自动分配正确的递增编号,并把新条目追加到 docs/rfc/index.md 列表。
  • 命令随仓库提交,任何人 clone 后无需额外配置即可使用。

非目标

  • 不强制校验手写的 RFC(不引入 CI 门禁)。
  • 不改动 summaries、kernel 等其他类型的模板。
  • 不约束 RFC 之外的文档(教程、参考、代码分析等)。

方案

把模板能力封装成 .claude/commands/new-rfc.md。命令以 docs/rfc/template.md 为唯一权威结构,执行时:读取模板 → 扫描现有文件取最大编号 +1 → 与用户确认标题/作者/slug → 生成 docs/rfc/NNNN-<slug>.md → 追加索引行 → 提醒跑 lint。同时在 CLAUDE.md 写明「写 RFC 时套用该模板或用 /new-rfc」,为不走命令的随手写作兜底。

用户故事(可选)

作为团队成员,我在 Claude Code 里敲 /new-rfc KDA 缓存复用,命令直接产出 docs/rfc/0030-kda-cache-reuse.md,frontmatter 和章节都已就位,索引表也加好了一行,我只需填正文。

备选方案

  • 只写进 CLAUDE.md:零成本,但依赖 Claude 每次都主动套用,显式触发性弱,故仅作兜底而非主力。
  • CI 强制校验结构:对手写也生效,但实现成本高、容易误报,且无法保证「用 Claude 写」这一核心诉求,留待将来按需补充。

约束与注意事项(可选)

现有编号有空缺也有重复,命令必须取最大值 +1,而非按文件数递增。命令依赖 .claude/ 未被 .gitignore 忽略,才能随仓库分发。

设计细节

命令文件为 .claude/commands/new-rfc.md,含 descriptionargument-hint 的 frontmatter,正文是给 Claude 的分步指令。编号计算示例:

bash
ls docs/rfc/ | grep -E '^[0-9]{4}-' | sed -E 's/^([0-9]{4}).*/\1/' | sort -n | tail -1

生成文档时复制模板全部章节,删除「复制时去掉」的 HTML 注释,保留每节的引用块(>)引导语作为填写指引(已有内容则直接替换)。索引追加格式:| [NNNN](./NNNN-<slug>.md) | 标题 | draft | @作者 | 日期 |

测试计划

以本 RFC 自身作为端到端验证用例:跑一次 /new-rfc 确认编号、frontmatter、章节、索引行均正确生成,再用 npm run lint 校验格式。后续可在新增/删除 RFC 后回归编号计算逻辑。

影响范围

新增 .claude/commands/new-rfc.md,改写 docs/rfc/template.md,更新 CLAUDE.md。不影响站点构建与现有文档;对所有使用 Claude Code 的团队成员可见。

实施计划

  1. 改写 docs/rfc/template.md 合并完整章节。(已完成)
  2. 新建 .claude/commands/new-rfc.md。(已完成)
  3. CLAUDE.md 补充模板指引。(已完成)
  4. 以本 RFC 作为首个 demo 验证命令产出。(进行中)

风险与缓解

  • 模板与命令脱节:命令始终以 docs/rfc/template.md 为权威来源、不内嵌结构副本,模板更新即自动生效。
  • 编号冲突:取最大值 +1,并提醒作者提交前确认无并发占用同号。