Files
hms/docs/superpowers/specs/2026-05-20-v1-readiness-six-dimension-analysis.md

11 KiB
Raw Blame History

HMS V1 发布就绪度 — 六维度全面均衡分析

日期: 2026-05-20 | 分支: feat/media-library-banner | 分析方法: 4 并行探索 + 6 专家组深度分析

综合评分: 6.3/10 (B-)

维度 评分 评级 趋势 核心发现
架构 8.0 A- 模块边界 9/10事件消费者幂等不统一缓存层薄弱
安全 7.5 B+ PII 加密企业级 9/10analytics 缺权限(HIGH),缺 HSTS/CSP
前端 7.2 B 64 页面全 lazy长者模式 100%,小程序零测试
产品 ~7.0 B 核心流程完整6 模块冻结2 个 TODO 空实现
测试 5.5 C+ 990 测试但 Handler 0%,小程序 0中间件 0
DevOps 3.8 D+ CD 缺失,备份不合规,无监控告警

一、架构维度 (8.0/10)

1.1 模块边界 — 优秀 (9/10)

  • erp-core (L1) 零业务依赖,所有 L2 模块彼此零依赖erp-server (L3) 唯一组装点
  • 8 个模块全部实现 ErpModule traitModuleRegistry 按拓扑排序启动
  • 天然支持微服务拆分:只需将 EventBus 从进程内 broadcast 替换为消息队列

1.2 SQL 拼接风险 — 安全但有代码气味 (7/10)

位置 类型 风险
erp-plugin/src/host.rs:368 advisory lock NONE (纯数值)
erp-plugin/src/host.rs:336-398 动态表名 LOW (sanitize_identifier)
erp-health/src/service/action_inbox_service.rs:240-353 硬编码条件 NONE (编译时字面量)

sanitize_identifier() 实现正确但缺长度限制PostgreSQL 63 字节标识符上限)。

1.3 事件系统 — 良好 (7.5/10)

  • 31 事件类型 / 82 发布点 / 12 消费者模块 / Outbox + LISTEN/NOTIFY
  • consume_with_retry() 提供幂等保证但实际未被消费者调用
  • broadcast channel 容量 1024高并发下可能 lag30s 兜底轮询补偿)

1.4 缓存层 — 薄弱 (6.5/10)

  • 仅有 Moka (权限缓存) + Redis (限流/session),无业务数据缓存
  • 高频查询(菜单树、字典项、仪表盘统计)每次请求命中数据库
  • 10x 用户增长时数据库连接池将成为瓶颈

1.5 架构 TOP 5 风险

  1. 事件消费者未统一走 consume_with_retry (MEDIUM) — 幂等保护不完整3-5d
  2. broadcast channel 容量有限 (MEDIUM) — 高并发丢事件2d
  3. 缓存层薄弱 (MEDIUM) — 10x 扩展瓶颈5-8d
  4. action_inbox_service SQL 拼接 (LOW) — 代码气味0.5d
  5. 迁移文件过多(156个) (LOW) — 维护成本3d

二、安全维度 (7.5/10)

