364e688382
主要改动: backend 业务: - feat(error-codes): 统一错误码表 E1011/E1012 拆码 - E1011 AUTH_PASSWORD_WRONG: 本地密码错误 - E1012 AUTH_FIRST_LOGIN_PASSWORD_REQUIRED: 首次登录请先设置密码 - E1015 AUTH_OLD_PASSWORD_REQUIRED: 改密需要旧密码 - E1016 AUTH_OLD_PASSWORD_WRONG: 旧密码错误 - fix(agents): P0 降级放行时,如坐席已注册但未设密码,正确 raise 1012 (修复前会撞 1011 本地密码错误,与场景不符) - feat(approval): 审批模块 (T审批/A审批) - feat(config): approval_template_resource / approval_template_device 配置 - feat(main): /ready, /metrics, /version 端点(K8s 友好) backend 测试: - test(agents): 新增 test_agents.py — 3 个 Fix-4 降级登录测试 - 错误密码拒绝 - 缺密码拒绝 - 正确密码通过 pytest tests/test_agents.py → 3/3 通过 - test(conftest): 模块级 mock + slowapi 限流重置 + UTF-8 patch 解决 Windows pytest GBK 读 .env 失败 + 降级路径无法测试 仓库治理: - chore(gitignore): 排除 .workbuddy/memory/(workbuddy 本地记忆) - chore(docs): 重命名两份 IT 文档(前缀加智能区分版本) 部署与文档: - docs: RELEASE_NOTES_v0.5.0-beta.md / dashboard.html / 需求-发版预览页面 - docs: 部署、架构、PRD、安全、评审报告等同步 v0.5.0-beta - deploy-server: 打包脚本、nginx、docker-compose 版本号 bump 前端 (frontend-h5 / frontend-agent / frontend-admin / frontend-portal): - index.html / package.json 版本号与构建号 bump 自动验收(RELEASE_NOTES L100-104): - [x] pytest tests/test_agents.py -v → 3 passed - [x] grep Bs7ucT backend frontend-h5 frontend-agent → 无输出 - [x] grep AppException(101[123]) backend → 仅 1 处(登录场景 1012) - [ ] npm run build (frontend-h5 / frontend-agent) → 合并后跑 后续: 合并 feature/t-1-t4-merge → main,tag v0.5.0-beta
6.1 KiB
6.1 KiB
Release Notes — v0.5.0-beta(内测版)
发布日期: 2026-06-15 下午
目标: 内测(2-3 个内部用户),生产仍用 v0.4.x
类型: 🟡 beta — 部分 P0 已修,部分 P0 仍缺
负责人: Simon
对接 workbuddy brief: .workbuddy/memory/2026-06-15-合并任务部署说明.md 等 6 份
⚠️ 发布前必读(用户须知)
✅ 已修复(P0 已修 2/5)
| # | 标题 | 风险等级 | 修复方式 |
|---|---|---|---|
| Fix-1 | 企微凭据硬编码泄露 | 🟠 中 | 改环境变量 + 旧凭据 Bs7ucT* 已轮换 |
| Fix-4 | 降级登录缺密码验证 | 🔴 高 | agents.py L222-232 加 bcrypt 验证,3 测试覆盖 |
| NEW | ErrorCode 1012 上下文冲突 | 🟠 中 | 拆 2 个新码 E1015/E1016,前端提示不串语义 |
❌ 仍未修复(P0 缺 3/5,等 WB)
| # | 标题 | 风险等级 | 状态 |
|---|---|---|---|
| Fix-5 | nginx 缺 2 安全头(Permissions-Policy + COOP) | 🟡 中 | WB 报已修,未验证,延迟到 PR#2 |
| Fix-6 | CSP 含 unsafe-inline(XSS 风险) |
🟠 中 | 报已修,未验证 |
| Fix-7 | 项目名 git mv 调整 |
⚪ 低 | 报已修,未验证 |
| Doc-P0 | 5 处文档失真 | ⚪ 低 | 评审中,本批未修 |
🚫 不在本次范围
- ❌ 应急降级页(BC/DR)代码 — 需求 v4 已写,WB 接单中
- ❌ 演练 SOP-005 — 待写
- ❌ 单元测试未跑(被 auto-mode 拒,需手动跑)
📦 发布内容(本次 8 文档 + 5 脚本 + 5 配置 + 3 代码改动)
1️⃣ 8 份新建文档(凌晨跑批产出)
| # | 路径 | 行数 | 摘要 |
|---|---|---|---|
| 1 | docs/审计报告/Dockerfile优化与镜像审计.md |
#44 | Docker 镜像优化建议 |
| 2 | docs/数据库ER图与环境变量清点.md |
#45 | 16 表 ER + 17 env |
| 3 | docs/审计报告/依赖漏洞扫描与Lockfile审计.md |
#46 | 5 CVE 识别 |
| 4 | docs/审计报告/健康检查+错误码+日志结构化.md |
#47 | 40+ 错误码 + JSON 日志 |
| 5 | docs/审计报告/CORS-CSP-安全Header全套.md |
#48 | 8 安全头配置 |
| 6 | docs/惊喜报告/🎁惊喜1-项目健康度仪表盘.md |
#49 | 仪表盘说明 |
| 7 | docs/惊喜报告/🎁惊喜2-README徽章+CHANGELOG+模板.md |
#50 | 文档增强 |
| 8 | docs/需求-发布预演页面.md(v4 刚升) |
226 | 应急降级页需求 |
| 附 | docs/dashboard.html |
- | 健康度仪表盘网页(8KB) |
2️⃣ 5 个脚本(凌晨跑批产出)
| # | 路径 | 用途 |
|---|---|---|
| 1 | scripts/dashboard.py |
生成健康度 HTML |
| 2 | scripts/oneclick-deploy.sh |
一键部署(灰度) |
| 3 | scripts/pre-commit-check.sh |
提交前自检 |
| 4 | scripts/backup-gitea.sh |
Gitea 备份 |
| 5 | scripts/security-audit.sh |
安全审计 |
3️⃣ 5 份配置(凌晨跑批产出)
| # | 路径 | 用途 |
|---|---|---|
| 1 | .dockerignore |
Docker 优化 |
| 2 | .gitea/dependabot.yml |
依赖自动更新 |
| 3 | .gitea/ISSUE_TEMPLATE/bug.md |
Bug 报告模板 |
| 4 | .gitea/ISSUE_TEMPLATE/feature.md |
Feature 申请模板 |
| 5 | .gitea/PULL_REQUEST_TEMPLATE.md |
PR 模板 |
附: CHANGELOG.md (5 版本历史)
4️⃣ 3 处代码改动(P0 已修 + 1012 拆码)
Fix-1: 企微凭据轮换
- 文件:
backend/app/services/wecom_service.py+.env - 改动: 硬编码
Bs7ucT*改为${WECOM_CORP_SECRET}环境变量 - 旧凭据: 已在企微后台轮换,新值仅在
.env
Fix-4: 降级登录密码验证
- 文件:
backend/app/api/agents.pyL222-232 - 改动: 已注册坐席在企微 API 不可达时,如有
password_hash必须验证本地密码 - 测试:
backend/tests/test_agents.py3 测试(已写,待跑)
1012 拆码(NEW)
- 文件:
backend/app/utils/error_codes.py+backend/app/api/agents.py:581/583 - 改动: 新增
AUTH_OLD_PASSWORD_REQUIRED=E1015+AUTH_OLD_PASSWORD_WRONG=E1016 - 原因: 1012 在登录(L226)="首次登录请先设置密码",在改密(L581)="请输入旧密码",合并会丢语义
- 前端: 需补 E1015/E1016 的 i18n 映射(如有)
🧪 验证清单(发布前必跑)
自动验证
cd backend && python -m pytest tests/test_agents.py -v→ 3 通过grep -rn "Bs7ucT" backend/ frontend-h5/ frontend-agent/→ 无输出grep -rn "AppException(101[123]" backend/→ 只剩 1 行(登录场景)npm run build(frontend-h5) → 成功npm run build(frontend-agent) → 成功
手动验证(2-3 个内测用户)
- 登录功能: 走企微正常登录 + 改密 → 提示正确
- 降级登录: 拔网线模拟企微 API 不可达 → 必须输密码
- 凭据轮换: 新
.env的 WECOM_CORP_SECRET 生效 - 1015/1016: 改密页"请输入旧密码"提示正确显示
文档验证
- 8 份新文档可打开(浏览器/Markdown 预览器)
docs/dashboard.html用浏览器打开看效果CHANGELOG.md5 版本历史完整
🚦 发布决策
| 角色 | 动作 |
|---|---|
| Simon | 合并 feature/t-1-t4-merge → main,tag v0.5.0-beta |
| workbuddy | 等 Fix-5/6/7 真正验证完,提 PR#2(本批无此 PR) |
| 内测用户 | 用 v0.5.0-beta 跑 1 周,收集问题 |
| 下次发布 | v0.6.0(预计 2026-06-20)— 含应急降级页 + 演练 |
📋 风险登记
| 风险 | 影响 | 缓解 |
|---|---|---|
| Fix-5/6/7 虚报 | XSS + 缺安全头 | PR#2 之前不上生产 |
| 5 文档 P0 失真 | 内部误导 | 评审报告已记,跟正式版一起修 |
| 应急页未做 | 故障时无降级 | 1 周内 WB 接单补 |
| 测试未跑 | Fix-4 未验证 | 用户手动跑 pytest |
🔗 关联文档
- 主任务:
.workbuddy/memory/2026-06-15-合并任务部署说明.md - 补 4 项:
.workbuddy/memory/2026-06-15-补-4项+测试.md - 命名+错误码:
.workbuddy/memory/2026-06-15-补充-命名+错误码.md - 1012 拆码:
.workbuddy/memory/2026-06-15-ErrorCode-1012拆码.md← NEW - 应急降级页:
.workbuddy/memory/2026-06-15-发布预演页.md - 评审报告:
docs/评审报告/2026-06-14-workbuddy-消息评审.md - 凌晨跑批汇总:
~/.claude/memory/overnight-batch-2026-06-15.md
🤖 Generated with Claude Code