SPEC-20261014-fmode-app-v2-草案.md 25 KB

SPEC-20261014-fmode-app-v2 需求规格草案

字段 值
版本 v0.2(草案·已过第1轮评审修复)
最后更新日期 2026-10-14
状态 草稿 · 第1轮评审已修复,待复审
本次变更原因 第1轮独立评审修复(7 严重 + 11 一般):见 docs/04-quality/review/2026-10-14-SPEC-ER评审-第1轮.md
需求源 《访谈-20261014-现状调研汇总.md》+ 用户决策(保留全部功能面 / 重新设计 / 先出设计规范)

本草案的效力:FR 编号与 AC 均已写出,但每条 FR 的「确认状态」为 待确认。用户回答《访谈问卷-20261014-v2需求挖掘.md》后,逐条回填为 已确认,再由评审员子代理评审通过,方可进入阶段②。 标识约定:[存量] 存量已有保留;[重构] 存量有但改为规范做法;[增项·暂不实现] 保留在池不实现;[新增·裁决派生] 由用户裁决派生非新功能;[治理] 治理条款无可验收行为。


一、范围声明

1.1 产品定位

Fmode 双端客户端(桌面横版 + 手机竖版)· 人机共生 IM 中枢:用户通过 IM 式会话与"数字生命"(AI Agent)交互,并查看其运行状态与交付成果。

1.2 范围内(IN)

7 个功能模块(不含登录):

通讯录(FR-03)· 会话(FR-04)· 项目(FR-05)· 事件(FR-06)· 工作台(FR-07)· 任务看板(FR-07b) · 成果(FR-08)

通用能力(跨模块,不计入 7 模块):

入口分流(FR-01)· 登录(FR-02) · 移动聚合首页(FR-19)· 数字生命详情(FR-09)· 我的(FR-10,含端切换)

口径说明(评审 S1 修复):「7 个功能模块」不含登录——登录是跨端通用能力,与"用户可见的业务功能面"不同层。 「7 个模块全部通过测试」(PRD §2.3)指上表 7 个;通用能力另有各自 AC,同样必须通过。

1.3 范围外(OUT,需用户确认)

  • 工作群组 / 多人群聊 / 消息线程([争议] D3,建议明确排除)
  • 自建后端(fmode 平台云函数托管)
  • 响应式单套布局(v2 延续"双端双套")
  • 非 Web 端(小程序 / 原生 App)
  • 语音通话(FR-11,裁决:暂不实现,作增项保留)
  • 定时任务/cron 健康度展示(评审 G9:P3 画像提到但 v2 不做)
  • 任务派发与评论等写操作(FR-07b 一期只读,待 RBAC)
  • 工作群组/多人群聊/消息线程(评审 G3:仅人-数字生命一对一会话)

1.4 上线形态裁决(用户 2026-10-14)

项 裁决
v2 与旧版关系 ✅ 替换旧版。v2 上线后接管主入口,旧项目源码原地保留但停用
使用者画像 ✅ 三类全部:业务同事(手机端为主)/ 管理者超管(桌面端为主)/ 运维交付方(双端)
新功能 ✅ 无。范围冻结在 7 个模块,禁止蔓延
旧项目处置 ✅ 原地保留不动(E:\work\fmode-app,只读参考)

⚠️ 「替换」带来的新增迁移需求(见 FR-16):需处理 localStorage 键兼容、 旧书签/已推送链接跳转、用户重新登录引导。这是裁决直接派生的需求,不是新功能。


二、功能需求(FR)

FR-01 端分流与导航 [存量]

项 内容
描述 入口页 / 按 UA + 视口一次性判定访问端,replaceUrl 跳转,不留历史;各端提供固定导航
验收 AC-01.1 桌面 UA 访问 / → 落 /desktop/chat;移动 UA → 落 /mobile/home
AC-01.2 跳转使用 replaceUrl,浏览器返回不弹回入口页
AC-01.3 桌面导航 7 项(会话/通讯录/项目/事件/工作台/成果/我的),移动底部 5 Tab
AC-01.4 旧路径按当前端前缀重定向 —— 判定标准与路径清单见 FR-16(避免重复表述)
确认状态 待确认(Q4)

