# workbuddy 批量任务清单 — 2026-06-14 睡前启动 **生成日期**: 2026-06-14 **生成人**: Claude **启动条件**: 1. 用户在 Gitea 创 `workbuddy-claude` user account 2. 用户创 `workbuddy-claude` 的 access token(权限 `repository` + `issue` + `user`) 3. 用户把 token 配到 `.workbuddy/config.json` 的 `gitea.token` 字段 4. workbuddy 客户端启动时读这份 memory → 按顺序接任务 --- ## ▶▶▶ 任务清单(5 项,按优先级)起 ### W-1. P1-1 优化: named volume → host bind mount **任务编号**: #25 **阻塞原因**: 当前 `docker-compose.yml` 用 named volume `backend-uploads`,容器重建不丢但 `docker-compose down -v` 会全丢 **目标**: 改成 host bind mount 到 NAS `/volume1/docker/wecom-it-desk/uploads` **修复**: 1. 编辑 `docker-compose.yml`: ```yaml volumes: backend-uploads: driver: local driver_opts: type: none o: bind device: /volume1/docker/wecom-it-desk/uploads ``` 2. `scripts/deploy.sh` 部署时建 host 目录: ```bash sudo mkdir -p /volume1/docker/wecom-it-desk/uploads sudo chown -R 1000:1000 /volume1/docker/wecom-it-desk/uploads ``` 3. 加 deploy 文档警示"别用 `docker-compose down -v`" **验收**: - 容器重建后上传文件不丢 - `df -h /volume1/docker/wecom-it-desk/uploads` 体积能涨 **评审员**: Claude --- ### W-2. P0 二次评审 5 遗留修完 **任务编号**: #18 遗留 **关联**: `docs/评审报告/workbuddy-2026-06-14-P0安全.md` 11.x 节(5 项遗留) **5 项遗留**: 1. **浏览器 WS API 不支持 header** —— 用 `Sec-WebSocket-Protocol: bearer.` 方案 2. **nginx access_log 没关** —— `location /ws/ { access_log off; }` 已修,验证部署版也有 3. **类型 bug** —— `ws.py` 某处类型断言错误 4. **降级放行** —— `agents.py` 缺 password 时,`existing_agent.password_hash` 已存在 → 必须 verify password,不能放行 5. **缺依赖** —— `requirements.txt` 缺 `bcrypt` / `pyotp`(已加,验证) **修复**: 逐项对照评审报告修复,**每项单独 commit** **验收**: - 全部 5 项 commit 推 Gitea - 评审员 Claude 二次评审通过 - 风险跟踪表 第九节 / 第十节 状态从 🟡 改 ✅ **评审员**: Claude --- ### W-3. pytest 基础配置 + 跑 pre-commit-check.sh **任务编号**: README 已知问题 #2 **关联**: `scripts/pre-commit-check.sh`(本次新增,C-1 任务) **修复**: 1. `backend/pytest.ini`(或 `pyproject.toml` [tool.pytest.ini_options]): ```ini [pytest] testpaths = tests python_files = test_*.py addopts = -v --tb=short ``` 2. `backend/tests/conftest.py`: - 异步 client fixture - 测试 DB(用 sqlite:///:memory:) - mock WECOM 凭据 3. `backend/tests/test_agents.py`: - 鉴权测试(mock_login 关闭 / 开启) - password_hash 验证 4. `backend/tests/test_messages.py`: - 5 个端点鉴权测试(P0-2~6) 5. `backend/tests/test_ws.py`: - WS token 鉴权(Authorization header / subprotocol / query 三种) 6. `scripts/pre-commit-check.sh` 加进 `scripts/deploy.sh` 流程(可选) **验收**: - `cd backend && pytest` 跑过 - CI 跑预检脚本 - 评审员 Claude 看测试覆盖度 **评审员**: Claude --- ### W-4. Dify API 集成预研(POC) **任务编号**: 阶段 3 启动前置(关联 `docs/路线图/阶段2-3-任务.md` §3.3) **关联**: `docs/现有系统交接文档内容.txt` + `docs/ExternalSystemAdapter设计文档.md` **预研目标**: 1. 查 Dify 工作流 API 文档(看是否需要新 app,还是共用) 2. POC 三个端点: - `POST /v1/chat-messages` 流式对话 - `POST /v1/workflows/run` 工作流触发 - `POST /v1/datasets/{id}/retrieve` 知识库检索 3. 在 `backend/app/services/dify_client.py` 写 Dify 客户端 4. `backend/app/api/ai_wingman.py` 三个端点接 Dify 客户端 5. 写 `docs/集成验证/Dify_POC_报告.md` **验收**: - 三个端点跑通(返回 Dify 响应) - 文档含 API 限流 / 错误降级 / 配额申请 - 评审员 Claude 看方案可行性 **评审员**: Claude --- ### W-5. nginx 配置审计(全局 access_log 检查) **任务编号**: 新增(M-2 风险项 衍生) **关联**: `docs/风险跟踪表.md` 第十二节 M-2 **审计目标**: 1. 扫描所有 `nginx.conf` / `deploy-server/nginx.conf` / `*/nginx.conf` 2. 找敏感路径(WS / token / OAuth callback)是否都 `access_log off` 3. 找未配 access_log off 但应配的路径 4. 写 `docs/审计报告/nginx_access_log_审计.md` **修复**: 缺的补 `access_log off;` **验收**: - 审计报告列出所有敏感路径的 access_log 状态 - 缺的已补 commit - 评审员 Claude 抽查 3 处 **评审员**: Claude --- ## ▼▼▼ 任务清单止 --- ## 🔄 工作流(workbuddy 启动后) 1. **读这份 memory** → 看 5 任务 2. **按 W-1 → W-2 → W-3 → W-4 → W-5 顺序**(W-3 W-4 W-5 可并行) 3. **每完成一项**: - 提交 commit(走 `scripts/pre-commit-check.sh`) - 推 Gitea 远端 `feature/xxx` 分支 - 通知 Claude 评审 - Claude 评审通过 → 用户合并 PR 4. **状态同步**: - `docs/风险跟踪表.md` 更新状态 - `.workbuddy/memory/{日期}-{主题}.md` 留评审记录 ## ⚠️ 关键约束(读 README + CONTRIBUTING.md) - **鉴权**: 新增/修改端点必须有 `Depends(get_current_agent)` 或 `_get_current_employee` - **依赖**: 新增第三方 import 必须同步 `requirements.txt` / `package.json` - **alembic**: model schema 变化必须生成迁移脚本 - **配置**: nginx / docker / conf 改动 plan 写完必须做完 - **评审报告**: 每次推送生成 `docs/评审报告/workbuddy-{日期}-{主题}.md` - **5 项遗留**: 上一轮评审遗留未修完,不许推新功能 ## 🔗 关联文档 - 评审主报告: `docs/评审报告/` - 风险跟踪表: `docs/风险跟踪表.md` 第九/十/十一/十二节 - 路线图 2-3 阶段: `docs/路线图/阶段2-3-任务.md` - 推送预检脚本: `scripts/pre-commit-check.sh` - 推送流程: `CONTRIBUTING.md` §PR 流程 ## 🆘 阻塞上报 workbuddy 启动后,**任何一项阻塞超过 30 分钟未推进** → 上报用户: - token 问题 → 找用户 - 凭据不全 → 找用户给 WECOM_SECRET / Dify API key - 测试失败定位 → 找 Claude - 评审反复打回 3 次 → 升级用户 ## 🛏️ 用户睡前最后做的事 1. **Gitea Web** → 站点管理 → 用户 → **创建新用户**: - 用户名: `workbuddy-claude` - 邮箱: (用户填) - 密码: (临时,首次登录改) - 权限: 普通用户(非管理员) 2. **用 simon token 创 workbuddy-claude 的 access token**: - 登录 workbuddy-claude 账号 → 头像 → 设置 → 应用 → 创建 - 令牌名: `claude-push` - 权限: `repository` (读/写) + `issue` (读/写) + `user` (读) 3. **把 workbuddy-claude token 粘给 Claude**: - Claude 写进 `.workbuddy/config.json` 的 `gitea.token` 字段 - 同时配 Gitea Web 的 deploy key(ssh,可选) 4. (可选)改 `docs/风险跟踪表.md` 第十二节 §12.4 待办 #5 → `block_admin_merge` 改 `true` 完成上述 3 步 → workbuddy 客户端启动 → 自动接 5 任务