feat(levels): two-sided endgame release, and a board to track the 50-level run

The chain built its own worst moment: hero and tail deadlock at orientations 0
and +2 and open only at +1, with +3/+4/+5 left entirely to chance. That is why
some levels released at exactly one of six orientations, and why every model
kept writing "I don't know which way to turn" — at +2 one direction was right
and the other five were dead ends.

createDeepLock now traces candidates at all six orientations and requires the
tail to also release at +3, certified with the real swept tracer. A player
stuck at +2 turns either way and something moves. Measured by the rule bot
over the regenerated set: blind rotations, wrong-way turns and extra rotations
all go to zero, from 1.17 / 0.44 / 1.22 per level. Endgame orientation counts
shift from {1:4, 2:10, 3:4} to {2:3, 3:13, 4:1}.

It costs yield: switchback r3 and crossing r3 now produce nothing, and the set
comes out at 17 levels rather than 18. The test witnesses moved with it — a
witness is whichever seed still satisfies the construction, so they are
re-derived from the sweep rather than pinned.

docs/level-board.html is the task board for getting to 50 levels. Task state is
in bench/board.json; every number on the page — candidate count, rotation
quota, blind turns, monkey actions-per-piece, the agent batches — is measured
from the level set and the run archive at build time.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
cabinw
2026-09-14 16:22:08 +08:00
co-authored by Claude Opus 5
parent 8a736766fd
commit acc374e276
6 changed files with 5112 additions and 7747 deletions
+195
View File
@@ -0,0 +1,195 @@
{
"goal": "调出 50 关难度合适、好玩的关卡,交付人工审核",
"updated": "09-14 16:21",
"round": 0,
"definition": {
"title": "「难度合适且好玩」在这套度量下的操作定义",
"why": "评分里只有 difficulty(复测 r=0.93)和 stuck(r=0.85)可信;rotation / clarity / fun 的复测 r 只有 0.32 / 0.19 / 0.56,是模型噪声,不能拿来调参。所以「好玩」必须换成机械代理。",
"rules": [
{
"k": "难度",
"v": "agent 的 difficulty 评分沿关号上升,末档逼近 3.0(3 = 刚刚好),全程不超过 3.2",
"how": "grok 抽样评分"
},
{
"k": "不挫败",
"v": "stuck ≤ 2.0,盲转 = 0,转错方向 = 0",
"how": "规则机器人全量扫,12 秒"
},
{
"k": "不无脑",
"v": "猴子玩家 动作÷棋子 ≥ 3.0(v0.5 全库 1.67 = 乱点就能过)",
"how": "生成时算"
},
{
"k": "旋转是主线",
"v": "0 旋转关 ≤ 5 关(10%),且随关号推进旋转数递增",
"how": "求解器"
},
{
"k": "不重复",
"v": "50 关盘面签名互不相同,路线家族分布不偏科",
"how": "deepLevelKey 去重"
}
]
},
"targets": {
"levels": 50,
"rotationQuota": {
"0": 5,
"1": 12,
"2": 15,
"3": 18
},
"difficultyCurve": [
{
"band": "L1–L12",
"rot": "0–1 转",
"difficulty": "1.5 – 2.0"
},
{
"band": "L13–L32",
"rot": "1–2 转",
"difficulty": "2.0 – 2.6"
},
{
"band": "L33–L50",
"rot": "2–3 转",
"difficulty": "2.6 – 3.0"
}
]
},
"phases": [
{
"id": "P0",
"title": "判据:先说清楚什么叫「好」",
"tasks": [
{
"id": "T0.1",
"title": "难度曲线与旋转配额定义",
"status": "done",
"note": "50 关分三档,0 转关卡死 10% 上限(用户硬要求)"
},
{
"id": "T0.2",
"title": "机械验收门槛",
"status": "done",
"note": "盲转=0、转错=0、终局可走朝向≥2 —— 前两项已由改锁结构达成"
},
{
"id": "T0.3",
"title": "「好玩」的机械代理指标",
"status": "done",
"note": "猴子 APT ≥3.0。fun 评分复测 r=0.56 不可用,改用「乱点过不了」当代理"
}
]
},
{
"id": "P1",
"title": "产能:先得有足够多的候选",
"tasks": [
{
"id": "T1.1",
"title": "深锁关(3 转)扩产到 ≥60 个候选",
"status": "todo",
"note": "当前 14 种子出 17 关,需扩大种子与半径扫描"
},
{
"id": "T1.2",
"title": "中档(2 转)生成路径",
"status": "todo",
"note": "deep-lock 固定 3 转,v0.5 最多 2 转 —— 中档要么放宽锁链,要么从 v0.5 筛"
},
{
"id": "T1.3",
"title": "简单档(0–1 转)候选池",
"status": "todo",
"note": "从 v0.5 筛,但必须过猴子 APT 门槛(v0.5 全库中位 1.67,大部分会被刷掉)"
},
{
"id": "T1.4",
"title": "去重与家族均衡",
"status": "todo",
"note": "6 个路线家族不能偏科;v0.5 曾出现 1000 关只有 30 个模板"
}
]
},
{
"id": "P2",
"title": "标定:把机械指标映射到真实难度",
"tasks": [
{
"id": "T2.1",
"title": "grok 抽样跑候选池,收集 difficulty / stuck",
"status": "todo",
"note": "分层抽样,覆盖各旋转档与各家族"
},
{
"id": "T2.2",
"title": "拟合 difficulty ~ 机械特征",
"status": "todo",
"note": "候选特征:旋转数、锁住率、猴子 APT、棋子数、路线长度、终局路口数"
},
{
"id": "T2.3",
"title": "用模型给全部候选打分并按曲线选 50 关",
"status": "todo"
}
]
},
{
"id": "P3",
"title": "迭代:跑几轮把曲线调平",
"tasks": [
{
"id": "T3.1",
"title": "第 1 轮:grok 全量跑 50 关",
"status": "todo"
},
{
"id": "T3.2",
"title": "按实测曲线调整选关,重选",
"status": "todo"
},
{
"id": "T3.3",
"title": "第 2 轮验证",
"status": "todo"
},
{
"id": "T3.4",
"title": "收敛判定(难度曲线单调、stuck 达标)",
"status": "todo"
}
]
},
{
"id": "P4",
"title": "交付",
"tasks": [
{
"id": "T4.1",
"title": "50 关关卡集",
"status": "todo"
},
{
"id": "T4.2",
"title": "人工审核页(可直接试玩每一关)",
"status": "todo"
},
{
"id": "T4.3",
"title": "后续关卡制作流程的优化总结",
"status": "todo"
}
]
}
],
"rounds": [],
"log": [
{
"at": "起点",
"text": "已完成前置工作:擦碰漏报修复(113/581 例)、终局单出口门槛、锁结构改为双向可开 —— 规则机器人盲转/转错/多转已全部归零"
}
]
}