FR-02 登录与鉴权 [重构]

项 内容
描述 支持手机验证码登录、Token 直登、#token=/?token= 自动登录;登录后建立会话并校正租户归属
验收 AC-02.1 三种登录方式均可用;桌面/移动共用逻辑、形态不同
AC-02.2 #token= 自动登录成功后清空地址栏(防截屏泄露)
AC-02.3 未登录访问受保护路由 → 跳 /login?redirect=,登录后 replaceUrl 回跳
AC-02.4 租户归属校正由服务端权威判定(现状为客户端 PUT 自改,[重构] 项)
AC-02.5 登录页无 console.debug 残留
AC-02.6 输入校验:手机号格式非法 / 验证码错误 / 验证码过期 / #token= 无效或已失效 → 各有明确错误文案,不得静默失败
AC-02.7 重复登录/重复提交有防抖,不产生并发请求
依赖声明(评审 S3) AC-02.4 的"服务端权威判定"依赖云函数 zl4yU8PAEB 改造(单前端 SPA 无自建后端)。性质与 FR-07b 的云函数依赖相同。
降级策略:服务端仍在 token-sync 内返回权威 company,前端只读不写;禁止前端 PUT 自改(存量反模式)
确认状态 待确认(Q4.3)

FR-03 通讯录 [存量]

项 内容
描述 三类 Tab:全部 / AI 数字生命 / 同事;同事行可展开其名下数字生命
验收 AC-03.1 点击 Tab X 后 [data-testid=tabpanel-X] 可见且其余 tabpanel 不可见;搜索框输入 a 后列表项名称均包含 a
AC-03.2 点数字生命行 → 已接入 FMODE 进会话页,未接入进详情页(判定逻辑须在服务层单点实现,全项目仅一处)
AC-03.3 触达区 ≥ 44×44px
AC-03.4 三态:列表区必须具备 空态/加载态/错误态;错误态含可重试入口,禁止用空态文案掩盖请求失败
确认状态 待确认

FR-04 会话(IM 中枢) [重构]

项 内容
描述 与数字生命一对一 Matrix 会话:发文本/文件、翻历史、看实时状态与成果
验收 AC-04.1 桌面四栏(导航+会话列+聊天区+成果栏);移动全屏+成果抽屉
AC-04.2 发送文本 → Matrix 房间消息 → 气泡追加 → 滚动到底
AC-04.3 发送文件 → 预签名直传 → 发文件卡片;有上传进度可见
AC-04.4 历史超过 200 条启用虚拟滚动,上翻保持锚点
AC-04.5 输入框支持 Enter 发送 / Shift+Enter 换行 / 真实自增高(scrollHeight 驱动)
AC-04.6 同一状态不得三处同屏重复渲染
AC-04.7 成果栏 variant 样式分支真实生效(修正恒等三元)
AC-04.8 发送失败有可见错误提示与重试入口;失败消息不丢失
AC-04.9 断线可自动重连并显示连接状态(connecting/connected/disconnected)
AC-04.10 超长文本:消息气泡/列表标题超长时截断或换行规则明确,不撑破布局
AC-04.11 三态:会话列表与消息区必须具备 空态/加载态/错误态,错误态含可重试入口
确认状态 待确认(Q4.2)

FR-05 项目 [存量]

项 内容
描述 项目工作区:项目 ↔ 会话 ↔ 交付物 关联视图
验收 AC-05.1 桌面宽窗(≥ 1150px 断点,见 NFR-05)左右分栏同屏;移动为列表→详情同页切换且可返回列表(判据:返回后列表滚动位置保持)
AC-05.2 选中项目可见其会话与交付物,交付物可展开看 artifacts 外链
AC-05.3 三态:项目列表与详情必须具备 空态/加载态/错误态,错误态含可重试入口
确认状态 待确认

