Files
jiapuapp/docs/换机继续任务交接_2026-07-22.md
T

305 lines
16 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 换机继续任务交接(2026-07-22
> 用途:把当前项目完整复制到另一台电脑后,让新的 Codex/GPT 会话无需重新推翻既有设计,直接从正确停点继续。
>
> 当前权威状态:2026-07-21 的全项目响应式审核、MuMu 复核、两位专家评审与第一轮产品优化已经闭环。本文件覆盖 `docs/交接记录.md`、`docs/新会话审批交接_2026-07-19.md`、`docs/夜间批量收敛交接_2026-07-20.md` 中与当前进度冲突的旧停点;旧文件只保留为历史证据。
## 1. 换机时必须复制什么
最稳妥的方式是复制整个 `jiapuapp` 项目目录,而不是只重新拉取远端代码。当前工作包含源码、测试、规划和可能尚未同步到远端的文件,不能假设远端仓库已经拥有本轮全部成果。
新电脑上的项目路径可以变化。下文把项目根目录记为:
```text
<JIAPUAPP_ROOT>
```
必须保留:
- `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. 新电脑首次启动后的验证顺序
`<JIAPUAPP_ROOT>` 中运行:
```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 审核停点。