From 8f5fee17195a700ff348e8582d5ae2f98a4dec97 Mon Sep 17 00:00:00 2001 From: yuetsh <517252939@qq.com> Date: Wed, 5 Aug 2026 11:10:33 -0600 Subject: [PATCH] =?UTF-8?q?docs(achievement):=20=E9=83=A8=E7=BD=B2?= =?UTF-8?q?=E6=89=8B=E5=86=8C=E8=A1=A5=E5=85=85=E9=98=88=E5=80=BC=E8=B0=83?= =?UTF-8?q?=E6=B3=95=E4=B8=8E=E5=AE=9E=E9=99=85=E9=85=8D=E7=BD=AE=E7=8A=B6?= =?UTF-8?q?=E6=80=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 计划文档里 17 条的参考表已经跟线上对不上(现 38 条),标明以后台为准。 补上"阈值只能从严往松调"这条硬约束和分布查询命令——contest_joined 最高只有 7、min_ac_code_chars 最小值 8,都是拍脑袋定阈值踩出来的坑。 Co-Authored-By: Claude Opus 5 --- docs/ops/achievement-deploy.md | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/docs/ops/achievement-deploy.md b/docs/ops/achievement-deploy.md index 7f8282c..ed27127 100644 --- a/docs/ops/achievement-deploy.md +++ b/docs/ops/achievement-deploy.md @@ -54,7 +54,20 @@ python manage.py check_achievement_deploy ### 第四步 配成就并全量补发 -在管理后台「成就」页配置。参考配置表见实施计划文档 Task 13(17 条,累积型 `hidden=False`、隐藏型 `hidden=True`)。 +在管理后台「成就」页配置。累积型设 `hidden=False`、隐藏型设 `hidden=True`。实施计划文档 Task 13 里有一份 17 条的初始参考表,但线上早已在其之上迭代(2026-08-05 起 38 条),**以管理后台的实际配置为准,别照着计划文档重配**。 + +配阈值前先看真实分布,别拍脑袋——线上踩过的坑:`contest_joined` 最高只有 7(各班只打自己班的比赛),配 ≥10 是零解锁;`min_ac_code_chars` 最小值 8(有道题 8 个字符能过),已因此删除该指标。分布查询: + +```bash +python manage.py shell -c " +from achievement.models import UserStat +k = 'hard_ac_count' +v = sorted((s.metrics[k] for s in UserStat.objects.all() if k in s.metrics), reverse=True) +print('n=', len(v), 'top20=', v[:20], 'p95/p99=', v[int(len(v)*0.05)], v[int(len(v)*0.01)]) +" +``` + +**阈值只能从严往松调**:调低会自动补发,调高不撤销已发出的记录。新成就先配高阈值看 `unlock_count`,太少再往下调;配松了想收紧只能删掉成就(级联删解锁记录)重建。 ```bash python manage.py recompute_achievements --silent