# HTML PRD 评审闭环 ## 目录 - [状态](#状态) - [每轮评审](#每轮评审) - [批准](#批准) - [批准后的变更](#批准后的变更) ## 状态 ship `current.yaml` 的 spec 字段至少记录: ```yaml shipId: tenant-permissions kind: long spec: revision: v002 specStatus: review prd: spec/prd-v002.html approvedRevision: null reviews: spec/review.yaml ``` 允许的状态: | 状态 | 含义 | 允许的下一步 | |---|---|---| | `draft` | 已建立需求,但还没形成可审版本 | 生成 PRD | | `review` | 当前版本等待人评审 | 接收意见或批准 | | `changes_requested` | 人明确要求修改 | 生成新版本 | | `approved` | 指定版本已被明确批准 | 生成 handoff | | `handed_off` | handoff 已生成并交给 ACK | 只能创建后续修订 | | `superseded` | 版本被后续版本替代 | 只读历史 | | `parked` | 用户暂缓 | 用户恢复后继续评审 | | `rejected` | 用户明确拒绝 | 不再自动推进 | `review.yaml` 每轮追加一条记录,不覆盖历史: ```yaml - revision: v002 status: changes_requested feedback: - section: permissions type: decision request: "租户管理员不能查看平台级审计日志" disposition: applied unresolved: - id: Q-002 question: "跨租户查询是否允许平台运维角色使用?" owner: user changedFrom: v001 ``` 不要补写用户没有提供的姓名、时间或审批理由。时间可使用当前环境时间;审批人未知时写 `user`,不要猜测真实身份。 ## 每轮评审 1. 读取 ship `current.yaml`、当前 HTML 和所有未解决的 review 项;不要只读用户最新一句话。 2. 将新反馈归类:`change`、`decision`、`question`、`rejected`、`parked`。 3. 说明每个反馈对范围、架构、任务和验收的影响。 4. 生成新版本 HTML,保留旧文件。 5. 更新 ship `current.yaml` 的 spec 字段和 `spec/review.yaml`,并在回复中给出:新版本路径、变更摘要、未决问题、 是否仍需批准。 如果反馈只影响措辞,也生成新版本;评审记录需要保持可追溯。若用户明确说不采纳,记录理由, 不要悄悄删除意见。 ## 批准 只有以下类型的表达才可作为批准信号: - “批准 specifier 的 v002 PRD” - “确认按 v002 开发” - “需求文档 v002 通过,可以生成 handoff” 批准前必须确认: - 没有未决的阻塞问题; - 范围和非目标明确; - 关键方案和风险已确认; - 任务都有 `expected` 和 `verification`; - HTML 版本、状态文件和 review 记录一致。 如果用户说“继续”“可以”“看起来不错”,但没有绑定版本,继续保持 `review`,请用户确认 具体版本。批准后把 `spec.approvedRevision` 写入 ship `current.yaml`,再生成 `spec/handoff.yaml`;不要同时启动 ship 开发或 ACK。 ## 批准后的变更 批准后的需求不能原地编辑。用户提出变化时: 1. 保留已批准版本和 handoff; 2. 将当前状态标为 `superseded` 或创建新的修订链; 3. 生成下一个 PRD 版本; 4. 标记受影响的任务、验收、风险和 ACK handoff 字段; 5. 重新等待用户批准。 已经进入 ship 开发的任务不会因 HTML 更新而自动改变。需要执行变更时,明确告诉用户应 修订本 ship 的 `tasks.yaml` 或重新规划,不能静默改写执行记录。