Files
jiapuapp/docs/今晚全量联调与明早测试执行计划.md
T
2026-07-23 17:21:33 +08:00

302 lines
30 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 今晚全量联调与明早测试执行计划
## 一、计划地位
本文是今晚到明早的唯一执行顺序与验收入口。既有治理文档继续提供历史背景和长期发布约束,但与今晚的批次顺序、时间分配或“可测试”口径冲突时,以本文为准。`APP.openapi.yaml``APP.openapi.json` 只读且受保护,不得修改、格式化、覆盖或删除。
当前处于“规划重整”阶段。在用户明确确认本版规划前,冻结业务代码、页面样式、接口接线、构建和 MuMu 操作;只允许只读核对与中文规划文档写入。规划确认后再按本文批次测试先行实施,不以已存在的半成品或局部截图代替用户确认。
## 二、明早交付目标
明早交付一套连接 `https://backend-api.ddxcjp.cn/`、能够在 MuMu 中从认证入口开始遍历的 UniApp 测试版本。`pages.json` 中全部 52 条活动路由都必须可进入、可返回、无白屏和死路;后端已有接口的页面必须调用真实接口,后端确实没有接口的页面必须显示“服务暂未开放”或同义的明确状态,不得用 mock、fixture、timer 或假成功伪装闭环。
测试版本不等同于正式发布版本。发布签名、正式域名 CORS、后端未实现合同和真实支付等外部条件可以保留为发布阻塞,但必须提供失败门禁、复现证据、解除条件和继续步骤。
“全量”分三层报告,禁止混为一个结论:
1. 已接真实接口的链路执行 live E2E,并据证据判定通过或失败。
2. 尚无后端 operation 的页面执行路由、交互、状态和视觉回归,并明确标为服务未开放,不能记作接口通过。
3. OpenAPI、签名、正式域名和其他发布门禁按预期发布阻塞单列,不能把预期红灯吞成全绿,也不能让它掩盖本机可修复失败。
今晚的可靠最低交付是“52/52 路由可进入返回 + 当前 7 个 remote consumer 的主链可信联调 + 其余页面诚实标记数据模式”;在此基础上按完成定义继续扩大 LIVE 页面数量。不得为了追求数字把只完成路径拼接、宽 DTO 直传或单一成功样例的页面提前标记为 LIVE。
## 三、已确认口径
- 唯一后端为 `https://backend-api.ddxcjp.cn/`,今晚联调使用 remote 模式。
- 已提供有效测试账号;账号凭据只用于本机联调,不写入源码、测试、文档、日志或 Git。
- 已用标准 JSON 请求确认密码登录返回 HTTP 200,`/captcha/challenge` 返回 HTTP 200、`TIANAI/SLIDER` 和完整挑战数据。此前空体 500 是 PowerShell 调用原生 `curl` 时 JSON 引号被破坏造成的错误诊断,不再作为后端阻塞。
- 密码登录、短信登录、注册、忘记密码都必须显示并完成 TAC。密码登录接口不接收 `validToken`,滑动成功只作为客户端强制前置;短信发送接口必须消费对应场景的 `validToken`
- 允许操作 MuMu,并把实机画面、返回路径和交互状态纳入验收。
- 沿用当前 `static` 国风视觉资产和现有页面结构;今晚修复白块、截断、错位、默认控件、触控尺寸、长文本和不同宽度适配,不重做整套视觉。
- 允许测试账号创建带“联调测试”标识的家谱、成员、申请、动态、文章、相册、礼仪、备忘、功德和反馈等测试数据。
- 不删除已有真实数据;无人值守期间不执行支付、换绑手机号、注销账号或不可逆操作。修改密码若经人工窗口测试,结束后恢复约定密码。
- 不执行 `git add``commit``push``restore``checkout``reset`,除非用户另行明确授权。
## 四、单页完成定义
一个页面只有同时满足以下五项才标记为完成:
1. 从真实业务入口可进入,系统返回键、页面返回按钮和根页面切换行为正确。
2. 后端已有操作使用真实接口,路径、方法、请求字段、响应字段和身份上下文与 Apifox、线上文档及真实响应一致。
3. 正常、加载、空数据、失败、无权限和提交中状态完整;写操作另有校验、重复点击保护、成功、明确失败和结果未知处理。
4. MuMu 实际画面没有白块、文字截断、控件错位、默认原生底色或不可点击区域;普通内容、长内容和状态页均可阅读。
5. 页面对应的 mapper/runtime 测试、静态合同、编译检查和实机检查均通过。
自动脚本通过不能替代实机视觉合格,单张静态截图也不能替代接口与交互合格。
所有报告项只使用以下五种状态:`PASS``FAIL``EXPECTED_BLOCKED``NOT_RUN``INFRA_ERROR`。每项必须同时记录首次结果;如果进行了允许的只读重试,另记重试结果,不覆盖首次失败。
## 五、接口判定和实现规则
1. Apifox 用于判断接口业务用途;线上 `/v3/api-docs` 和真实请求用于确认当前部署路径、字段及故障表现;受保护 OpenAPI 只作离线补充。
2. 先列出当前批次的“页面 → 动作 → 方法 → 路径 → 输入 → 页面字段 → 成功/失败表现”,再写该批次失败测试,随后实现。
3. 接口存在就接入;4xx、5xx、空体、缺字段或身份错配必须展示真实失败,不回退 mock。
4. 后端没有对应 operation 时,页面保留完整视觉和返回路径,动作显示服务未开放,不伪造保存、发送、上传、支付、邀请或审核成功。
5. 单个接口排查超过 15 分钟仍无本机解决路径时,立即记录复现证据并继续其他页面,避免阻塞整夜。
6. 每个合同只有一个 owner;新合同落地时同步移除同类 fixture、旧入口、兼容读取和过时测试期望。
7. 真实写操作仅限测试账号和本轮新建、带“联调测试”标识且已登记 ID 的对象。GET 可按退避规则重试;写操作只有接口明确提供幂等键且结果可判定时才允许重试,超时、5xx、断线或进程终止造成结果未知时立即停止该动作并查只读结果。
每条路由的执行记录至少包含:`route`、真实入口、必填参数、测试角色/种子、`dataMode(LIVE/LOCAL_PREVIEW/CLOSED)`、主动作、返回结果、页面状态证据、LIVE 请求响应证据、MuMu 结果和 blocker。
## 六、执行批次与相对时间
### 第 0—0.5 小时:硬预检与全量映射
- 核对当前 HEAD、工作区、52 条路由、构建入口和已有测试。
- 按页面盘点真实接口、现有 fixture、入口、写操作和视觉风险。
- 只维护一张执行表和必要阻塞证据,不扩写与今晚交付无关的治理长文。
- 夜跑前确认源码 HEAD 与 dirty diff、remote 配置、后端版本、网络、磁盘、MuMu 在线/解锁、测试包安装、测试账号会话、测试家谱 ID 和账号角色。缺少第二角色账号时,跨账号申请/审核不得伪造通过,单列测试数据阻塞。
- 建立唯一夜跑入口:按固定清单发现测试,单项有超时,失败后继续下一项,记录检查点并支持从最后完成项续跑;结束时回收子进程。连续认证失败、429、同域 5xx、设备离线、磁盘不足或写结果未知触发对应域熔断。
### 第 0.5—1.5 小时:A 认证与 TAC
- 页面:A01、A04、A05及认证状态、协议和返回相关入口。
- 链路:密码登录、短信登录、注册、忘记密码、TAC challenge/verify、短信发送、会话保存和 G01 跳转。
- 重点视觉:验证码倒计时、禁用按钮、输入行、协议、Toast、TAC 弹层、短屏滚动和 360/412 宽度。
- 用户宣布准备休息时,暂停其他工作并进入 45—60 分钟人工窗口。密码登录 TAC、A01 短信登录、A04 注册和 A05 找回是四条独立流程;若同时具备已注册收码号码和未注册号码则逐条验证,否则把缺少号码的流程标记测试数据阻塞。人工完成后验证会话在页面重进和应用重启后仍有效。
- 记录会话有效性但不记录令牌;无人值守阶段若会话失效,停止需要身份的实机动作并标记 `EXPECTED_BLOCKED`,不尝试绕过认证。
- 无人值守阶段不循环发送短信,不自动破解或绕过 TAC。自动接口测试取得的临时令牌只验证登录后接口,不能冒充认证页面验收。
### 第 1.5—3.5 小时:remote 主链与 B 高风险页面
- G01、G03、G05、G06、G08、G09、G10、G11、G12。
- T01、T03—T08及所有活动世系路由。
- 优先完成 A01 → G01 → G05 → T01 和 M07 已接线主链的 P0/P1,再按测试角色和后端合同推进我的家谱、原子建谱、公开搜索、普通申请、我的申请/撤回、待审/审核、设置、字辈、成员详情、编辑和关系操作。
- T01 不按当前文字节点和简单底部操作条直接验收;必须先按第十一节完成头像人物卡、选中态、人物操作面板、关系快捷动作和长世代布局的测试门禁,再进入 T03—T06 的真实读写接线。
- 后端未提供的邀请码、详情或冲突控制不混入其他普通申请链路;缺失功能显示明确不可用状态。
### 第 3.5—5.5 小时:52 路由 MuMu 遍历
- 按 A/G/T/F/R/N/M 顺序记录每页真实入口、必填参数、默认状态、Android 返回和根切换。
- 这一阶段不以匆忙接接口为目标;先发现白屏、死路、缺参数、上下文串谱和明显视觉破损,并为每页标记 LIVE、LOCAL_PREVIEW 或 CLOSED。
### 第 5.5—7 小时:C/D/E 接口扩展与代表性状态视觉
- F01—F10:动态、评论、文章、相册、照片、媒体、视频和上传相关页面。
- R01—R11:人物、礼簿、礼仪、成长、人生事件、备忘和功德。
- 已有读取和写入接口接真实服务;上传链不完整时不得显示假上传成功;人生事件无接口时显示服务未开放。
- N01、N02和 M01—M10同步按风险扩展通知、资料、安全、帮助、反馈、推广、VIP、关于和退出。
- 换绑、支付、注销等敏感或缺少完整后端闭环的动作在无人值守阶段只验证页面、校验和真实不可用状态。
- 视觉按共享形态覆盖认证表单、列表、详情、编辑器、弹窗、上传和关闭页;共享控件缺陷一次修全,高风险页补长文、空、错和无权限。320/412 用响应式运行检查补充,MuMu 当前设备证据不冒充其他宽度原生证据。
### 第 7—8.25 小时:全量测试、重编译和候选包
- 运行 PowerShell、Node、语法、纯 Node、活动 Vue 脚本和构建检查。
- 构建测试版本并在 MuMu 中从认证根页遍历四个主入口和全部活动页面。
- 检查重新进入、切换家谱、凭证失效、弱网、重复点击、请求取消、空数据、4xx/5xx和返回行为。
- 安全覆盖 HTTP 200 业务错误、400/401/403/404/409/429/500、超时、畸形 JSON、重复或失真 ID、撤权、快速切页、离页取消、前后台切换和迟到响应;不适合对真实服务触发的故障使用确定性本地传输注入,不能攻击线上服务。
- 输出已通过、后端阻塞、缺测试数据和需人工复验四类结果,不用含糊的“基本完成”。
### 第 8.25—9 小时:候选包回归与证据归档
- 对候选测试版本快速重走认证根页、四个主入口、家谱上下文和本轮失败项。
- 汇总五种状态、首次结果、熔断、人工项和精确继续步骤,保留至少 45 分钟缓冲,不在最后时刻追加未验证接口。
## 七、三人交叉复核
主代理是唯一写入者。两位评审者只读检查每一批的接口、业务、交互、异常和视觉;发现分歧时给出证据并互相反驳,统一结论后由主代理修改。评审在批次边界进行,不并发写文件,也不把开放式讨论拖入下一批。
## 八、无人值守边界
- 可以继续读取、创建带测试标识的数据、运行测试、构建和操作 MuMu。
- 不发送外部消息,不循环请求短信,不破解验证码,不使用生产数据做破坏性试验。
- 不支付、不换绑、不注销、不删除已有家谱或用户内容。
- 后端、测试账号、发布签名或 MuMu 人工验证码成为硬阻塞时,记录:失败门禁、请求与响应、复现步骤、解除条件、恢复后的第一步。
- 用户有新消息时优先处理;用户说“准备睡了”即进入认证人工窗口。
- Authorization、手机号、OTP、TAC proof、邀请码和个人资料不得进入报告、截图文件名或仓库日志。原始运行日志和截图放在本机临时验收目录,限制容量并在报告中只引用脱敏摘要。
- TalkBack、系统大字号和无法可靠自动化的原生辅助功能只做可重复的早晨人工项,自动截图不得冒充无障碍通过。
## 九、明早交付物
1. MuMu 中可启动和遍历的测试版本;能够产出测试 APK 时同时给出 APK 路径,缺发布签名不阻塞开发测试包。
2. 52 条路由的完成状态与入口清单。
3. 页面—接口映射和真实请求结果。
4. 自动测试、构建检查和 MuMu 实机验收结果。
5. 后端阻塞、测试数据阻塞和需要人工复验的精确清单。
6. 明早从登录开始的最短人工回归步骤。
7. 运行元数据:源码 HEAD/dirty 状态、开始结束时间、后端地址与可识别版本、MuMu 分辨率/density、账号角色、各项耗时和熔断记录;不包含任何凭据。
## 十、执行记录
| 批次 | 状态 | 已通过 | 阻塞或人工项 |
| --- | --- | --- | --- |
| 断点与映射 | PASS | HEAD、dirty 工作区、OpenAPI 哈希、52 条路由、remote 配置、构建产物、MuMu 设备和当前接口 owner 已核对 | 无 APK;开发测试包可由 HBuilderX 继续运行 |
| A 认证与 TAC | 进行中 | 后端密码登录与 challenge 均只读确认 200;认证专项自动门禁已通过;A01 短信默认态 MuMu 视觉已通过 | 四条 TAC/短信流程和倒计时态留待睡前人工窗口 |
| B 家谱与世系 | 规划重整中 | G01/G05/T01 已有部分真实接口改动 | 实施冻结;先确认第十一节,再测试先行重做 T01 并复核 T03—T06 |
| C/D 内容与族务 | 待执行 | 无 | 待接口盘点 |
| E 消息与我的 | 待执行 | M07 已有真实反馈接口基础 | 待接口盘点 |
| 全量验收 | 待执行 | 无 | 构建、MuMu 和整体验收待执行 |
### 第 0 批硬预检证据
- 源码基线:`main`HEAD `f1edc6b53320755a8638c99d492250153a8dcb17`;工作区包含续作改动,未执行暂存、提交、还原或重置。
- 受保护 OpenAPI
- `APP.openapi.yaml``8964CD583CE172425B63BBFD802F7EB587EB3641EADFD6F9D3B264FAA8090C6C`
- `APP.openapi.json``87DB1DC148C5E6E877815AFF7B3A7FC7C7ECA95A2CEC50A88B42F3908961F31A`
- 活动路由共 52 条:A 3、G 9、T 7、F 10、R 11、N 2、M 10;导航路由与导航流程门禁均通过。
- 当前真实接口 consumer 共 7 页:A01、A04、A05、G01、G05、T01、M07。其余 45 页在逐页接线前均按 `LOCAL_PREVIEW``CLOSED` 报告,不冒充 LIVE。
- MuMu 设备在线:Android 12720×1280density 320HBuilder 基座处于前台;现有 `app-plus` 开发构建可运行,尚无 APK。
- 测试账号密码登录成功;只读查询“我的家谱”返回空列表,可作为 G01 空态种子。后续通过 G03 创建带“联调测试”标识的本轮家谱后,登记返回 ID 再继续 owner 链路。
- 普通申请、撤回、待审和审核需要第二独立账号形成申请人/管理员双角色;当前缺少第二角色时标为测试数据阻塞,不伪造跨账号通过。
- 注册需要一个未注册且能接收短信的手机号;未提供前只完成页面、TAC 前置和接口合同,真实注册标为测试数据阻塞。
## 十一、产品参考功能基线与 T01 世系树重做计划
### 11.1 参考资料的归档与换路径办法
1. 原参考目录 `C:\Users\Administrator\Desktop\job\app设计` 只视为一次性导入源,不是项目运行依赖,也不是长期权威路径。业务代码、测试、文档合同和构建脚本均不得硬编码该绝对路径。
2. 当前已取得的参考资料保存在项目相对目录 `docs/design/references/产品参考原稿`。该目录作为换电脑、原目录改名或移动后的本地参考副本;是否采用某个功能仍以用户确认和后续中文映射表为准,不能因为图片已归档就默认全部照搬。
3. 当前电脑性能较弱,本阶段不批量解码图片、不做 OCR、不生成缩略图、不跑图像相似度或全量构建。用户回家并提供新的参考目录后再执行完整核对。
4. 新目录核对只读进行:先枚举相对文件名、类型、大小和 SHA-256,再与项目内参考副本比较;只归档新增或内容变化的文件。旧副本不因源目录缺文件而自动删除,发现冲突先列清单给用户确认。
5. 完整核对后建立 `docs/产品参考页面功能映射表.md`。每张参考页面必须映射到:参考文件、项目路由、保留功能、调整后的交互、沿用的国风视觉、明确舍弃的旧行为、接口 owner、数据模式、测试门禁和 MuMu 验收项。没有映射的参考图不得直接驱动代码。
6. 参考 App 是功能和交互来源,不是整套视觉照抄目标。项目继续使用当前 `static` 中已确定的国风资产、色彩和组件语言;旧稿的亮红导航、卡片比例等只在用户明确点名时采用。
7. 用户回家后的恢复步骤固定为:提供新目录 → 只读清单与哈希差异 → 补充归档 → 完成中文页面映射 → 用户确认映射 → 才把对应功能纳入实现批次。目录再次变化时重复相同步骤,不改业务代码中的路径。
8. 用户后续提供的“已经完成的项目”作为第二参考源,价值高于单张截图对交互细节的表达,但仍不是当前项目的需求、接口或代码权威源。即使页面名称相同,也不得默认业务含义、角色权限、字段、接口和异常处理相同。
9. 完成项目在用户给出新绝对路径后先只读盘点;第一轮不安装依赖、不运行构建、不修改参考仓库。检查范围包括路由、页面、组件、状态流、API 封装、数据模型、权限判断、视觉资产和异常分支,同时排除凭据、令牌、环境地址、签名、用户数据和机器专属配置。
10. 禁止按目录、页面文件或组件整包迁移。甄别和采用的最小单位是“页面中的一个用户动作及其完整状态”,逐项映射后才能进入当前项目的测试先行批次。
### 11.2 T01 目标画面与交互
T01 的验收目标不是“能显示一棵文字树”,而是能够识别人、关系、代际并对选中人物执行明确动作的长世代世系树:
1. 人物节点使用头像卡片,至少呈现头像、姓名、关系标签和代际信息;配偶位于同一代并保持成组关系,父母、子女、兄弟姐妹的连接线不能断裂或指向错误人物。
2. 有真实头像时通过统一文件投影显示;无头像、文件缺失或加载失败时使用确定性的国风默认头像,不使用随机网络图片或伪造真人照片。不能把 `avatarOssId` 直接拼成 URL。
3. 支持横向与纵向浏览长世代内容;选中人物需有清晰高亮。长姓名、大字号、大量成员和数十代数据下,卡片、代际标签和连接线仍可辨认。
4. 点击人物卡后打开唯一的人物操作面板,取代互相竞争的旧底部操作条。面板中央放大展示当前人物卡,头像区域提示并支持“点击头像查看资料”。
5. 操作面板必须包含以下功能入口,并始终携带当前 `genealogyId``personId`
- 点击头像查看资料;
- 添加父亲;
- 添加母亲;
- 添加配偶;
- 添加兄弟姐妹;
- 调整排行;
- 添加儿子;
- 添加女儿;
- 邀请绑定;
- 编辑信息。
6. 面板遮罩点击、关闭按钮、Android 系统返回键、页面返回键、重复点击和焦点恢复行为必须一致。提交中的动作禁用重复触发;页面离开或响应迟到时不得把结果写入错误人物。
7. 操作入口是否可见和可用由服务端权限或明确能力字段决定。不能因为当前账号从管理入口进入,就在前端猜测其拥有编辑、邀请或调整关系权限。
### 11.3 页面职责与唯一 owner
| 页面 | 唯一职责 | 不得承担 |
| --- | --- | --- |
| T01 世系树 | 读取树、布局、浏览、选择人物、展示操作面板并导航到对应流程 | 不直接伪造任何写操作成功,不保存另一份成员详情 |
| T03 成员详情 | 读取并展示真实人物资料;承接“点击头像查看资料” | 不以本地 fixture 冒充服务端人物 |
| T04 添加亲属 | 统一承接父亲、母亲、配偶、兄弟姐妹、儿子、女儿六类新增关系 | 不为六个入口复制六套提交合同,不猜测缺失 ID |
| T05 编辑成员 | 修改头像和允许编辑的基础人物资料 | 不承担排行或关系拓扑修改 |
| T06 关系维护 | 调整排行及后端明确支持的关系维护 | 不退化为另一份通用人物编辑页 |
| 邀请绑定流程 | 在独立合同下邀请用户并绑定人物 | 不与普通加入家谱申请或邀请码直接加入混为一条链 |
| T07/T08 | 成员目录、成员状态等辅助读取 | 不成为 T01 写操作的旁路 owner |
T04 的六个入口只传递稳定的词法 ID、`relationType` 和必要的意图提示;页面先展示当前人物和待添加关系,最终字段及性别等约束由后端合同校验。不得复制人物来模拟配偶,也不得仅凭“儿子/女儿”等按钮文案在本地推导超出请求意图的数据。
### 11.4 接口映射与启用条件
| 用户动作 | 页面 owner | 计划接口 | 启用条件 |
| --- | --- | --- | --- |
| 展示世系树 | T01 | `GET /genealogy/app/genealogies/{genealogyId}/lineage/tree` | 树 DTO、稳定 ID、代际、配偶与父子连接关系已收紧并通过运行时测试 |
| 查看人物资料 | T03 | `GET /genealogy/app/genealogies/{genealogyId}/lineage/persons/{personId}` | 路由参数与响应投影一致,不回退 fixture |
| 添加儿子/女儿 | T04 | `POST .../lineage/persons/{personId}/children` | 请求 DTO、写入结果、重复提交与结果未知规则明确 |
| 添加父亲/母亲 | T04 | `POST .../lineage/persons/{personId}/parents` | 同上,并由服务端校验关系冲突 |
| 添加兄弟姐妹 | T04 | `POST .../lineage/persons/{personId}/siblings` | 同上,不通过复制已有节点伪造 |
| 添加配偶 | T04 | `POST .../lineage/persons/{personId}/spouses` | 同上,并能读取提交后的真实关系 |
| 编辑人物资料/头像引用 | T05 | `PUT /genealogy/app/genealogies/{genealogyId}/lineage/persons/{personId}` | 字段白名单、头像上传/引用/访问 URL 闭环和结果确认完整 |
| 调整排行 | T06 | 后端明确支持的关系或 `sortOrder` 写操作 | 并发、权限、冲突和结果确认规则明确后才启用 |
| 邀请绑定 | 独立流程 | 待 Apifox、线上合同和真实响应共同确认 | 必须有明确 operation、身份安全和幂等/结果查询规则;缺失时显示“服务暂未开放” |
接口路径中的 `...` 仅是规划表的共同前缀缩写,实际合同和测试必须写完整路径。`avatarOssId` 的 owner 是统一上传与文件访问链路;未确认上传、文件引用和可访问 URL 三段闭环前,T05 不显示假上传成功。邀请绑定没有独立后端 operation 时记为 `EXPECTED_BLOCKED`,不能借用普通家谱加入申请或邀请码接口。
所有写操作都必须定义提交中、成功、明确失败和结果未知四种结果。只有后端合同明确支持幂等或存在无副作用的结果查询时才允许安全恢复;超时、断网或 5xx 后不能用 timer 自动提示成功,也不能把本地草稿当成服务端已提交。
### 11.5 数据与状态约束
- `genealogyId``personId`、父母/配偶/子女引用均按稳定词法 ID 处理,不转数字、不截断、不以姓名定位。
- 树投影至少明确头像访问结果、姓名、关系类型、代际、父母引用、配偶引用、同辈排行 `sortOrder` 和权限/能力;字段缺失必须进入可解释失败或降级状态,不能静默拼错树。
- 关系类型采用单一枚举 owner,页面、API adapter、validator、测试和文档共同消费,禁止各页面维护中文字符串分支。
- 排行调整的并发和最终顺序由服务端结果负责;前端可以预览但不能在服务失败后保留假顺序。
- 恢复信息不得持久化手机号、头像原图、身份证明、邀请凭据等 PII;只保留完成恢复所需的最小非敏感标识和状态。
### 11.6 测试先行与实施顺序
规划经用户确认后,T01/T03—T06 按以下独立小批次执行,每批由主代理写入、两位评审者只读复核接口、业务、交互、异常和视觉,当前批通过后才进入下一批:
1. **T01-0 失败门禁**:先新增会失败的合同,锁定头像节点、姓名/关系/代际、唯一人物操作面板、十个动作入口,并禁止旧底部操作条与新面板并存。
2. **T01-1 树 DTO 与布局**:收紧树 normalizer 和 validator,验证父母、配偶、子女、代际、排行、缺头像、失真 ID、重复节点、断链及循环关系;旧宽 DTO 必须失败。
3. **T01-2 视觉与交互**:实现头像人物卡、连接线、选中态、横纵浏览和操作面板;覆盖遮罩、返回键、焦点恢复、重复点击、快速切换人物和迟到响应。
4. **T01-3 页面导航合同**:逐项验证 T01 → T03/T04/T05/T06 的参数、返回后选中态和树刷新;邀请绑定若无合同,只验证诚实关闭态。
5. **T03/T04/T05/T06 真实接线**:每个页面先写 mapper/runtime 失败测试,再接对应 GET/POST/PUT;六种亲属动作分别验证请求意图,但复用一份 T04 提交合同。
6. **异常与恢复**:覆盖空树、加载失败、403、404、409、429、500、超时、断网、离页取消、结果未知、权限变化、头像加载失败和提交后重新读取不一致。
7. **性能与视觉验收**:以小树、数十代、数百成员、长姓名、无头像和多配偶数据检查布局预算、滚动流畅度、连接线及内存;不以无限数据承诺替代明确上限。
8. **MuMu 与无障碍**:先在 720×1280 实机检查,再补 320/412 响应式检查;验证触控尺寸、文本缩放、读屏名称、焦点顺序、弹层焦点约束、系统返回和低性能设备操作反馈。TalkBack 等无法稳定自动化的项保留可复现人工步骤。
### 11.7 T01 完成定义
T01 只有同时满足以下条件才能标记为 `PASS`
1. 真实头像或确定性默认头像可见,姓名、关系、代际和连接线正确。
2. 点击任一人物只打开一个完整操作面板,十个入口均能到达正确页面/流程,或在后端确实缺失时明确显示服务未开放。
3. T03 展示真实详情;T04 六类关系写入、T05 编辑和 T06 排行/关系操作各自遵守唯一 owner,没有 fixture、timer、兼容旁路或假成功。
4. 树刷新后能以服务端数据确认变更;写结果未知时停止重复写并提供恢复路径。
5. 当前国风视觉一致,长世代滚动、卡片、连接线、遮罩和返回行为在目标尺寸上稳定,无白块、截断、误触和不可读状态。
6. 接口、业务、交互、异常、视觉、性能和无障碍门禁通过三人交叉评审;自动测试、编译检查和 MuMu 实机证据齐全。
### 11.8 当前暂停项
- 已新增的 `tests/t03-member-api-runtime-smoke.js``tests/t03-member-remote-contract.ps1` 以及 `utils/api.js` 中 T03 normalizer 属于规划重整前留下的半成品。T03 页面尚未完成真实接线,因此整体状态是“暂停、未完成”,规划确认后从失败门禁重新核对,不能计入已完成页面。
- 当前 T01 已有的文字节点、简单选中态、底部“查看资料/添加亲属”以及任何单张 MuMu 预览都不构成本节验收证据。
- 在用户确认本节前不继续修改 T01/T03—T06,不批量处理参考图,不运行构建或 MuMu 验收。
### 11.9 已完成参考项目的逐项甄别门禁
参考项目与当前项目可能属于不同版本、不同产品边界、不同技术实现或不同后端合同,因此采用优先级固定为:
1. 用户对当前产品明确确认的需求和取舍;
2. 当前真实后端、Apifox、线上接口文档及可复现响应;
3. 当前 UniApp 的路由、架构、安全约束和已确定国风视觉基线;
4. 参考截图与已完成参考项目。
参考项目中的每个候选功能必须逐项回答:
- 业务目标是否与当前产品一致;
- 使用角色、权限来源和数据归属是否一致;
- 当前后端是否有对应 operation,请求、响应、枚举和错误语义是否一致;
- 是否适合当前 UniApp、Android、导航结构和低性能设备;
- 正常、加载、空、失败、无权限、重复提交和结果未知状态是否完整;
- 视觉是否能融入当前国风体系,无障碍和触控要求是否满足;
- 是否包含旧接口、硬编码、兼容分支、fixture、PII、凭据或其他不可继承风险。
每个候选功能只能得出以下一种书面结论:
| 结论 | 含义 | 后续动作 |
| --- | --- | --- |
| 直接采用 | 业务、合同、交互和视觉均与当前项目一致 | 先写当前项目失败测试,再按本项目结构实现 |
| 改造后采用 | 功能有价值,但接口、权限、状态或视觉需要调整 | 在映射表中列出差异和改造边界后实施 |
| 仅参考交互 | 只能借鉴信息结构或操作方式 | 不复制其数据层、API 代码和环境配置 |
| 后端缺失,暂时关闭 | 当前服务没有可靠 operation 或结果确认链 | 保留诚实关闭态并登记解除条件 |
| 与当前产品冲突,明确舍弃 | 违反当前需求、架构、安全或视觉口径 | 记录舍弃原因,禁止后续人员再次误迁移 |
`docs/产品参考页面功能映射表.md` 对完成项目增加以下列:参考仓库相对路径、参考路由、候选动作、参考状态流、当前目标路由、当前接口证据、差异、甄别结论、改造边界、测试 owner 和用户待确认项。存在分歧或证据不足时标记“待确认”,不得由代理静默选择。
参考项目不得向当前仓库带入旧后端地址、账号、Token、密钥、签名、应用标识、用户数据、构建产物、依赖缓存或 Git 历史。采用其功能也必须重新通过当前项目的合同测试、运行时测试、编译、MuMu 视觉与三人交叉评审;“参考项目里能运行”不能作为当前项目完成证据。