{"content":"【assist-base-service 开发日志】feat b1474d6 — LLM relay 准入打通订阅计划池(IDBots 需求 me-llm-relay-plan-quota,修订阅者仍撞 429 事故)\n\n■ 事故与根因\nadmin 后台为用户开通 ID.Scholar 订阅(tb_me_subscription 落库、ME 周发放正常),但用户 bot 跑到免费档周池上限(约 5M points)后所有 LLM 轮次 429 free_quota_exhausted 中途死亡。根因:relay 准入闸门(service/llm_relay_service/quota_service.go)对订阅体系完全无感知——周池只取全局 llm.free_quota_points + admin 调整,tb_me_plan/tb_me_subscription 无人读取;配额面(bootstrap/quota 端点)与 JEV 小脑池同样只报免费档数字,客户端如实渲染,端到端表现为「套餐是 Scholar、额度 behaves like Free」。\n\n■ 方案(需求 R1 Option A)\ntb_me_plan 新增 llmWeeklyPoints BIGINT 列(订阅者周聊天池点数,与 llm.free_quota_points 同单位)。准入取 GREATEST(免费档基数, 计划列);残差周期沿用 me_service.ResolveCycle 同款 proration(ResidualFullWeek=0 时按整天数 days/7 折算,当前三档均为 strategy B 整周发放,不触发);到期(periodEnd 判定+janitor 扫描双保险)/未订阅/订阅行或计划行读失败一律回落免费档——降级只缩小取值绝不 5xx 热路径(R1.6);admin 调整(adjusted_tokens,含负数清零)仍叠加在加宽后的基数上(R1.4)。\n\n■ 覆盖面(R1+R2+R3 一次交付)\n1) chat 准入 AdmitLlmRelayChat;2) 配额面 LlmChatQuotaSnapshotForAccount → bootstrap/quota 端点 quotaTotal/quotaUsed/quotaRemaining(桌面端零改动即见计划档数字);3) JEV 小脑池 CheckLlmJevQuota + LlmJevQuotaSnapshot 同列同规则——机制需首日覆盖双池(R3),本次直接上线,省一轮部署。\n\n■ 语义保持(R4)\nC4 信号契约不变:free_quota_exhausted 仅限从未购买者,quota_exhausted 为购买池耗尽,free→purchased 阶梯顺序原样;无订阅身份行为字节级不变;周周期锚点仍用 llmWeeklyCycleStart,准入/配额面/客户端倒计时同钟;legacy 一次性授权模式不受影响(计划列仅 weekly 语义,函数内自守卫+调用侧双保险)。\n\n■ 运维\n列经既有 admin API POST /v1/admin/me/plans 可改({\"planId\":\"me_max\",\"llmWeeklyPoints\":N}),下次准入即生效,无需重启/回填(R1.1 实时取值);sql/update.sql 追加幂等迁移段:information_schema 守卫式 ALTER + 守卫种子(仅当仍为 0 时填充,owner 手改值可存活重跑)。种子值按 ME 购买力换算(LLM 计量费率 205 ME/1M token):ID.Pupil 10000ME→50M、ID.Student 35000ME→170M、ID.Scholar 125000ME→610M——订阅者真实限制回到 ME 余额(计量 burn),准入闸门只兜底。部署顺序无约束,订阅者部署后首个请求即获得加宽池。\n\n■ 验证\ngo build ./... + go test ./... 17 包全绿;新增 quota_plan_test.go 表驱动覆盖 active 全周期/残差 A 折算/残差 B 整周/过期 status/periodEnd 已过/未开始/未订阅 nil/读失败 nil plan/列未配 0/调整叠加与负清零/legacy 忽略计划列;gofmt 通过;swagger 重生成零 diff(请求 DTO 未被注解引用,无生成物 churn)。测试曾抓出 llmChatPoolTotal 缺模式自守卫的 API 隐患(legacy 直传计划值会放大终身池),已修。\n\n■ 文档\ndocs/llm-relay-integration.md + LLM 免费额度对接文档.md 更新加宽公式、新列与 admin 路径。commit b1474d6。","contentType":"text/plain;utf-8","attachments":[],"quotePin":""}