Files
Jyotisha/docs/tasks/PROGRESS-beta-capacity-20261014.md
T
jesse-uxandGrok (agent loop) a54f75e5e3 fix(capacity): limit each user and queue heavy compute briefly.
Consult, rectification turns, and report generation stop before a credit reservation when the product caps are hit. A full heavy-compute gate waits up to 8 seconds, and one consultation retries that 429 inside the same request.

Co-Authored-By: Grok (agent loop)
2026-10-15 13:33:06 +08:00

4.1 KiB
Raw Blame History

进度 · 内测容量(2026-10-15)

  • 分支:codex/beta-capacity-20261014
  • 基线:开工时 origin/staging ef49257b734678ff944a840076347baa02d0323c
  • 任务书:docs/tasks/TASK-beta-capacity-20261014.md
  • 前置:origin/codex/node-runtime-resources-20261013 与 origin/codex/rect-scoring-perf-20261013 都是该 staging 的祖先(merge-base --is-ancestor 退出码 0)。限流文件里已有过期清理。

做了什么

  • T1:对话 10 次/分钟 + 120 次/小时,校正回合 5 次/分钟 + 40 次/小时,报告 3 次/小时(每天 5 份不变)。拒绝发生在预留点数之前,429 + rate_limited + Retry-After。开案路由不计数。
  • T2:重计算并发仍是 2。满了最多等 8 秒,同时等待最多 4 个;等不到或等待已满仍是 429,Retry-After 不变。对话对这种 429 最多再试 2 次,等待合计不超过 15 秒。进度行「人有点多,排一下队」,失败句「人有点多,这一轮没排上,点数已经退回。」退点仍走原来的取消预留,代理路径用已有的一次结算。
  • T3:后台已能批量生成(1–100 个、每码点数自填、初始 10)、按兑换账户查看、撤销未使用的码。说明在 docs/operations/beta-invite-codes.md。没有扩功能。
  • T4:脚本 frontend/scripts/research/beta-load-smoke.mts。不从 frontend/tests 导入。本机没有跑。
  • T5:BUG-1355、BUG-1356,CHANGELOG、VOICE、DESIGN、真机两条。

断言

旧测试仍要求「名额被占着就拒绝」,没有改拒绝码和 Retry-After 的期望值。

位置 原值 新值 原因
tests/test_api_heavy_compute_gate.py 立刻拒绝的夹具和单测 reset() / reset(limit=1, retry_after_seconds=3) 增加 wait_seconds=0 默认改为最多等 8 秒。这些测试继续锁 429 和 Retry-After,排队另有新测试
tests/test_api_chart_subprocess_gate.py 两处占着名额再请求 reset(limit=1) reset(limit=1, wait_seconds=0) 同上。仍锁同步排盘被拒绝、日志不出现请求正文

偏离与环境缺口

  • T0:仓库文档里的目标规格,staging 与生产都是 2 vCPU / 4 GB,代码默认并发 2。这台 Windows 没有 staging 的登录壳,没有采到机器上的实际核数、内存和 JYOTISH_HEAVY_COMPUTE_CONCURRENCY。不能把文档规格当成已经登主机核对过。
  • T4:没有 STAGING_TEST_OTP,没有对 staging 或生产发压测。改前、改后的并发数字都没有。服务器 CPU / 内存同样没有采样。脚本留给验收方在有测试验证码的环境重跑。20 并发档没有跑。
  • 旧版对话(不走代理运行时)会重试,但进度行要等回答流开始才有,所以那条路径等待时看不到「排一下队」。现在的对话走代理运行时,进度行会换字。任务书允许把排队文案收成只多等。
  • 没有改数据库,没跑 test:db。没有跑前端全量 npm test,没有跑 Python 快速门。
  • deploy/README.md 有一句仍写「满了不排队」。改成了最多等 8 秒、等待不超过 4 个,避免操作说明和代码相反。没有改部署配置。

自测

检查 命令 结果数字
Python 闸门 .venv\Scripts\python.exe -m pytest tests/test_api_heavy_compute_gate.py tests/test_api_chart_subprocess_gate.py -q 17 通过(8 + 9),0 失败
前端相关测试 node node_modules/tsx/dist/cli.mjs --test tests/request-rate-limit.test.ts tests/consultation-workflow-retry.test.ts tests/personal-report-api.test.ts tests/runtime-sources-no-test-imports.test.ts 76 通过,0 失败
类型 frontend\node_modules\.bin\tsc --noEmit -p . 退出码 0
前端 lint npm run lint 0 错误,123 条原有警告
压测 未执行 frontend/scripts/research/beta-load-smoke.mts 本机没有 STAGING_TEST_OTP。没有改前/改后并发数字,没有服务器 CPU/内存

没有改数据库,没跑 test:db。没有跑前端全量 npm test,没有跑 Python 快速门。