iven
0f58af245d
docs(wiki): 更新 setTimeout 修复记录 + 新增 2 条症状导航
2026-05-15 00:40:23 +08:00
iven
fed1759985
fix(mp): setTimeout 无清理修复 — useSafeTimeout hook + 10 页面接入
...
新增 useSafeTimeout hook,页面隐藏时自动清理所有定时器。
10 个页面接入:daily-monitoring、exchange、family-add、
health/input、prescription detail/create、dialysis detail/create、
appointment detail/create。所有 fire-and-forget setTimeout 替换为
safeSetTimeout,避免页面切走后定时器回调在错误上下文执行。
2026-05-15 00:38:23 +08:00
iven
74bffb4878
fix(mp): 患者端卡死深度审查修复 — CRITICAL 回归 + 并发保护 + 页栈溢出防护
...
CRITICAL:
- 咨询详情页 loadData 引用已删除的 pollingRef → 移除残余引用
HIGH:
- 401 重试递归改循环结构,避免并发限制器双 slot 占用
- 医生端 4 个列表页添加 loadingRef 防重入(consultation/alerts/dialysis/prescription)
- 新增 safeNavigateTo 页栈溢出保护(栈≥9 自动 redirectTo)
前期修复一并提交:
- 全局并发限制 MAX_CONCURRENT=8
- doRefresh 失败时完整清理 Storage + 重置缓存状态
- 401 跳转登录页修正
- 长轮询 generation counter 模式
- 首页/健康页 loadingRef + refreshToday 去重
2026-05-15 00:30:59 +08:00
iven
5ea991c5df
docs(wiki): 更新 T40 UI 审计最终评分
2026-05-14 23:13:32 +08:00
iven
8f353946e1
fix(mp): T40 UI 审计修复 — 28 项设计系统合规 + 安全加固 + 讨论记录
...
T40 UI 审计修复(60 页面全覆盖):
- 新增 $acc-d/$wrn-d 渐变中间色变量,修复首页轮播渐变硬编码
- 替换 8 处裸 white 为 $white 设计变量(5 个 SCSS 文件)
- 修复 7 处触摸目标 40/44px → 48px(健康/消息/咨询/预约/首页)
- 3 页面新增 Loading 状态(体征录入/个人中心/就诊人添加)
- statusTag 移除硬编码布局值,改用 SCSS mixin 控制
- 医生端 14 页面架构 Hook 层补充(useThrottledDidShow 替换 useEffect)
- 移除 action-inbox 未使用 import
安全 P0 修复:
- JWT 中间件加固:token 类型校验 + 过期预检 + 类型别名简化
- 速率限制增强:滑动窗口 + 暴力破解防护
- analytics handler 错误处理完善
文档:
- T40 审计报告(24 PASS / 36 PASS_WITH_ISSUES / 0 NEEDS_WORK)
- 5 份 DevTools/性能审计讨论记录
- wiki 症状导航 + 小程序章节更新
2026-05-14 23:12:54 +08:00
iven
447126b6c5
fix(mp): 安全 P0 修复 + 架构 Hook 层补充 + 五专家组分析报告
...
安全修复:
- 提取 sanitizeHtml 共享工具,修复 article/detail RichText XSS 风险
- request.ts 生产环境强制 HTTPS,消除 HTTP 回退风险
- 错误信息净化:后端错误码映射为用户友好消息,不再透传原始内容
- Token 生命周期管理:利用 expires_in 记录过期时间,请求前主动刷新
工程修复:
- Babel 依赖从 dependencies 移至 devDependencies(包体积优化)
架构改进:
- 新增 usePagination hook(分页加载 + hasMore + refresh,10+ 页面可复用)
- 新增 useAuthRequired hook(登录态 + 患者档案 + 角色判断统一入口)
- 新增 usePageRefresh hook(下拉刷新统一封装,17 页面可复用)
文档:
- 五专家组深度分析+头脑风暴报告(架构7.2/安全5.5/UX6.0/工程5.5/产品7.2)
2026-05-14 20:22:29 +08:00
iven
a8d7183d7c
fix(mp): T40 UI 审计修复 — 28 项设计系统合规 + MCP forceSetAuth bridge
...
T40 小程序 UI 审计全部 60 页面,发现 28 项问题(HIGH×3 MEDIUM×10 LOW×15),
全部修复并通过静态验证(0 硬编码 border-radius/font-size 残留)。
主要修复:
- border-radius: 12 个文件硬编码值 → $r-xs/$r-lg/$r-pill 设计 token
- touch target: 5 个交互元素添加 min-height: 48px(action-inbox/mall/family/medication)
- elder-mode 页面接入 useElderClass(),预览字号改用 var(--tk-font-body)
- consultation 页面增加加载失败 toast 提示
- app.tsx 新增 forceSetAuth bridge 解决 MCP auth 注入兼容问题
- FAB 按钮和开关控件尺寸规范化
审计结果:PASS 41 / PASS_WITH_ISSUES 19 → 修复后全量 PASS
2026-05-14 09:38:02 +08:00
iven
9e0f421c14
chore(mp): 添加开发启动脚本(缓存清理+编译)
2026-05-13 23:56:54 +08:00
iven
9faccac9eb
perf(mp): 移除 Zod 依赖,轻量验证替代 — 包体积 -300KB
...
- 新增 utils/validate.ts 轻量验证工具(<1KB vs Zod 360KB)
- daily-monitoring: Zod schema → validateNum() 直接验证
- input: Zod schema → num()/validateStr() 直接验证
- config/index.ts: 移除 Zod include 编译配置
效果:总体积 1.8MB→1.5MB(-17%),pkg-health 分包 432KB→84KB(-81%)
2026-05-13 23:56:12 +08:00
iven
0f6f7a2851
fix(mp): DevTools 卡死优化 — filesystem 缓存 + prebundle
...
- webpack5 filesystem cache 加速二次编译
- prebundle 关闭(避免与 taro-loader 冲突)
- 配合 Watchman 安装 + ulimit 提升可根本解决卡死
2026-05-13 23:48:35 +08:00
iven
9c7ce939c7
fix(mp): 真机调试 EMFILE — 关闭 dev 模式 source map
...
真机调试时报 EMFILE: too many open files,根因是 dev 构建
默认生成 69 个 .map 文件,DevTools + webpack watcher 同时
打开导致文件描述符耗尽。通过 chain.devtool(false) 关闭
source map,dist 文件数从 356 降至 269。
2026-05-13 23:35:17 +08:00
iven
431c42289d
chore: gitignore 添加临时文件排除规则
2026-05-13 23:30:45 +08:00
iven
675d5a3405
feat(mp): 新增 navigate 工具函数
2026-05-13 23:29:56 +08:00
iven
df1d85bfde
docs: T40 UI 审计报告 + wiki 更新 + Docker 配置
...
- T40 UI 审计计划和结果文档(docs/qa/)
- wiki 更新:miniprogram 设计系统合规审计记录 + index 关键数字更新
- 审计 V2 完整报告(docs/audits/v2/)
- 讨论记录文档(docs/discussions/)
- 设计规格和实施计划(docs/superpowers/)
- 角色测试计划和结果(docs/qa/role-test-*)
- Docker 生产部署配置
2026-05-13 23:29:42 +08:00
iven
212c08b7ae
feat(health,ai): 后端服务优化 + 媒体文件处理
...
- erp-health: article/banner/consultation/media 服务层优化
- erp-ai: analysis/insight/prompt 服务增强
- erp-auth: auth/role/token 服务改进
- erp-workflow: executor 执行引擎修复
- erp-plugin: 服务层改进
- 新增媒体上传文件样例
2026-05-13 23:28:57 +08:00
iven
e4e5ef04d4
feat(web): Web 前端功能完善 — API 扩展 + 组件优化
...
- 新增 AI 透析分析 API + 药物提醒 API
- MediaPicker/ThemeSwitcher/usePaginatedData 优化
- 健康管理页面组件增强(Banner/Consultation/Doctor/MediaLibrary 等)
- PluginCRUDPage 导入优化
2026-05-13 23:28:22 +08:00
iven
616e0a1539
feat(mp): 小程序功能完善 — 服务层扩展 + 页面优化
...
- 新增 actionInbox 服务层(待办事项列表/线程查询)
- consultation 服务扩展(会话详情/发送消息)
- 多页面代码优化(profile/messages/health/article)
- 新增 navigate 工具函数
2026-05-13 23:26:38 +08:00
iven
93c77c5857
fix(mp): T40 UI 设计系统合规审计修复 — 60 页面全覆盖
...
- 新增 $white 语义变量 + --tk-font-display Token
- 44 处 #fff → $white,2 处 background: #fff → $card
- 14 处 border-radius 硬编码统一为 $r-xs/$r-lg/$r
- 3 处 TSX inline 颜色提取为 SCSS 类(exchange/orders/action-inbox)
- ErrorBoundary 重构:6 个 inline style → SCSS 类 + Design Token
- 2 处离调色板颜色修正(#0284C7→$tx2, #94A3B8→$tx3)
- 2 处静默 catch 块添加状态清理(article/health)
- 趋势页补 Loading/EmptyState;咨询页 GuestGuard 统一
- 4 处 #FFFFFF → $white(mixins/index/exchange/variables)
2026-05-13 23:26:00 +08:00
iven
02082ccc61
feat(ci,ai): P2-1 权限注册表 + P2-2 AI utoipa 注解全覆盖
...
P2-1 权限注册表单一真相源:
- 新增 permissions.yaml: 131 个权限码 × 8 模块,含冻结标记
- 新增 scripts/gen-permissions.js: 生成器脚本
--sql 输出 seed SQL, --frontend 输出 routeConfig 片段,
--validate 验证一致性(131/131 = 0 mismatches)
P2-2 AI 模块 utoipa 注解:
- 为 30 个 handler 函数添加 #[utoipa::path] 注解
(mod.rs 18 + insight 3 + risk 1 + rule 4 + suggestion 4)
- 为 6 个 DTO struct 添加 ToSchema/IntoParams derive
(AnalyzeBody, CreatePromptBody, CreateRuleBody, UpdateRuleBody,
ApproveBody, ExecuteBody, DialysisLabInput, ListAnalysisQuery,
ListPromptsQuery)
- AI handler utoipa 覆盖率: 0/5 → 5/5 (100%)
2026-05-13 17:45:45 +08:00
iven
20d606d21c
docs,ci: P2 质量体系 — 技术债看板 + 冻结策略 + fix 率趋势
...
- 新增 fix-rate-trend.sh: 按周统计 fix 率趋势 + 类别分布
当前: 22.8% (177/776), 目标 < 15%
- 新增 docs/tech-debt-board.md: 技术债看板
含度量总览、高利息债务排序、已偿还债务、偿还优先级
- 新增 docs/discussions/2026-05-13-frozen-module-strategy.md:
6 个冻结模块策略 + 14 天超时规则 + 解冻/移除操作流程
2026-05-13 17:19:07 +08:00
iven
e9458a6bdf
fix(ci,web): API 路径检查脚本归一化 + DEV 模式路由覆盖率校验
...
- check-api-paths.sh: 归一化前端硬编码 ID、扩展后端路由提取范围
(users/roles/departments 等基础模块)、排除插件动态路由假阳性
结果: 46 个不匹配 → 0 个,CI PASS
- routeConfig.ts: 新增 validateRouteCoverage() 开发模式校验函数
- App.tsx: 挂载时调用路由覆盖率校验,未声明权限的路由会 console.warn
2026-05-13 14:48:10 +08:00
iven
c681049c82
fix(db,ci): 补全 26 个缺失权限码 seed 注册 + 检查脚本增强
...
- 新增迁移 000144 全实体乐观锁 version 字段强制化
- 新增迁移 000145 注册 26 个后端已声明但 seed 缺失的权限码
(ai.analysis/prompt/suggestion/usage/provider, copilot.insights/risk/rules,
health.ble-gateways/critical-alerts/devices/family-proxy/shifts 等)
- check-permissions.sh: 增加 module.rs PermissionDescriptor 提取,
支持两段式权限码 (plugin.admin/tenant.manage)
- CI 检查结果: Check 1 PASS, Check 2 PASS, 0 个不一致
2026-05-13 14:30:27 +08:00
iven
935ca70dfa
test(mp): service 层测试扩展 — health + consultation + request
...
新增 3 个测试文件(+23 个测试用例),总计 9 文件 75 测试:
- request.test.ts: HTTP 方法、查询参数构建、缓存、错误处理
- health.test.ts: 体征录入字段映射、日常监测、阈值查找
- consultation.test.ts: 咨询会话/消息 CRUD、已读标记
- 添加 vitest setup.ts mock @tarojs/taro 和 @tarojs/runtime
- vitest.config.ts 增加 setupFiles 配置
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com >
2026-05-13 14:10:27 +08:00
iven
b7efa51d5f
chore: CI quality gate scripts — permission + API path consistency
...
P1-1 check-permissions.sh:
- Extracts permission codes from backend handlers, frontend routeConfig,
and seed migrations
- Cross-checks consistency across all three sources
- Validates .list + .manage pairing per entity
- Current result: 26 mismatches found (seed gaps for ai/copilot/ble)
P1-2 check-api-paths.sh:
- Extracts API paths from frontend api/ and backend Axum routes
- Cross-checks frontend paths exist in backend
- Validates route parameter syntax ({param} vs :param)
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com >
2026-05-13 13:52:30 +08:00
iven
9a4a65a241
docs: P0 流程改进 — Feature DoD + 安全检查 + 前后端同步检查
...
基于 175 次 fix 分析的三个最高优先级行动项:
- §2.6 Feature DoD 清单(后端/Web/小程序/安全/验证 5 维度)
- §3.3 新增 API 端点安全检查(默认拒绝原则)
- §3.3 前后端接口同步检查(DTO 变更 6 项同步确认)
- §6 反模式增加 3 条教训(DoD/安全默认/前后端同步)
关联: docs/discussions/2026-05-13-development-process-retrospective.md
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com >
2026-05-13 13:36:57 +08:00
iven
5905742080
docs: 开发流程阶段总结与优化 — 多专家组发散式讨论
...
8 类开发问题归纳(175 次 fix 分析)、3 个连锁效应案例、
6 位专家流程改进建议、Feature DoD 清单、P0/P1/P2 行动方案。
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com >
2026-05-13 13:33:49 +08:00
iven
d6676abecf
fix(ai): Copilot 审计修复 — C-1/H-1/H-2/H-3/H-4/H-5/L-2
...
- L-2: value_to_f64 对 Null 返回 NaN(防止误触发规则)
- C-1: load_patient_data 空数据时跳过写入快照
- H-1: 每日刷新定时器添加初始延迟
- H-2: copilot_consumer 传内层 content
- H-3: 前端 hooks/Alert 修复分页响应解析
- H-4: risk_handler 动态选择 AI provider
- H-5: 新增 DELETE /copilot/rules/{id} 软删除路由
2026-05-13 00:21:27 +08:00
iven
6d97328ff6
feat(web): CopilotAlert 告警组件 + 告警 API 扩展
...
- CopilotAlert: 分级告警列表,30秒轮询刷新,危急 banner
- copilot.ts 新增 listAlerts 函数
2026-05-12 22:36:36 +08:00
iven
a48ad6ed33
feat(ai): 告警洞察生成逻辑 + 事件消费者增强
...
- engine.rs 新增 generate_anomaly_insights(过滤 info 级别)
- copilot_consumer 在风险评分后自动生成 warning/critical 告警洞察
2026-05-12 22:34:11 +08:00
iven
a87425e551
feat(db): 8 条 Copilot 趋势/复合类告警规则种子数据
...
趋势类(4): 收缩压快速上升、肌酐连续上升、体重连续上升、血压趋势上升
复合类(4): eGFR+血钾双重危急、透析间期+血压、失约+依从性、Kt/V+血压
2026-05-12 22:30:16 +08:00
iven
78c052ecc9
feat(web): 患者详情页嵌入 Copilot 风险徽章
2026-05-12 22:25:56 +08:00
iven
22ef9b32d6
feat(web): CopilotBadge + CopilotCard 组件 + hooks
...
- CopilotBadge: 风险评分标签(低/中/高/危急)
- CopilotCard: 洞察列表卡片(支持忽略操作)
- useCopilotRisk / useCopilotInsights: 数据获取 hooks
2026-05-12 22:20:56 +08:00
iven
cba8c8306d
feat(web): Copilot API 调用层
2026-05-12 22:16:28 +08:00
iven
ba0a4f4d2e
feat(ai): 每日风险快照批量刷新定时任务
...
- risk_service 新增 refresh_all_patients 方法
- module on_startup 启动每日刷新后台任务
2026-05-12 22:14:08 +08:00
iven
a999ee0036
feat(ai): LLM 补充风险分析 + 降级策略
...
- scoring.rs 新增 llm_supplement 函数(调用 AI provider 生成补充洞察)
- risk_service 新增 compute_risk_with_llm 方法(LLM 失败静默降级)
- risk_handler 改用 compute_risk_with_llm
2026-05-12 22:10:05 +08:00
iven
44dcfbd5cb
feat(ai): Copilot 事件消费者(订阅 health 事件触发风险评分刷新)
2026-05-12 22:00:47 +08:00
iven
95db4fe9ff
feat(db): 15 条 Copilot 内置规则种子数据
...
覆盖 5 大类: 体征异常(4) + 化验异常(4) + 依从性(2) + 透析质量(3) + 综合(2)
系统级规则(tenant_id=nil)适用于所有机构
2026-05-12 12:18:40 +08:00
iven
57f33dd726
feat(ai): Copilot 评分引擎 + Handler + 路由 + 权限码
...
- scoring.rs: 混合评分 (calculate_risk) + RiskScore/MatchedRule 结构
- engine.rs: CopilotEngine 协调规则评估和评分
- risk_service.rs: 风险计算 + UPSERT 快照 + 规则加载
- insight_service.rs: 洞察 CRUD + 过期清理
- 3 个 Handler: insight/risk/rule,7 个 API 端点
- 5 个权限码: copilot.insights.list/manage, copilot.risk.view, copilot.rules.list/manage
- AiState 扩展 risk_service + insight_service
2026-05-12 12:14:16 +08:00
iven
fe983ba4ae
feat(ai): Copilot 基因化 Phase 0 Task 1-4 — 迁移 + Entity + 规则引擎
...
- 4 表迁移: copilot_rules, copilot_insights, copilot_risk_snapshots, copilot_chat_logs
- 4 个 SeaORM Entity 对应新表
- JSONLogic 规则引擎 (evaluate + evaluate_rules) + 5 个单元测试
2026-05-12 11:57:09 +08:00
iven
7e2a20727e
docs(ai): Copilot 基因化实施计划 — 40 Tasks / 6 Phases
...
基于设计规格 specs/2026-05-11-copilot-gene-design.md 编写完整实施计划。
Phase 0 基础设施: 4表迁移 + JSONLogic规则引擎 + 评分服务 + API + 种子数据
Phase 1 风险画像: 事件消费 + LLM补充 + 每日刷新 + 前端Badge/Card
Phase 2 异常检测: 告警规则扩展 + 异常洞察 + CopilotAlert组件
Phase 3 随访/咨询: 随访推荐 + 咨询辅助 + CopilotPanel + 一键采纳
Phase 4 患者端Copilot: 意图识别 + 合规审查(双层) + 对话API + 小程序聊天UI + 每日问候
Phase 5 日活引擎: 每日任务 + 积分联动 + 连续打卡 + AI问候联动 + 首页改版
2026-05-11 17:23:53 +08:00
iven
af3eb0c7a1
feat(miniprogram): service 层测试框架搭建
...
- 新增 __tests__/helpers/: mock-taro (Taro API mock) + mock-api (request mock)
- 示例测试: patient.test.ts (3 用例) + appointment.test.ts (9 用例)
- 覆盖 list/create/update/cancel/calendar 等核心场景
- 全部 42 测试通过(含 4 个已有 BLE 测试)
2026-05-11 13:58:58 +08:00
iven
0a8ff4bbe7
docs(health): OpenAPI 注解 — diagnosis + device_reading + vital_signs_daily
...
为 3 个 handler 文件共 8 个函数添加 #[utoipa::path] 注解。
P1-5 批次 2/N。
2026-05-11 13:07:57 +08:00
iven
ac8d300dc0
docs(health): OpenAPI 注解 — device_handler + consent_handler
...
为 device_handler (2 函数) 和 consent_handler (3 函数) 添加
#[utoipa::path] 注解。P1-5 批次 1/N。
2026-05-11 13:05:11 +08:00
iven
d0cb45f457
refactor(health): 拆分 module.rs 路由注册为 13 个子模块
...
protected_routes (800+ 行) 按业务域拆分为 routes/ 目录下 13 个文件:
patient / health_data / follow_up / appointment / consultation /
article / points / stats / alert / device / media / care / admin。
module.rs 从 1595 行降至 798 行,路由注册逻辑更清晰。
2026-05-11 12:59:56 +08:00
iven
fc30702846
feat(docker): PostgreSQL 每日自动备份
...
- 新增 backup.sh: pg_dump + gzip,自动清理过期备份
- production compose 添加 backup 服务: cron 每日 02:00 执行
- 可通过 BACKUP_CRON / BACKUP_KEEP_DAYS 环境变量自定义
2026-05-11 10:27:38 +08:00
iven
533a2b6a8e
feat(server): BLE 网关独立限流 — 每网关 60 req/60s
...
为 /health/gateway 路由添加 gateway_id 级别的速率限制,
网关认证(API Key)→ 限流检查 → handler 三层中间件。
Redis 不可达时同样遵循 fail_close 策略。
2026-05-11 10:24:22 +08:00
iven
0f67f1c21f
fix(server): 限流中间件 fail-close 安全加固
...
RateLimitConfig 添加 fail_close 字段(默认 true),Redis 不可达时
拒绝请求返回 503 而非静默放行。开发环境可通过
ERP__RATE_LIMIT__FAIL_CLOSE=false 回退旧行为。
2026-05-11 10:22:05 +08:00
iven
8c347a5de9
refactor(health): 拆分 event.rs(2871 行)为 13 个领域文件
...
将单体 event.rs 按业务域拆分为 event/ 模块目录:
- mod.rs (219 行): 31 事件常量 + 调度器 + 测试
- 12 个消费者文件: workflow/device/alert/patient/appointment/
follow_up/health_data/ai/consent/consultation/points/lab_report
每个消费者文件 50-215 行,独立可维护。
编译零错误,测试全部通过。
2026-05-11 10:09:10 +08:00
iven
129a7b175c
fix(health): 允许已发布文章重新提交审核 — published → pending_review
...
状态机新增 published → pending_review 转换,
已发布文章编辑后可直接提交审核,无需先撤回。
审核期间旧版本继续对外展示,审核通过后覆盖发布。
2026-05-11 09:49:56 +08:00
iven
103c8aa059
refactor(web): 文章预览去壳化 — 375px 纯内容面板替代 iPhone 仿真
...
- 删除全部 iPhone 外壳代码(Dynamic Island / 状态栏 / 侧边按钮 / 相机条 / Home Indicator)
- 从 620 行精简到 200 行
- 改为 375px 固定宽度纯内容面板,CSS 与小程序 article/detail 完全一致
- 内容区自然流动高度 + 滚动,不再被外壳约束
- 顶部简洁标签栏「小程序端效果预览 · 375px」
- 新增头脑风暴讨论记录 docs/discussions/2026-05-11
2026-05-11 09:36:43 +08:00