2.1 认证与授权 — 优秀 (8.5/10)

  • JWT: HS256 + 15min access / 7d refresh + SHA-256 存储 refresh token
  • 原子性刷新: validate_and_revoke_atomic() 防止 TOCTOU 竞态
  • 密码: Argon2 + 随机 salt
  • 权限守卫: 444 处 require_permission() 调用64 个 handler 文件
  • 多租户: 双层隔离(应用层 tenant_id + PostgreSQL RLS

2.2 PII 加密 — 优秀 (9/10)

  • KEK/DEK 分层 + AES-256-GCM + 盲索引 (HMAC-SHA256)
  • 生产环境强制 KEK 配置(debug_assertions 下 dev_default 会 panic
  • 支持租户级密钥轮换 API

2.3 API 安全 — 优秀 (9/10)

  • 5 层 rate limiting: IP登录(5/min) + IP刷新(30/min) + 用户API(300/min) + 网关(60/min) + 账户锁定(5次/15min)
  • 文件上传: 白名单 + Magic bytes + 大小限制 + UUID 文件名 + 租户隔离
  • CORS: 生产环境拒绝通配符

2.4 安全 TOP 5 风险

  1. Analytics batch 端点缺权限校验 (HIGH) — CVSS 5.31h
  2. 日志 PII 脱敏不完整 (MEDIUM) — secret_len 泄漏 + service 层未脱敏4h
  3. 缺少 HSTS + CSP 安全头 (MEDIUM) — CVSS 3.12h
  4. 插件 sanitize_identifier 缺长度限制 (MEDIUM) — 8h
  5. SSE token 通过 URL query parameter (LOW) — 日志泄漏风险4h

三、前端维度 (7.2/10)

3.1 Web 前端 — 良好 (7.5/10)

  • 316 TS/TSX 文件54 API 模块5 Zustand stores76 权限码
  • 64 个路由页面全部 React.lazy() — 最佳实践
  • 6 个 manualChunks 分包sourcemap 生产关闭
  • 10 处生产 any7 处在 points.ts 可修复)
  • 最大文件 AdminDashboard.tsx 730 行(无超 800 行)
  • 62 个测试文件,以 API 契约测试为主

3.2 小程序 — 良好但零测试 (7.0/10)

  • 59 页面12 主包 + 47 子包34 组件38 service 文件
  • 并发安全架构完善: ConcurrencyLimiter(12) + safeNavigateTo + requestUnlimited
  • Design Token: 40+ CSS 变量93 SCSS 文件全量接入
  • 长者模式: 58/58 页面 100% 覆盖
  • 零单元测试 — MCP 自动化审计 96.2% 通过率但只覆盖可达性

3.3 前端 TOP 5 风险

  1. 小程序零单元测试 (CRITICAL) — 161 文件无测试2-3d
  2. i18n 未实际使用 (HIGH) — 2,298 处硬编码中文3-5d
  3. 生产 any 10 处 (MEDIUM) — points.ts 7 处可修复0.5d
  4. a11y 基本缺失 (MEDIUM) — 仅 9 处 aria-/role2-3d
  5. BLE 模块 any 密集 (LOW) — 14 处1d

四、测试维度 (5.5/10)

4.1 测试分布

层级 测试数 覆盖率
后端单元 802 Service/DTO 覆盖较好
后端集成 188 24 个测试文件
Handler ~2 2.8% (2/72 文件)
安全中间件 1 20% (1/5)
Web 前端 61 文件 页面覆盖率 20.8%
小程序 0 0%
E2E 17 Web + 4 MP 核心流程

4.2 测试密度(测试/1K行代码

Crate 密度 评价
erp-core 28.1 优秀
erp-message 20.2 优秀
erp-config 15.3 良好
erp-health 4.9 不足
erp-server 0.7 严重不足

4.3 测试 TOP 5 风险

  1. Handler 层 0% 覆盖 (CRITICAL) — 72 个文件无测试2-3d
  2. 小程序 0 测试 (CRITICAL) — 161 文件无测试2d
  3. 安全中间件 0 测试 (HIGH) — rate_limit/tenant_rls/frozen_module1.5d
  4. erp-health 28/57 service 无测试 (HIGH) — 核心业务模块3-4d
  5. CI 不覆盖 E2E/小程序 (MEDIUM) — 1.5d

五、DevOps 维度 (3.8/10)

5.1 CI — 良好 (7/10)

  • 双平台 CI: GitHub Actions (5 阶段后端 + 4 阶段前端) + Gitea CI (4 jobs)
  • Rust 缓存 (Swatinem/rust-cache) + pnpm 缓存
  • Clippy 0 警告强制 + cargo audit

5.2 CD — 缺失 (0/10)

  • 无自动化部署流程
  • 无 Docker 镜像版本 tag 策略
  • 无蓝绿/金丝雀部署

5.3 监控 — 仅 exporter (4/10)

  • Prometheus 指标: http_requests_total, http_request_duration, db_pool, eventbus_pending
  • 3 级健康检查: /health, /health/live, /health/ready
  • 无 Prometheus Server / Grafana / 告警 / 日志聚合 / 分布式追踪

5.4 备份 — 不合规 (3/10)

  • 每日 pg_dump + 7 天保留
  • 无加密、无异地存储、无 PITR、无恢复测试
  • 医疗数据合规要求: RPO < 1h, 保留 >= 5 年

5.5 DevOps TOP 5 风险

  1. 无 CD 能力 (CRITICAL) — 发布完全手动3-5d
  2. 备份不满足医疗合规 (CRITICAL) — 无加密/异地/PITR5-8d
  3. 无监控告警 (HIGH) — 生产盲飞3-5d
  4. 迁移在启动时自动执行 (HIGH) — 破坏性 DDL 风险3-5d
  5. 安全审计不阻止合并 (MEDIUM) — continue-on-error: true2-3d

六、产品维度 (~7.0/10)

6.1 功能完整性

  • 核心流程完整: 患者建档 → 健康数据 → 预约 → 随访 → AI 分析
  • 管理员流程完整: 用户管理 → 角色权限 → 数据字典 → 系统配置
  • 6 个冻结模块: care-plans, shifts, family-proxy, medications, dialysis, dialysis-prescriptions, schedules
  • 2 个 TODO 空实现: ActionDetailDrawer、PendingTasks

6.2 wiki 数据校准

指标 wiki 实际 差距
Rust 源文件 652 694 +42
后端路由 260+ 376 +116
权限码 132 140 +8
Git 提交 862 927+ +65
Web TS/TSX 307 316 +9
小程序 TS/TSX 161 167 +6
API 服务文件 28 54 +26
utoipa 注解 89 94 +5
"待修复"条目 4 0 (全已修复) 需标记

七、V1 发布策略(多专家组辩论共识)

P0 阻塞项4 天)— 不完成不发布

# 行动项 维度 工作量
A1 Analytics batch 添加权限校验 安全 1h
A2 HSTS + CSP + Permissions-Policy 安全头 安全 2h
A3 数据库备份加密 + 异地存储 DevOps 3d
A4 Nginx TLS 配置模板 DevOps 0.5d
A5 迁移回滚策略文档 + 脚本 DevOps 1d

P1 测试加固3 天)— 强烈建议