FR-06 事件 [存量]

项 内容
描述 交付 / 执行 / 告警 事件流,按天分组,支持分类筛选
数据源口径(评审 G3) 事件为由交付物 + 状态派生的合成信号,v2 不新增服务端事件表。「告警」= 由交付失败/状态异常派生的提示,非独立审计流
验收 AC-06.1 点击筛选 chip X 后,列表项 data-category 均为 X
AC-06.2 事件按天分组显示,组头为日期
AC-06.3 筛选 chip 触达区 ≥ 44px(现状 28px)
AC-06.4 三态:事件流必须具备 空态/加载态/错误态,错误态含可重试入口
确认状态 待确认

FR-07 工作台(数字生命看板) [重构]

项 内容
描述 网格卡片展示每个数字生命:头像/状态/当前任务/CPU/内存/余额/通道
验收 AC-07.1 卡片展示上述字段
AC-07.2 双端取数走同一实况服务,口径一致(含 token 用量)
AC-07.3 加载失败必须显示错误态,禁止伪装为空态或权限问题
AC-07.4 余额可点击外链;通道详情用 bottom-sheet
确认状态 ✅ 已确认(多任务部分由 FR-07b 承载)

FR-07b 任务看板(多任务真源) [新增·已纳入]

项 内容
描述 消费 Hermes kanban 真任务数据,展示任务列表 / 详情 / 运行流水 / 阻塞告警
裁决(用户 2026-10-14) ✅ 纳入 v2 范围
调研结论 见《调研-20261014-多任务并行可行性.md》——Agent 侧能力具备,采集脚本已写,AgentTask/AgentTaskRun 表已建,仅缺云函数接收端
数据源 容器 /opt/data/kanban.db(SQLite 只读) → 云函数 → 5 张表:AgentTask / AgentTaskRun / AgentLiveEvent(已建) + AgentTaskComment / AgentTaskAttachment(待建,评审 N3 补)
展示范围 ① 任务列表(标题 / 状态 / 负责人 / assignee / 时间 / 分支)
② 任务详情(body markdown / 评论 / 附件 / 运行流水 runs)
③ 阻塞告警(block_kind + consecutive_failures + 阻塞时长,如现存「已阻塞 436h」)
④ 状态筛选(按 tasks.status 七态:triage/todo/scheduled/ready/running/blocked/done)
双端形态 桌面:列表 + 详情分栏(或独立路由);移动:列表 ↔ 详情同页切换
AgentLiveEvent 口径(评审 G7) 一期仅落库,前端不消费(task_events 1845 条,需增量上报;v2 UI 不展示)
关键约束 ① 一期只读(写操作待 RBAC,不做派发/评论)
② 依赖云函数改造(当前未实现,属独立工作流)
③ 前端不得直读 SQLite 或绕过 AgentTask 表
④ 任务数据按 agentId 过滤,与现有会话/成果页保持同一数字生命上下文
验收 AC-07b.1 任务列表按状态筛选、按时间倒序
AC-07b.2 任务详情展示 body(markdown 渲染)/评论/附件/运行流水
AC-07b.3 阻塞任务显著标记并显示阻塞时长与原因
AC-07b.4 双端取数走同一任务服务,口径一致
AC-07b.5 加载失败显示错误态,禁止伪装空态
AC-07b.6 一期零写操作入口(无派发/评论按钮)
阻塞前置 云函数接收端未实现 + 新增评论/附件两表(见 ER §二.B) + 6 组未知待 Agent 核实(见《待问Agent-20261014-多任务接入核实.md》)
依赖声明 本 FR 的前端实现依赖云函数改造完成。若云函数未就绪,v2 可先落空态与接口层,不得伪造数据
确认状态 ✅ 已裁决(纳入)

