Skip to content

需求文档规范 ​

需求文档回答:为什么做、做什么、什么结果算完成。

需求文档面向产品范围和用户结果,不描述具体代码、文件、API 或实施步骤。实现方案统一写入对应的计划文档。

与计划文档的边界 ​

内容需求文档计划文档
用户问题和目标必须只引用,不重复展开
功能范围必须按功能拆解实施
用户可观察行为必须作为设计和验证依据
验收条件必须通过任务引用并落实验证
调研结论(影响范围与优先级的部分)必须引用结论,不重复调研
调研的完整过程与原始材料只登记关键结论与出处需要时展开为技术依据
技术方案不写必须
代码路径和配置字段不写必须
影响模块和迁移方式只写产品边界必须深度分析
任务、依赖和执行顺序不写必须
测试、打包、发布和回滚只写完成要求必须写具体方案

需求和计划之间只能通过需求编号、功能编号和验收条件建立关系,不能复制大段正文。

需求文档必须回答的问题 ​

每个需求至少明确:

  1. 当前用户或宿主遇到了什么问题。
  2. 本次要新增、修改或保证什么功能。
  3. 用户能够观察到什么结果。
  4. 哪些行为、数据或兼容性必须保持。
  5. 哪些内容明确不在本次范围内。
  6. 如何判断功能已经完成。

禁止写入需求文档的内容 ​

以下内容属于计划文档,不能在需求中展开:

  • 具体源文件路径、目录路径和代码入口。
  • API、类型、函数或 SDK 的替换方案。
  • 旧实现到新实现的逐步迁移方式。
  • 具体任务编号、执行顺序和依赖关系。
  • 具体构建命令、脚本参数和产物生成方式。
  • 具体错误分类、日志内容和重试实现。
  • 具体测试文件、测试夹具和 CI 配置。
  • 尚未确认的技术事实或上游源码推断。

可以在需求中写“设置升级后仍可读取”,但不要写“将 ctx.settings.get() 替换为 SettingsForms.describe()”。

文件位置和命名 ​

需求文档统一放在 docs/requirements/,文件名使用:

text
FNOS-###-需求主题.md

规则:

  • 需求编号在仓库内唯一、连续,不因实现方案变化而重新编号。
  • 主题描述功能目标,不使用“修改”“临时”“test”等无法表达范围的名称。
  • 文件名使用小写短横线;编号和主题之间使用短横线连接。
  • 已完成需求作为历史验收记录,不回改正文;后续变更登记到当前开发中的需求。

固定元数据 ​

文档必须包含 title 和 description,一级标题与 title 保持一致:

yaml
---
title: FNOS-007 DSH 0.1.7-rc.2 适配
description: DSH 0.1.7-rc.2 运行时、插件功能和用户数据兼容需求。
---

一级标题后的元信息表至少包含:

字段要求
需求编号FNOS-###
提出日期YYYY-MM-DD
需求状态需求整体状态
关联计划对应 PLAN-FNOS-###,未排期时写“暂未进入计划”

frontmatter 中的 targetVersion ​

文档 frontmatter 有一个可选但建议填写的 targetVersion 字段,声明该需求计划随哪一次发布交付。

它的作用不是预估进度,而是约束发版粒度:同一需求的连续修补应当累积到这一版一起交付,而不是每改一次就推一格版本号。缺了这个声明,「一次发布该覆盖多少改动」就没有判据,版本号会随提交数量通胀。

时机动作
建立需求时填写预期承载该需求的版本(通常是下一个 minor)
需求迭代中途不改。中途修补不产生新版本,字段保持不动
需求收口发版时确认发布版本与之一致;因排队等原因变更时同步更新
需求拆分或顺延更新为本轮实际承载的版本,并在变更记录里说明

完整的发版粒度规则与发版前自查见发布批次。

固定章节 ​

每篇需求按以下顺序组织:

  1. 需求背景:现状、用户问题和变更原因。
  2. 调研结论:功能成立所依赖的事实核查与可行性调研(见调研规范);无调研内容时写「本需求无前置调研」。
  3. 需求目标:用功能结果描述目标,不写技术实现。
  4. 功能列表:列出用户可感知或可验收的功能。
  5. 行为约束:记录必须保持的用户行为、数据行为和兼容要求。
  6. 不在本次范围内:明确不修改、不承诺或留待后续的内容。
  7. 验收条件与完成状态:按功能编号列出可观察结果和状态。
  8. 变更记录:只记录范围、优先级、状态和验收规则变化。