# 行动项 维度 工作量
A6 安全中间件 unhappy path 测试 (~15个) 测试 1.5d
A7 核心 Handler 测试 (~40个) 测试 1.5d

P2 V1.1 推迟项(~30 天)

# 行动项 维度 工作量
B1 Prometheus + Grafana 监控 + 告警 DevOps 3d
B2 CD Pipeline (GitHub Actions) DevOps 5d
B3 小程序最小测试套件 测试 2d
B4 事件消费者统一 consume_with_retry 架构 5d
B5 日志 PII 脱敏审查 安全 4h
B6 生产迁移策略(独立步骤) DevOps 2d
B7 CI 安全审计阻止合并 DevOps 0.5d
B8 菜单树/字典项缓存 架构 3d
B9 Web a11y 基础合规 前端 2-3d
B10 points.ts any 类型修复 前端 2h

GO/NO-GO 硬底线

以下任一条件不满足即 NO-GO

  1. 多租户数据隔离验证通过(无跨租户泄漏)
  2. 核心用户流程端到端可用(建档→录入→预约→随访)
  3. 数据库备份可成功恢复(至少一次恢复测试)
  4. Analytics 越权已修复
  5. 迁移失败有回滚方案

八、关键数字校准表wiki 更新用)

指标 当前 wiki 应更新为
Rust 源文件 652 694
后端路由 260+ 376+
权限码 132 140
Git 提交 862 927+
Web TS/TSX 307 316
小程序 TS/TSX 161 167
Web API 服务文件 28 54
小程序组件 10 34
小程序 Service 文件 10+ 38
utoipa 注解文件 89 94
Web 冻结路由 5 6
后端测试函数 943 990+
系统评分 6.8/10 (B) 6.3/10 (B-)
症状导航待修复 4 项 0 项(全已修复)

附录: 分析方法论

  • 阶段 1: 4 个并行探索 Agent后端架构 / 前端+小程序 / 数据库+安全 / V1 就绪度)
  • 阶段 2: 6 个专家组深度分析(架构师 / 安全工程师 / 测试工程师 / 前端专家 / SRE / 产品经理)
  • 阶段 3: 多专家组辩论会议4 个议题:发布范围 / 测试策略 / DevOps 优先级 / 技术债务取舍)
  • 总工具调用: 400+ 次Grep/Glob/Read/Bash 跨 10 个 Agent
  • 总分析时长: ~15 分钟(并行执行)