From 61ca737e022a02c11f9fcf72e0e3668b3c90a018 Mon Sep 17 00:00:00 2001 From: Codex Date: Sun, 13 Sep 2026 21:24:54 +0800 Subject: [PATCH] docs: record UI cleanup checkpoint --- ...1-Recovery-Completion-Report-2026-09-12.md | 55 ++++++++++++ docs/UI_CLEANUP_INVENTORY_2026-09-13.md | 13 +++ docs/UI_CLEANUP_REPORT_2026-09-13.md | 88 +++++++++++++++++++ ui-tests/phase03-verification-contracts.mjs | 44 ++++++++++ 4 files changed, 200 insertions(+) create mode 100644 docs/Phase-03-V11-Recovery-Completion-Report-2026-09-12.md create mode 100644 docs/UI_CLEANUP_REPORT_2026-09-13.md create mode 100644 ui-tests/phase03-verification-contracts.mjs diff --git a/docs/Phase-03-V11-Recovery-Completion-Report-2026-09-12.md b/docs/Phase-03-V11-Recovery-Completion-Report-2026-09-12.md new file mode 100644 index 0000000..7302c9e --- /dev/null +++ b/docs/Phase-03-V11-Recovery-Completion-Report-2026-09-12.md @@ -0,0 +1,55 @@ +# Phase 03 V1.1 恢复复验 Completion Report + +日期:2026-09-12 +分支:`codex/ui-v11-fidelity` + +## 结论 + +**Phase 03 COMPLETE / 项目整体继续 NO-GO。** + +实名认证增量预留已按当前客户基线重新验证。人脸核验继续默认关闭,不实现自研识别,不保存人脸模板或向量。Phase 04 及以后未获准开始。 + +## 本阶段修复 + +- 移除小程序首页开发预览中将当前用户 `verified` 写死为 `true` 的行为。 +- 未登录时现在直接进入登录引导且保持 `userState: null`;登录后的实名状态只能来自 `/api/v1/home` 的服务端数据。 +- 新增行为契约测试,实际执行首页登录门禁并验证未登录状态不会请求首页接口或伪造实名状态。 + +## 数据与配置验证 + +- Flyway V016 保留 `verification_level`、`liveness_verification_status`、`verification_provider` 三项预留。 +- `livenessVerification.enabled` 默认值为 `false`。 +- 生产代码不存在 `face_embedding`、`face_template` 或自研人脸识别实现。 +- 前端与生产代码未发现“100%真实”“官方婚姻状态认证”“官方单身认证”等绝对承诺。 + +## 自动化验证 + +| 检查 | 结果 | +|---|---| +| `IdentityVerificationTest` | 5/5 通过,0 failure,0 error | +| `MockIdentityVerificationProviderTest` | 4/4 通过,0 failure,0 error | +| `ui-tests/phase03-verification-contracts.mjs` | 1/1 通过 | +| `ui-tests/ui-contracts.mjs` | 通过 | +| Admin Web TypeScript | 通过 | +| Miniapp TypeScript | 通过 | + +Maven 前台容器命令在 Codex 等待窗口内未正常回传控制台,但本轮生成的 Surefire 报告时间为 2026-09-12 15:03:57,并明确记录上述 9 项测试全部通过。 + +## 门禁核对 + +- [x] V1.0 实名 Provider、身份证加密/hash 回归通过。 +- [x] 成年校验相关既有测试通过。 +- [x] 实名状态不再由首页预览数据硬编码。 +- [x] 人脸能力 Flag 默认关闭。 +- [x] 未实现或保存人脸 embedding/template。 +- [x] 前端无夸大实名与婚姻状态承诺。 + +## 未覆盖与风险 + +- Backend 全量 277 项历史回归债务不属于本阶段,仍未全绿。 +- 真实生产实名认证 Provider 尚未选型;生产环境不得使用 Mock Provider。 +- 本阶段未重新执行管理端 production build,只完成 TypeScript 检查。 + +## 下一阶段 + +Phase 04:Profile、Preference 与本地资格。进入前须由用户明确确认;不得自动进入。 diff --git a/docs/UI_CLEANUP_INVENTORY_2026-09-13.md b/docs/UI_CLEANUP_INVENTORY_2026-09-13.md index 989271c..f3766ea 100644 --- a/docs/UI_CLEANUP_INVENTORY_2026-09-13.md +++ b/docs/UI_CLEANUP_INVENTORY_2026-09-13.md @@ -101,3 +101,16 @@ - `artifacts/backups` 下数据库备份; - 两张用户指定参考图; - 尚未进入视觉重构阶段的有效业务页面与接口。 + +## 7. 清理后核验 + +| 项目 | 清理后结果 | 结论 | +|---|---:|---| +| `app.json` 注册页面 | 63 | 页面业务范围未减少 | +| 页面逻辑源文件 | 63 | 每个页面只保留一个 `.ts` 或 `.js` 实现 | +| 页面 TS/JS 同名源 | 0 对 | 11 对页面双源已全部消除 | +| 共享 TS/JS 同名源 | 2 对 | 仅保留 `env`、`utils/api` 兼容层 | +| 管理端源文件 | 27 | 未删除仍被路由使用的管理端页面 | +| Markdown 文档 | 99 | 已包含本清单与清理报告,旧冲突规范已移除 | + +11 组页面双源中,9 组 `.js` 为脚手架空壳或旧编译副本,直接保留现有 TypeScript 实现;`local-eligibility` 与 `local-eligibility-supplement` 的 `.js` 含有效 Phase 04 修复,相关真实 API、材料上传、状态刷新与审核提交逻辑已先迁移到 TypeScript 后再删除旧源。 diff --git a/docs/UI_CLEANUP_REPORT_2026-09-13.md b/docs/UI_CLEANUP_REPORT_2026-09-13.md new file mode 100644 index 0000000..969cb7e --- /dev/null +++ b/docs/UI_CLEANUP_REPORT_2026-09-13.md @@ -0,0 +1,88 @@ +# UI 旧代码与冲突文档清理报告 + +日期:2026-09-13 +分支:`codex/ui-v11-fidelity` +范围:管理端与小程序端重新设计前的清理阶段 + +## 1. 结论 + +本轮清理已完成。当前唯一视觉规格为: + +`docs/superpowers/specs/2026-09-13-reference-driven-dual-client-ui-redesign-design.md` + +管理端首批范围固定为应用框架与工作台;小程序首批范围固定为 11 个核心页面。Phase 07 的业务测试证据继续有效,但被用户否决的视觉结论已经撤销,Phase 08 继续暂停。本报告完成后不自动进入重设计实施。 + +## 2. 已删除内容 + +### 2.1 冲突文档与旧入口(11 个) + +- 3 份 2026-09-10/11 旧 UI 规格; +- 5 份要求旧暖白方案、全量管理端或全量 63 页重构的旧执行计划; +- 旧视觉验收报告; +- 旧《前端 UI-UX 高保真原型修订说明》; +- 未跟踪的 `design-qa.md`。 + +### 2.2 旧视觉产物(13 个) + +- `artifacts/ui-v11` 下 8 个旧管理端/小程序截图与预览文件; +- 4 个被否决的 Phase 07 页面与对比截图; +- 1 个旧 Tab 色彩预览图。 + +数据库备份、正式品牌资产及用户提供的两张参考图均未删除。 + +### 2.3 旧测试(2 个) + +- 删除固化旧浅色后台结构的 `admin-redesign-contracts.mjs`; +- 删除只验证被否决首页/找对象视觉的 `miniapp-redesign-contracts.mjs`。 + +有效业务契约继续保留;`ui-contracts.mjs` 已移除暖白背景、220px 浅色侧栏、指定标签写法和强制读取 `index.js` 等过时断言。 + +### 2.4 小程序页面重复源(11 个) + +删除 11 个与 TypeScript 同名的页面 `.js`:活动互选结果、活动互选等待、聊天、咨询介绍、咨询申请、本地资格、本地资格补充、登录、我的咨询、婚前辅导介绍、婚前辅导申请。 + +清理后 63 个注册页面对应 63 个页面逻辑源,页面 TS/JS 同名源为 0。 + +## 3. 迁移与保留 + +- 将本地资格两页 `.js` 中的真实 API、状态刷新、材料上传、声明与提交审核逻辑迁入 `.ts`; +- 补回 WXML 已绑定的 `onRemoveImage`,避免清理后出现无处理函数; +- 保留 `miniapp/env.{ts,js}` 与 `miniapp/utils/api.{ts,js}` 两组共享兼容层,因为仍有纯 JavaScript 页面消费; +- 保留全部 63 个业务页面、22 个组件目录、管理端现有路由页面、后端、迁移脚本和部署配置; +- 保留 Phase 03–07 的业务完成报告,只对 Phase 07 明确标记“视觉结论失效”。 + +## 4. 文档治理 + +- `AGENTS.md` 已指向唯一视觉规格; +- `STATUS.md`、`JIRA_BACKLOG.md` 已重新打开 Phase 07 UI 子任务; +- 当前页面矩阵已收敛为管理端框架/工作台和小程序 11 个核心页面; +- 相关恢复计划已切换到新规格与新清理门禁; +- 新增文档基线契约,防止旧规范、旧截图和旧视觉测试重新进入仓库; +- 新增页面源唯一性契约,防止微信开发者工具再次加载同名旧 `.js`。 + +## 5. 验证结果 + +以下结果由清理完成后的最终门禁产生: + +- 文档唯一基线契约:PASS; +- 小程序页面源唯一性契约:PASS; +- 通用 UI/业务契约:PASS; +- Phase 03、04、06、07 契约:PASS; +- 小程序登录契约:PASS; +- 品牌资产与 Tab 图标契约:PASS; +- 小程序 TypeScript 检查:PASS; +- 管理端 Vue TypeScript 检查:PASS; +- 管理端生产构建:PASS(保留既有大 chunk 警告,不属于本轮清理回归)。 + +## 6. 可恢复提交 + +- `1deda1e`:建立只读清理盘点; +- `c66e42d`:删除冲突文档、旧视觉证据与旧测试,收敛文档真源; +- `eed4400`:迁移有效逻辑并删除 11 个重复页面源; +- 本报告及最终核验记录:由后续独立提交保存。 + +所有删除内容均可通过上述 Git 提交的父版本恢复。未跟踪的旧截图和 `design-qa.md` 不在 Git 历史中,已按用户明确授权永久删除。 + +## 7. 未触及与后续门禁 + +工作区仍包含 Phase 03–08 的后端、部署、首页/找对象页面等既有未提交修改,本轮没有替用户覆盖、清除或混入清理提交。下一阶段只有在用户验收本报告后,才按“原位渐进替换”进入管理端框架/工作台和小程序 11 个核心页面的参考图驱动重设计。 diff --git a/ui-tests/phase03-verification-contracts.mjs b/ui-tests/phase03-verification-contracts.mjs new file mode 100644 index 0000000..a31e1c3 --- /dev/null +++ b/ui-tests/phase03-verification-contracts.mjs @@ -0,0 +1,44 @@ +import assert from 'node:assert/strict' +import { readFileSync } from 'node:fs' +import vm from 'node:vm' + +const source = readFileSync(new URL('../miniapp/pages/index/index.ts', import.meta.url), 'utf8') +let page + +const sandbox = { + require(request) { + if (request === '../../stores') { + return { + authStore: { state: { isLoggedIn: false } }, + appStore: { toastSuccess() {} }, + } + } + if (request === '../../utils/api') { + return { get: async () => { throw new Error('未登录时不应请求首页接口') } } + } + throw new Error(`未预期依赖:${request}`) + }, + Page(config) { page = config }, + wx: { + getAccountInfoSync() { + return { miniProgram: { envVersion: 'develop' } } + }, + }, + console, + setTimeout, +} + +vm.runInNewContext(source, sandbox, { filename: 'miniapp/pages/index/index.ts' }) +assert.ok(page, '首页必须注册 Page 配置') + +const pageState = { ...page.data } +await page.checkAuthAndLoad.call({ + data: pageState, + setData(data) { Object.assign(pageState, data) }, + loadHomeData() { throw new Error('未登录时不应进入首页数据加载流程') }, +}) + +assert.equal(pageState.isOnboarding, true, '未登录时应进入登录引导状态') +assert.equal(pageState.userState, null, '未登录状态不得伪造实名用户,实名状态必须来自服务端数据库') + +console.log('Phase 03 verification contracts passed')