需求可以记录产品级影响范围,例如“影响应用升级和已有设置”,但不要列出具体源码模块;源码影响分析属于计划文档。

调研规范 ​

功能的范围、优先级和可行性通常来自调研。调研结论写入需求文档的「调研结论」章节,作为功能列表和验收条件的依据;完整调研过程和原始材料按需放入计划文档或外部链接。

何时需要调研 ​

情形调研要求
功能依赖上游(DSH 官方、fnOS 平台、第三方 SDK)提供的能力必须核实该能力真实存在、版本范围和调用约束,登记结论与出处
同类功能已有实现(本仓库历史需求、官方内置插件)核对行为基线,说明沿用或差异
功能存在多种产品方案(交互、范围、优先级取舍)记录被否决的方案与原因,作为范围决策依据
纯文档、格式或范围明确的小改动可无调研,章节写「本需求无前置调研」

调研结论的内容要求 ​

每条调研结论按「结论 + 出处 + 影响的功能」表达:

markdown
## 调研结论

| 结论 | 出处 | 影响的功能 | 状态 |
| --- | --- | --- | --- |
| fnOS SDK 提供 `authorizeSharedFile(path)` 无交互授权接口,返回布尔授权结果 | @trimjs/web-app 1.x `dist/index.d.ts`、`dist/index.js` | FNOS-009-10 | 已核实 |
| 官方未公开可稳定直达应用中心 DSH 详情页的跨应用方法 | SDK 接口清单核对 | 应用跳转相关功能 | 不可行,功能不立项 |
  • 结论:一句话说清事实,不写“应该可以”“大概支持”。
  • 出处:来源可追溯——上游源码位置、官方文档链接、SDK 版本、实测环境;不接受“据了解”“网上说的”。
  • 影响的功能:链接到本需求的 功能编号;结论推翻功能设想时,同步调整功能列表并在变更记录说明。
  • 状态:已核实 / 部分核实 / 待核实 / 不可行。待核实 的结论不得作为 P0/P1 功能的唯一依据,对应功能标记 待验证;不可行 的结论保留在表中,防止后续重复调研。

调研结论与文档章节的关系 ​

  • 调研结论支撑「需求背景」中变更原因的成立性;背景里“已在官方源码核实”一类表述必须在「调研结论」中有对应行。
  • 调研中发现的技术细节(源码路径、接口签名、版本差异明细)超出产品边界的部分移入对应计划文档的「当前实现与目标设计」或「参考资料」;需求只保留产品级结论。
  • 调研结论变化(如上游版本更新导致结论失效)按范围变化处理:更新结论状态、调整受影响功能、追加变更记录。
  • 「禁止写入需求文档的内容」仍然生效:登记结论与出处不等于把技术方案搬进需求;出处写到“哪个来源核实”即可,不复制实现细节。

图示规范 ​

需求中的需求流转、功能关系或验收链路使用 mermaid fenced code block;不得使用 text 代码块、ASCII 箭头或纯字符串拼接表达关系图。关键语义必须同时有文字说明。

图示选择规则 ​

场景必须使用的图必须表达的内容
功能存在多个状态或状态转换stateDiagram-v2初始状态、可达状态、触发条件和终态
功能涉及用户、Client、Host、网关或外部服务交互sequenceDiagram参与者、调用顺序、返回结果和失败路径
功能改变既有需求的状态、验收条件或交互stateDiagram-v2 + sequenceDiagram旧状态、新状态、交互差异和明确变更点
单纯表达模块或功能之间的关系flowchart节点职责、依赖方向和边界

既有需求变更的标注 ​

当新需求改变之前需求的状态、验收条件或用户交互时,需求文档必须:

  • 链接被影响的需求编号、功能编号和验收条件。
  • 在当前开发中的需求中说明“原约定 → 新约定”,不回改已完成需求正文。
  • 使用状态图标出被替换的状态或转换,使用时序图标出被重新处理的交互。
  • 在图中的节点、边或 Note 中使用统一前缀 变更点:;仅写 Mermaid 注释 %% 不算完成标注。
  • 图后补充简短文字,说明变更原因和用户可观察结果。

示例:

mermaid
stateDiagram-v2
  [*] --> Existing: 原约定
  Existing --> Changed: 变更点:升级后改用新状态
  Changed --> [*]
mermaid
sequenceDiagram
  participant User as 用户
  participant Client as 客户端
  participant Host as 宿主
  User->>Client: 原交互
  Note over Client,Host: 变更点:设置写入路径重新处理
  Client->>Host: 新交互
  Host-->>Client: 新结果