FR-08 成果 [存量]

项 内容
描述 交付成果浏览:按项目分组 / 按时间线 双视图
验收 AC-08.1 点击分段器「按时间线」后时间线容器可见且按项目容器不可见(反之亦然)
AC-08.2 条目可展开看文件,图片/视频支持全屏预览
AC-08.3 成果数据统一走成果服务,禁止组件自行请求
AC-08.4 三态:成果列表必须具备 空态/加载态/错误态,错误态含可重试入口(修正存量「接口挂了显示暂无成果」)
确认状态 待确认

FR-09 数字生命详情 [存量]

项 内容
描述 数字生命档案页:身份信息 + 运行指标 + 交付时间轴
验收 AC-09.1 展示身份/状态/当前任务/CPU/内存/更新时间
AC-09.2 未接入 FMODE 时提供进入会话入口(桌面禁用态,移动不得用原生 alert)
AC-09.3 指标不得在页面内两处重复渲染
AC-09.4 三态:详情页必须具备 加载态/错误态,错误态含可重试入口
确认状态 待确认

FR-10 我的 [存量]

项 内容
描述 身份卡 + 账号信息 + 端切换 + 修复 Token + 退出
验收 AC-10.1 端切换与"恢复自动识别"可用
AC-10.2 退出需二次确认
AC-10.3 版本号从构建注入,禁止硬编码
确认状态 ✅ 已确认(端切换保留,见第二轮裁决 D5)

FR-11 语音通话 [增项·暂不实现]

项 内容
描述 全屏语音通话,信令走 Matrix m.call,媒体走 WebRTC
裁决(用户 2026-10-14) 暂不实现,作为"增项"保留在需求池。v2 首选版本不含此功能
范围处理 ① 不进 MVP 范围;② 不设路由、不建组件、不引通话相关代码;
③ 但需求条目保留,以 [增项] 标记,便于后续版本捡起;
④ 存量中 voiceEnabled 恒 false 的死入口一并移除,不得把不可达 UI 带进 v2
遗留依赖 若未来捡起,必须先解决:AC-11.2 TURN 凭据由服务端签发临时凭据。
存量 core/matrix-client.ts 存在明文硬编码的 TURN username/credential(具体值见存量文件,本文件不复录,违反黄金规则 9)
验收 AC-11.1 (暂不适用)
AC-11.2 将来实现时:前端零 TURN 凭据
AC-11.3 v2 中不得存在通话死入口
确认状态 ✅ 已裁决(暂缓)

FR-12 UI 规范符合性(横切) [重构]

项 内容
描述 所有界面基于 ui-kit 官方组件底座 + 设计令牌构建
验收 12.1~12.5 全部可脚本断言(npm run verify:ui),判据为脚本退出码 0
AC-12.1 扫描业务目录匹配 #[0-9a-fA-F]{3,8} / rgb( / rgba( / hsl( → 0 处(现状 321)
AC-12.2 匹配 --wecom- / --fx- / --dk- / --ok / --crit / --warn- → 0 处(现状 3 套前缀 + 46 处双轨色)
AC-12.3 实际使用的 font-size 去重 ≤ 8 档;border-radius 去重 ≤ 4 档(现状 25/24)。测量口径:业务目录(core/components/desktop/mobile),底座 src/app/ui/** 豁免(见《设计令牌.md》§6.1)
AC-12.4 src/styles.scss(+拆分出的 _palette.scss)总行数 ≤ 300,业务样式扫描 0 处(现状 2079 行全局)
AC-12.5 全项目只有一处 ThemeService + 只有一处 PaletteService;4 套整体配色 × 明暗(共 8 种观感)切换后无残留硬编码色
  → 修订留痕(2026-10-14):原文为「9 accent 切换」;用户敲定原型改为 4 套整体配色后,AC 口径同步修订(《设计令牌.md》§4.5 / ADR-006 v2.0)
AC-12.6 ui-kit 引用 ≥ 30 个不同组件(现状 2 个)。
  → 门槛定为 30,已定稿可直接判定。依据:阶段②组件规范已明确"关键页面由哪些 ui-kit 组件拼装",实际清单 58 项;
  → 判据:grep -roh '<ui-[a-z-]*' src/app/{desktop,mobile,components} \| sort -u \| wc -l ≥ 30;
  → 若阶段②完成后实际清单 < 30,则下修门槛并留痕,不得反向放宽判定标准。
确认状态 待确认(AC-12.6 门槛 30,实列 58,不阻塞)

FR-13 无障碍基线(横切) [重构]

项 内容
描述 达到可用的无障碍基线
验收 AC-13.1 交互元素有 aria-*/role;图像有 alt
AC-13.2 键盘可达,:focus 有可见样式(禁止全局 outline:none)
AC-13.3 所有触达区 ≥ 44×44px(现状 5 处违规)
AC-13.4 支持 prefers-reduced-motion
确认状态 待确认

