本周重心几乎全在 telefast 上:公共 API 第一期从设计走到可用,TG 榜单站的数据底盘也同步搭了起来,另外还铺开了实体语言/国家自动标注这条线。旁边的 xx-panel-admin 主要在处理安全债和前端部署链路,xx-panel-saas 则刚开了一个新坑。
这是本周最大的一块。10-08 一天之内,公共 API 从包骨架(健康检查起步)一路做到成型的接口面:
since/until 归一为 UTC naive 避免 500,limit 统一接入 API_MAX_LIMIT,裸 peer 前缀返回 422。x-api-key 安全方案,接入 public_api 部署链路。速度之外也顺手补了不少边界:整数输入范围校验返回 422、rate_limit 维度 429 埋点补齐、last_used 记账失败不阻断请求、仅对已提交计数的请求做配额补偿。这类修补看着琐碎,但决定了对外接口能不能真正放开。
10-09 集中做了 telefast_rank 的设计与 M1(数据底盘)实现。core 侧建了 ranking_pool / boards / runs 三张表与迁移;worker 侧完成了北京时间日界窗口工具、榜单池规则评估、帖子指标聚合(发帖/曝光/互动)、涨粉差分聚合(含快照基准与降级)、批次写入(rank_change 幂等)与保留清理,并接上 ARQ 任务、调度 cron 和手动脚本。web 端补了 admin 视图(池管理 / 结果 / 运行 / 手动触发)。失败路径也做了收口——刷新失败先回滚再落 failed 状态。
配额调度同样动过:账号小时配额上调(GetFullChannel 900 / GetHistory 1500),配额耗尽的任务改为精确推迟到配额恢复时刻,而不是傻等或空转。
10-10 这条线从设计文档(含一轮评审修正:枚举对齐、字典补 vn、kill switch 表述)推进到落地:
entities 加了语言/国家标注列与语言代码枚举;search),admin 补了对应列、筛选与人工纠错钩子;分散在周初,但收益直接:
entities 增 (peer_type, created_at) 索引,用户列表页查询从 1.3s 降到毫秒级;admin 列表 count 去排序,用户列表 count 从 3.2s 降到 0.3s;entities 写入;channel_posts 增 (entity_id, posted_at) 复合索引;lock_timeout=30s,避免长锁等待被 job_timeout 中途取消;这块主要是还债。安全上把阿里云短信的 AccessKey 从硬编码改为环境变量,删掉了不再使用的含硬编码密钥的初始化器,database.yml 去掉了 root 默认密码回退;因为 Git 历史已清理,AGENTS.md 里也提醒要轮换旧密钥。
前端部署链路反复调了几轮:先暂停自动发布并去掉 --delete(线上前端比仓库新且更全),再从线上同步 theme1/theme4,最后恢复 push 自动发布但改为按主题逐个 rsync(仅 theme1-4),并做了一次整目录 --delete 同步让服务器与仓库完全一致。同时把 frontend/ 排除出 .dockerignore 之外——前端由 Caddy 从宿主机目录提供,不进镜像。
代码侧补了 Panel 的 belongs_to :user(表里有 user_id、User 侧早有 has_many :panels),重写了 api/pm 请求测试并补了登录与面板模型冒烟测试。最后做了部署收尾:搬迁前端、删除 ansible、精简 entrypoint、新增 README。
10-09 初始化了 xx-panel-saas 骨架:Rails 8.1.4 / Ruby 4.0.7 / PostgreSQL 18,前端用 Tailwind + Hotwire,配好 CI 与 Dependabot。目前还只是脚手架,没有业务代码。
这周的节奏是「对外接口 + 对内榜单」两条线并行推进,语言/国家标注作为横切能力一次性打通了 core、worker 和 API 三层。telefast 的公共 API 已经具备放开的条件,接下来更值得关注的是榜单站 M1 之后的实际数据表现,以及语言标注的准确率能不能撑住 API 过滤。xx-panel 这边,安全债算是清了一批,但密钥轮换还得确认落实。