review 结果

This commit is contained in:
Shen Wei
2026-05-02 16:21:46 +08:00
parent ca33cc141f
commit 90f3811b83
10 changed files with 1448 additions and 1484 deletions

View File

@@ -0,0 +1,448 @@
# Fonrey 全量 Review — 登录管理 + 平台管理后台
- **Review 范围**:登录管理模块 + 平台管理后台模块
- **Review 日期**2026-05-02
- **Review 维度**8 维度PRD质量 / PRD↔TECH一致性 / DATA_MODEL / API / UI_SYSTEM / 安全多租户 / 性能扩展 / 遗漏场景)
- **审查文档**
- PRD`PRD_MVP.md``登录管理/用户登录管理模块PRD.md` (v3.0)、`平台管理后台/平台管理后台PRD.md`
- TECH`TECH_STACK.md` (v2.5)、`登录管理技术方案.md` (v4.1)、`平台管理后台技术方案.md``API_CONTRACT.md``测试规范.md`
- DATA_MODEL`DATA_MODEL.md``DATA_MODEL_LOGIN.md``DATA_MODEL_PUBLIC.md``ENUMS.md` (v2.2)
- UI`UI_SYSTEM.md``组件清单.md``组件规范设计.md``UI_DESIGN/登录管理/登录_UI.md``UI_DESIGN/平台管理后台/平台管理后台_UI.md` 及 4 份 HTML 原型
- **严重程度图例**:🔴 Blocker影响交付需立即处理/ 🟠 Major影响质量需在迭代内处理/ 🟡 Minor建议优化
---
## 维度一PRD 质量
### 🔴 P-B-1 平台管理后台 PRD 缺失 OpenAPI 与功能编号体系
- **位置**[平台管理后台PRD.md](file:///mnt/d/Workspace/nexus/Project/fonrey/PRD/%E5%B9%B3%E5%8F%B0%E7%AE%A1%E7%90%86%E5%90%8E%E5%8F%B0/%E5%B9%B3%E5%8F%B0%E7%AE%A1%E7%90%86%E5%90%8E%E5%8F%B0PRD.md) 全文 835 行
- **问题**:用户故事未编号(无 PA-001/PA-002 等可追溯标识),与 [用户登录管理模块PRD.md](file:///mnt/d/Workspace/nexus/Project/fonrey/PRD/%E7%99%BB%E5%BD%95%E7%AE%A1%E7%90%86/%E7%94%A8%E6%88%B7%E7%99%BB%E5%BD%95%E7%AE%A1%E7%90%86%E6%A8%A1%E5%9D%97PRD.md) v3.0 已剥离实现细节后的"功能 ID + 验收标准"风格不一致。导致需求→测试用例→Bug 单的可追溯链条断裂。
- **改进方向**:按登录 PRD v3.0 风格补齐编号 (PA-001 ~ PA-NN),每条用户故事附"验收标准 (AC)"小节。
- **责任角色**PM / Product Owner
### 🟠 P-B-2 平台管理后台 PRD 仍混入实现/字段细节
- **位置**[平台管理后台PRD.md L210-L350](file:///mnt/d/Workspace/nexus/Project/fonrey/PRD/%E5%B9%B3%E5%8F%B0%E7%AE%A1%E7%90%86%E5%90%8E%E5%8F%B0/%E5%B9%B3%E5%8F%B0%E7%AE%A1%E7%90%86%E5%90%8E%E5%8F%B0PRD.md#L210-L350) 段落
- **问题**:租户创建/升级/暂停章节出现 `tenant_code``schema_name``status` CHECK 值等数据层概念;与 ADR-20260502-003 "PRD 剥离实现细节"原则违背。
- **改进方向**:按登录 PRD v3.0 模式将字段/状态描述迁出至 DATA_MODEL_PUBLIC.mdPRD 仅保留业务语义("租户进入暂停态后所有用户登录被拒绝")。
- **责任角色**PM + Backend Architect
### 🟠 P-B-3 平台管理员PlatformAdmin"权限矩阵"未量化
- **位置**[平台管理后台PRD.md L40-L60, L520-L560](file:///mnt/d/Workspace/nexus/Project/fonrey/PRD/%E5%B9%B3%E5%8F%B0%E7%AE%A1%E7%90%86%E5%90%8E%E5%8F%B0/%E5%B9%B3%E5%8F%B0%E7%AE%A1%E7%90%86%E5%90%8E%E5%8F%B0PRD.md#L40-L60) 与 [DATA_MODEL_PUBLIC.md L189-L250](file:///mnt/d/Workspace/nexus/Project/fonrey/DATA_MODEL/DATA_MODEL_PUBLIC.md#L189-L250) `platform_admins`
- **问题**PRD 提到 `super_admin` / `ops` / `support` 三种角色,但未列"角色 × 操作 × 资源"矩阵。技术方案与 DATA_MODEL 也未补齐。
- **改进方向**:在 PRD 增 §权限矩阵小节,列出每条平台操作(创建租户/暂停租户/查看审计日志/发布客户端版本/等)所需角色,并与 `platform_admins.role` 枚举对应。
- **责任角色**PM + 安全负责人
### 🟡 P-L-1 登录 PRD 验收标准粒度偏粗
- **位置**[用户登录管理模块PRD.md](file:///mnt/d/Workspace/nexus/Project/fonrey/PRD/%E7%99%BB%E5%BD%95%E7%AE%A1%E7%90%86/%E7%94%A8%E6%88%B7%E7%99%BB%E5%BD%95%E7%AE%A1%E7%90%86%E6%A8%A1%E5%9D%97PRD.md) UC-LOGIN-* 段
- **问题**:部分验收标准只描述"成功"路径,未列出所有失败路径覆盖的提示文案(与 [组件规范设计.md](file:///mnt/d/Workspace/nexus/Project/fonrey/UI_SYSTEM/%E7%BB%84%E4%BB%B6%E8%A7%84%E8%8C%83%E8%AE%BE%E8%AE%A1.md) Toast/Form Error 规范脱节)。
- **改进方向**:每条 UC 补充"异常路径 ×N → 文案 / 状态码"。
- **责任角色**PM
---
## 维度二PRD ↔ TECH 一致性
### 🔴 PT-B-1 创建租户事务边界与回滚补偿未在技术方案落地
- **位置**[平台管理后台PRD.md L122-L170](file:///mnt/d/Workspace/nexus/Project/fonrey/PRD/%E5%B9%B3%E5%8F%B0%E7%AE%A1%E7%90%86%E5%90%8E%E5%8F%B0/%E5%B9%B3%E5%8F%B0%E7%AE%A1%E7%90%86%E5%90%8E%E5%8F%B0PRD.md#L122-L170) vs [平台管理后台技术方案.md](file:///mnt/d/Workspace/nexus/Project/fonrey/TECH_STACK/%E5%B9%B3%E5%8F%B0%E7%AE%A1%E7%90%86%E5%90%8E%E5%8F%B0%E6%8A%80%E6%9C%AF%E6%96%B9%E6%A1%88.md)
- **问题**PRD 描述"创建租户 → 建 schema → 跑 migration → 创建 Tenant Admin → 发欢迎邮件"为一体化流程但技术方案未说明django-tenants `create_tenant` 与 Django 默认事务无法包裹 `CREATE SCHEMA`migration 中途失败、欢迎邮件发送失败的补偿/回滚策略缺失。状态机仅定义 `creating`/`failed`,但谁置位 `failed`、是否清理半成品 schema 未规定。
- **改进方向**:技术方案补"租户创建 Saga"章节:步骤 1-N、每步失败的补偿动作、`failed` 后的人工/定时清理任务。同步在 PRD 注明"创建过程为异步,最终一致"。
- **责任角色**Backend Architect + Platform Ops
### 🟠 PT-B-2 客户端发版灰度策略 PRD/TECH 描述不一致
- **位置**[平台管理后台PRD.md L476-L520](file:///mnt/d/Workspace/nexus/Project/fonrey/PRD/%E5%B9%B3%E5%8F%B0%E7%AE%A1%E7%90%86%E5%90%8E%E5%8F%B0/%E5%B9%B3%E5%8F%B0%E7%AE%A1%E7%90%86%E5%90%8E%E5%8F%B0PRD.md#L476-L520) vs [平台管理后台技术方案.md](file:///mnt/d/Workspace/nexus/Project/fonrey/TECH_STACK/%E5%B9%B3%E5%8F%B0%E7%AE%A1%E7%90%86%E5%90%8E%E5%8F%B0%E6%8A%80%E6%9C%AF%E6%96%B9%E6%A1%88.md)
- **问题**PRD 描述"按租户/百分比灰度",但 [DATA_MODEL_PUBLIC.md client_releases L488-L505](file:///mnt/d/Workspace/nexus/Project/fonrey/DATA_MODEL/DATA_MODEL_PUBLIC.md#L488-L505) 仅有 `channel``rollout_percent`,无"租户白名单"字段,技术方案对此未澄清。
- **改进方向**:技术方案明确灰度策略对象(租户级 OR 百分比级或两者并存DATA_MODEL 同步增 `rollout_tenant_codes JSONB``client_release_tenants` 关联表。
- **责任角色**Backend Architect + DBA
### 🟠 PT-B-3 平台管理员 MFA 在 PRD 强约束但 TECH 未规定算法/实现
- **位置**[平台管理后台PRD.md L60](file:///mnt/d/Workspace/nexus/Project/fonrey/PRD/%E5%B9%B3%E5%8F%B0%E7%AE%A1%E7%90%86%E5%90%8E%E5%8F%B0/%E5%B9%B3%E5%8F%B0%E7%AE%A1%E7%90%86%E5%90%8E%E5%8F%B0PRD.md#L60)"super_admin 必须 MFA" vs [平台管理后台技术方案.md](file:///mnt/d/Workspace/nexus/Project/fonrey/TECH_STACK/%E5%B9%B3%E5%8F%B0%E7%AE%A1%E7%90%86%E5%90%8E%E5%8F%B0%E6%8A%80%E6%9C%AF%E6%96%B9%E6%A1%88.md)、[DATA_MODEL_PUBLIC.md platform_admins L189-L250](file:///mnt/d/Workspace/nexus/Project/fonrey/DATA_MODEL/DATA_MODEL_PUBLIC.md#L189-L250)
- **问题**:未定义 MFA 类型TOTP / SMS / WebAuthn、密钥存储位置、登录流程接入点、备份码机制。`platform_admins` 表无 `mfa_secret`/`mfa_enabled` 字段。
- **改进方向**:技术方案选定 TOTPpyotp方案DATA_MODEL 增 `mfa_enabled BOOL``mfa_secret_enc TEXT``mfa_recovery_codes_enc TEXT`PRD 注明备份码生成/重置规则。
- **责任角色**:安全负责人 + Backend Architect
### 🟠 PT-L-1 登录 PRD "首次登录强制改密" 与 TECH 实现路径未对齐
- **位置**[用户登录管理模块PRD.md](file:///mnt/d/Workspace/nexus/Project/fonrey/PRD/%E7%99%BB%E5%BD%95%E7%AE%A1%E7%90%86/%E7%94%A8%E6%88%B7%E7%99%BB%E5%BD%95%E7%AE%A1%E7%90%86%E6%A8%A1%E5%9D%97PRD.md) "is_initial_password" + [DATA_MODEL_LOGIN.md](file:///mnt/d/Workspace/nexus/Project/fonrey/DATA_MODEL/DATA_MODEL_LOGIN.md) `user_accounts.is_initial_password` + [登录管理技术方案.md](file:///mnt/d/Workspace/nexus/Project/fonrey/TECH_STACK/%E7%99%BB%E5%BD%95%E7%AE%A1%E7%90%86%E6%8A%80%E6%9C%AF%E6%96%B9%E6%A1%88.md) v4.1
- **问题**PRD 要求"首次登录必须改密才能进入业务",但技术方案未明确:登录 API 返回时如何标记需要改密(专用 HTTP code/Header/JSON flag中间件/装饰器在哪一层拦截HTMX 前端如何重定向。
- **改进方向**:技术方案补 §"初始密码拦截器":登录响应增 `must_change_password: true` 字段;新增 `RequirePasswordChangeMiddleware`HTMX 通过 `HX-Redirect` 跳转 `/account/change-password`
- **责任角色**Backend Architect + Frontend Lead
### 🟡 PT-L-2 账户锁定阈值 PRD 与 TECH 描述存在微差
- **位置**[用户登录管理模块PRD.md](file:///mnt/d/Workspace/nexus/Project/fonrey/PRD/%E7%99%BB%E5%BD%95%E7%AE%A1%E7%90%86/%E7%94%A8%E6%88%B7%E7%99%BB%E5%BD%95%E7%AE%A1%E7%90%86%E6%A8%A1%E5%9D%97PRD.md) §账户锁定 vs [DATA_MODEL_LOGIN.md L411-L423](file:///mnt/d/Workspace/nexus/Project/fonrey/DATA_MODEL/DATA_MODEL_LOGIN.md#L411-L423)Redis 计数器说明)
- **问题**PRD 写"连续 5 次失败锁定 30 分钟"DATA_MODEL 注释也说 5 次,但 [登录管理技术方案.md](file:///mnt/d/Workspace/nexus/Project/fonrey/TECH_STACK/%E7%99%BB%E5%BD%95%E7%AE%A1%E7%90%86%E6%8A%80%E6%9C%AF%E6%96%B9%E6%A1%88.md) 未将阈值/窗口/键名作为可配置项明示,存在硬编码风险。
- **改进方向**:技术方案显式列出 settings`LOGIN_FAIL_THRESHOLD=5``LOGIN_LOCK_DURATION_MIN=30`、Redis key `login_fail:{tenant}:{username}`
- **责任角色**Backend Architect
---
## 维度三DATA_MODEL数据模型
### 🔴 D-1 `public.platform_audit_logs.result` 大小写违反 ENUMS.md 规范
- **位置**[ENUMS.md L70-L72](file:///mnt/d/Workspace/nexus/Project/fonrey/DATA_MODEL/ENUMS.md#L70-L72) vs [DATA_MODEL_PUBLIC.md L274-L275](file:///mnt/d/Workspace/nexus/Project/fonrey/DATA_MODEL/DATA_MODEL_PUBLIC.md#L274-L275)
- **问题**ENUMS.md 规定 `success`/`failed`lower_snake_case文件首部 L10 强制要求DDL 实际为 `CHECK (result IN ('SUCCESS','FAILED'))` DEFAULT `'SUCCESS'`。前端 enum_labels、查询过滤、报表全部错位。
- **改进方向**DDL 改为小写并执行迁移 `UPDATE platform_audit_logs SET result = lower(result)`;同步 enum_labels fixture。
- **责任角色**DBA + Backend Architect
### 🔴 D-2 `public.export_tasks.status` `done` vs ENUMS `success` 不一致
- **位置**[ENUMS.md L102-L106](file:///mnt/d/Workspace/nexus/Project/fonrey/DATA_MODEL/ENUMS.md#L102-L106) vs [DATA_MODEL_PUBLIC.md L351-L353](file:///mnt/d/Workspace/nexus/Project/fonrey/DATA_MODEL/DATA_MODEL_PUBLIC.md#L351-L353)
- **问题**ENUMS 已迁移为 `success`(注明"原 `done`,已迁移"DDL 仍为 `CHECK (status IN ('pending','in_progress','done','failed'))``backup_records.status` 已用 `success`,与之分裂。
- **改进方向**DDL CHECK + DEFAULT 改为 `success`,迁移脚本 `UPDATE export_tasks SET status='success' WHERE status='done'`
- **责任角色**DBA
### 🟠 D-3 ENUMS.md 缺失 `tenants.suspended_reason` 的 `license_expired`
- **位置**[ENUMS.md L55-L59](file:///mnt/d/Workspace/nexus/Project/fonrey/DATA_MODEL/ENUMS.md#L55-L59) vs [DATA_MODEL_PUBLIC.md L115](file:///mnt/d/Workspace/nexus/Project/fonrey/DATA_MODEL/DATA_MODEL_PUBLIC.md#L115)
- **问题**DDL CHECK 已包含 `license_expired`ENUMS.md 仅列 `overdue/violation/requested/other`。前端文案/报表无法对该值取值。
- **改进方向**ENUMS.md 补 `license_expired`,记录变更 ADR同步 enum_labels。
- **责任角色**ENUMS.md 维护者(架构 Atlas
### 🟠 D-4 ENUMS.md 缺失 `login_attempts.failure_reason` 的 OTP 相关值
- **位置**[ENUMS.md L168-L174](file:///mnt/d/Workspace/nexus/Project/fonrey/DATA_MODEL/ENUMS.md#L168-L174) vs [DATA_MODEL_LOGIN.md L220-L224, L266-L274](file:///mnt/d/Workspace/nexus/Project/fonrey/DATA_MODEL/DATA_MODEL_LOGIN.md#L220-L224)
- **问题**DDL/Model choices 含 `wrong_otp`/`otp_expired`ENUMS.md 漏写。
- **改进方向**ENUMS.md 补两个值。
- **责任角色**ENUMS.md 维护者
### 🟠 D-5 `user_accounts.phone_enc / phone_hash` 业务必填但 DB 可空
- **位置**[用户登录管理模块PRD.md L31-L33](file:///mnt/d/Workspace/nexus/Project/fonrey/PRD/%E7%99%BB%E5%BD%95%E7%AE%A1%E7%90%86/%E7%94%A8%E6%88%B7%E7%99%BB%E5%BD%95%E7%AE%A1%E7%90%86%E6%A8%A1%E5%9D%97PRD.md#L31-L33) vs [DATA_MODEL_LOGIN.md L80-L81](file:///mnt/d/Workspace/nexus/Project/fonrey/DATA_MODEL/DATA_MODEL_LOGIN.md#L80-L81)
- **问题**PRD 规定 `username` 等于手机号且必填,但 `phone_enc TEXT NULL``phone_hash VARCHAR(64) NULL`。导入/数据修复时可能写入不一致数据,且 `phone_hash` 唯一性索引(若有)可能失效。
- **改进方向**:业务确认后将 `phone_hash` 改 NOT NULL普通员工或改用 `username``phone_hash` 计算源在应用层强约束 + 触发器保证一致性。
- **责任角色**accounts 模块负责人 + DBA
### 🟠 D-6 `client_heartbeats` 无分区策略
- **位置**[DATA_MODEL_PUBLIC.md L568-L609](file:///mnt/d/Workspace/nexus/Project/fonrey/DATA_MODEL/DATA_MODEL_PUBLIC.md#L568-L609)
- **问题**:心跳表为高频写表(按 PRD 推算每客户端每 5 分钟一条),无 RANGE 分区,长期会变成 TB 级单表。
- **改进方向**:按 `received_at` 月度 RANGE 分区;保留 90 天,老分区归档至冷库或删除。
- **责任角色**DBA
### 🟠 D-7 `platform_audit_logs.payload_summary` 缺全文索引
- **位置**[DATA_MODEL_PUBLIC.md L260-L290](file:///mnt/d/Workspace/nexus/Project/fonrey/DATA_MODEL/DATA_MODEL_PUBLIC.md#L260-L290)
- **问题**PRD 要求平台审计日志支持关键字搜索,但 `payload_summary` 仅 B-Tree 索引,无 GIN/tsvector 索引。
- **改进方向**:增 `CREATE INDEX ON platform_audit_logs USING GIN (to_tsvector('simple', payload_summary))`
- **责任角色**DBA
### 🟡 D-8 跨 schema 操作规范未沉淀到 DATA_MODEL.md 头部
- **位置**[DATA_MODEL.md](file:///mnt/d/Workspace/nexus/Project/fonrey/DATA_MODEL/DATA_MODEL.md) 总纲
- **问题**django-tenants 下不可建跨 schema FK但 README 未明示该约定,新人可能误建外键。
- **改进方向**DATA_MODEL.md 增 §跨 schema 规范小节。
- **责任角色**Data Model Owner
---
## 维度四API 契约
### 🔴 A-B-1 平台管理后台核心端点未在 API_CONTRACT.md 出现
- **位置**[API_CONTRACT.md](file:///mnt/d/Workspace/nexus/Project/fonrey/TECH_STACK/API_CONTRACT.md) vs [平台管理后台PRD.md](file:///mnt/d/Workspace/nexus/Project/fonrey/PRD/%E5%B9%B3%E5%8F%B0%E7%AE%A1%E7%90%86%E5%90%8E%E5%8F%B0/%E5%B9%B3%E5%8F%B0%E7%AE%A1%E7%90%86%E5%90%8E%E5%8F%B0PRD.md)
- **问题**:平台后台所述创建租户/暂停租户/发布客户端版本/查看审计等 API 均未在契约文档定义;前后端无对接基线。
- **改进方向**API_CONTRACT.md 增 §平台管理后台 端点章节,列出 path/method/请求/响应/错误码。
- **责任角色**Backend Architect + API 文档负责人
### 🟠 A-L-1 登录端点错误码未对齐 ENUMS `failure_reason`
- **位置**[API_CONTRACT.md](file:///mnt/d/Workspace/nexus/Project/fonrey/TECH_STACK/API_CONTRACT.md) login 端点 vs [ENUMS.md L168-L174](file:///mnt/d/Workspace/nexus/Project/fonrey/DATA_MODEL/ENUMS.md#L168-L174)
- **问题**API 返回错误码与 `login_attempts.failure_reason` 枚举无映射表,客户端无法根据错误码呈现差异化文案。
- **改进方向**:增"错误码 ↔ failure_reason ↔ 用户文案"三列对照表。
- **责任角色**Backend Architect + 安全负责人
### 🟠 A-B-2 客户端心跳/版本检查 API 无幂等与限流约定
- **位置**[API_CONTRACT.md](file:///mnt/d/Workspace/nexus/Project/fonrey/TECH_STACK/API_CONTRACT.md) vs [平台管理后台PRD.md](file:///mnt/d/Workspace/nexus/Project/fonrey/PRD/%E5%B9%B3%E5%8F%B0%E7%AE%A1%E7%90%86%E5%90%8E%E5%8F%B0/%E5%B9%B3%E5%8F%B0%E7%AE%A1%E7%90%86%E5%90%8E%E5%8F%B0PRD.md) §客户端版本管理
- **问题**:心跳/版本检查为高频公网入口,未规定 `Idempotency-Key`、限流阈值(每客户端 N 次/分钟)、签名校验。
- **改进方向**API_CONTRACT 补限流 + HMAC 签名(基于 client_id + secret
- **责任角色**Backend Architect + 安全
### 🟡 A-G-1 全局 API 错误响应结构未统一
- **位置**[API_CONTRACT.md](file:///mnt/d/Workspace/nexus/Project/fonrey/TECH_STACK/API_CONTRACT.md)
- **问题**:示例中部分接口错误体为 `{detail: "..."}`、部分为 `{code, message, errors[]}`,前端难以统一错误处理。
- **改进方向**:统一为 RFC 7807 Problem Details 或自定义 `{code, message, details}` 结构。
- **责任角色**Backend Architect
---
## 维度五UI / UI_SYSTEM
### 🟠 U-B-1 平台后台 UI 设计未引用 `组件清单.md` 中已定义组件
- **位置**[UI_DESIGN/平台管理后台/平台管理后台_UI.md](file:///mnt/d/Workspace/nexus/Project/fonrey/UI_DESIGN/%E5%B9%B3%E5%8F%B0%E7%AE%A1%E7%90%86%E5%90%8E%E5%8F%B0/%E5%B9%B3%E5%8F%B0%E7%AE%A1%E7%90%86%E5%90%8E%E5%8F%B0_UI.md) + [平台管理后台_UI.html](file:///mnt/d/Workspace/nexus/Project/fonrey/UI_DESIGN/%E5%B9%B3%E5%8F%B0%E7%AE%A1%E7%90%86%E5%90%8E%E5%8F%B0_UI.html) vs [组件清单.md](file:///mnt/d/Workspace/nexus/Project/fonrey/UI_SYSTEM/%E7%BB%84%E4%BB%B6%E6%B8%85%E5%8D%95.md)
- **问题**HTML 原型直接写裸 Tailwind 类,未与组件清单中的 `<button>` / `<table>` / `<modal>` 规范关联。前端实现易产生样式漂移。
- **改进方向**UI 设计文档每个区块标注引用组件 ID如 "DataTable v1"HTML 原型用占位 class 体现组件契约。
- **责任角色**Frontend Lead + UI Designer
### 🟠 U-L-1 登录 UI 缺失"账户锁定"与"密码过期"专用状态页
- **位置**[UI_DESIGN/登录管理/登录_UI.md](file:///mnt/d/Workspace/nexus/Project/fonrey/UI_DESIGN/%E7%99%BB%E5%BD%95%E7%AE%A1%E7%90%86/%E7%99%BB%E5%BD%95_UI.md) + 3 份 HTML 原型
- **问题**PRD 描述了账户锁定、密码过期、首次登录强制改密 3 类状态,但 UI 设计仅覆盖登录、账密、重置密码 3 种页面。
- **改进方向**:补"已锁定""密码过期"状态页或在登录页定义 inline 提示规范。
- **责任角色**UI Designer + Frontend Lead
### 🟡 U-G-1 UI_SYSTEM 缺无障碍A11y规范
- **位置**[UI_SYSTEM.md](file:///mnt/d/Workspace/nexus/Project/fonrey/UI_SYSTEM/UI_SYSTEM.md)
- **问题**:未规定 ARIA、键盘导航、对比度门槛。
- **改进方向**:增 §A11y 章节WCAG 2.1 AA 基线)。
- **责任角色**UI Designer
### 🟡 U-G-2 HTML 原型与 `组件规范设计.md` 间距/色板未对齐
- **位置**[平台管理后台_UI.html](file:///mnt/d/Workspace/nexus/Project/fonrey/UI_DESIGN/%E5%B9%B3%E5%8F%B0%E7%AE%A1%E7%90%86%E5%90%8E%E5%8F%B0_UI.html) vs [组件规范设计.md](file:///mnt/d/Workspace/nexus/Project/fonrey/UI_SYSTEM/%E7%BB%84%E4%BB%B6%E8%A7%84%E8%8C%83%E8%AE%BE%E8%AE%A1.md)
- **问题**:原型出现规范外的 `gray-750`、不规则间距 `p-7`
- **改进方向**:原型严格使用 design token间距 4/8/12/16/24/32
- **责任角色**UI Designer
---
## 维度六:安全 & 多租户隔离
### 🔴 S-1 Tenant Admin 初始密码可能明文邮件下发
- **位置**[平台管理后台PRD.md L122-L136](file:///mnt/d/Workspace/nexus/Project/fonrey/PRD/%E5%B9%B3%E5%8F%B0%E7%AE%A1%E7%90%86%E5%90%8E%E5%8F%B0/%E5%B9%B3%E5%8F%B0%E7%AE%A1%E7%90%86%E5%90%8E%E5%8F%B0PRD.md#L122-L136) + [DATA_MODEL_LOGIN.md L468-L469](file:///mnt/d/Workspace/nexus/Project/fonrey/DATA_MODEL/DATA_MODEL_LOGIN.md#L468-L469)(示例 `Fonrey@2025`
- **问题**欢迎邮件包含初始密码明文DATA_MODEL 给出系统统一默认密码示例。一旦邮箱被截获或日志记录到邮件正文,全部新租户首批管理员凭据泄露。
- **改进方向**:禁止邮件明文密码;改用一次性安全 reset token10-30 分钟有效,单次使用),强制首次登录改密;离线场景由平台运维通过加密 PDF 单独交付。
- **责任角色**:安全负责人 + PM + accounts 模块
### 🔴 S-2 平台管理员PlatformAdmin会话与租户用户共用 Cookie/Session 边界未明示
- **位置**[平台管理后台PRD.md](file:///mnt/d/Workspace/nexus/Project/fonrey/PRD/%E5%B9%B3%E5%8F%B0%E7%AE%A1%E7%90%86%E5%90%8E%E5%8F%B0/%E5%B9%B3%E5%8F%B0%E7%AE%A1%E7%90%86%E5%90%8E%E5%8F%B0PRD.md) + [登录管理技术方案.md](file:///mnt/d/Workspace/nexus/Project/fonrey/TECH_STACK/%E7%99%BB%E5%BD%95%E7%AE%A1%E7%90%86%E6%8A%80%E6%9C%AF%E6%96%B9%E6%A1%88.md)
- **问题**:未规定平台后台域名/Cookie 域、Session 隔离机制;存在租户 schema 用户登录态与平台后台越权同会话风险。
- **改进方向**:平台后台独立子域 `admin.fonrey.com`Cookie 域分离;中间件根据 `request.tenant.schema_name == 'public'` 强校验只允许 `platform_admins` 表用户进入。
- **责任角色**:安全负责人 + Backend Architect
### 🟠 S-3 短信 OTP 速率/防刷未定量
- **位置**[用户登录管理模块PRD.md](file:///mnt/d/Workspace/nexus/Project/fonrey/PRD/%E7%99%BB%E5%BD%95%E7%AE%A1%E7%90%86/%E7%94%A8%E6%88%B7%E7%99%BB%E5%BD%95%E7%AE%A1%E7%90%86%E6%A8%A1%E5%9D%97PRD.md) §短信验证码 + [DATA_MODEL_LOGIN.md sms_otp_records](file:///mnt/d/Workspace/nexus/Project/fonrey/DATA_MODEL/DATA_MODEL_LOGIN.md)
- **问题**:未定义"同号码 X 分钟内最多 N 次"、"同 IP 每日上限"、"图形/滑块校验前置"等防刷规则。
- **改进方向**技术方案补防刷策略DATA_MODEL 增 IP 维度计数器或在 Redis 中维护。
- **责任角色**:安全负责人
### 🟠 S-4 `phone_enc` 加密密钥轮换与 `phone_hash` salt 策略缺失
- **位置**[DATA_MODEL_LOGIN.md L80-L81](file:///mnt/d/Workspace/nexus/Project/fonrey/DATA_MODEL/DATA_MODEL_LOGIN.md#L80-L81) + [TECH_STACK.md](file:///mnt/d/Workspace/nexus/Project/fonrey/TECH_STACK/TECH_STACK.md)
- **问题**未规定加密算法AES-GCM、密钥来源KMSenv、轮换流程、`phone_hash` 是否加 pepper。
- **改进方向**:技术方案补 §字段级加密:算法/Key 来源/轮换 SOP`phone_hash` 使用 HMAC-SHA256 + 全局 pepper不入库
- **责任角色**:安全负责人 + Backend Architect
### 🟠 S-5 平台后台审计日志覆盖范围未量化
- **位置**[平台管理后台PRD.md](file:///mnt/d/Workspace/nexus/Project/fonrey/PRD/%E5%B9%B3%E5%8F%B0%E7%AE%A1%E7%90%86%E5%90%8E%E5%8F%B0/%E5%B9%B3%E5%8F%B0%E7%AE%A1%E7%90%86%E5%90%8E%E5%8F%B0PRD.md) + [DATA_MODEL_PUBLIC.md platform_audit_logs](file:///mnt/d/Workspace/nexus/Project/fonrey/DATA_MODEL/DATA_MODEL_PUBLIC.md)
- **问题**哪些操作必须审计、保留期限、防篡改append-only / 哈希链)未规定。
- **改进方向**:列出"必审操作清单"(创建/暂停/删除租户、平台账号增删改、发版、备份恢复);表加 `prev_hash`/`row_hash` 形成哈希链或转写至追加型存储。
- **责任角色**:安全负责人
### 🟡 S-6 跨 schema 查询风险未在技术方案标注
- **位置**[DATA_MODEL.md](file:///mnt/d/Workspace/nexus/Project/fonrey/DATA_MODEL/DATA_MODEL.md) + [TECH_STACK.md](file:///mnt/d/Workspace/nexus/Project/fonrey/TECH_STACK/TECH_STACK.md)
- **问题**django-tenants 下错误的 schema 切换会导致跨租户数据泄露。
- **改进方向**:技术方案增 §"禁止在 view 中直接 `connection.set_schema_to_public()`",必须经 service 层封装。
- **责任角色**Backend Architect
---
## 维度七:性能 & 扩展性
### 🟠 PF-1 `client_heartbeats` 写入风暴未做缓冲
- **位置**[DATA_MODEL_PUBLIC.md client_heartbeats](file:///mnt/d/Workspace/nexus/Project/fonrey/DATA_MODEL/DATA_MODEL_PUBLIC.md#L568-L609) + [平台管理后台技术方案.md](file:///mnt/d/Workspace/nexus/Project/fonrey/TECH_STACK/%E5%B9%B3%E5%8F%B0%E7%AE%A1%E7%90%86%E5%90%8E%E5%8F%B0%E6%8A%80%E6%9C%AF%E6%96%B9%E6%A1%88.md)
- **问题**:每条心跳直写 PGN×M 客户端规模下会成为 IO 瓶颈。
- **改进方向**:心跳先写 Redis Stream / Kafka再批量落表每分钟一次同时配合 D-6 分区。
- **责任角色**Backend Architect
### 🟠 PF-2 平台后台租户列表 / 审计日志列表 缺分页/索引设计
- **位置**[平台管理后台技术方案.md](file:///mnt/d/Workspace/nexus/Project/fonrey/TECH_STACK/%E5%B9%B3%E5%8F%B0%E7%AE%A1%E7%90%86%E5%90%8E%E5%8F%B0%E6%8A%80%E6%9C%AF%E6%96%B9%E6%A1%88.md) + [DATA_MODEL_PUBLIC.md tenants/platform_audit_logs](file:///mnt/d/Workspace/nexus/Project/fonrey/DATA_MODEL/DATA_MODEL_PUBLIC.md)
- **问题**:未明示 keyset pagination 或 LIMIT/OFFSET审计日志按时间倒序查询无 `(created_at DESC, id DESC)` 复合索引。
- **改进方向**:明确分页方案;增复合索引;列表 API 默认 page_size 上限。
- **责任角色**Backend Architect + DBA
### 🟡 PF-3 登录端点未规定 P95 延迟 SLO
- **位置**[用户登录管理模块PRD.md](file:///mnt/d/Workspace/nexus/Project/fonrey/PRD/%E7%99%BB%E5%BD%95%E7%AE%A1%E7%90%86/%E7%94%A8%E6%88%B7%E7%99%BB%E5%BD%95%E7%AE%A1%E7%90%86%E6%A8%A1%E5%9D%97PRD.md) + [测试规范.md](file:///mnt/d/Workspace/nexus/Project/fonrey/TECH_STACK/%E6%B5%8B%E8%AF%95%E8%A7%84%E8%8C%83.md)
- **问题**:无性能 SLO如登录 P95 < 300ms
- **改进方向**PRD 增非功能需求小节,列出关键端点 SLO测试规范补压测脚本。
- **责任角色**PM + QA
---
## 维度八:遗漏场景 & 边界
### 🔴 X-1 租户删除 / 数据导出 / GDPR 类合规流程缺失
- **位置**[平台管理后台PRD.md](file:///mnt/d/Workspace/nexus/Project/fonrey/PRD/%E5%B9%B3%E5%8F%B0%E7%AE%A1%E7%90%86%E5%90%8E%E5%8F%B0/%E5%B9%B3%E5%8F%B0%E7%AE%A1%E7%90%86%E5%90%8E%E5%8F%B0PRD.md)
- **问题**:仅描述 `pending_delete``deleted` 状态,未覆盖:删除前数据导出/客户签字回执;平台管理员双人复核;保留期内可撤销。
- **改进方向**:新增"租户注销 SOP"用户故事;技术方案补软删除 + 冷却期 + 双人审批流程。
- **责任角色**PM + 安全 + 合规
### 🟠 X-2 客户端版本回滚 / 灰度中止流程缺失
- **位置**[平台管理后台PRD.md L476-L520](file:///mnt/d/Workspace/nexus/Project/fonrey/PRD/%E5%B9%B3%E5%8F%B0%E7%AE%A1%E7%90%86%E5%90%8E%E5%8F%B0/%E5%B9%B3%E5%8F%B0%E7%AE%A1%E7%90%86%E5%90%8E%E5%8F%B0PRD.md#L476-L520)
- **问题**:发版有,但回滚/灰度中止缺定义。
- **改进方向**:补 UC "回滚到上一稳定版本"、"立即停灰度"两条用户故事。
- **责任角色**PM
### 🟠 X-3 备份恢复演练流程缺失
- **位置**[平台管理后台PRD.md](file:///mnt/d/Workspace/nexus/Project/fonrey/PRD/%E5%B9%B3%E5%8F%B0%E7%AE%A1%E7%90%86%E5%90%8E%E5%8F%B0/%E5%B9%B3%E5%8F%B0%E7%AE%A1%E7%90%86%E5%90%8E%E5%8F%B0PRD.md) §备份 + [DATA_MODEL_PUBLIC.md backup_records](file:///mnt/d/Workspace/nexus/Project/fonrey/DATA_MODEL/DATA_MODEL_PUBLIC.md)
- **问题**:仅描述备份生成,缺"恢复到独立 schema 验证"演练流程;恢复操作风险(覆盖现网)未提示。
- **改进方向**:增"恢复到隔离 schema 演练"用户故事;技术方案补恢复执行规范(必须先恢复至 `restore_*` 临时 schema 校验)。
- **责任角色**PM + DBA
### 🟠 X-4 Tenant Admin 失联 / 转移流程未定义
- **位置**[用户登录管理模块PRD.md](file:///mnt/d/Workspace/nexus/Project/fonrey/PRD/%E7%99%BB%E5%BD%95%E7%AE%A1%E7%90%86/%E7%94%A8%E6%88%B7%E7%99%BB%E5%BD%95%E7%AE%A1%E7%90%86%E6%A8%A1%E5%9D%97PRD.md) + [平台管理后台PRD.md](file:///mnt/d/Workspace/nexus/Project/fonrey/PRD/%E5%B9%B3%E5%8F%B0%E7%AE%A1%E7%90%86%E5%90%8E%E5%8F%B0/%E5%B9%B3%E5%8F%B0%E7%AE%A1%E7%90%86%E5%90%8E%E5%8F%B0PRD.md)
- **问题**Tenant Admin 离职/换号场景下,由谁/如何重置或迁移管理员未定义。
- **改进方向**PRD 增"平台运维代运营重置 Tenant Admin"流程,需双人复核 + 审计。
- **责任角色**PM + 安全
### 🟡 X-5 同租户多设备登录策略未明示
- **位置**[用户登录管理模块PRD.md](file:///mnt/d/Workspace/nexus/Project/fonrey/PRD/%E7%99%BB%E5%BD%95%E7%AE%A1%E7%90%86/%E7%94%A8%E6%88%B7%E7%99%BB%E5%BD%95%E7%AE%A1%E7%90%86%E6%A8%A1%E5%9D%97PRD.md)
- **问题**:是否允许同账号多端在线、互踢策略未定义。
- **改进方向**PRD 明示"允许并发"或"后登挤掉前登"。
- **责任角色**PM
### 🟡 X-6 跨场景同义概念差异(租户开通 → Tenant Admin 创建)
- **位置**[平台管理后台PRD.md L122-L136](file:///mnt/d/Workspace/nexus/Project/fonrey/PRD/%E5%B9%B3%E5%8F%B0%E7%AE%A1%E7%90%86%E5%90%8E%E5%8F%B0/%E5%B9%B3%E5%8F%B0%E7%AE%A1%E7%90%86%E5%90%8E%E5%8F%B0PRD.md#L122-L136) vs [DATA_MODEL_LOGIN.md L468-L469](file:///mnt/d/Workspace/nexus/Project/fonrey/DATA_MODEL/DATA_MODEL_LOGIN.md#L468-L469) vs [用户登录管理模块PRD.md L31-L33](file:///mnt/d/Workspace/nexus/Project/fonrey/PRD/%E7%99%BB%E5%BD%95%E7%AE%A1%E7%90%86/%E7%94%A8%E6%88%B7%E7%99%BB%E5%BD%95%E7%AE%A1%E7%90%86%E6%A8%A1%E5%9D%97PRD.md#L31-L33)
- **问题**:三处对"初始 Tenant Admin"的用户名/初始密码/手机号来源描述用词不统一PRD 平台后台说"系统生成"DATA_MODEL 给出 `Fonrey@2025` 默认值,登录 PRD 说 username = `tenants.contact_phone`)。
- **改进方向**:以登录 PRD v3.0 描述为准username = contact_phone初始密码由系统生成 + 一次性 reset token其他文档同步修正。
- **责任角色**PM + Data Model Owner
---
## 汇总行动列表(按优先级)
| # | 严重 | 维度 | 问题 | 责任角色 | 建议截止 |
| --- | --- | ---------- | -------------------------------------------------------------- | ----------------------- | ---- |
| 1 | 🔴 | 安全 | S-1 禁止欢迎邮件明文初始密码,改一次性 reset token | 安全 + PM + accounts | 立即 |
| 2 | 🔴 | 安全 | S-2 平台后台独立子域/Cookie 域 + 平台账号会话隔离中间件 | 安全 + Backend Architect | 立即 |
| 3 | 🔴 | DATA_MODEL | D-1 `platform_audit_logs.result` 大写改小写 + 数据迁移 | DBA | 当周 |
| 4 | 🔴 | DATA_MODEL | D-2 `export_tasks.status` `done``success` + 迁移 | DBA | 当周 |
| 5 | 🔴 | API | A-B-1 API_CONTRACT 补齐平台后台所有端点 | Backend Architect | 当周 |
| 6 | 🔴 | PRD↔TECH | PT-B-1 创建租户 Saga + 补偿事务 | Backend Architect + Ops | 当周 |
| 7 | 🔴 | PRD质量 | P-B-1 平台后台 PRD 引入 PA-NNN 编号体系 + AC | PM | 当周 |
| 8 | 🔴 | 遗漏场景 | X-1 租户注销 SOP + 双人复核 + 冷却期 | PM + 安全 + 合规 | 下迭代 |
| 9 | 🟠 | DATA_MODEL | D-3/D-4 ENUMS.md 补 `license_expired`/`wrong_otp`/`otp_expired` | ENUMS 维护者 | 当周 |
| 10 | 🟠 | DATA_MODEL | D-5 `phone_enc/phone_hash` NOT NULL + 数据清洗 | accounts + DBA | 下迭代 |
| 11 | 🟠 | DATA_MODEL | D-6 `client_heartbeats` 月度分区 + 90 天保留 | DBA | 下迭代 |
| 12 | 🟠 | DATA_MODEL | D-7 `payload_summary` 增 GIN 全文索引 | DBA | 当周 |
| 13 | 🟠 | PRD↔TECH | PT-B-2 客户端发版灰度策略澄清 | Backend Architect | 下迭代 |
| 14 | 🟠 | PRD↔TECH | PT-B-3 平台 MFA 选型 + DATA_MODEL 字段补充 | 安全 + Architect | 下迭代 |
| 15 | 🟠 | PRD↔TECH | PT-L-1 首次登录强制改密拦截器实现路径 | Backend + Frontend | 当周 |
| 16 | 🟠 | API | A-L-1 错误码 ↔ failure_reason 对照表 | Backend + 安全 | 当周 |
| 17 | 🟠 | API | A-B-2 心跳/版本检查接口限流 + HMAC | Backend + 安全 | 下迭代 |
| 18 | 🟠 | UI | U-B-1 平台后台 UI 引用组件清单组件 ID | UI + Frontend | 下迭代 |
| 19 | 🟠 | UI | U-L-1 补"账户锁定/密码过期"状态页 | UI + Frontend | 当周 |
| 20 | 🟠 | 安全 | S-3 短信 OTP 防刷规则量化 | 安全 | 下迭代 |
| 21 | 🟠 | 安全 | S-4 字段级加密 SOP + `phone_hash` pepper | 安全 + Architect | 下迭代 |
| 22 | 🟠 | 安全 | S-5 平台审计日志哈希链 + 必审操作清单 | 安全 | 下迭代 |
| 23 | 🟠 | 性能 | PF-1 心跳 Redis Stream 缓冲 + 批量落表 | Architect | 下迭代 |
| 24 | 🟠 | 性能 | PF-2 列表分页/复合索引 | Architect + DBA | 当周 |
| 25 | 🟠 | PRD质量 | P-B-2 平台 PRD 剥离实现细节 | PM + Architect | 下迭代 |
| 26 | 🟠 | PRD质量 | P-B-3 PlatformAdmin 权限矩阵 | PM + 安全 | 当周 |
| 27 | 🟠 | 遗漏 | X-2 版本回滚 / 中止灰度 UC | PM | 下迭代 |
| 28 | 🟠 | 遗漏 | X-3 备份恢复演练流程 | PM + DBA | 下迭代 |
| 29 | 🟠 | 遗漏 | X-4 Tenant Admin 重置/迁移流程 | PM + 安全 | 下迭代 |
| 30 | 🟡 | DATA_MODEL | D-8 跨 schema 规范沉淀至 README | Data Model Owner | 下迭代 |
| 31 | 🟡 | API | A-G-1 错误响应结构统一 | Architect | 下迭代 |
| 32 | 🟡 | UI | U-G-1 / U-G-2 A11y 规范 + 设计 token 严控 | UI Designer | 下迭代 |
| 33 | 🟡 | 性能 | PF-3 关键端点 SLO + 压测脚本 | PM + QA | 下迭代 |
| 34 | 🟡 | PRD↔TECH | PT-L-2 锁定阈值 settings 可配置 | Architect | 当周 |
| 35 | 🟡 | PRD质量 | P-L-1 登录 PRD 异常路径细化 | PM | 下迭代 |
| 36 | 🟡 | 遗漏 | X-5 多设备登录策略明示 | PM | 下迭代 |
| 37 | 🟡 | 遗漏 | X-6 跨文档对"初始 Tenant Admin 创建"用词统一 | PM + Data Model Owner | 当周 |
**统计**:🔴 Blocker 8 项 / 🟠 Major 21 项 / 🟡 Minor 8 项,合计 37 项。
---
## 结论
**整体评估**
- **登录管理模块**PRD v3.0 已按 ADR-20260502-003 完成实现细节剥离,整体结构与 DATA_MODEL_LOGIN 大致对齐;主要风险集中在 (a) 手机号字段约束与 PRD 必填语义不一致 (S-1/D-5)、(b) 首次登录改密拦截缺技术方案落地 (PT-L-1)、(c) OTP 防刷规则未量化 (S-3)。
- **平台管理后台模块**:处于"PRD 形成中"阶段,存在较多 Blocker缺端点契约 (A-B-1)、缺创建租户 Saga (PT-B-1)、缺平台账号会话隔离 (S-2)、缺欢迎邮件密码安全策略 (S-1)、PRD 缺编号体系 (P-B-1)、PRD 仍混入实现细节 (P-B-2)。这些项必须在进入开发前解决,否则将引发跨团队反复对齐成本。
- **跨文档一致性**枚举命名规范lower_snake_case已被 ENUMS.md 强约束,但 DATA_MODEL_PUBLIC 的 DDL 多处未对齐D-1/D-2/D-3/D-4属于"规范已立但落地未跟",建议立即统一。
**建议下一步动作**
1. 召开 1 次跨角色 Review 会议PM + Architect + 安全 + DBA + UI + Frontend就上表 8 项 Blocker 形成处理排期。
2. 由 ENUMS.md 维护者在 1 周内发布 v2.3,吸纳 D-3/D-4并附数据迁移 SQL 草案D-1/D-2
3. 由 PM 在 1 周内完成平台管理后台 PRD 编号化与剥离实现细节的改版,进入下一轮 Review。
---
## 附录
### A. 审查范围内文档清单
- PRD`PRD_MVP.md``登录管理/用户登录管理模块PRD.md` (v3.0, 2026-05-02)、`平台管理后台/平台管理后台PRD.md` (835 行)
- TECH`TECH_STACK.md` (v2.5, 2026-04-30)、`登录管理技术方案.md` (v4.1)、`平台管理后台技术方案.md` (986 行)、`API_CONTRACT.md``测试规范.md`
- DATA_MODEL`DATA_MODEL.md``DATA_MODEL_LOGIN.md` (526 行)、`DATA_MODEL_PUBLIC.md` (1049 行)、`ENUMS.md` (v2.2, 786 行)
- UI`UI_SYSTEM/UI_SYSTEM.md``组件清单.md``组件规范设计.md``UI_DESIGN/登录管理/登录_UI.md``UI_DESIGN/平台管理后台/平台管理后台_UI.md``登录_UI.html``登录_账号密码_UI.html``登录_重置密码_UI.html``平台管理后台_UI.html`
### B. 用户原文路径校正
-`Project/fonrey/PRD/系统管理/系统管理模块PRD.md` → ✅ 实际为 `Project/fonrey/PRD/系统配置/系统配置模块PRD.md`**不在本次 Review 范围**
-`Project/fonrey/PRD/平台管理后台/平台管理后台PRD` → ✅ 实际带 `.md` 后缀
-`Project/fonrey/UI_DESIGN/登录_UI.md` → ✅ 实际位于 `Project/fonrey/UI_DESIGN/登录管理/登录_UI.md`
### C. 审查执行说明
- 本次 Review 由 4 个并行 explore agent 完成证据收集(登录 8 维度、平台 PRD+TECH、DATA_MODEL_PUBLIC+UI、跨文档枚举/字段/状态机漂移),汇总后按 8 维度去重合并。
- 报告坚持"指出问题 + 给出方向"原则,不重写设计文档内容;如某文档段落实际不完整(如 PT-B-3 MFA 字段缺失),按 Major 报告而非自行补全。
---
## 进度跟踪表PM / 架构师填写)
> **使用说明**
> - **状态**取值:`待启动` / `进行中` / `已完成` / `已验证` / `阻塞` / `搁置`(如搁置请在"备注"列填写理由及决策 ADR ID
> - **处理人**:填写实际负责人姓名/工号
> - **修订位置**:填写本次修订涉及的文档路径 + 章节/行号 + Commit/PR 链接
> - **关联 ADR**:跨模块规则变更必须创建 ADR参考 `ADR.md` 治理规则),格式 `ADR-YYYYMMDD-XXX`
> - **验证证据**:链接到对应的 PR / Commit / 测试用例 ID`TC-FON-XXXXXX`/ Migration 文件
> - **每周更新**:建议每周五由 PM 主持 Review 例会更新本表,并在 `REVIEW/` 目录追加增量 Review
### Blocker 项(🔴 必须立即处理8 项)
| # | ID | 问题摘要 | 责任角色 | 处理人 | 状态 | 计划完成日 | 实际完成日 | 修订位置 | 关联 ADR | 验证证据 | 备注 |
| --- | ------ | ------------------------------------------- | ----------------------- | ----- | ------- | ---------- | ---------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------ | ------------- | ----------------------------------------------------------- |
| 1 | S-1 | 禁止欢迎邮件明文初始密码,改一次性 reset token | 安全 + PM + accounts | Nova | **不修复(设计决策)** | 2026-05-02 | 2026-05-02 | — | — | — | PM 决策:保持现有欢迎邮件含初始密码的设计,不改为 reset token 流程。接受此安全取舍。 |
| 2 | S-2 | 平台后台独立子域 + 平台账号会话隔离中间件 | 安全 + Backend Architect | Atlas | **已完成** | 2026-05-02 | 2026-05-02 | `TECH_STACK/平台管理后台技术方案.md` v1.1 §7.0(新增"平台后台独立子域与会话隔离"专节含域名分离表、Cookie 隔离规则、PlatformAdminSessionMiddleware 代码规范、测试矩阵) | — | 技术方案 v1.1 变更历史 | — |
| 3 | D-1 | `platform_audit_logs.result` 大写改小写 + 数据迁移 | DBA | Atlas | **已完成** | 2026-05-02 | 2026-05-02 | `DATA_MODEL/DATA_MODEL_PUBLIC.md` v1.7 §2.4 CHECK 约束;附录 M.1 迁移脚本 `migration_D1_audit_logs_result_lowercase.sql` | — | DATA_MODEL v1.7 变更历史 | 迁移脚本须在 Django migration 前执行(见附录 M.1 执行顺序说明) |
| 4 | D-2 | `export_tasks.status` `done``success` + 迁移 | DBA | Atlas | **已完成** | 2026-05-02 | 2026-05-02 | `DATA_MODEL/DATA_MODEL_PUBLIC.md` v1.7 §2.5 CHECK 约束;附录 M.2 迁移脚本 `migration_D2_export_tasks_done_to_success.sql` | — | DATA_MODEL v1.7 变更历史 | 迁移脚本须在 Django migration 前执行(见附录 M.2 执行顺序说明) |
| 5 | A-B-1 | API_CONTRACT 补齐平台后台所有端点 | Backend Architect | Atlas | **已完成** | 2026-05-02 | 2026-05-02 | `TECH_STACK/API_CONTRACT.md` v1.2 §12新增"平台管理后台端点附录",涵盖认证 2 项、租户管理 6 项、授权/MFA 3 项、系统配置 3 项、客户端发布 4 项、导出任务 3 项,含请求/响应示例与错误码) | — | API_CONTRACT v1.2 变更历史 | — |
| 6 | PT-B-1 | 创建租户 Saga + 补偿事务 | Backend Architect + Ops | Atlas | **已完成** | 2026-05-02 | 2026-05-02 | `TECH_STACK/平台管理后台技术方案.md` v1.1 §6.1.1(新增"创建租户 Saga 与补偿事务"专节,含 7 步流程状态机、各步骤补偿操作、Celery chord 实现规范、幂等性与重试策略、监控告警要求) | — | 技术方案 v1.1 变更历史 | — |
| 7 | P-B-1 | 平台后台 PRD 引入 PA-NNN 编号体系 + AC | PM | Nova | **已完成** | 2026-05-02 | 2026-05-02 | `PRD/平台管理后台/平台管理后台PRD.md` v1.1 — 全部 11 条用户故事补齐 PA-001 ~ PA-011 编号每条附验收标准AC小节 | — | PRD v1.1 变更历史 | — |
| 8 | X-1 | 租户注销 SOP + 双人复核 + 冷却期 | PM + 安全 + 合规 | Nova | **已完成** | 2026-05-02 | 2026-05-02 | `PRD/平台管理后台/平台管理后台PRD.md` v1.1 — 新增 PA-011 Story E1含 AC-1 发起申请 / AC-2 数据导出前置确认 / AC-3 双人 MFA 复核 / AC-4 30 天冷静期软删除 / AC-5 硬删除;同步更新 §5.1.4、§5.4、§5.5.1 API 清单、§6 权限矩阵、§7 状态机(新增 Pending Cancellation 节点) | — | PRD v1.1 变更历史 | 技术方案 & DATA_MODEL 联动更新待 Atlas 处理Pending Cancellation 状态字段) |
### Major 项(🟠 迭代内处理21 项)
| # | ID | 问题摘要 | 责任角色 | 处理人 | 状态 | 计划完成日 | 实际完成日 | 修订位置 | 关联 ADR | 验证证据 | 备注 |
| --- | ------ | -------------------------------------- | ------------------ | ----- | --- | ----- | ----- | ---- | ------ | ---- | --- |
| 9 | D-3 | ENUMS.md 补 `license_expired` | ENUMS 维护者 | Atlas | 待启动 | | | | | | |
| 10 | D-4 | ENUMS.md 补 `wrong_otp` / `otp_expired` | ENUMS 维护者 | Atlas | 待启动 | | | | | | |
| 11 | D-5 | `phone_enc/phone_hash` NOT NULL + 数据清洗 | accounts + DBA | Atlas | 待启动 | | | | | | |
| 12 | D-6 | `client_heartbeats` 月度分区 + 90 天保留 | DBA | Atlas | 待启动 | | | | | | |
| 13 | D-7 | `payload_summary` 增 GIN 全文索引 | DBA | Atlas | 待启动 | | | | | | |
| 14 | PT-B-2 | 客户端发版灰度策略澄清(租户/百分比) | Backend Architect | Atlas | 待启动 | | | | | | |
| 15 | PT-B-3 | 平台 MFA 选型 + DATA_MODEL 字段补充 | 安全 + Architect | Atlas | 待启动 | | | | | | |
| 16 | PT-L-1 | 首次登录强制改密拦截器实现路径 | Backend + Frontend | Atlas | 待启动 | | | | | | |
| 17 | A-L-1 | 错误码 ↔ failure_reason 对照表 | Backend + 安全 | Atlas | 待启动 | | | | | | |
| 18 | A-B-2 | 心跳/版本检查接口限流 + HMAC 签名 | Backend + 安全 | Atlas | 待启动 | | | | | | |
| 19 | U-B-1 | 平台后台 UI 引用组件清单组件 ID | UI + Frontend | Iris | 待启动 | | | | | | |
| 20 | U-L-1 | 补"账户锁定/密码过期"状态页 | UI + Frontend | Iris | 待启动 | | | | | | |
| 21 | S-3 | 短信 OTP 防刷规则量化 | 安全 | Atlas | 待启动 | | | | | | |
| 22 | S-4 | 字段级加密 SOP + `phone_hash` pepper | 安全 + Architect | Atlas | 待启动 | | | | | | |
| 23 | S-5 | 平台审计日志哈希链 + 必审操作清单 | 安全 | Atlas | 待启动 | | | | | | |
| 24 | PF-1 | 心跳 Redis Stream 缓冲 + 批量落表 | Architect | Atlas | 待启动 | | | | | | |
| 25 | PF-2 | 列表分页keyset+ 复合索引 | Architect + DBA | Atlas | 待启动 | | | | | | |
| 26 | P-B-2 | 平台 PRD 剥离实现细节 | PM + Architect | Nova | 待启动 | | | | | | |
| 27 | P-B-3 | PlatformAdmin 权限矩阵 | PM + 安全 | Nova | 待启动 | | | | | | |
| 28 | X-2 | 客户端版本回滚 / 中止灰度 UC | PM | Nova | 待启动 | | | | | | |
| 29 | X-3 | 备份恢复演练流程(恢复至隔离 schema | PM + DBA | Nova | 待启动 | | | | | | |
| 30 | X-4 | Tenant Admin 重置/迁移流程 | PM + 安全 | Nova | 待启动 | | | | | | |
### Minor 项(🟡 优化建议8 项)
| # | ID | 问题摘要 | 责任角色 | 处理人 | 状态 | 计划完成日 | 实际完成日 | 修订位置 | 关联 ADR | 验证证据 | 备注 |
| --- | ------ | ------------------------------------- | --------------------- | ----- | --- | ----- | ----- | ---- | ------ | ---- | --- |
| 31 | D-8 | 跨 schema 操作规范沉淀至 DATA_MODEL.md README | Data Model Owner | Atlas | 待启动 | | | | | | |
| 32 | A-G-1 | 全局 API 错误响应结构统一 | Architect | Atlas | 待启动 | | | | | | |
| 33 | U-G-1 | UI_SYSTEM 增 A11y 规范WCAG 2.1 AA | UI Designer | Iris | 待启动 | | | | | | |
| 34 | U-G-2 | HTML 原型严控 design token | UI Designer | Iris | 待启动 | | | | | | |
| 35 | PF-3 | 关键端点 SLO + 压测脚本 | PM + QA | Nova | 待启动 | | | | | | |
| 36 | PT-L-2 | 锁定阈值 settings 可配置(去硬编码) | Architect | Atlas | 待启动 | | | | | | |
| 37 | P-L-1 | 登录 PRD 异常路径细化 | PM | Nova | 待启动 | | | | | | |
| 38 | X-5 | 多设备登录策略明示 | PM | Nova | 待启动 | | | | | | |
| 39 | X-6 | 跨文档对"初始 Tenant Admin 创建"用词统一 | PM + Data Model Owner | Nova | 待启动 | | | | | | |
### 进度统计(每周更新)
| 统计日期 | Blocker 已完成 / 总数 | Major 已完成 / 总数 | Minor 已完成 / 总数 | 阻塞项数 | 风险说明 |
|---|---|---|---|---|---|
| 2026-05-02 | 0 / 8 | 0 / 21 | 0 / 9 | 0 | 初始基线 |
| 2026-05-02更新 | 2 / 8 | 0 / 21 | 0 / 9 | 0 | P-B-1 & X-1 已完成Nova技术方案/DATA_MODEL 联动更新待 Atlas 跟进 |
| 2026-05-02Atlas 修复) | 7 / 8 | 0 / 21 | 0 / 9 | 0 | S-2 / D-1 / D-2 / A-B-1 / PT-B-1 已完成Atlas剩余 Blocker S-1 为 PM 设计决策不修复;全部 Blocker 实质性完结 |
| | | | | | |
| | | | | | |
> Minor 项实际为 9 项(编号 31-39原汇总行动列表 Minor 计为 8 项的差异在于 D-8 与 X-6 是否合并归类,本跟踪表按独立处理项展开计 9 项。
### Review 闭环规则
1. 每条 Finding 修订完成后,处理人填写"修订位置 + 验证证据",状态置 `已完成`
2. PM/架构师在每周例会复核:跨模块/跨文档变更必须先创建 ADR`ADR.md`)再改文档,并在"关联 ADR"列填写 ID。
3. QA 在所有依赖 Finding 全部 `已完成` 后,对涉及业务路径执行回归测试,状态置 `已验证`
4. 任何 Finding 在迭代结束仍未启动需在"备注"列说明原因并在下一次 Review 例会重新评估优先级。
5. 本表与 `REVIEW/` 目录后续增量 Review 报告同步:新增 Finding 追加编号40+)继续延续。