# Phase 04 V1.1 恢复复验 Completion Report 日期:2026-09-12 分支:`workbuddy-ui-v11-fidelity` ## 结论 **Phase 04 COMPLETE / 项目整体继续 NO-GO。** Profile、Preference 保持现有兼容行为;本地资格声明、状态、补证、提交及 `/me/status` 已重新核验。Phase 05 及以后未获准开始。 ## 本阶段修复 - 将 U62/U63 从空白 JavaScript 脚手架恢复为真实 API 链路。 - U62 查询当前用户本地资格状态,覆盖未声明、已声明、待补证、审核中、已核验、未通过。 - U63 完成本地资格声明、私有材料上传、佐证登记和提交审核。 - 修正佐证实体 `fileId` 与数据库 `file_key` 的 MyBatis 映射。 - 后端执行佐证上传开关、数量上限、类型白名单和文件归属校验。 - 增加佐证保留期配置,默认 365 天;实际清理由运维任务按配置执行。 - 图片大小上限和允许类型由 FeatureFlag 配置控制。 ## 权限与数据边界 - 用户端 Controller 的 userId 仅取自 `UserPrincipal`,不接受请求体 userId。 - 佐证文件经认证接口上传到私有存储。 - 登记佐证前校验文件属于当前用户;其他用户文件被拒绝。 - 本地资格使用独立的 `user_local_eligibilities`、`local_eligibility_evidences` 表,不写入 `user_identities`。 ## 自动化与运行验证 | 检查 | 结果 | |---|---| | `LocalEligibilityServiceTest` | 3/3 通过,0 failure,0 error;BUILD SUCCESS | | `phase04-local-eligibility-contracts.mjs` | 通过 | | Backend Docker build | 通过 | | Flyway | 33 个迁移校验通过,Schema 版本 033 | | PostgreSQL / Redis / MinIO / Backend | 全部 healthy | | `/api/v1/health/live` | UP | ## 门禁核对 - [x] 本地资格与实名认证表独立。 - [x] 非本人不能将他人私有文件登记为佐证。 - [x] 数量、大小、类型和保留期限配置化。 - [x] U62/U63 使用真实接口而非占位提示。 - [x] `/me/status` 返回本地资格状态。 ## 已知限制 - 小程序仍同时保留 `.ts` 与运行时 `.js`;统一 TypeScript 唯一源属于 Phase 07 门禁。 - 佐证到期清理调度任务尚未实现,本阶段只完成保留期配置;生产启用前需在 Phase 22 运维阶段核验清理作业。 - 微信开发者工具真机/模拟器视觉验收仍属于后续 UI/UAT 门禁。 ## 下一阶段 Phase 05:统一审核扩展。进入前须由用户明确确认;不得自动进入。