agentleFS
9Ashwin9Ashwin/let-it-go/skills/flow/to-design/SKILL.md

to-design

Skill0 starsChanged 34 days agoMITView on GitHub

只在有真岔口要留档时才写设计提案:碰了公开 API / 数据迁移(含改数据模型)/ 权限与认证边界 / 兼容性 / 不可逆操作才用它;产出重在「为什么这么选」(Rationale / Compatibility),不是长 SPEC,也不是字段级契约——契约在 /to-issues 的 issue 正文。原来的 /prd-to-spec 入口已并入本技能,所以 **SPEC / 规格说明 / 技术方案也走这里**。可选渲染成自包含的 house-style HTML 页面。Triggers: to-design, 设计文档, 设计提案, design doc, 生成设计文档, SPEC, spec, 规格说明, 写spec, 技术方案.

4 other projects use a version of this.

Adopted by

Most recently taken up by

The file

Files
SKILL.md

to-design — 设计提案(决策与取舍)

只在有真岔口要留档时才用。 产出的是「为什么这么选」,不是长 SPEC。

工作状态、证据层、三个 profile 的边界、产物落点见 ../loop-it/CONTRACT.md——本文件不复述。

设计文档不是契约。 契约在 issue 正文(CONTRACT 第 1 节)。被实现证伪或已经过时,就直接重写或删掉,不要供着。


何时调用

判据是固定清单,不许自由心证。碰了下面任何一条才用它:

判据例子
公开 API改签名、改响应形状、加必填字段
数据迁移改 schema、回填、删列
权限 / 认证边界谁能做什么、token 生命周期
兼容性旧调用方、旧数据、旧配置
不可逆操作发布、删除、对外承诺

(与 CONTRACT 第 5 节的危险面同源:那里是停点判据,这里是留档判据。)

一条都没碰 → 不要写设计文档,直接往下。 装得进一个上下文就走 /loop-it;需求还没成形就先 /prd。

不问「要不要写文档」,问「这里有没有真岔口值得留档」。

输入

PRD、issue、半成形的想法都行——输入越薄,浮现决策问得越多。

(可选)扫一遍代码库,把设计落在现实上:既有模式、前例、约束、真实痛点。Background 引用户仓库里的真实代码最有说服力。

输出

<scope>/documents/design-<feature>.md,紧挨 PRD(落点规则见 CONTRACT 第 8 节)。

Go 提案的骨架可以保留,但按需取用:

章节写什么
Abstract一段话讲完全文 + 最重要的那个承诺
Background具体例子 / 真实代码讲痛点,能量化就量化
Design声明 + 示例 + 边界;改造前 vs 改造后
Rationale重点:为什么选它,以及被放弃的备选与原因
Compatibility重点:是不是破坏性变更、代价、迁移路径
Implementation只写方向与过渡,不写细粒度步骤——planner 写细了会级联出错

不适用就删,删得显眼就说明原因。没有 Rationale 的设计文档不值得写:把已知的东西抄一遍不是产出。

PRD 的映射:Problem → Background(真实痛点 + 量化);Goals → Abstract(提炼最重要的承诺);验收条件 → Design(渐进式示例);Technical Considerations → Design + Rationale;Non-Goals → Rationale(「我们没做 X,因为 Y」);Risks → Compatibility + Implementation。

文风(照搬 Go 文档)

  • 主语:决策用「我们」,行为用代码本身当主语;禁止无主语的被动腔。
  • 句子:先用短句拍板,再用信息密集的长句铺开机制,长短交替。
  • 段落:一段只讲一件事,结论先行;小标题写成完整论点句——写 老代码不受影响,编译结果与之前完全一致,而不是 兼容性。
  • 语气:克制的诚实,承认代价;加粗全文只用一次。

自检三条:标题是「做什么」的结论不是名词短语;Rationale 至少列一个被放弃的方案;没有 TBD / TODO——要么解决,要么挪进 Open Questions。

浮现决策

动笔前先找出真岔口——一个有能力的工程师可能合理走两个方向的地方——并解决它们。

每个岔口都记下你没选的那条路,它就是 Rationale。没有备选方案时,强迫自己想「最朴素的做法是什么、为什么不够」:总有一个被否决的基线。

边界

  • 契约不在这里:表 / 接口 / schema 归 /to-issues 的 issue 正文。
  • HTML 只是可选呈现层,Markdown 才是主产物 → references/html-render.md。
  • 不新增审批闸门:落盘即视为可用,不等「回复 OK」;反馈一律当修订,直接应用并重存。
  • 方案最终被否也照写——记录「这条路为什么走不通」本身就是产物,Status 标 Rejected。
  • 特性太大 → 按边界拆成多篇,互相链接。

失败怎么办

场景处理
PRD 含糊不全能问人就 ask_user_question 问真岔口;问不到(子代理 / 无人值守)就自己定并标 [Assumption],照常产出
不是破坏性变更Compatibility 一句话「纯增量、无破坏」,不硬凑
没有真实痛点代码可引用最小可信的示例代码代替,并注明是构造的
用户只要实现契约改走 /to-issues——契约字段块写在 issue 正文
文档被实现证伪重写或删掉;不让文档活着和代码打架

与其它技能的关系

/prd(要什么)→ /to-design(为什么这么选,本技能)→ /to-issues(issue 正文里的契约)→ /loop-it → /review-it → /ship-it

Download now (ZIP)

Does it work?

Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.

No reviews yet

People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.

  • It worked
  • Partly
  • It didn't
What did you use it for? e.g. Reviewing pull requests in a Rails app

Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.

Your trail

Files you open will collect here, so you can find them again.

Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.

Now do this for your own.

Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.