[ contents ]
指南

在现有项目中使用 Rasen

你一开始不记录整个代码库。你只为即将改变的部分编写规格。 这是在现有项目上采用 Rasen 时最重要的事,也是为什么 Rasen 是"存量优先"构建的。

一个常见的顾虑听起来像这样:"我的应用有 80,000 行。我必须在 Rasen 有用之前为所有内容编写规格吗?" 不。你会讨厌它,我们也是。Rasen 一次一个变更地增长你的规格。你的第一个变更记录它接触的切片,下一个变更记录它的切片,几个月后你的规格会在你实际做的工作周围自然填充。

本指南展示了如何从第一天开始而不会把海煮沸。

三十秒版本

$ cd your-existing-project
$ rasen init          # adds rasen/ and your AI tool's commands

然后,在你的 AI 聊天中:

/rasen:explore            # optional: have the AI read the area you'll touch
/rasen:propose <a real, small change you actually need>
/rasen:apply
/rasen:archive

你的规格现在描述的正好是该变更接触的系统部分,仅此而已。这是对的。你已经完成了对其他 80,000 行的担心。

为什么增量优先是整个诀窍

Rasen 变更写为增量ADDEDMODIFIEDREMOVED。增量描述相对于当前行为正在改变什么,而不是整个系统。

这正是存量工作所需要的。你很少从零开始构建。你在添加字段、修复重定向、收紧超时。增量让你精确指定那个变更,而不必首先编写 40 页关于它周围所有东西的规格。

所以你的 rasen/specs/ 目录不是从完整和全面开始。它从几乎为空开始并积累。每个归档的变更合并它的增量。auth/ 的规格仅在你进行了几个认证变更后才变得彻底,这正是你想要它彻底的时候。

你在真实代码库上的第一个变更

选择小而真实的东西。不是玩具,不是重写。你这周本来就要做的变更。小的首个变更用低风险教会你工作流。

第一步:让 AI 读取相关区域。 这就是 /rasen:explore 在陌生或大型代码库上赚取价值的地方。指向你即将接触的部分,让它在提议任何东西之前映射事物如何工作。

You: /rasen:explore

AI:  What would you like to explore?

You: I need to add rate limiting to our public API, but I'm not sure
     how requests currently flow through the middleware.

AI:  Let me trace it... [reads the router, middleware stack, and config]
     Requests hit Express, pass through auth middleware, then your
     controllers. There's no rate-limiting layer today. The cleanest
     insertion point is a middleware right after auth. Want me to scope it?

注意 AI 现在理解你的实际结构,所以它编写的提案将适应你的代码,而不是一个通用模板。在大型代码库中,这个单一习惯节省最多痛苦。参见先探索

第二步:提议变更。 提案和它的增量规格仅捕获这个变更。

You: /rasen:propose add-api-rate-limiting

第三步:构建和归档/rasen:apply/rasen:archive,与任何变更相同。归档后,你有了真实的速率限制行为规格,来自你无论如何都需要的变更。

喜欢引导式导览?使用 onboard

如果你宁愿在自己的代码上观看整个循环旁述,扩展命令 /rasen:onboard 正好这样做:它扫描你的代码库以寻找一个小的、安全的改进,然后引导你通过提议、构建和归档它,解释每一步。

首先打开扩展命令:

$ rasen config profile      # select the expanded workflows
$ rasen update              # apply them to this project

然后在聊天中:

/rasen:onboard

这是真实项目上最温和的入门方式,它留给你一个真实的(小的)变更你可以保留或丢弃。参见命令:/rasen:onboard

"但我已经有需求文档"

也许你有 PRD、SRS、正式规格,甚至 TLA+ 模型。好的。你不会全部导入它们,你也不会扔掉它们。

把现有文档视为探索的源材料,而不是要转换的规格。当你开始一个变更时,粘贴或指向 AI 相关部分,让它从中塑造一个聚焦的 Rasen 增量。增量捕获你现在正在改变的行为,以 Rasen 的可测试需求和场景形式。你原始的文档留在它们所在的地方作为背景。

诚实的原因:Rasen 规格故意是行为优先和变更范围。40 页的 PRD 是不同的产物,有不同的工作。强制一次性大规模转换往往会产生一份大的、陈旧的规格没有人信任。让规格从真实变更中增长保持它们准确。

You: /rasen:explore
You: Here's the section of our PRD about checkout. I'm implementing the
     "guest checkout" requirement next.
     [paste the relevant requirement]
AI:  [reads it, asks clarifying questions, then helps scope a change]
You: /rasen:propose add-guest-checkout

在大型代码库中组织规格

规格存放在 rasen/specs/ 下,按领域分组:一个逻辑区域,匹配你的团队如何思考系统。你不必从一开始设计整个分类法。当你在该区域的第一个变更需要时创建领域文件夹。

切分领域的常见方式:

  • 按功能区域: auth/payments/search/
  • 按组件: api/frontend/workers/
  • 按限界上下文: ordering/fulfillment/inventory/

选择任何让新人点头的东西。你稍后可以改进。参见概念:规格

多仓库和跨仓库工作

对于多仓库,最简单的模式是在仓库根部有一个 rasen/ 目录,领域映射到你的包或服务。这涵盖了大多数团队。

如果你的工作真正跨越多个仓库(或几个你视为独立的包),Rasen 有测试版Stores 功能:规划存放在自己独立的仓库中,你的任何代码仓库都可以引用,所以计划不必存放在一个仓库的 rasen/ 文件夹内。这是测试版,所以把它的命令和状态视为在演变。从Stores 用户指南开始了解心智模型和最小有用路径。

几个诚实的告诫

  • 抵抗回填所有东西的冲动。 为你没有改变的代码编写规格感觉有成效且通常不是。这些规格会变陈旧,因为什么都不强制它们跟踪现实。让真实变更驱动你的规格。
  • 保持早期变更很小。 你的前几个变更就像学习节奏一样是关于船运。一个紧密的范围让循环快速和教训便宜。
  • 提交 rasen/ 到 git。 你的规格和档案属于与它们描述的代码一起的版本控制。
  • 给 AI 上下文。 在一个有强大约定的大型代码库上,填入 rasen/config.yamlcontext: 使得每个提案尊重你的栈和模式。参见自定义配置

后续步骤