원클릭으로
design
为某个具体实现决策撰写一份 design doc(docs/design-docs/)。独立、由人触发——不属于主 build 流程。当一个解法足够含糊、技术路线应在动工前先论证清楚时使用;涵盖 feature design、技术性重构、架构决策与迁移。
Codex 또는 Claude로 설치 이 Prompt를 복사해 Codex, Claude 또는 다른 어시스턴트에 붙여 넣으면 Skill 페이지를 검토하고 설치를 진행할 수 있습니다.
메뉴
为某个具体实现决策撰写一份 design doc(docs/design-docs/)。独立、由人触发——不属于主 build 流程。当一个解法足够含糊、技术路线应在动工前先论证清楚时使用;涵盖 feature design、技术性重构、架构决策与迁移。
Codex 또는 Claude로 설치 이 Prompt를 복사해 Codex, Claude 또는 다른 어시스턴트에 붙여 넣으면 Skill 페이지를 검토하고 설치를 진행할 수 있습니다.
SOC 직업 분류 기준
| name | design |
| description | 为某个具体实现决策撰写一份 design doc(docs/design-docs/)。独立、由人触发——不属于主 build 流程。当一个解法足够含糊、技术路线应在动工前先论证清楚时使用;涵盖 feature design、技术性重构、架构决策与迁移。 |
在实现复杂改动前先写一份 design doc。design doc 记录高层实现策略与关键设计决策,重点在所权衡的 trade-offs。我们的工作不是产出代码,而是解决问题——design doc 逼你在投入某个解法之前把问题想清楚。
这是一份严肃的文档。它既是「系统当初为何如此设计」的 source of truth,也是工程师面对陌生系统时最易上手的入口。
回答下面这些问题。若有 3 个及以上为「是」,就写一份 design doc:
何时不要用: 解法显而易见、没有真正的 trade-offs。如果你的 design doc 只会写「我们就这么实现」、没有备选方案或权衡讨论,那就别写,直接写代码。
RESEARCH ──→ DESIGN ──→ APPROVE ──→ UPDATE
│ │ │ │
▼ ▼ ▼ ▼
加载上下文 提出完整 人类确认 在 plan 触及现实时
读代码 的解法 更新文档
问清问题
在提出任何方案前,先深入理解问题空间。这一阶段至关重要——建立在浅薄理解上的设计只会产出浅薄的解法。
加载上下文:
docs/product-spec.md)docs/design-docs/)理解约束:
立刻把假设摆上台面:
我正在做的假设:
1. 我们能在不停机迁移的前提下加一张新数据库表
2. 现有 auth 中间件支持这个新角色
3. 这里读延迟比写延迟更重要
→ 现在纠正我,否则我就按这些往下走。
问清楚。 别猜——有含糊就问。建立在错误假设上的 design doc 浪费的时间,远超那几个问题的成本。
提出一份完整、可执行的设计。想透彻——人类指望你考虑到他们没想到的角度。围绕细节与人类反复迭代,直到设计扎实。
按下面这个模板写 design doc,保存到 docs/design-docs/<name>.md:
# Design Doc: [Title]
**Status:** Draft | Approved | Implemented | Deprecated
**Author:** [name]
**Date:** [date]
## Context and Scope
<!-- 客观的背景事实。对全局做粗略概述:正在构建或改动什么、已经
存在什么。保持简洁——让读者跟上节奏,但不要重复他们已经知道的。 -->
## Goals and Non-Goals
<!-- 简短的要点列表。
Goals:系统必须达成什么。
Non-Goals:那些本可合理列为目标、但被刻意排除的东西。
不是反向目标(「不该崩溃」),而是有意的范围裁剪
(「ACID 合规不是目标」)。 -->
## Design
### Overview
<!-- 所选方案的高层概述。从这里起笔,好让读者自行决定往下读多深。
说明为什么这个方案最能满足既定 goals——trade-offs 就活在这里。 -->
### System Context Diagram
<!-- 这个系统如何嵌入更大的技术版图?
把系统画成它所处环境中的一个方框——外部系统、用户、进出的数据流。
这能让读者用他们已知的东西来定位这份设计。
用 ASCII 图:
┌─────────┐ ┌─────────┐ ┌──────────┐
│ Client │────→│ API │────→│ Database │
└─────────┘ └─────────┘ └──────────┘ -->
### API Design
<!-- 勾勒这个系统对外暴露或对内消费的 API。聚焦与设计 trade-offs 相关的部分——
不要照搬正式的接口定义(冗长、细节多余、很快过时)。
展示:endpoints/methods、关键参数、响应结构、错误处理方式。 -->
### Data Storage
<!-- 数据以何种形式、如何存储?聚焦与 trade-off 相关的部分,
不要写完整的 schema 定义。
覆盖:存储技术选型及理由、关键实体与关系、访问模式、
以及(如适用)迁移策略。 -->
### Component Boundaries
<!-- 内部结构:有哪些组件、各自负责什么、各自又不负责什么?
定义依赖方向(谁能 import 谁)、通信模式(API、事件、共享类型)、
以及模块边界。 -->
## Alternatives Considered
<!-- 对每个备选方案:它做了哪些 trade-offs,这些 trade-offs 与所选设计
相比如何?务必把为什么否决备选方案讲透——这正是日后避免重新
翻案的关键。
每个被否决的备选方案都需要一个具体理由,而不只是「感觉不对」。 -->
## Cross-Cutting Concerns
<!-- 这份设计如何应对那些横跨系统的关注点:安全、隐私、可观测性、
错误处理、测试策略、迁移路径、回滚方案。
只纳入与本设计相关的关注点。 -->
## Risks
<!-- 哪里可能出错?每条风险都需要一个缓解策略,而不只是一句担忧。 -->
并非每份设计都需要每个小节。 一次小重构可能只需 Overview + Component Boundaries。一个触及外部系统的新 feature 可能各节都要。把相关的写进来——拿不准时,就写。按需写到足够详尽,让它能作为可执行的实现指引。
写作原则:
把 design doc 呈给人类评审。在获批前,不要进入实现。
DESIGN DOC 待评审:
- 标题:[name]
- 关键 trade-off:[一行说清核心设计取舍]
- 已考虑的备选方案:[数量]
- 已处理的 cross-cutting concerns:[清单]
→ 批准,或告诉我要改什么。
实现期间 plan 触及现实,缺陷和未顾及的需求会浮现。届时更新 design doc——让文档与实际构建出来的东西保持一致。若发布后发生重大变更,加一节「Amendments」,链接到后续的 design doc。
获批的 design doc 作为持久 Library 存放在 docs/design-docs/。开始构建时,运行 harness-stack:fdd——它会读取已存在的 design doc(如果有)。
docs/design-docs/<name>.md 是受版本管理的 Library:「系统当初为何如此设计」的 source of truth。design。| 借口 | 现实 |
|---|---|
| 「实现一目了然」 | 若真的一目了然,design doc 5 分钟就写完。写不快,就说明它并不那么显然。 |
| 「我构建完再补设计文档」 | 那是事后复盘,不是 design doc。价值在于在投入之前评估备选方案。 |
| 「design doc 是官僚主义」 | 因为选错路线而重写才是真正的官僚主义。design doc 通过避开编码上的死胡同来省钱。 |
| 「这事只有一种做法」 | 若你说不出一个备选方案,说明你还没探索过问题空间。 |
| 「我先开写、看哪种能用」 | 那是 prototype,不是实现。若你先做 prototype,在投入某个路线之前,把发现记进 design doc。 |
docs/design-docs/FDD 主流程 step 1(规划与拆解)。覆盖两段——plan(与用户弄清需求、经 investigator 调查代码库、定出 milestone、写出 plan.md 并呈现)与 features(把 milestone 拆成 features.json 并过 coverage 闸)。中间的 contract 段交给 harness-stack:fdd-validation-contract。由 harness-stack:fdd 调用。
构建新特性的主流程编排器。契约优先的多 agent 架构——捕获一个 plan,定义可测试的断言,拆解为多个 feature,再用全新上下文的 implementer/reviewer/validator subagent 驱动一个里程碑设闸的执行循环。当一处改动触及多个文件、有多条验收标准、或跨越多个 feature 时使用。主流程分三步,分发给 fdd-planning(含 fdd-validation-contract)/ fdd-execution / fdd-validate。
为一个 plan 撰写 validation contract——把 definition of done 落成一组可测试、用户可观测的 assertion(VAL-<AREA>-NNN),带 persona 与声明的 Evidence。它是 fdd step 1(规划)里的 contract 阶段。契约通过逐 area 的 investigation subagent 与若干轮 adversarial review 构建,而非一人独写。产出 .harness-runtime/plans/<slug>/validation-contract.md,并经由 fdd init-state 播种 validation-state.json。在项目内首次使用时,还会 bootstrap 项目级约定文档 docs/user-test-patterns.md。
规范 git 工作流实践。任何代码改动都适用。在提交、开分支、解决冲突,或需要把多条并行工作线组织起来时使用。
harness-stack 框架的引导纲要(bootstrap doctrine)。在会话开始时自动加载,用以介绍 lifecycle map、golden rules,以及如何挑选正确的 harness-stack:* skill。在一次会话中首次调用任何 harness-stack:* skill 之前,先读它。
复盘一次 harness-stack 使用,把值得上报的摩擦、缺陷或建议提成 GitHub Issue 反馈给上游。在完成一项任务、用完某个 skill 后有意见或改进想法,或想为框架本身留下改进线索时使用。