功能列表规范 ​

功能列表使用固定字段:

编号优先级功能用户可观察结果状态
FNOS-###-01P0/P1/P2功能名称用户完成操作后的结果状态

功能名称应表达用户价值,例如“插件升级后仍可正常加载”“用户升级后可以继续使用已有设置”“旧会话可以继续打开”。

不要使用“迁移 SettingsForms”“修改 package.json”“更新 install_callback”作为功能名称;这些是实现任务。

验收条件规范 ​

验收条件必须描述可观察结果,不使用“代码已提交”“测试已通过”作为唯一条件。

text
FNOS-007-03-AC-01:升级后,用户之前保存的主题偏好仍然生效。
FNOS-007-03-AC-02:用户可以读取、修改并保存授权目录设置。
FNOS-007-03-AC-03:设置写入失败时,原有设置不会被清空或覆盖。

技术验证可以作为计划任务,但不能替代需求验收条件。每项功能还必须按实际宿主依赖写明目标验证环境,不得仅因项目整体部署在 fnOS,就把 NAS 设为所有插件功能的统一完成门槛。

目标环境验收 ​

功能/模块类型必须覆盖的目标环境说明
dsh-fnos 插件及使用 fnOS 专属 API、授权目录或宿主能力的功能DSH Web 与真实 fnOS NASNAS 用于验证 fnOS 宿主桥接、权限、目录授权及设备生命周期;不相关的其他插件不因此附加 NAS 验收
网关、FPK、应用安装/升级/卸载及依赖 fnOS 生命周期的行为真实 fnOS NAS;另按客户端功能需要覆盖 DSH Web/Desktop构建通过不能替代 NAS 上的真实安装与运行验证
其他 DSH 插件(如 Codex Auth、Failover Search、Semi UI)DSH Web 与 DSH Desktop插件不依赖 fnOS 专属能力时,不要求 NAS 验收;涉及外部登录或服务时另验证真实网络/账号条件
文档站及构建工具对应的文档站/构建环境不要求 NAS,除非变更同时影响上述 fnOS 专属行为

当一个功能列表或验收条件混合上述多种模块时,必须拆分验收条件或在计划的验证矩阵中按模块列出环境。状态应分别记录(例如“待 Web/Desktop 验收”和“fnOS 部分待 NAS 验收”),不能把一项插件的 NAS 状态扩散成所有插件的阻塞状态。

优先级和状态 ​

优先级 ​

优先级含义
P0核心运行基线,未完成会影响应用或插件可用性
P1当前需求确定要实现的主要功能
P2已记录但尚未进入当前实施阶段的扩展功能

状态 ​

状态使用条件
规划中已确认范围,尚未完成实现
待验证依赖宿主、SDK、权限或真实环境确认
待完成已有代码或本地验证,但目标环境尚未完成验收
已完成代码、必要构建和目标环境验收全部完成
后续计划已登记但未进入当前计划
待确认需求边界或用户行为尚未确认

状态变化必须写入变更记录,不能只修改状态徽章。已完成需求作为历史记录,不回改正文。

需求文档检查清单 ​

  • [ ] 每个功能都有唯一功能编号和优先级。
  • [ ] 功能描述使用用户或产品语言,而不是代码语言。
  • [ ] 每个 P0/P1 功能都有可观察的验收条件。
  • [ ] 「调研结论」章节存在;依赖上游能力或存在方案取舍的功能,其调研结论有结论、出处、影响功能与状态四要素,待核实 结论未作为 P0/P1 功能的唯一依据。
  • [ ] 涉及状态转换的功能包含 stateDiagram-v2。
  • [ ] 涉及多方交互或交互重处理的功能包含 sequenceDiagram。
  • [ ] 影响既有需求时,图中明确标注 变更点:,并链接原需求/功能/验收编号。
  • [ ] 没有出现具体 API、源码路径、任务编号或迁移步骤。
  • [ ] 不在范围内的内容已经明确列出。
  • [ ] 已进入实施的功能关联对应计划。
  • [ ] 每项功能按宿主依赖列出目标环境;只有 fnOS 插件、网关、FPK/生命周期等确实依赖 NAS 的部分要求真实 NAS 验收,其他插件要求 DSH Web 与 Desktop 验收。
  • [ ] 状态变化和范围变化已经追加到变更记录。

基于 VitePress 构建