FR-14 单一事实源与轮询收敛(横切) [重构]

项 内容
描述 每个数据域只允许一个服务负责取数,视图只消费
验收 AC-14.1 轮询器收敛为 1 个(现状 4 个重叠)
AC-14.2 视图层零直接数据请求(现状 StatusPanel/移动工作台/详情页各自请求)
AC-14.3 stop() 真实停止轮询,不得空实现
确认状态 待确认(Q4.3)

FR-15 代码洁净度(横切) [重构]

项 内容
描述 无死代码、无调试残留
验收 AC-15.1 零 console.log/debug
AC-15.2 无 0 引用的服务/方法/样式类(现状 matrix.service.ts 142 行等)
AC-15.3 无注释掉的旧逻辑
确认状态 待确认

FR-16 旧版替换迁移 [新增·裁决派生]

项 内容
描述 v2 替换旧版上线,需平滑迁移存量用户状态,不得让用户"打开就懵"
来源 用户 2026-10-14 裁决「替换旧版」直接派生,非新功能
迁移项 ① localStorage 键兼容:fmode_ui_mode_override(端选)/ fx-theme(主题)/ fmode_dk_sidebar_collapsed(侧栏折叠)
② 旧书签/已推送链接:/messages、/workbench、/deliverables、/mine、/chat/:id、/agent/:id 等旧路径按当前端前缀重定向
③ 登录态:token 存储机制若变更,需明确是否自动续期还是引导重新登录
④ 首访引导:若用户状态无法完整迁移,给出明确提示而非静默降级
验收 AC-16.1 旧 localStorage 键能正确读取或安全忽略(不报错、不串主题)
AC-16.2 完整旧路径清单均可重定向:/messages /workbench /deliverables /mine /chat/:id /agent/:id /call/:agentId(本 FR 为路径重定向的唯一事实源,FR-01 AC-01.4 引用本项)
  → /call/:agentId 落点明确(评审 T-A):因 FR-11 语音通话已裁决暂不实现,重定向目标为 /agent/:id(数字生命详情页),
    并在详情页给出可见提示「语音通话功能暂未开放」。禁止为其建通话路由或空壳页面。
AC-16.3 登录态迁移策略已文档化且有实现
AC-16.4 迁移失败有可见提示,禁止静默失败
关联 与 FR-01(端分流)、FR-02(登录)交叉
确认状态 ✅ 已派生(源自上线形态裁决),AC 待评审

FR-17 三类画像的信息架构适配 [新增·裁决派生]

