# 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.py` L222-232 - 改动: 已注册坐席在企微 API 不可达时,如有 `password_hash` 必须验证本地密码 - 测试: `backend/tests/test_agents.py` 3 测试(已写,待跑) #### 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.md` 5 版本历史完整 --- ## 🚦 发布决策 | 角色 | 动作 | |---|---| | **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](https://claude.com/claude-code)