技术设计(sdlc-design)
把已确认的需求共识(sdlc-intent 三件套)翻译成技术设计文档 design.md——供三方消费:sdlc-gate 评审、任务框架拆分执行、sdlc-test cases 并行推导。设计写成文档本身就是发现过程:契约、决策、公共资产在人能逐行核对的粒度上定死,下游切片免现场设计。
前置依赖:codegraph MCP(存量勘察;缺失时降级定向 grep + 读文件);mysql MCP(只读核对表结构,可选)。
路由(进入时先判)
读 sdlc/<需求名>/intake/ 最新 digest 头「风险分级」:
- C 级 → 不产 design.md,产一页
sdlc/<需求名>/design/plan.md(逐接口方案,骨架见 references/design-template.md「C 级轻量方案」),随后走/sdlc-gate <需求名>C 档主会话自查;放行后才可开发 - A/B 级 → 继续;B 级按 mini 骨架产出(裁剪规则见 design-template 末节)
- digest 不存在 → 停,先跑 sdlc-intent——设计的输入是共识版需求,不是原文速读
- 已存在 design.md 且头部有
> 平台定稿:锚点行(sdlc-sync pull-dev-bundle 拉回的平台定稿)→ 拒绝本地增量修订:该设计已在平台定稿,本地改动即口径漂移;引导用户走平台 design_rev / 变更单,修订定稿后/sdlc-sync pull-dev-bundle <需求名> only:design拉回。例外:用户显式要求重开时——警告「将脱离平台定稿基线,平台侧后续修订与本文件无法对账」,确认后允许重写,重写落盘时删除锚点行(本地文件回归普通设计,下次 pull 按无锚点路径比对) - 已存在 design.md 且用户未要求重开 → 读头部输入锚点(digest/audit/pm-checklist 三文件日期)与各文件最新一份比对:全部一致则在其上增量修订,任一更新即按增量修订处理并提示口径漂移、确认是否重审
Q 表定位规则
Q 表(问题/当前假设/阻塞范围,编号 确认.Q-xx)的载体按序定位:
- parent prd §6 已有 Q 表(大需求三段式链路)→ 复用,design 头部注明来源,增量项追加
- 无 prd(轻量链路)→ 本 skill 在 design 头部生成并维护:来源 = pm-checklist 未答复项 + digest §假设清单「假设」类条目(推断类不入表——推断有原文推导链,不算未决口径)
前置闸(任一未过按处置执行,不带病设计)
| 闸 | 判据 | 处置 |
|---|---|---|
| 1. Q 表硬阻塞 | 存在阻塞写接口核心逻辑的未决口径 | 被锁功能点照常按「当前假设」产出,契约/D 表相应行标 「锁定待拍板(确认.Q-xx)」;不得拒绝启动整个设计、不得把锁定扩大到未阻塞功能点(未决口径只锁对应功能点,不阻塞全局) |
| 2. 分级已拍板 | digest 头风险分级处于提议态(未拍板) | 停,先请人拍板(拿不准从高) |
| 3. tier 只升不降 | 存量勘察发现影响面证据(公共组件/对外契约/并发一致性)且当前低于 A 级 | 回写 digest 头升级并附证据;cases 已产出须同步 cases 头,issues 已产出同步 issues 头;按新级产出 |
流程
复制此 checklist 跟踪进度:
设计进度: - [ ] Step 1: 前置闸三道 + 输入定位(digest / audit / pm-checklist / Q 表载体 / 项目规范源) - [ ] Step 2: 存量勘察(现有接口/Req/组件/表结构) - [ ] Step 3: 按 references/design-template.md 产出 design.md(A 全量 / B mini) - [ ] Step 4: 齐套自检(A/B 下表六项;C 按 C 模板自检) - [ ] Step 5: 落盘 + 🔒 暂停等确认点②定稿
Step 1 输入:intake 三件套 + 项目规范源(.trellis/spec/ 或 dev_standards/ 等项目自建规范目录,读不到则注明规范降级)+ ER 基线(如有)。
Step 2 存量勘察:契约必须贴现状不悬空——读现有接口/Req/组件/表结构后落笔。MCP 优先(完全限定名 codegraph:codegraph_explore、mysql:mysql_query);codegraph 缺失降级定向 grep + 读文件,mysql 缺失按设计内声明的表结构(均如实注明降级)。
Step 3 读取 references/design-template.md 按骨架产出(A 全量 / B mini / C 轻量方案);大需求落位与任务框架交接规则读取 references/trellis-handoff.md。
Step 4 齐套自检(漏项即返工,反馈循环)。C 级不套用下表六项,按 design-template「C 级轻量方案」自检(头部四项 + 逐接口表完整、验证命令可执行):
| # | 检查 |
|---|---|
| 1 | D 表八类别显式决策(「不适用」也要写明;类型标 C 约束/H 假设,H 含接受条件) |
| 2 | 公共资产六类齐套 + 每项归属列(骨架切片先行的依据) |
| 3 | 接口契约每行挂 F 编号 + 口径来源;被锁行标「锁定待拍板」 |
| 4 | 切分约束三件:骨架切片先行声明 / 横切核验矩阵 / 共享物归属 |
| 5 | audit 🔴/🟡 问题去向逐条有落点(已承接 / 转 Q 表 / 本期不做+理由) |
| 6 | Q 表就位(复用注明来源 prd,或已按定位规则生成) |
Step 5 落盘 + 🔒 暂停。落盘路径:A/B 轻量 = sdlc/<需求名>/design/design.md;C 级 = sdlc/<需求名>/design/plan.md(一页);大需求走任务框架 = parent 任务目录(如 Trellis .trellis/tasks/<task>/design.md,见 trellis-handoff.md)。确认点② 措辞:
设计产物已生成于 <路径>(A/B = design.md;C = plan.md),请逐行核对(确认点②定稿——ack 是定稿信号,不构成质量放行;放行唯一口径 = sdlc-gate issues 头「评审状态=已放行」)。同时测试用例应从 intake 三件套并行独立推导(
/sdlc-test cases <需求名>,生成时禁止读本设计——交叉审查依赖用例在场,不做「设计先行、用例后补」降级档)。两线定稿后运行/sdlc-gate <需求名>开评审;gate 放行后才可拆分开发(guard_dev 开发入口校验)。C 级例外:cases 可缺失,plan.md 产出后直接走/sdlc-gateC 档自查;/sdlc-test dev前补最小 cases(P0 + 双向追踪表)。
设计纪律
- 备选方案红线:至少一个关键决策写 Alternatives(选择/弃选/trade-off/依据功能点)——无备选、无 trade-offs 的设计是 implementation manual,不如不写
- 决策类型 C 约束 / H 假设;H 必写接受条件(按什么标准判定假设成立、何时调整)
- 不重复项目通用规范约定,只收本需求域新增/扩展项
- 公共组件清单是脚手架不是合同:切片期调整组件接口不算偏差、不需回写(豁免仅限组件接口)
边界
- 只产设计产物(A/B
design.md;Cdesign/plan.md),不做任务编排(建任务/拆 subtask/排期归任务框架;拆分规则随 §7 实施切分约束交付,见 trellis-handoff.md) - 不评审(设计评审归 sdlc-gate);单点决策存疑走 sdlc-doubt 旁路
- 不替代 sdlc-intent:需求侧口径冲突回需求侧裁决,禁止设计期静默择一


