From 12f8928d885f8496abce6ed82f92a404c9a12047 Mon Sep 17 00:00:00 2001 From: ericwyuan Date: Fri, 4 Sep 2026 06:21:41 +0800 Subject: [PATCH] =?UTF-8?q?docs(CLAUDE):=20=E6=B2=89=E6=B7=80=20Garmin=20?= =?UTF-8?q?=E9=99=90=E6=B5=81=E7=9A=84=E7=9C=9F=E7=9B=B8=E2=80=94=E2=80=94?= =?UTF-8?q?=E5=87=BA=E5=9C=A8=E7=99=BB=E5=BD=95=E7=AB=AF=E7=82=B9=EF=BC=8C?= =?UTF-8?q?=E4=B8=94=E7=AA=97=E5=8F=A3=E5=86=85=E6=AF=8F=E8=AF=95=E4=B8=80?= =?UTF-8?q?=E6=AC=A1=E5=BB=B6=E9=95=BF=E4=B8=80=E6=AC=A1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-Authored-By: Claude Opus 5 --- CLAUDE.md | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/CLAUDE.md b/CLAUDE.md index aa7a3f4..276e22b 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -116,6 +116,12 @@ cd backend && .venv/bin/python tests/smoke.py 的话,每次客户端缓存过期(15 分钟)、每个 gunicorn worker、每次部署重启,都会 从库里读回同一个过期令牌再换一次,而这个端点按账号限流、能封几小时。 2026-09-03 排查一整天的根因就是这个。 + **窗口内每次尝试都会延长封锁**(实测:一次同步把截止时间从 00:41 推到 15:26)。 + 所以 `sync_status.rate_limit_source` 区分 `sso` / `data`:只有 sso 冷却会拒绝 + 动作,且只拒绝「刷新令牌」和「重新绑定」这两个真的会打登录端点的操作——库里 + 令牌没过期就照常同步。**重新输账号密码换新令牌解决不了**:`garth.login()` 是 + 同一个端点、更重的流程,限流按账号计,换设备换网络都绕不开。用户可用 force + 推翻我们自己猜的 24 小时。 数据端点另有节流:所有调用经 `services/garmin_throttle.py` 的代理,默认间隔 0.5s + 单次预算 1200 次(依据见该文件顶部)。 429 退避 24h,`rate_limited_until` 以 **DB 为准**(多 worker 内存不一致会卡死