Files
HexTrails/bench/board.json
T
cabinwandClaude Opus 5 acc374e276 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>
2026-09-14 16:22:08 +08:00

195 lines
5.6 KiB
JSON
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
{
"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 例)、终局单出口门槛、锁结构改为双向可开 —— 规则机器人盲转/转错/多转已全部归零"
}
]
}