Files
dreamweaver/.claude/specs/robustness-improvement/dev-plan.md
zhangtuo e9d7f8832a Initial commit: clean project structure
- Backend: FastAPI + SQLAlchemy + Celery (Python 3.11+)
- Frontend: Vue 3 + TypeScript + Pinia + Tailwind
- Admin Frontend: separate Vue 3 app for management
- Docker Compose: 9 services orchestration
- Specs: design prototypes, memory system PRD, product roadmap

Cleanup performed:
- Removed temporary debug scripts from backend root
- Removed deprecated admin_app.py (embedded UI)
- Removed duplicate docs from admin-frontend
- Updated .gitignore for Vite cache and egg-info
2026-01-20 18:20:03 +08:00

2.2 KiB
Raw Blame History

DreamWeaver 工程鲁棒性改进计划

概述

本计划旨在提升 DreamWeaver 项目的工程质量,包括测试覆盖、稳定性、可观测性等方面。

任务列表

P0 - 关键问题修复

Task-1: 修复 Rate Limit 内存泄漏

  • 文件: backend/app/api/stories.py
  • 问题: _request_log 全局字典无清理机制,长期运行内存无限增长
  • 方案: 添加 TTL 自动清理机制,使用 cachetools.TTLCache
  • 测试: 验证过期条目自动清理

Task-2: 添加核心 API 测试

  • 文件: backend/tests/ (新建)
  • 范围:
    • test_auth.py: OAuth 流程、session 验证
    • test_stories.py: 故事 CRUD、rate limit
  • 目标: 核心路径覆盖率 ≥80%

P1 - 稳定性提升

Task-3: 添加 API 重试机制

  • 文件: backend/app/services/gemini.py, minimax.py, drawing.py
  • 方案: 使用 tenacity 库,指数退避重试
  • 配置: 最多 3 次重试,初始间隔 1s

Task-4: 添加结构化日志

  • 文件: backend/app/core/logging.py (新建), 各 service 文件
  • 方案: 使用 structlogJSON 格式输出
  • 埋点: API 调用、错误、性能指标

P2 - 代码优化

Task-5: 重构 Provider Router

  • 文件: backend/app/services/provider_router.py
  • 问题: 三个函数重复代码
  • 方案: 抽象通用 failover 函数

Task-6: 配置外部化

  • 文件: backend/app/core/config.py, backend/app/services/gemini.py
  • 问题: 模型名硬编码
  • 方案: 移至环境变量配置

Task-7: 修复脆弱的 URL 解析

  • 文件: backend/app/services/drawing.py
  • 问题: 字符串切片解析 URL 不可靠
  • 方案: 使用正则表达式

依赖关系

Task-1 (独立)
Task-2 (独立,但需要 Task-1 完成后验证)
Task-3 (独立)
Task-4 (独立)
Task-5 (独立)
Task-6 (独立)
Task-7 (独立)

新增依赖

# pyproject.toml [project.dependencies]
cachetools>=5.0.0    # Task-1: TTL cache
tenacity>=8.0.0      # Task-3: 重试机制
structlog>=24.0.0    # Task-4: 结构化日志

# [project.optional-dependencies.dev]
pytest-cov>=4.0.0    # Task-2: 覆盖率报告
httpx[http2]         # Task-2: 测试 mock