项 内容
描述 同一份数据服务三种信息密度(见《用户画像.md》)
来源 用户 2026-10-14 裁决「三类使用者全部」直接派生
设计约束 ① 桌面端走高密度(多栏对比),移动端走高可达(单列、大触达区、沉浸)
② P2/P3 的核心场景是工作台 + 任务看板,须保证这两个模块的可见性
③ 术语分层:P1 看到业务语言("交付成果"),P2/P3 可见技术指标但不与 P1 界面混排
④ 首页信息架构需兼顾:移动端聚合首页(P1)、桌面端看板优先(P2/P3)
验收 AC-17.1 两端默认落地页已定稿并写入路由表:桌面 /desktop → /desktop/chat,移动 /mobile → /mobile/home;判据:重定向目标与文档一致
AC-17.2 工作台与任务看板在两端均可 ≤ 2 次点击到达(判据:从落地页起算的导航路径长度)
AC-17.3 技术指标(CPU/内存/用量/运行流水)不出现在 P1 主流程界面(会话页、成果页)的默认视图中
确认状态 ✅ 已派生,AC 待评审

FR-18 范围冻结声明 [治理]

项 内容
描述 v2 范围冻结于 7 个功能模块 + 5 项通用能力(见 §1.2)
来源 用户 2026-10-14 裁决「无新功能,冻结范围」
治理要求 ① 任何新增功能须走变更请求流程,由用户 A 决策
② AI 禁止以"顺手做了"为由增加页面/接口
③ 已确认为增项的功能(语音通话)不得在无新裁决的情况下捡起
确认状态 ✅ 已确认

FR-19 移动端聚合首页 [存量]

项 内容
描述 移动端落地页:①事件提醒条 ②最新交付成果×3 ③最近会话×6,各带"全部"入口
来源 评审 G1 —— 该页被 AC-01.1 引用却无 FR 定义
验收 AC-19.1 计数与列表条数一致(修正存量"显示 20 却只有 6 行"的误导)
AC-19.2 每个区块独立三态(空/加载/错误),错误态不得伪装成"暂无交付成果"
AC-19.3 搜索/输入框字号 ≥16px(iOS 不触发缩放)
AC-19.4 "全部"入口分别落到 /mobile/events、/mobile/deliverables、/mobile/messages
确认状态 待确认

FR-20 超管可见范围 [重构]

项 内容
描述 超管(角色 FMODE_AGENT_SUPERADMIN)可见名下全部容器/数字生命,不受普通用户 ACL 限制
来源 评审 G2 —— 存量 v0.6.0 已实现但无 FR 承载,且与租户隔离存在潜在越权冲突
安全要求 ① 可见范围判定在服务端,前端 roles 字段不得作为授权依据
② 与"业务表必须带 company 指针隔离"共存:超管跨租户取数由服务端授权后返回,前端只读
③ 普通用户越权访问他租户资源 → 服务端返回 403 语义,不得返回空列表(空列表会掩盖越权尝试)
验收 AC-20.1 超管可见跨公司容器;普通用户不可见
AC-20.2 前端代码中无基于 roles 字段的授权分支(判据:grep 命中 0)
AC-20.3 越权访问返回 403 而非空列表
依赖声明 依赖服务端授权逻辑;若未就绪,前端按"仅可见本人 ACL 范围"降级,不得自行放宽
确认状态 待确认

三、非功能需求(NFR)

编号 类别 要求 现值/目标
NFR-01 性能 首屏初始包体(gzip) ≤ 400 KB;懒加载后单 chunk ≤ 250 KB
NFR-02 性能 路由懒加载,Matrix SDK 不进主包 [存量] 已实现,保留
NFR-03 安全 前端零服务端密钥(masterKey / OBS / TURN) 存量违规 2 处,v2 必须为 0
NFR-04 安全 租户隔离由服务端权威 [重构]。依赖声明:承载方 = 云函数 zl4yU8PAEB(token-sync),需改造为服务端返回权威 company;未就绪时前端只读不写
NFR-05 兼容 桌面 1440×900 / 移动 390×844 为主基线;桌面断点定值见本节末尾「断点定值」 [重构],现状无降级
NFR-06 可测 单测 + 双端全路由冒烟 [存量] Karma+Jasmine + Playwright
NFR-07 可追踪 全链文档:PRD→SPEC→ER→API→测试→留痕 [重构]

