# 家谱 APP 换机继续任务交接(2026-07-22) > 用途:把当前项目完整复制到另一台电脑后,让新的 Codex/GPT 会话无需重新推翻既有设计,直接从正确停点继续。 > > 当前权威状态:2026-07-21 的全项目响应式审核、MuMu 复核、两位专家评审与第一轮产品优化已经闭环。本文件覆盖 `docs/交接记录.md`、`docs/新会话审批交接_2026-07-19.md`、`docs/夜间批量收敛交接_2026-07-20.md` 中与当前进度冲突的旧停点;旧文件只保留为历史证据。 ## 1. 换机时必须复制什么 最稳妥的方式是复制整个 `jiapuapp` 项目目录,而不是只重新拉取远端代码。当前工作包含源码、测试、规划和可能尚未同步到远端的文件,不能假设远端仓库已经拥有本轮全部成果。 新电脑上的项目路径可以变化。下文把项目根目录记为: ```text ``` 必须保留: - `AGENTS.md` - `App.vue`、`pages/`、`components/`、`styles/`、`utils/` - `tests/`,尤其是响应式覆盖、白名单和本轮新增合同 - `docs/`,尤其是 2026-07-21、2026-07-22 的规格、计划和本交接 - `static/` 与 `design-pipeline/` 中的正式资产、清单和重建脚本 - `pages.json`、`package.json` 及项目配置文件 本地证据目录: - `tmp/project-audit/`:G10 之后逐页 MuMu 审核截图 - `tmp/project-optimization/`:专家优化后的 MuMu 复核截图 `tmp/` 通常不属于长期仓库资料。如果希望在新电脑继续查看本轮截图,必须单独复制上述两个目录;不复制不会影响源码和合同,但会失去本轮临时视觉证据。 可在换机后重新生成、无需作为权威资料的目录包括 `node_modules/`、`unpackage/`、`.vite/` 和其他构建缓存。不要删除正式资产、测试、规划、母版或长期证据来缩小目录。 ## 2. 新会话必须按顺序阅读 新的 Codex/GPT 接管后,在修改代码前完整阅读: 1. `AGENTS.md` 2. `docs/换机继续任务交接_2026-07-22.md`(本文件) 3. `docs/superpowers/specs/2026-07-21-project-wide-responsive-layout-design.md` 4. `docs/superpowers/plans/2026-07-21-responsive-foundation-phase-1.md` 5. `tests/responsive-layout-coverage.json` 6. `styles/adaptive-frame-profiles.scss` 7. `docs/superpowers/plans/2026-07-21-project-wide-audit-and-expert-optimization.md` 8. `docs/superpowers/specs/2026-07-21-whole-product-enrichment-design.md` 9. `docs/superpowers/plans/2026-07-21-whole-product-enrichment-implementation.md` 发生冲突时,权威顺序为: 1. 用户在新会话中的最新明确要求。 2. 本交接文件。 3. 2026-07-21 的响应式、专家优化规格和计划。 4. 当前源码、测试和配置。 5. 更早的交接、设计记录和历史截图。 旧文档中“从 G01 开始”“只审核 H5”“Android 尚未验证”“仍剩 52 页待审”等说法已经失效,不得据此回退当前进度。 ## 3. 当前真实完成状态 - `App.vue`、公共组件和所有活动页面共 **66 个 Vue 文件**已全部纳入响应式扫描。 - 最近一次闭环结果:实际 Vue `66`、覆盖 `66`、缺失 `0`、陈旧 `0`。 - A 系列与 G01—G10 由用户在 MuMu 中逐页确认过;正式人工验收断点曾是 G10。 - G11、G12 以及后续 T、F、R、N、M 页面已经按用户授权,由主代理在 MuMu 中逐页、逐状态继续审核并完成问题修复,不再停在 G11。 - G10 之后已覆盖 G11—G12、T01/T03—T08、F01—F10、R01—R11、N01—N02、M01—M10。 - 两位专家已经完成评审和交叉质询: - 视觉交互专家:Dirac - 功能代码专家:Leibniz - 不要重新创建两位专家或重复第一轮专家评审,除非用户在新会话明确要求第二轮。 - 两位专家的结论已经汇总到产品丰富化设计和实施计划;第一轮接受的六个优化批次已经实现。 - 规划文件中的实施检查项已经全部标记完成。 ## 4. 已完成的关键修复与优化 ### 4.1 全项目响应式基础 - 九宫格边框和可变高度装饰面的唯一所有者:`styles/adaptive-frame-profiles.scss`。 - 页面和普通组件不得自行定义 `border-image-slice`。 - 可变高度内容由内容自然撑高,不使用固定高度掩盖问题。 - 弹窗只允许使用视口 `max-height`,内容区域内部滚动。 - 页面内禁止重新出现 `background-size: 100% 100% no-repeat`。 - 固定比例图标、头像、印章、缩略图等例外只允许登记在 `tests/responsive-layout-allowlist.json`。 - 响应式扫描范围唯一清单:`tests/responsive-layout-coverage.json`。 ### 4.2 第一轮专家优化的六个批次 1. **原生路由参数** - G01、G03、G06 不再依赖 `location.hash`、`URLSearchParams` 或 `hashchange`。 - Android 活动页参数由各页 `onLoad(query)` 唯一持有。 - 保护合同:`tests/native-route-query-contract.ps1`。 2. **AppDialog 高度预算** - `components/AppDialog.vue` 统一持有顶部、底部安全区和唯一最大高度公式。 - 外层弹窗使用 Flex 列布局,内容区 `min-height: 0` 并独立滚动。 - 已在 G10、R04、R08、F07、M10 等短/长弹窗复核。 3. **共享点击语义** - `components/AppTabbar.vue` 提供 `tablist`、`tab`、`aria-selected` 和按压反馈。 - `components/GenealogyCard.vue` 提供按钮语义、组合可访问名称和按压反馈。 - 保护合同:`tests/shared-interaction-accessibility-contract.ps1`。 4. **G10 拒绝原因校验** - 文本域具有稳定 ID、`aria-invalid`、`aria-describedby`。 - 错误元素使用 `role="alert"`;空提交后文本域自动聚焦。 - 页面:`pages/genealogy/g10-application-review.vue`。 5. **唯一密码策略** - 唯一所有者:`utils/validation.js`。 - A04、A05、M04 统一要求 8—32 位且同时包含字母和数字。 - M04 额外拒绝新密码与当前密码相同。 - 保护合同:`tests/password-policy-contract.ps1`、`tests/password-policy-runtime-smoke.js`。 6. **T01 回到当前成员** - 页面:`pages/tree/t01-tree-overview.vue`。 - 用户横向拖离当前节点后才显示“回到当前”。 - 最终实现不是固定偏移或简单 `scroll-into-view`,而是测量滚动视口和选中节点中心后设置精确 `scroll-left`。 - MuMu 最终实测中心误差约 `0.24 CSS px`。 ### 4.3 本轮逐页审核中已经解决的典型问题 - G11、G12、T03—T06 等内容面板移除强制 `min-height`,恢复内容驱动高度。 - F02、F06、F09 等长文本输入改为自然增长的 `auto-height`。 - F04/F03 和 F09/F08 修复固定页头在长列表、原生媒体滚动时的层叠问题。 - F10 的可变高度装饰面迁移到共享九宫格档案。 - R01 卡片移除固定高度和百分比内边距,并改用原生 `onLoad` 状态参数。 - T01 的代际栏、横向提示、树画布和非树状态已分别约束,不能再退回固定大画布补丁。 完整逐页记录见: - `docs/superpowers/plans/2026-07-21-project-wide-audit-and-expert-optimization.md` - `docs/superpowers/specs/2026-07-21-whole-product-enrichment-design.md` - `docs/superpowers/plans/2026-07-21-whole-product-enrichment-implementation.md` ## 5. 最近一次验证基线 2026-07-21 最终闭环时: - 全部 `tests/*.ps1`:`129/129 PASS` - `tests/password-policy-runtime-smoke.js`:PASS - 四个用户指定核心基线:全部 PASS - Vue 文件:`66/66` - Vue 中 `100% 100% no-repeat`:`0` - Vue 中直接 `border-image-slice`:`0` - MuMu 设备:`emulator-5554` 在线 - MuMu 物理尺寸:`900×1600` - MuMu density:`320 dpi` - Android WebView 逻辑视口约为 `451×800 CSS px` 这些数字是上次闭环事实。换机后必须重新运行验证,不能因为本文件写着通过就直接宣称新环境通过。 ## 6. 新电脑首次启动后的验证顺序 在 `` 中运行: ```powershell powershell -ExecutionPolicy Bypass -File tests/adaptive-frame-profiles-contract.ps1 powershell -ExecutionPolicy Bypass -File tests/project-responsive-layout-contract.ps1 powershell -ExecutionPolicy Bypass -File tests/ag-responsive-surfaces-contract.ps1 powershell -ExecutionPolicy Bypass -File tests/compile-audit.ps1 node tests/password-policy-runtime-smoke.js ``` 运行全部 PowerShell 合同: ```powershell $files = Get-ChildItem -LiteralPath tests -Filter '*.ps1' | Sort-Object Name $pass = 0 $fail = 0 $failed = @() foreach ($file in $files) { & powershell -NoProfile -ExecutionPolicy Bypass -File $file.FullName *> $null if ($LASTEXITCODE -eq 0) { $pass++ } else { $fail++ $failed += $file.Name } } Write-Output "TOTAL=$($files.Count) PASS=$pass FAIL=$fail" $failed ``` 核对 Vue 覆盖: ```powershell $coverage = (Get-Content -Raw tests/responsive-layout-coverage.json | ConvertFrom-Json).covered | Sort-Object $actual = @(rg --files -g '*.vue' | ForEach-Object { $_ -replace '\\','/' }) | Sort-Object $missing = @($actual | Where-Object { $_ -notin $coverage }) $stale = @($coverage | Where-Object { $_ -notin $actual }) "ACTUAL=$($actual.Count) COVERED=$($coverage.Count) MISSING=$($missing.Count) STALE=$($stale.Count)" ``` 核对两项禁用规则: ```powershell rg -n --glob '*.vue' '100%\s+100%\s+no-repeat' . rg -n --glob '*.vue' 'border-image-slice\s*:' . ``` 两条 `rg` 命令无输出才是正确结果。 ## 7. MuMu 验证规则 - 只使用 MuMu 安卓模拟器作为视觉验收依据,不使用浏览器截图代替。 - 不要启动、关闭或改变用户的模拟器配置,除非用户明确要求。 - 新电脑上的设备序列号可能不再是 `emulator-5554`,先用 `adb devices` 读取真实值,不要硬编码旧值。 - 上次设备为 `900×1600 / 320dpi`;如果新电脑已有不同配置,先报告,不要擅自调整。 - 忽略截图中的“3D研究室”等系统水印。 - 每次修改页面后,先跑聚焦合同、全局响应式合同和编译审计,再等待 HBuilderX 热更新,最后在 MuMu 复核。 - 视觉截图必须等待页面稳定;拒绝过渡帧、空白页、错误路由、未加载完成和被软键盘意外遮挡的截图。 - MuMu WebView 调试端口在上次环境为 `9223`,每次导航后 target ID 都可能变化,可用以下命令重新查询: ```powershell curl.exe -s http://127.0.0.1:9223/json ``` - CDP 只能辅助导航、读取 DOM 和逻辑状态;最终视觉结论必须来自 ADB 获取的 MuMu 屏幕截图。 ## 8. 后续开发必须继续遵守的原则 - 整个项目自适应,不接受只针对某个尺寸的单页补丁。 - 内容高度由内容决定。 - 弹窗只使用视口最大高度和内部滚动。 - 不通过压缩字号、降低行高或随意缩小按钮掩盖布局错误。 - 每个确认问题先提出五个可行方案,比较全局合同、回归风险、影响范围、维护成本和 MuMu 可验证性,再自主选择最优方案。 - 共享规则必须由唯一公共所有者持有;页面不得复制九宫格切片、密码规则或共享弹窗高度公式。 - 修改合同必须同时更新唯一所有者、运行代码、验证器、测试和文档,删除旧路径,不保留“以防万一”的兼容读取。 - 页面提示文案不得使用“汤正华堂侄”等具体姓名示例,应使用“某某某堂侄”等通用提示;已有 fixture/mock 数据本身无需清理。 - 不重复修改已经通过的 G01—G10,除非有明确证据证明全局改动造成回归。 - 不执行 `git add`、`commit`、`push`、`restore`、`checkout`、`reset` 等 Git 变更操作。 - 不删除或覆盖用户现有改动、未跟踪文件、资产、测试和文档。 ## 9. 下一阶段推荐入口 响应式和第一轮专家优化已完成。下一阶段不要重新做全项目响应式迁移,优先从已记录但尚未进入第一轮实现的产品深化项中选择: 1. **导航栈语义统一**:区分 `navigateTo`、`redirectTo`、`reLaunch`、`switchTab` 的业务边界,避免深层页面堆栈和错误返回。 2. **短信验证码完整状态机**:发送、倒计时、重发、失败、过期、提交锁定及页面离开清理。 3. **跨页面领域数据持久化**:替换部分只在当前页面生效的演示状态,使创建、编辑、删除后的结果在返回列表时一致。 4. **全局文字层级与可访问性第二轮**:在不缩小字号的前提下统一正文、辅助信息、错误提示和可触控语义。 推荐先处理“导航栈语义统一”,因为它影响页面返回、跨模块入口和后续数据持久化,但实施前仍要先形成独立设计与迁移计划。不要一次混合实施以上四项。 ## 10. 新会话首次回复必须报告 接管者完成阅读和只读检查后,先向用户报告: 1. 读到了哪些当前权威文件。 2. 当前已经完成到哪里。 3. 五个核心验证和全量合同是否仍通过。 4. Vue 覆盖是否仍为精确相等,禁用规则是否仍为零。 5. MuMu 是否在线、实际设备序列号、尺寸和 density。 6. 准备从哪个第二阶段深化项开始,以及为什么。 在这些事实没有核对前,不要一上来修改代码。 ## 11. 可直接复制到新会话的提示词 ```text 请全程使用中文。项目根目录是: 【替换成新电脑上的 jiapuapp 绝对路径】 开始前必须完整阅读: 1. AGENTS.md 2. docs/换机继续任务交接_2026-07-22.md 3. docs/superpowers/specs/2026-07-21-project-wide-responsive-layout-design.md 4. docs/superpowers/plans/2026-07-21-responsive-foundation-phase-1.md 5. tests/responsive-layout-coverage.json 6. styles/adaptive-frame-profiles.scss 7. docs/superpowers/plans/2026-07-21-project-wide-audit-and-expert-optimization.md 8. docs/superpowers/specs/2026-07-21-whole-product-enrichment-design.md 9. docs/superpowers/plans/2026-07-21-whole-product-enrichment-implementation.md 当前全项目响应式、G10 后续页面 MuMu 审核、两位专家评审和第一轮六个优化批次已经完成。不要重新推翻已通过设计,不要回到 G01/G10 重新开始。两位专家 Dirac 与 Leibniz 已完成工作,不要重复创建。 先运行并报告: powershell -ExecutionPolicy Bypass -File tests/adaptive-frame-profiles-contract.ps1 powershell -ExecutionPolicy Bypass -File tests/project-responsive-layout-contract.ps1 powershell -ExecutionPolicy Bypass -File tests/ag-responsive-surfaces-contract.ps1 powershell -ExecutionPolicy Bypass -File tests/compile-audit.ps1 node tests/password-policy-runtime-smoke.js 然后运行全部 tests/*.ps1,并核对: - 实际 Vue 与 tests/responsive-layout-coverage.json 是否完全相等; - 是否仍有 100% 100% no-repeat; - Vue 是否仍直接写 border-image-slice; - MuMu 是否在线及其实际尺寸、density。 只使用 MuMu 做视觉审核,不使用浏览器截图代替;不要启动或关闭模拟器,不要擅自修改模拟器尺寸。不要执行任何 Git 变更操作,不要删除或覆盖现有文件。 下一阶段优先评估“导航栈语义统一”。遇到真实问题时提出五个方案,自主选最优方案;修改前写失败合同,修改后必须在 MuMu 复核。先报告读到的内容、当前完成状态、测试、覆盖、MuMu 状态和下一步,不要一上来改代码。 ``` ## 12. 交接完成判定 新电脑满足以下条件后,才算成功接管: - 能完整打开项目且正式资产没有缺失。 - 五个核心验证通过。 - 全部 PowerShell 合同通过,或明确列出只在新环境失败的合同及根因。 - Vue 覆盖精确相等,两个禁用扫描为零。 - HBuilderX 能把项目热更新到用户当前 MuMu。 - MuMu 截图中的 G10、T01、G01 或另一个代表页与本轮视觉基线一致。 - 接管者能准确复述唯一所有者、禁止事项和下一阶段入口,没有回退到旧 H5 审核停点。