chore(ops): reload 卡死三层预防 + F1-5a 完整走查报告
reload 卡死三层预防(走查中遭遇 uvicorn graceful shutdown 死等触发): - Layer 1 (apps/backend/start_uvicorn.py 新): 把 reload-excludes 封装在 Python 字符串内,ps1 命令行只有字面路径,根治 PowerShell PSNativeCommandArgumentPassing 在不同 profile 下 wildcard 展开 行为差异(数组 splatting 和 --% 都不稳)。同时显式设 timeout-graceful-shutdown=5,5 秒强杀防死等 - Layer 2 (scripts/ops/backend-watchdog.ps1 新): 自主 socket 探针 (TcpClient + 手写 HTTP/1.1 GET,Connection: close)规避 .NET HttpClient pool 复用 + 系统代理误报;3s × 3 = 9s 触发重启; 进程链 kill 至 pwsh 后端窗口(关闭原窗口);3 次/小时上限自停 - Layer 3 (scripts/ops/start-admin.ps1): 启动时拉起 watchdog, 菜单 [4] 仅重启后端选项,主菜单退出时一并 kill 看门狗 CLAUDE.md: 新增"后端 reload 卡死预防(强制)"章节, 分级文件风险表 + SOP + 启动菜单速查 走查报告(应查尽查严肃版): - 后端 6 个改造点 PASS(P1-P4 + GUC + ai_run_logs runtime 字段) - admin-web 7 页 Playwright 实地走查 → 5 项 UI 不完整登记 F1-5b - 小程序看板 tab 7 页 weixin-devtools-mcp 实地 + DB 数据核对 → board-finance 5/6 项上界裁剪吻合;board-customer 业务日生效; board-coach 月度聚合表设计盲区;5 项 sandbox 覆盖盲区登记 F1-5b - 8 张走查截图归档 docs/audit/changes/screenshots/2026-05-05_f1_5a_walkthrough/ audit_dashboard 刷新到 153 条审计 Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
27
CLAUDE.md
27
CLAUDE.md
@@ -122,6 +122,33 @@ NeoZQYY Monorepo — 面向台球门店业务的全栈数据平台。多门店
|
||||
|
||||
例外:纯格式/文档/注释调整、用户说"跳过验证"
|
||||
|
||||
## 后端 reload 卡死预防(强制)
|
||||
|
||||
**机制**:`uvicorn --reload` 检测到 .py 修改 → 等 lifespan shutdown → 等 WebSocket / asyncio task / DB 连接释放 → 等不到就死等。已在 `start-admin.ps1` + `backend-watchdog.ps1` 做了三层保护,但写代码时仍需配合。
|
||||
|
||||
**改 Python 文件按风险分级**:
|
||||
|
||||
| 风险 | 文件位置示例 | 操作 |
|
||||
|---|---|---|
|
||||
| 极低 | `app/ai/prompts/*.py` `app/schemas/*.py` 工具/helper | 直接改,reload 自动应用 |
|
||||
| 中 | `app/services/*` `app/ai/*`(非 dispatcher) `app/routers/*` | 改前关浏览器(切 WS),改后看终端 "Application startup complete" |
|
||||
| 高 | `app/main.py`(lifespan) `app/services/scheduler.py` `task_queue.py` `app/ai/dispatcher.py` 全局单例(`_admin_svc` 等) | 用启动菜单 [4] 仅重启后端,或 taskkill + 双击 bat |
|
||||
|
||||
**测试 SOP**:
|
||||
1. 改 Python 前先 `curl http://127.0.0.1:8000/health` 确认健康
|
||||
2. 改完文件等 30 秒,再 `curl /health` 二次确认;若仍 timeout → 选启动菜单 [4]
|
||||
3. 看门狗(`backend-watchdog.ps1`)会在连续 30 秒不响应时自动 kill+重启,不需要手动操作
|
||||
|
||||
**启动菜单(双击 `start-admin.bat`)**:
|
||||
- [1] 终止所有服务(含看门狗)
|
||||
- [2] 重启所有服务(含看门狗)
|
||||
- [3] 退出
|
||||
- [4] 仅重启后端(保留前端,推荐:测试时 reload 卡死 / Python 改动)
|
||||
|
||||
**禁止**:
|
||||
- 改 lifespan / dispatcher / 全局单例时不要靠 reload,**手动停后端再启动**
|
||||
- 不要在 reload 没完成时连续改 .py 文件(前一次没收完后一次又触发,必卡)
|
||||
|
||||
## 数据库 Schema 变更规则
|
||||
|
||||
修改 PostgreSQL schema(迁移/DDL/表/ORM)时**必须**同步 `docs/database/`:变更说明 + 兼容性影响(ETL/后端/小程序)+ 回滚策略 + ≥3 条校验 SQL。详细模板见 `db/CLAUDE.md`。
|
||||
|
||||
Reference in New Issue
Block a user