断点定值(评审 N5 修复 · 阶段②布局规范的基线)

断点令牌 值 布局行为
bp-dk-full ≥ 1280px 桌面四栏全展开,右栏 340px 舒适宽
bp-dk-4col 1150–1279px 桌面四栏压缩:右栏收窄至 300px
bp-dk-3col 940–1149px 桌面三栏:右栏变为浮层(默认收起)
bp-dk-2col 768–939px 桌面两栏:导航图标化 + 列表 + 主区
bp-mobile < 768px 由端分流接管;桌面路由不在此宽下渲染

依据:

  • 1150px 是实测阈值,不是拍脑袋:存量四栏固定合计 ≈900px(236+318+340),实测「窗口 < ~1150px 时聊天主区被压到几乎不可用」——这是存量代码暴露出来的真实临界点
  • 1280 在其上留出舒适余量,作为"不压缩"的阈值
  • 768 与 DeviceService.NARROW_PX = 768 保持一致,避免出现两套窄屏判定
  • 940 取"导航图标化 + 列表 + 主区最小可用"的推算式:列表 300 + 主区 480 + 导航图标 64 + 间距 ≈ 900,取整到 940

落地要求:断点必须定义成令牌(见《设计令牌.md》§十布局令牌),不得在组件里写媒体查询魔数。 断言:扫描中不得出现裸 @media (max-width: 1150px) 之类的非令牌断点。

修订留痕:本表初稿曾定为 1280/1024/768 三段。采纳《同类产品参考调研》§五·Q4 的实测结论后修订—— 用 1150(实测痛点)替代 1024(推测值),并补 940 一档;768 保留(与代码一致)。 依据强度从"推测"提升为"实测"。

NFR-03 适用范围裁决(用户 2026-10-14):用户明确表示「不用管这个安全,git 是我自己的服务器」。 据此调整:存量 deploy.sh 明文 OBS 凭证 + matrix-client.ts 明文 TURN 凭据,因仓库托管于用户自有私有服务器,风险等级由「事故」降为「可接受的技术债」,不列入 v2 的阻塞项。 仍保留的约束:v2 新写代码不得引入服务端密钥到前端(masterKey 铁律不变,黄金规则 6);存量旧代码的既有问题不在 v2 范围处理。 原 S1/S2 安全事项从访谈问卷的「必答」降为「已裁决·不处理」。


四、四向追溯矩阵

唯一事实源:完整矩阵维护于 docs/04-quality/traceability-matrix.md(评审 N2/T-B)。 本处不再维护副本 —— 第 2 轮评审发现两处副本的 AC 区间会各自陈旧、互相误导。 本节仅保留导航指针,任何矩阵更新只改 traceability-matrix.md。

项 位置
矩阵全表(FR × 画像 × AC × 设计 × 测试) docs/04-quality/traceability-matrix.md
NFR 追溯 同上 §非功能需求追溯
变更传播链 同上末尾

当前规模:21 条 FR 行(FR-01~FR-20 + FR-07b),13 条 NFR 行。


五、待办与门禁

门禁 条件 当前
G1 SPEC 草案完成 本文档落盘 ✅
G2 用户确认 FR/AC 访谈问卷全部回答(见《访谈-20261014-第三轮裁决记录.md》§五) ✅ 已解除
G3 画像/RACI/流程图 已产出 ✅
G4 ER 图落位 见 02-design/database/ER-图-草案.md 🟡 草案(❓ 待核对,不阻塞设计阶段)
G5 评审员子代理评审 第1轮报告:不通过 → 已修复 → 待复审 🟡
G6 阶段① → ② 切换 G2~G5 全通 ⬜
G-D1 设计初版评审 关键页面原型经用户确认(裁决 11) ⬜