Repository navigation
v23.2.0 — 加固批:CORS 安全修复 + 测试基建恢复
v23.2.0 — 加固批
本批以「终局审计 + 真实缺陷修复 + 验收能力补齐」为主题。核心是一条安全修复:
CORS 白名单从未生效。
🔒 安全修复
IF_CORS_ORIGINS环境变量静默失效。api/main.py挂载 CORSMiddleware 时读
config.CORS_ORIGINS,而该值来自constants.py中一行硬编码字面量"*"。
Settings.__init__里的global CORS_ORIGINS拆包后只写settings_core
命名空间,与包命名空间不是同一个变量 —— 环境变量始终无效,主链路恒为
allow_origins=["*"]。- 实测验证:白名单内 Origin 放行、白名单外无
access-control-allow-origin头 - 成因判定:既有缺陷,非本次拆分引入(旧版同样被模块级字面量覆盖)
- 配 5 个回归测试锁死
- 实测验证:白名单内 Origin 放行、白名单外无
🧪 测试基建恢复
- 前端 vitest 此前完全不可用:
npm test输出0 tests / 28 errors。根因是
vitest 4 隔离 worker 在非 ASCII 路径(2api目录)下启动超时。
→isolate:false+pool:'forks'+testTimeout:20000,现 28 files / 299 tests 全绿 - 修 2 处测试失败:
test_http_pool_config::test_env_overrides—— config 拆包引入的真回归
(importlib.reload不重执行子模块constants)test_mcp_server::test_tools_list_whitelist—— 白名单停在 v16,未同步
v18 P1-3 新增的 2 个工具
- ruff 基线 27 → 0(含一处真缺陷
F821 Undefined name ModuleType) - 记录了本仓 pytest 失败详情被
conftest的os._exit截断这一隐蔽问题
🎨 用户可见修复
- 门户画廊错误文案泄漏:原本把
Unexpected token '<', "<!DOCTYPE "...直接渲染给用户
→ 按失败类型归类中文文案 - 管理端 topbar 375px 文字重叠、聊天页动作按钮组 375px 溢出
📋 验收能力补齐
- 移动端 E2E 真跑通(此前脚本默认连 4590 但仓库无任何服务提供该端口,从未跑过)
→ 新增scripts/serve_static.cjs,补/admin与深链回退路径 - 压测复验:1→200 并发共 750/750 成功、0 个 5xx、进程存活;
压力释放后延迟 1 次请求内回落(无连接池耗尽/内存泄漏残留) - 全量测试:2521+ passed / 0 failed
⚠️ 已知遗留(非本批引入)
test_skill_sediment.py在特定文件组合下 teardown 报attached to a different loop
(跨文件事件循环污染)。已用实验证明与本批改动无关。
完整变更
6 主题提交 + 版本 bump,详见仓库 docs/2026-10-14-hardening-report.html(含 14 题测验)
与 workflow_status.md。