快速开始
npx skills add mattpocock/skills --skill=prototypenpx skills update prototype功能说明
prototype 构建一个小型的、一次性的程序,其唯一职责是回答一个设计问题——这个状态模型感觉对吗?或者这个 UI 应该长什么样?
这段代码从第一天起就是可丢弃的,并且被明确标记为这样。它不携带测试,除使其能够运行之外没有错误处理,没有抽象,也没有持久化。重点是快速学到东西然后删除它——所以一旦你开始把它硬化成生产级代码,你就已经不是在原型验证了。
何时使用
输入 /prototype,或者当任务匹配时智能体会自动调用它。
当你有一个难以在纸面上定案的设计问题时使用它——一个你无法在脑中容纳所有情况的状态机,或者一个你无法在并排看到几个版本之前想象出来的界面。如果相反,是某个已经构建好的东西出了问题而你需要找出原因,请使用 diagnosing-bugs;原型验证探索的是要构建什么,而不是已构建的东西为什么坏了。
两种分支
问题决定形态,而形态有两种:
- "这个逻辑/状态模型感觉对吗?" ——一个微型的交互式终端应用,将状态机推到各种尴尬的边缘情况,在每次操作后打印完整状态,这样你可以观察发生了什么变化。
- "这应该长什么样?" ——同一条路由上的几个截然不同的 UI 变体,可以通过一个浮动栏切换,这样你可以比较真实的渲染效果而不是凭空想象。
选错分支会浪费整个原型验证,所以问题先于一切。两个分支都将状态保存在内存中,从一条命令运行,并在每一步都展示完整状态。
将原型保留为一手来源
一个完成的原型会留下两样东西。答案——即结论加上它所解决的问题——是你要持久记录的内容(一条提交信息、一个 ADR、一个 issue)。原型本身是一手来源——答案是来自可运行的证据。
原型不属于主分支:没有测试、没有错误处理、没有需要维护的东西。但这不是销毁它的理由。一旦答案被记录下来,将任何已验证的决策纳入真正的代码中,然后将原型捕获在一个临时分支上——不在主分支中,永不合并——并在实现 issue 上留下一个指向它的上下文链接。主分支保持干净;原始探索对任何想要重新运行它的人仍然一键可达。一个留在主分支中腐烂的原型已经超出了它的用途——而一个作为一手来源捕获在侧分支上的原型则不然。
在整个流程中的位置
prototype 是一个随时可调用的独立技能:你进入它来解决一个设计问题,然后退出来。它的答案通常会输入到下一步——一个经过验证的状态模型或 UI 方向成为 to-spec 编写规格说明的确定输入,或成为一个值得通过 domain-modeling 记录的架构决策。当你不确定哪个技能或流程适合时,可以找 ask-matt 帮你导航。