产品(PRD)环设计
项目级 PRD = 全局 + 域级两级,只写应然、不挂状态。它是产品文档(产品经理视角),不是工程规格库。
契约正文位于
.atlas/rings/prd/reference.md,本页是设计依据。
一、立场
- PRD = 应然(产品应该是什么样),不写实现进度、不挂状态——产品文档正文不是规格库(不设「原子条目 + 状态字段 + 来源列」)。
- 实然进度由
.trellis/spec/structure/current/的实现状态 + E2E 用例status承载。 - 状态字段只存在于治理工件(追溯总表)里,不进 PRD 正文——这一条与 PMI 体系一致:PMBOK 的 RTM 有状态列,PRD 正文没有。
二、产物布局
product/prd/
├── README.md 追溯总表 + 索引(域 ↔ structure 模块 ↔ 页面 ↔ Rule Set ↔ AC)
├── prd.md 全局(唯一)
└── <domain>-prd.md 域级(每域一份)域按产品功能域划分(不是代码模块),并在 README.md 里映射到 structure 的模块与页面。理由:产品域在重写前后保持不变,代码模块会变。域级 PRD 平铺在 product/prd/ 下,严禁建 domains/ 子目录(目录规范门)。
编号:功能 FN-<DOMAIN>-NNN、规则 <DOMAIN>-R-NNN、AC AC-<DOMAIN>-NNN。
三、全局 prd.md(11 节)
产品定位 / 目标用户与角色 / 核心场景(Mermaid,含异常分支)/ 产品形态与入口 / 功能架构(域清单 + 域间关系)/ 范围与处置 / 页面结构全景(导航层级 + 页面职责 + 页面 ↔ 域映射)/ 非功能需求 / 术语表 / 风险与依赖 / 修订记录。
「范围与处置」是防静默丢功能的闸门:逐条列出 .trellis/spec/structure/legacy/ 的每个功能能力,处置为 保留 / 改造 / 废弃 / 新增 + 理由;另设不做清单与迁移性需求。
四、域级 <domain>-prd.md(8 节)
域概述 / 功能清单(带需求类别)/ 功能详细说明(每功能六件套)/ 业务规则 Rule Set / 验收标准(+ 结构类 AC 清单 + 不可验 AC 清单)/ Assumptions & Defaults / 变更记录 / 用户旅程走查(末节)。
开户最小集:origin: adopt 项目首轮开户时,域级 PRD 只写 一 域概述 / 二 功能清单 / 四 业务规则 / 五 验收标准 四节——三 功能详细说明(六件套)与 六 Assumptions & Defaults 整节不出现,留到该域首次由 apply <需求ID> 增量时一次补齐;章节号不重排。其余场景用完整形态。
功能六件套:
- 功能描述;
- 用户流程(正常 + 全部异常路径);
- 状态机(无状态流转时写「不适用」+ 理由);
- 字段规范(业务语义:类型 / 必填 / 长度 / 校验规则 / 错误提示文案);
- 文案规范(空 / 加载 / 成功 / 失败 / 权限 / 网络 六类);
- 异常处理。
字段的权威源分工:业务语义(校验规则、错误文案)进 PRD;技术表结构(列、约束、关系、枚举取值)唯一归 .trellis/spec/structure/*/<domain>/data-models.md,PRD 引用不重复。
用户旅程走查(末节):从六件套派生——每用户目标一条「入口 → 步骤 ⇒ 可见状态 → 终态」,跨页状态变化显式写;用户确认(已确认:<日期>)前不得进 e2e 环。确认前对照 product/design.md(视觉设计档案,存在时),走查涉及的界面方向不得与设计旋钮冲突。仅「改变应然 UI」的需求触发。
走查是六件套的投影,不另立真相:用户改意见 ⇒ 先改六件套再重派生。
五、需求分类(PMBOK 式)
每条需求恰属一类:功能性 / 非功能性 / 迁移性 / 约束。
迁移性(Transition)必带 owner 与 结束条件——否则临时迁移态会永久化。迁移性需求同时登记进全局的「范围与处置 → 迁移性需求」。
六、AC 体系
每条 AC 用 Given / When / Then 表达,三列形态:AC ID | 场景 | 回指规则。
- 四类样例(正向 / 反向 / 边界 / 异常)由 E2E 环用例的
类型字段承载,本环 AC 不逐条标注; Then必须是可判定的确定断言,不断言实现;- 写类 / 拒绝类 AC 的
Then写可观测终态(操作后能看到什么,而非只写「被写入」)——契约纪律,不进校验器。
验收标准节末尾另附两张清单,是下游 E2E 门禁的输入:
- 结构类 AC 清单:只放被测属性只能在页面初始态观测的 AC(页面骨架 / 默认面板 / 按数据渲染构成)——它是 E2E 环「零证据用例须挂结构类 AC」那道门的唯一输入。不得滥用:只要
Then能由真实界面动作改变,就不属结构类。 - 不可验 AC 清单:只放当前 UI 无任何可观测面的 AC(纯性能属性 / 仅下游系统可见的行为 / 服务端内部时序)——E2E 环「AC 反向覆盖」门从零挂靠清单中减去本清单。不得滥用:只要存在任何真实界面动作 / 呈现能观测它,就必须补用例。
七、流程(四段式)
- 诊断:用户 / 业务 / 技术 / 页面结构四视角;每轮最多 3 问;用户已答过的不重复问;查得到的不问(structure、代码、已有 PRD)。
- 项目级定位对齐(概念版):固定 8 行、尽量 ≤200 字,不加其它章节;问「① 方向是否对齐?② 需要调整吗?」,未确认不得进入下一步。
- 范围冻结:逐项复述待冻结内容,要求显式回复「确认」;范围变更 → 回到第 2 步。
- 逐域落地:一次一个域(先出大纲 → 确认 → 出正文 → 自审六件套);全部完成后全局收口(写追溯总表 + 更新功能架构与范围处置)→ 跑校验 → 交独立审查。
无需求卡修订:判据一句话——「有没有一条需求要接」。无需求卡的应然资产修订不建需求卡、不建任务,按四段式只跑受影响的部分,清单落 product/reviews/<日期>-<主题>/;切到「优化」由用户显式宣布收齐。
八、质量机制(硬约束)
- 零占位符:禁止
TODO/待补充/TBD/待定/视情况而定/[FIELD:]。缺失信息只有三个出口:① 写 建议默认值(建议默认值:<具体值>);② 进 Assumptions & Defaults(假设 + 默认值 + 影响面 + 何时澄清);③ 进 待决策登记表(全局prd.md置顶,每行含议题 / 现状取证 / 建议默认值 / 影响面 / 决策人——这是结构性待定,不属于占位符)。 - 门控:待决策登记表非空 ⇒ 只产出全局
prd.md与追溯总表,不产出域级 PRD。产品定位、功能范围、产品形态未定之前写域级细节等于写完就废。 - 取证与应然必须分开表述:
.trellis/spec/structure/{legacy,current}里读到的是参考基线,不是本产品的应然;写成「参考基线(取证:<路径>)」,不得写成结论。 - 需求四准则:完整 / 无歧义 / 一致 / 可测。
- 双向追溯(硬):每条规则 ≥1 条 AC;每条 AC 回指 ≥1 条规则;每个功能 ≥1 条 AC;每个页面归属 ≥1 个域;每个 legacy 能力在处置表里有结论。
- 内容归属禁止重复:业务语义归 PRD,技术表结构归 structure(见第四节字段分工)。
九、治理工件
atlas prd review独立审查:只审不改;7 个维度(全局 ↔ 域级一致性 / 域间联动 / 追溯完整 / 四准则抽查 / 文案术语一致 / 页面覆盖 / 与 structure 一致);输出按Critical/Major/Minor分级并指明应回到哪个阶段;改后必须重跑全部维度;缺权威输入时不得给「通过」。骨架条款见.atlas/shared/independent-review.md,实例细节见 独立审查:四类实例。validators/validate_prd.py确定性校验:5 参数(文档头完整 / 零占位符 / 链接 100% 可解析 / 追溯完整 / Waste Test 全 YES)→PASS(5) /WARN(4) /FAIL(<4 或参数 2 失败,拒绝交付)。门控态(待决策表非空)下追溯 / Waste Test 记 N/A、不计入分母、不判 FAIL;链接按双基准解析(./..相对当前文档,其余相对项目根),省略式 token(.../x*)与含{…}的 token 不参与;机器检不了的子项降 WARN;退出码与其它校验器统一(FAIL → 1,其余→ 0)。
十、与其它环的接口
| 环 | 接口 |
|---|---|
atlas structure(上游,解耦) | 以 .trellis/spec/structure/(含 _meta.json.domains 候选域)为输入;候选域由 structure 环基于 CGC 调用图 + Leiden 拓扑聚类机器计算。不由 structure 自动触发,本环独立运行、按需读。本环诊断阶段读候选域并定稿域边界,回写 _meta.json。 |
atlas e2e | 页面 → 分片键;AC → 用例上游(用例 prd_ref 回指 AC ID)。 |
atlas apply | 需求增量时只改受影响的域章节 + 追溯总表 + 全局范围节。 |
