Commit Graph

6 Commits

Author SHA1 Message Date
e9c7793714 feat(achievement): 添加按难度的 AC 题数指标,删除 min_ac_code_chars
新增 mid_ac_count / hard_ac_count,去重统计中等和困难难度的 AC 题数。
在此之前所有成就对水题和难题一视同仁,这是最缺的一个维度。
增量走 build_ctx 新增的 problem_difficulty,它只在首次 AC 时才查库——
绝大多数提交都不是首次 AC,无条件预查等于给每次判题白加一条 SQL。

删除 min_ac_code_chars:线上实测 1314 个用户的分布,最小值 8、p5=10,
有道题 8 个字符就能通过,这个指标测的是"谁做过那道水题"而不是
"谁写得简洁",配不出有意义的成就。

自检里写死 min_ac_code_chars 的两处改成按 lte 成就自动发现:
_check_registry 不再要求某个具体指标存在,_check_min_metric_absent
改为遍历所有上架的 lte 成就检查其指标。没有 lte 成就时 SKIP,
将来配了自动开始检查。

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-05 11:02:36 -06:00
c50f7b7269 feat(achievement): 添加早起提交次数指标
5:00–7:00 的提交计数,与 midnight_submissions 对称,5 点为分界不重叠。
纯计数指标,不依赖 _ 前缀辅助键,因此无需 recompute_state。

部署后需跑 recompute_achievements,否则存量用户该指标为空。

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-05 10:58:30 -06:00
1504164ae8 fix(achievement): distinct() 前必须 order_by() 清掉默认排序
Submission.Meta 有 ordering=("-create_time",),Django 会把排序字段
并入 DISTINCT,导致 _languages 每条提交各成一行——生产环境实测
某用户 659 条而不是 5 种语言。

recompute 侥幸正确只因 .count() 会清排序,两个实现同一个量却不一致。
三处 distinct() 全部显式加 order_by()。

由 check_achievement_deploy 的自检项发现。

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-04 09:50:19 -06:00
1ef681d5e9 fix(achievement): 重算时重建增量辅助键,避免指标回退 2026-08-04 01:39:29 -06:00
c1081e6193 fix(achievement): 指标的 AC 口径改用 is_accepted,与全项目一致
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-04 00:56:32 -06:00
d9840910e6 feat(achievement): 添加指标注册表与 16 个内置指标
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-04 00:49:49 -06:00