文档修改

This commit is contained in:
Shen Wei
2026-04-26 20:33:29 +08:00
parent b7d9d0f5d1
commit 6dc50b68a0
4 changed files with 1850 additions and 15 deletions

View File

@@ -0,0 +1,521 @@
# Fonrey 全局系统设计 Review 报告
> **Review 类型**:全量 ReviewPRD + DATA_MODEL + TECH_STACK + UI/UX + TASK 交叉验证)
> **Review 模式**:聚焦 Top 风险 + 与 `REVIEW_全局_2026-04-25.md` 增量对比
> **Review 日期**2026-04-26
> **Reviewer**:首席系统设计 ReviewerAI 辅助)
> **当前阶段**:需求 ~85% / 数据模型 ~70% / UI 设计 ~30%HTML 原型已启动)/ TECH 横切规范 ~50%
> **覆盖文档**8 份 PRD含 7 份模块 PRD + TASK.md、8 份 DATA_MODEL、4 份 TECH_STACK、3 份 UI_SYSTEM、UI_DESIGN10 份原型/设计稿)
> **问题分级**:🔴 Blocker阻塞开发 / 🟠 Major必须修复但不阻塞 / 🟡 Minor建议优化
---
## 、执行摘要Executive Summary
### 整体评价
相较 2026-04-25 版本,文档体系出现 **3 项实质性进展**
1. **UI_DESIGN 原型已启动**(昨日 U-06 已修复):客源列表/详情/新增/编辑、房源列表 5 类核心页面均已产出 HTML + Markdown 双版本,规范深度足够。
2. **租户注销 SOP 已落地**(昨日 X-02 已修复):`PRD/系统管理` 已含导出范围、30 天宽限期、清除时序的完整生命周期。
3. **楼盘 4 类锁字段已实现**(昨日 D-02 部分修复):`complexes.lock_building/lock_room/lock_info/lock_standard_room` DDL 已写入。
但本次审查也暴露出**昨日 Review 未触及的新一类系统性风险——枚举一致性塌方**:客源状态、客源等级、房源状态、操作日志类型等核心枚举在 PRD ↔ DATA_MODEL ↔ TASK AC 三方均无权威源,且互相矛盾。这是一类比"Keyset 分页缺失"更隐蔽、修复成本更高的债务。
同时,**昨日列出的 2 个 BlockerP-01 权限档位 / D-01 Keyset 分页)均未修复**,新增 1 个 Blocker系统配置 PRD 仍为空骨架但被 9 条 P0/P1 任务引用为权威),共 **3 个 Blocker**,必须在编码启动前清零。
### 核心问题摘录Top 10
| # | 等级 | 编号 | 问题 | 维度 | 状态 |
|---|------|------|------|------|------|
| 1 | 🔴 | **B-01** | 系统配置 PRD`PRD/系统配置/系统配置.md`)仍为 128 行空骨架,但 TASK.md 排期 9 条 P0/P1 任务US-SETTING-001/010~012/020~023以其为权威`lookup_items` 入口、字段必填、活跃度阈值30 天)等无配置出口 | PRD↔TASK | 🆕 新增 |
| 2 | 🔴 | **B-02** | **核心枚举三方不一致**客源状态PRD"求购/求租/租购"vs DDL `buying/renting/buy_or_rent`、等级PRD A~E vs DDL A_urgent/A/B/C/D、房源 statusDDL 未含 `sold/unlisted/paused`,但 TASK AC 与查询语句均使用) | PRD↔Data↔TASK | 🆕 新增 |
| 3 | 🔴 | **B-03** | 权限 PRD §3 非目标声明"三档"与 §5.6 / Story 3 验收"五档" + DATA_MODEL_PERMISSION 的"DataScope 跨层级叠加"实质性冲突 | PRD↔Data | ⚠️ 昨日 P-01 部分修复,仍 Blocker |
| 4 | 🔴 | **B-04** | Keyset 分页规范在 TECH_STACK / DATA_MODEL / 测试规范中**完全缺位**89k 房源 + 200 万跟进日志的列表查询设计错误 | TECH/Data | ⚠️ 昨日 D-01 未修复 |
| 5 | 🟠 | **M-01** | 测试规范 v1.0 与 django-tenants 多租户工作模式冲突:`LocMemCache`/`FileSystemStorage`/`CELERY_TASK_ALWAYS_EAGER=True` 使权限 Redis 快照失效、跨租户隔离、Celery 异步导出三类场景无法验证;`TenantClient`/`tenant fixture` 仅在 §11.2 Prompt 模板中被引用但无实现 | TECH/测试 | 🆕 新增 |
| 6 | 🟠 | **M-02** | 主表乐观锁字段缺失:`properties` / `clients` 仍无 `version``complexes` 4 类锁已建字段但无解锁权限/过期规则 PRD | Data↔PRD | ⚠️ 昨日 D-02 部分修复 |
| 7 | 🟠 | **M-03** | 高写入表分区 DDL 仍未落地:`follow_logs` / `property_photos` / `permission_change_logs` / `login_attempts` / `platform_audit_logs` 均仅文字"建议月度分区",无 `PARTITION BY` 子句 | Data | ⚠️ 昨日 D-04 未修复 |
| 8 | 🟠 | **M-04** | TECH_STACK 三大横切规范仍未补Celery 多租户 schema 切换(昨 T-01、R2 文件路径前缀(昨 T-02、查询索引矩阵昨 T-03 | TECH/多租户 | ⚠️ 昨日均未修复 |
| 9 | 🟠 | **M-05** | 89k 数据 < 2 秒列表查询是 TASK AC 中的硬性 NFRUS-PROPERTY-002 / US-CLIENT-002但 TECH_STACK + 测试规范无 p95/EXPLAIN/性能基准对应任务AC 不可测 | NFR↔TECH↔测试 | 🆕 新增 |
| 10 | 🟠 | **M-06** | 客户端发布无签名校验/防降级机制:`/api/client/updates/latest/``download_url` 公开 URL仅 SHA256 完整性校验,可被中间人投递降级版本 | 安全 | 🆕 新增 |
### 风险等级分布
| 等级 | 本次2026-04-26 | 昨日2026-04-25 | 净变化 |
|------|---|---|---|
| 🔴 Blocker | **3** | 2 | +1系统配置空骨架升级 |
| 🟠 Major | **12** | 19 | -7含 6 项已修复 + 1 项降级) |
| 🟡 Minor | **6** | 17 | -11聚焦 Top 风险,未列入本期) |
| 合计 | **21** | 38 | — |
### 增量对比一览(昨日 P0/P1 → 今日状态)
| 昨日编号 | 简述 | 状态 | 今日处置 |
|----------|------|------|----------|
| P-01 | 权限范围档位冲突 | 🟡 部分修复 | 升 B-03 仍 Blocker |
| D-01 | Keyset 分页缺失 | 🔴 未修复 | 转 B-04 |
| P-02 | 系统配置 PRD 缺失 | 🔴 仍空骨架 | 升 B-01 |
| D-02 | 主表乐观锁/楼盘锁 | 🟡 部分修复 | 转 M-02 |
| D-04 | 高写入表分区 | 🔴 未修复 | 转 M-03 |
| D-07 | 楼盘价格走势/市场报盘 | 🟡 部分修复 | M-08降级 |
| T-01/T-02/T-03 | Celery/R2/索引规范 | 🔴 均未修复 | 合并 M-04 |
| U-01/U-02/U-03/U-06 | UI 组件 + Wireframe | 🟡 U-06 已修复,复杂组件仍缺 | 转 M-09 |
| X-01 | Redis Key tenant 前缀 | 🟡 部分修复 | M-10降级 |
| X-02 | 租户注销 SOP | ✅ 已修复 | 关闭 |
| S-01 | 加密密钥管理 | 🔴 未修复 | M-11 |
---
## 一、PRD 一致性审查PRD ↔ PRD ↔ TASK
### 🔴 B-01 系统配置 PRD 空骨架阻塞 9 条 P0/P1 任务
**文档**`PRD/系统配置/系统配置.md:1-128`(仅章节标题,无内容);`PRD/TASK.md:59, 86-88, 107-110`
**事实**
- 系统配置 PRD 仅 128 行骨架无任何字段定义、规则说明、UI 描述。
- TASK.md 在 Phase 1/2/3 共排期 9 条 Story全部以"参考 PRD系统配置.md"为权威:
- P0US-SETTING-001房源相关设置-字段必填/自定义字段/标签)
- P1US-SETTING-010/011/012首页/相关方/客源参数)
- P2US-SETTING-020~023人事 OA/交易/财务/合同模板)
- 客源 PRD `DATA_MODEL_CLIENT.md:31` 提到"活跃度新配偶 30 天"阈值由 lookup_items 配置,但配置入口 PRD 不存在。
- 房源 PRD 多处提到"字段标签可配置"、"自定义字段"、"标签管理",全部指向系统配置 PRD。
**影响**
- US-SETTING-001 是 Phase 1 P0无 PRD 即无法启动开发。
- 所有"可配置"行为(活跃度阈值、自动转公阈值、字段标签)的运营管理入口断链。
- DATA_MODEL_PUBLIC `lookup_items` 表已建好,但其管理 UI 与权限设计无规格。
**责任**PM 必须在编码 Phase 1 启动前完成 `PRD/系统配置/系统配置.md` 至少 P0 范围US-SETTING-001 内容),否则 TASK.md 应将 US-SETTING-001 暂时移出 Phase 1。
---
### 🔴 B-02 核心枚举三方不一致PRD ↔ DDL ↔ TASK AC
**文档**:多处(见下表)
| 字段 | PRD 表述 | DATA_MODEL CHECK | TASK AC | 冲突类型 |
|------|----------|------------------|---------|----------|
| 客源 status | `PRD/客源管理/客源管理模块PRD.md:465,504,1757,1786`:求购/求租/租购/我购/我租/成交/暂缓/无效/公 | `DATA_MODEL_CLIENT.md:471,511``buying / renting / buy_or_rent`(仅 3 值,无暂缓/无效/我购/我租/成交/公) | `TASK.md` US-CLIENT-002/010/011/012/013 均按 PRD 中文 | 三方均不同 |
| 客源 grade | PRD `1634`A~E 五级 | `DATA_MODEL_PROPERTY.md:266`(注:客源 grade 字段实际位置待确认):`A_urgent/A/B/C/D` 5 项无 E | `TASK.md:308` US-CLIENT-009A 急迫/B 较强/C 一般/D 较弱/E 暂不关注 五级 | DDL 缺 E混用 `A_urgent` |
| 房源 status | PRD 8 态:出售/出租/租售/暂缓/他售/他租/成交/未挂牌 | `DATA_MODEL_PROPERTY.md:197``for_sale/for_rent/for_sale_rent/...` | `TASK.md:232` US-PROPERTY-008在售→暂缓/成交/下架;`TASK.md:1121` 隐式查询 `status NOT IN ('sold','unlisted')` | DDL CHECK 全集未冻结,"sold/unlisted/paused" 出现在查询但未确认在 CHECK 中 |
| 操作日志 type | 客源 PRD `668`:明文"系统实际枚举值更多" | DATA_MODEL_CLIENT 未给 CHECK 完整列表 | `TASK.md:578-581` US-CLIENT-024 AC"按操作类型筛选" | 全集未冻结 |
| 二级 Tab "暂缓" | 客源 PRD `713-717` Tab求购/求租/暂缓/全部私客 | `DATA_MODEL_CLIENT.md:471,511` 状态枚举无 `paused/on_hold` | `US-CLIENT-002` AC 含暂缓 Tab | DDL 缺值 |
| `tenants.status` | `DATA_MODEL_PUBLIC.md:96`6 值含 `failed` | 同文件 `488-494` 状态机图:仅 5 态,未含 `failed` | — | 同一文档内自相矛盾 |
**影响**
- 迁移脚本将凭主观翻译,开发期会出现"经纪人在 PRD 看到的中文"与"DDL CHECK 拒绝的英文"不一致的运行时报错。
- 状态机断链导致 transition 校验逻辑(如"暂缓→在售")无权威实现。
- 测试 factory 不知如何取样form choices 与 query filter 各自定义。
**责任**PM + 架构师共同冻结一份《Fonrey 枚举字典 v1.0》(建议放入 `DATA_MODEL/ENUMS.md`),所有 PRD/DDL/TASK 引用统一锚点。
---
### 🔴 B-03 权限数据范围档位冲突仍为 Blocker昨日 P-01 部分修复)
**文档**`PRD/权限管理/权限管理模块PRD.md:46`§3 非目标vs `:492-499`§5.6 五档vs `DATA_MODEL/DATA_MODEL_PERMISSION.md:24,31`DataScope 跨层级叠加)
**事实**
- §3 非目标仍写"数据范围控制以**本人 / 本部门 / 全公司**三档为主,本期不含行级权限"。
- §5.6 已扩为五档(本人/本组/本门店/本区域/全公司)。
- DATA_MODEL_PERMISSION `staff_data_scopes` 已实现"跨层级叠加""本组 门店B"),实质上为对象级权限的弱化形态,已超出 §3 非目标边界。
**影响**
- 同一 PRD 内 §3 与 §5.6 自相矛盾,开发无权威依据。
- `staff_data_scopes` 是否本期落地不明权限模块US-PERMISSION-001~005无法启动。
**责任**PM 在 PRD v1.2 中锁定五档 + 删除 §3 三档表述 + 明确 DataScope 跨层级叠加是否本期范围。
---
### 🟠 M-07 楼盘合并/申请流程仅占位
**文档**`PRD/房源管理/楼盘管理模块PRD.md:117`
**事实**PRD 仅写"小区名称/地址只读 — 合并/申请流程"占位,未定义触发条件、审批人、合并规则、对历史房源/客源的影响。`DATA_MODEL_COMPLEX` 无对应表/工作流。
**影响**US-COMPLEX-001 录入与维护流程不闭环;楼盘合并将在生产环境出现"合并后历史房源 complex_id 漂移"问题。
---
### 🟠 M-08 客源新房/租房 Tab 字段未冻结
**文档**`PRD/客源管理/客源管理模块PRD.md:1663`(明文"字段待截图补充确认"
**事实**US-CLIENT-014编辑客源 Tab 三:二手/新房/租房AC 不可测DATA_MODEL_CLIENT 需求字段 schema 不可冻结。
---
## 二、DATA_MODEL 完整性审查
### 🔴 B-04 Keyset 分页规范全局缺位(昨日 D-01 未修复)
**文档**`TECH_STACK/TECH_STACK.md`(全文未现 keyset/分页规范);`DATA_MODEL_PROPERTY.md:1083` §6 / `DATA_MODEL_CLIENT.md:453` §五 查询模式参考章节均未给 Keyset SQL 模板
**事实**
- 89k 房源 + 200 万/年跟进日志使用 OFFSET 分页,第 100 页响应将达秒级。
- TASK.md US-PROPERTY-002 / US-CLIENT-002 的 AC 均要求"<2 秒"。
- 测试规范无性能基准任务覆盖。
**责任**:架构师在 `TECH_STACK.md` 新增 §「分页规范」,并在 `DATA_MODEL_PROPERTY.md` §6 / `DATA_MODEL_CLIENT.md` §五 给出 Keyset SQL 模板(`WHERE (created_at, id) < (?, ?) ORDER BY created_at DESC, id DESC LIMIT 21`)。
---
### 🟠 M-02 主表乐观锁/楼盘锁规则缺失
**文档**`DATA_MODEL_COMPLEX.md:194-197`(楼盘 4 类锁字段已建);`DATA_MODEL_PROPERTY.md` / `DATA_MODEL_CLIENT.md` / `DATA_MODEL_COMPLEX.md` 主表均无 `version` 字段;`PRD/房源管理/楼盘管理模块PRD.md:82` 列出 4 类锁但无解锁/过期规则
**事实**
- 楼盘 `lock_building/lock_room/lock_info/lock_standard_room` 字段已落库 ✅
- 但 PRD 未规定每类锁的解锁权限、自动/手动解锁规则、锁过期机制。
- US-COMPLEX-001/002 AC 不含锁状态变更流程。
- `properties.version` / `clients.version` 仍未补,多人协作场景的写冲突无防护。
**责任**:架构师补 `version` 字段PM 补 4 类锁的业务规则。
---
### 🟠 M-03 高写入表分区 DDL 仍未落地(昨日 D-04 未修复)
**文档**`DATA_MODEL_PROPERTY.md:523`follow_logs/ `:801`property_photos`DATA_MODEL.md:596-604`(仅文字描述)
**事实**
- `follow_logs`200 万+/年)、`property_photos`500 万+)、`permission_change_logs``login_attempts``platform_audit_logs` 的 DDL 中均无 `PARTITION BY` 子句,仅在文字描述/分区策略表中"建议按月 RANGE 分区"。
- 开发期不分区,未来再分区将带来全表数据迁移成本。
**责任**:架构师在每张高写入表的 DDL 中给出 `PARTITION BY RANGE (created_at)` + `pg_partman` 自动维护脚本。
---
### 🟠 M-08 楼盘价格走势已建,市场报盘仍缺(昨日 D-07 部分修复)
**文档**`DATA_MODEL_COMPLEX.md:376` `complex_price_trends` ✅;`DATA_MODEL_CLIENT.md:505` §5.4 私客自动转公(仅 SQL 查询示例,非完整 job`market_quotes` 表全表缺失
**事实**
- 楼盘价格走势 ✅ 已建。
- "市场报盘"(房源 PRD §)仍无 `market_quotes` 表。
- 私客→公客自动转换仅给查询 SQL 示例,无完整 Celery beat 调度任务定义、无幂等保证、无并发控制。
**影响**US-CLIENT-016系统自动将超时无跟进的私客转为公客AC 无法实现。
---
## 三、TECH_STACK 完整性审查
### 🟠 M-04 三大横切规范全部仍未补(昨日 T-01/T-02/T-03 未修复)
**文档**`TECH_STACK/TECH_STACK.md`(全文)
| 子项 | 现状 | 影响 |
|------|------|------|
| Celery 多租户 schema 切换 | TECH_STACK.md L30/44/80/90/165 仅零散提及 Celery无统一规范 | Worker 在错误 schema 下查询、跨租户数据污染 |
| R2 文件路径前缀 | TECH_STACK.md L31/105/119/166 仅提及 bucket 名 | 共享 bucket 下 `file_key` 无租户标识,存在隐患 |
| 查询索引矩阵 | TECH_STACK/ 目录无"索引规范.md"DATA_MODEL.md §六 实为 Redis 缓存策略 | 89k 房源多条件筛选无覆盖索引验证依据 |
**责任**:架构师补 §「异步任务规范」、§「R2 路径规范」、`TECH_STACK/索引规范.md` 三份内容。
---
### 🟠 M-01 测试规范与 django-tenants 多租户工作模式冲突
**文档**`TECH_STACK/测试规范.md:393-413`settings_test/`570-575`(引用未实现的 TenantClient/`594`(禁用真实外部服务)
**事实**
- `LocMemCache`402-406django-tenants 需要 `tenant-cache-key` 前缀化的 Redis 行为;权限快照走 RedisTASK L617 AC "Redis 权限快照失效重载"),切到 LocMem 后跨进程/跨租户隔离测试失效。
- `FileSystemStorage`411-413替换 R2 用于测试本身合理,但与 §594 "禁止测试直接调用真实外部服务"叠加后,`tenants/{schema_name}/...` 路径前缀策略M-04 R2无 mock 验证手段。
- `CELERY_TASK_ALWAYS_EAGER=True`398-399US-CLIENT-003 等要求"Celery 异步处理"的 AC 无法在 EAGER 模式下验证异步语义。
- `DATABASES "由环境变量注入"`393-395未约定 `ENGINE=django_tenants.postgresql_backend`,可能落到错误的 backend 上。
- `TenantClient` / 多租户 fixture仅在 §11.2 Prompt 模板中被引用无实现§12 又"禁止使用 Django 原生 Client()",造成所有 integration 测试无统一基类。
**影响**
- 权限模块 Redis 快照失效场景、跨租户隔离场景的自动化测试不可信。
- US-PERMISSION-* / US-CLIENT-003 / US-CLIENT-016 等核心场景的覆盖率指标存在水分。
**责任**:架构师与测试负责人协同:(a) `tests/conftest.py` 提供 `TenantClient``tenant_factory` 实现;(b) Redis 改用 fakeredis 而非 LocMemCache(c) 异步场景使用 `pytest-celery``celery_app` fixture区分 EAGER 单元测试与真实 broker 集成测试。
---
### 🟠 M-05 性能 NFR 无 SLI/SLO 落地(昨日 P-04 未修复)
**文档**`TASK.md:189, 252` US-PROPERTY-002 / US-CLIENT-002 AC 写"89000 条数据下查询 < 2 秒"`PRD/客源管理/客源管理模块PRD.md:1958-1960` 仅泛述"分页加载"TECH_STACK 与测试规范无 p95/索引/EXPLAIN 验收
**事实**
- 性能 AC 散布于 PRD/TASK 多处(录入耗时 ≤ 30s、配房 < 3s、登录成功率、自动更新 ≥ 98%、RTO < 2h无统一的 NFR 矩阵。
- TECH_STACK 未承接为 SLI/SLO测试规范无性能基准任务如 pytest-benchmark + EXPLAIN ANALYZE 校验)。
**影响**:所有性能 AC 不可测,验收阶段将沦为主观判断。
---
### 🟠 M-11 加密密钥管理方案缺失(昨日 S-01 未修复)
**文档**`TECH_STACK/TECH_STACK.md:96` 仅一句"禁止硬编码密钥"
**事实**
- 全文未给出 KMS / Vault / 环境变量加密管理说明。
- `core.encryption` 仅作为模块名出现,密钥轮换流程未定义。
- 手机号、身份证、银行卡号、产证号等多处使用 AES-256-GCM 加密,密钥泄露后批量解密风险高。
**责任**:架构师补 KMS/Vault 选型 + 轮换 SOP + `core.encryption` 接口契约。
---
## 四、UI/UX 完整性审查
### ✅ U-06 已修复UI_DESIGN 原型已启动
**证据**`UI_DESIGN/preview.html``UI_DESIGN/客源列表_UI.html`81KB`客源详情_UI.html``房源列表_UI.html``新增客源_UI.html``编辑客源_UI.html``UI_DESIGN/客源管理/`4 份 md60KB+/40KB+`UI_DESIGN/房源管理/房源列表_UI.md`69KB
**事实**HTML 原型与对应 Markdown 设计稿均已启动,规范深度足够(含功能范围/页面规范/Data Table/HTMX/权限矩阵)。
---
### 🟠 M-09 复杂组件原型仍缺 + 楼盘/客源原型不完整(昨日 U-01/U-02/U-03 未修复)
**文档**`UI_SYSTEM/UI_SYSTEM.md`1742 行);`UI_SYSTEM/组件清单.md:186`(仅在评论中提到 TreeSelect "建议手写 80~120 行 JS"`UI_DESIGN/房源管理/` 仅 1 个文件;`UI_DESIGN/客源管理/` 缺关键浮层
**事实**
- 组件清单仍缺 4 类关键复杂组件:
1. **Stepper / Wizard**(多步表单):录入私客、转成交浮层
2. **PermissionTree**14 个一级模块树 + 多分组 + Toggle/Select/NumberUS-PERMISSION-001/004 最复杂页面
3. **智能配房比对器**4 分组卡片US-CLIENT-020 录客配房
4. **审批前置弹层**US-CLIENT-015 跨团队需店长权限、号码方审批
- UI_DESIGN/房源管理/ 仅 `房源列表_UI.md`TASK.md L152/160 引用 `楼盘列表_UI.md` / `楼盘详情_UI.md` 不存在。
- UI_DESIGN/客源管理/ 缺 US-CLIENT-007带看/011转公客/012转成交/015相关员工/020智能配房独立原型全部压缩进 `客源详情_UI.md` 单文件,颗粒度不足。
**责任**UI/UX 设计师补 4 类复杂组件 + 楼盘 2 份原型 + 客源 5 份关键浮层独立原型。
---
## 五、多租户隔离审查(横切)
### 🟠 M-10 Redis Key 命名跨模块未统一(昨日 X-01 部分修复)
**文档**`TECH_STACK/登录管理技术方案.md:553-562`(§九 Redis Key 规范,使用 `{tenant_id}:` 前缀);`TECH_STACK.md` / `权限管理系统技术方案.md` 未见统一规范引用
**事实**
- 登录方案已落地 Redis Key 规范表 ✅,但前缀使用 `{tenant_id}:` 而非昨日 Review 建议的 `{tenant_schema_name}:`
- TECH_STACK.md 总纲未引用此规范;权限技术方案未明确 Redis Key 是否带 tenant 前缀。
- 跨模块(登录/权限/缓存)若不统一,多租户 Redis 共享时存在键冲突风险。
**责任**:架构师在 `TECH_STACK.md` 新增 §「Redis Key 规范」,统一 `{tenant_schema_name}:` 前缀schema_name 比 tenant_id 在日志/调试时更直观),并在登录/权限技术方案中显式引用。
---
## 六、合规与安全审查
### 🟠 M-06 客户端发布无防降级/重放校验
**文档**`PRD/发布管理/客户端发布管理模块PRD.md:58`(明文非目标"客户端代码混淆/反逆向"`DATA_MODEL_PUBLIC.md:413-416, 419-421`
**事实**
- `/api/client/updates/latest/` 响应未要求服务端签名。
- `client_releases.download_url` 为 R2 公开 URL无签名/有效期,旧客户端可继续拉取旧版本绕过强制升级。
- `min_required_version` 由"应用层比较 SemVer",未定义服务端签名/客户端公钥校验。
- US-RELEASE-011 SHA256 仅校验完整性,不防替换(中间人可投递降级版本)。
**影响**:中间人攻击可投递已撤销的旧版本(含已修复漏洞的版本),合规与安全双重风险。
**责任**:架构师与发布团队补:(a) 更新元数据签名Ed25519/RSA-PSS(b) `download_url` 改用签名 URL短有效期(c) 客户端内置公钥校验。
---
### 🟠 M-12 RPO 数值缺失,备份计划与 SLA 断链
**文档**`PRD/系统管理/系统管理模块PRD.md:58`(仅 RTO < 2h`DATA_MODEL_PUBLIC.md:265-280` `backup_schedules` 默认 daily 02:00、retention 10
**事实**
- daily 频率隐含 RPO ≈ 24h 但 PRD 未声明。
- 与"全局/租户级覆盖"组合下SLA 不可承诺。
- `tenants.status``failed`DDL但状态机图同文 488-494仅 5 态未含 `failed`,故障租户无 SLA 出口。
**责任**PM 补 RPO 数值;架构师补 `failed` 状态的退出路径。
---
## 七、性能与容量审查
### 🟠 M-05 89k 数据 < 2 秒 AC 不可测(已在 §三列出)
### 🟠 M-13 智能配房算法路径仍未文档化
**文档**:客源 PRD §5 智能配房TECH_STACK 与 DATA_MODEL 未有"实时 vs 异步""匹配算法 SQL"说明
**事实**
- 客源 PRD 要求智能配房响应 < 3s。
- 匹配字段(户型/面积/价格/区域)跨 properties/clients 两表的 4-6 维筛选,是否使用物化视图/PostgreSQL 多列 GiST 未定。
- `client_property_matches` 表是否本期建TASK Phase 3 才有 US-CLIENT-020若 Phase 1 不需要PRD 提及的 < 3s 应明确不在 Phase 1 范围。
---
## 八、可维护性与扩展性
### 🟠 M-14 TASK.md PRD 锚点链接断链
**文档**`TASK.md:124, 132, 139, 150, 158, 167`
**事实**TASK.md 大量"参考 PRDxxx#锚点"形式的链接,但所引锚点(如 `登录管理/用户登录管理模块PRD.md - 账号密码登录` / `楼盘管理模块PRD.md - 楼盘信息管理`)在对应 PRD 中作为标题不存在,开发无法直接跳转。
**影响**TASK.md 作为开发入口的"可执行性"打折扣。
---
## 九、行动清单(按责任人 + 优先级)
### PM产品经理
| ID | 等级 | 任务 | 关联编号 |
|----|------|------|----------|
| PM-1 | 🔴 | **补齐 `PRD/系统配置/系统配置.md` P0 范围**US-SETTING-001字段必填/自定义字段/标签管理lookup_items 配置入口;活跃度/转公阈值配置) | B-01 |
| PM-2 | 🔴 | 与架构师协同冻结《Fonrey 枚举字典 v1.0》(建议 `DATA_MODEL/ENUMS.md`),覆盖客源 status/grade、房源 status、操作日志 type、`tenants.status` 等核心枚举 | B-02 |
| PM-3 | 🔴 | 修订权限 PRD v1.2:删除 §3 三档表述,锁定五档 + DataScope 跨层级叠加是否本期范围 | B-03 |
| PM-4 | 🟠 | 楼盘合并/申请流程详述(触发/审批/对历史房源影响) | M-07 |
| PM-5 | 🟠 | 客源新房/租房 Tab 字段冻结 | M-08 |
| PM-6 | 🟠 | 在 `PRD_MVP.md` 中汇总 NFR 矩阵(性能/可用性/安全/合规),含 RPO 数值 | M-05, M-12 |
| PM-7 | 🟠 | 修复 TASK.md 内所有 PRD 锚点断链 | M-14 |
### 架构师
| ID | 等级 | 任务 | 关联编号 |
|----|------|------|----------|
| ARCH-1 | 🔴 | TECH_STACK 新增 §「分页规范」+ Keyset SQL 模板DATA_MODEL_PROPERTY/CLIENT §查询模式补 Keyset 示例 | B-04 |
| ARCH-2 | 🟠 | 修复测试规范多租户冲突:补 `TenantClient` 实现、`tenant_factory` fixtureRedis 改用 fakeredis区分 EAGER/真实 broker | M-01 |
| ARCH-3 | 🟠 | `properties` / `clients` 主表补 `version`;楼盘 4 类锁补解锁/过期机制(与 PM 协同) | M-02 |
| ARCH-4 | 🟠 | 高写入表follow_logs/property_photos/permission_change_logs/login_attempts/platform_audit_logs`PARTITION BY RANGE` DDL + pg_partman 脚本 | M-03 |
| ARCH-5 | 🟠 | TECH_STACK 三大横切规范补异步任务Celery tenant_schema 必传 + `@with_tenant_context`/R2 路径前缀(`tenants/{schema_name}/...`/查询索引矩阵 | M-04 |
| ARCH-6 | 🟠 | TECH_STACK 性能 NFR → SLI/SLO 映射 + 测试规范补 pytest-benchmark/EXPLAIN ANALYZE | M-05 |
| ARCH-7 | 🟠 | 客户端发布签名机制:服务端签发 Ed25519/RSA-PSS、客户端内置公钥、`download_url` 改签名 URL | M-06 |
| ARCH-8 | 🟠 | `market_quotes` 表 + 私客自动转公完整 Celery beat 任务(含幂等/并发控制) | M-08 |
| ARCH-9 | 🟠 | TECH_STACK 新增 §「Redis Key 规范」,统一 `{tenant_schema_name}:` 前缀 | M-10 |
| ARCH-10 | 🟠 | 加密密钥管理方案KMS/Vault 选型、轮换 SOP、`core.encryption` 接口契约 | M-11 |
| ARCH-11 | 🟠 | `tenants.status='failed'` 状态机出口补全 | M-12 |
| ARCH-12 | 🟠 | 智能配房算法路径文档(实时 vs 异步、索引/物化视图选型) | M-13 |
### UI/UX 设计师
| ID | 等级 | 任务 | 关联编号 |
|----|------|------|----------|
| UI-1 | 🟠 | 补 4 类复杂组件原型Stepper/Wizard、PermissionTree、智能配房比对器、审批前置弹层 | M-09 |
| UI-2 | 🟠 | 补 UI_DESIGN/房源管理/楼盘列表_UI.md / 楼盘详情_UI.md修复 TASK 引用) | M-09 |
| UI-3 | 🟠 | 客源关键浮层独立原型US-CLIENT-007/011/012/015/020 | M-09 |
---
## 十、结论
### 是否可进入开发阶段
**否,必须先解决 4 个 Blocker**
| 编号 | Blocker | 影响范围 |
|------|---------|----------|
| B-01 | 系统配置 PRD 空骨架 | 阻塞 9 条 P0/P1 任务US-SETTING-001/010~012/020~023 |
| B-02 | 核心枚举三方不一致 | 阻塞客源/房源全部 CRUD 模块US-CLIENT-* / US-PROPERTY-* |
| B-03 | 权限档位冲突 | 阻塞权限模块US-PERMISSION-001~005 |
| B-04 | Keyset 分页缺失 | 阻塞高基数列表查询US-PROPERTY-002 / US-CLIENT-002 |
**可立即并行启动的部分**
- 公共 Schema`tenants``platform_admins``audit_logs`)开发——文档完整,无 Blocker。
- 楼盘/区域/学校 CRUD——DATA_MODEL_COMPLEX 完整、4 类锁字段已建,主流程清晰(解锁规则可后置补充)。
- Electron 客户端框架搭建——TECH_STACK §8 决策已封闭(但发布签名机制 M-06 需在 RC 前补齐)。
- 登录模块accounts App——文档完整含 Redis Key 规范),仅需在多租户场景下补 fakeredis 测试基线。
- UI 静态原型实施——核心 5 页已有 HTML 原型可直接转 HTMX 模板。
**必须延后的部分**
- 系统配置模块B-01 解除前)。
- 权限模块B-03 解除前)。
- 房源/客源高基数列表查询B-04 解除前;可先实施 OFFSET 分页,但需排期重构)。
- 89k 性能 AC 验收M-05 解除前AC 不可测)。
### 文档体系成熟度评分(与昨日对比)
| 维度 | 今日 | 昨日 | 变化 | 说明 |
|------|------|------|------|------|
| PRD 业务清晰度 | 7.5/10 | 8.5/10 | ↓ | 新发现枚举塌方 + 系统配置空骨架 |
| DATA_MODEL 落地深度 | 8.5/10 | 8/10 | ↑ | 楼盘锁字段、价格走势、租户注销已落地 |
| TECH_STACK 完整性 | 6/10 | 6/10 | — | 三大横切规范仍未补 |
| UI/UX 系统化 | 7/10 | 5/10 | ↑↑ | UI_DESIGN 原型显著启动 |
| 跨文档一致性 | 5.5/10 | 6.5/10 | ↓ | 枚举塌方拉低评分 |
| 多租户隔离严谨度 | 7.5/10 | 7.5/10 | — | Redis Key 部分修复但未统一 |
| 测试可执行性 | 5/10 | (未评估) | 🆕 | 测试规范与 django-tenants 工作模式冲突 |
| **整体** | **6.8/10** | **7/10** | ↓ 0.2 | 新发现风险大于已修复风险,但绝对水平仍属"中等偏上" |
**结论**:本次 Review 的实质性进展UI 启动、租户注销 SOP、楼盘锁字段值得肯定但**枚举塌方**和**测试规范多租户冲突**是新发现的系统性风险,必须在编码启动前优先治理。在 4 个 Blocker 解除 + 6 项核心 Major 修复后,整体成熟度可重回 8.0+。
---
## 附录 A本次 Review 涵盖文档
### PRD8 份)
- `PRD/PRD_MVP.md` v1.0
- `PRD/TASK.md`834 行)
- `PRD/房源管理/房源管理模块PRD.md` v2.11881 行)
- `PRD/房源管理/楼盘管理模块PRD.md`
- `PRD/客源管理/客源管理模块PRD.md` v1.42050 行)
- `PRD/权限管理/权限管理模块PRD.md` v1.1
- `PRD/组织人事管理/组织人事管理模块PRD.md` v1.2
- `PRD/系统管理/系统管理模块PRD.md` v1.0
- `PRD/登录管理/用户登录管理模块PRD.md` v1.4
- `PRD/发布管理/客户端发布管理模块PRD.md` v1.0
- `PRD/系统配置/系统配置.md`128 行骨架)
### DATA_MODEL8 份)
- `DATA_MODEL/DATA_MODEL.md` v1.3、`DATA_MODEL_PUBLIC.md``DATA_MODEL_ORG.md``DATA_MODEL_COMPLEX.md``DATA_MODEL_PROPERTY.md``DATA_MODEL_CLIENT.md``DATA_MODEL_PERMISSION.md``DATA_MODEL_LOGIN.md`
### TECH_STACK4 份)
- `TECH_STACK/TECH_STACK.md` v2.0
- `TECH_STACK/登录管理技术方案.md` v2.0
- `TECH_STACK/权限管理系统技术方案.md` v1.0
- `TECH_STACK/测试规范.md` v1.0
### UI_SYSTEM3 份)
- `UI_SYSTEM/UI_SYSTEM.md` v1.21742 行)
- `UI_SYSTEM/组件清单.md`
- `UI_SYSTEM/组件规范设计.md`
### UI_DESIGN10 份原型/设计稿)
- `UI_DESIGN/preview.html``客源列表_UI.html``客源详情_UI.html``房源列表_UI.html``新增客源_UI.html``编辑客源_UI.html`
- `UI_DESIGN/客源管理/客源列表_UI.md``客源详情_UI.md``新增客源_UI.md``编辑客源_UI.md`
- `UI_DESIGN/房源管理/房源列表_UI.md`
---
## 附录 B问题汇总速查表
| ID | 等级 | 维度 | 责任人 | 简述 | vs 昨日 |
|----|------|------|--------|------|---------|
| B-01 | 🔴 | PRD↔TASK | PM | 系统配置 PRD 空骨架 | ⚠️ P-02 升级 |
| B-02 | 🔴 | PRD↔Data↔TASK | PM+架构师 | 核心枚举三方不一致 | 🆕 新增 |
| B-03 | 🔴 | PRD↔Data | PM | 权限档位三档/五档冲突 | ⚠️ P-01 部分修复 |
| B-04 | 🔴 | TECH/Data | 架构师 | Keyset 分页规范缺失 | ⚠️ D-01 未修复 |
| M-01 | 🟠 | TECH/测试 | 架构师 | 测试规范与 django-tenants 冲突 | 🆕 新增 |
| M-02 | 🟠 | Data↔PRD | 架构师+PM | 主表乐观锁/楼盘锁规则缺失 | ⚠️ D-02 部分修复 |
| M-03 | 🟠 | Data | 架构师 | 高写入表分区 DDL 未落地 | ⚠️ D-04 未修复 |
| M-04 | 🟠 | TECH/多租户 | 架构师 | Celery/R2/索引矩阵三大横切规范 | ⚠️ T-01/T-02/T-03 未修复 |
| M-05 | 🟠 | NFR↔TECH↔测试 | PM+架构师 | 89k <2 秒 AC 不可测 | 🆕 新增(含昨 P-04 |
| M-06 | 🟠 | 安全 | 架构师 | 客户端发布无防降级/签名 | 🆕 新增 |
| M-07 | 🟠 | PRD | PM | 楼盘合并/申请流程占位 | 🆕 新增 |
| M-08 | 🟠 | PRD/Data | PM+架构师 | 客源新房/租房字段未冻结 + market_quotes 缺 + 转公 job 不完整 | 部分新增 |
| M-09 | 🟠 | UI | UI/UX | 复杂组件 + 楼盘/客源浮层原型缺 | ⚠️ U-01/U-02/U-03 未修复 |
| M-10 | 🟠 | 多租户 | 架构师 | Redis Key 跨模块未统一前缀 | ⚠️ X-01 部分修复 |
| M-11 | 🟠 | 安全 | 架构师 | 加密密钥管理方案缺失 | ⚠️ S-01 未修复 |
| M-12 | 🟠 | 合规 | PM+架构师 | RPO 缺 + tenants.status=failed 状态机断链 | 🆕 新增 |
| M-13 | 🟠 | 性能 | 架构师 | 智能配房算法路径未文档化 | ⚠️ P-11 未修复(升级) |
| M-14 | 🟠 | 维护 | PM | TASK.md PRD 锚点断链 | 🆕 新增 |
**合计**:🔴 4 / 🟠 14 = **18 项 Top 风险**(聚焦 Top 模式,未列入 Minor
### 已关闭项(昨日 → 今日)
| 昨日编号 | 简述 | 关闭依据 |
| --------------- | ----------------------------------------- | ------------------------------------------------- |
| X-02 | 租户注销→导出→清除链路 | `PRD/系统管理` §189-227, §552-553 已落地完整生命周期 |
| U-06 | Wireframe 未启动 | UI_DESIGN/ 已产出 5 页 HTML + 5 份 md 设计稿 |
| 楼盘 4 类锁字段 | DATA_MODEL_COMPLEX 缺 lock_* 字段 | `DATA_MODEL_COMPLEX.md:194-197` 已建(业务规则待补,转 M-02 |
| 楼盘价格走势表 | DATA_MODEL_COMPLEX 缺 complex_price_trends | `DATA_MODEL_COMPLEX.md:376` 已建 |
| 登录 Redis Key 规范 | 跨模块未统一 | 登录方案 §九已建 ✅;统一 schema 前缀仍待办(转 M-10 |
---
*Report Generated: 2026-04-26 by AI Reviewer*
*基线版本REVIEW_全局_2026-04-25.md*