完成全项目响应式审核与换机交接

This commit is contained in:
2026-07-22 07:41:27 +08:00
parent a127280ce6
commit eced3d1e6e
77 changed files with 2052 additions and 378 deletions
+304
View File
@@ -0,0 +1,304 @@
# 家谱 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 审核停点。