The round accidentally ran every level twice, which turned into the most useful thing it produced: 45 retest pairs on this exact set. 84% of them replayed the identical action sequence, so the agent is near-deterministic and a second run of a level buys almost nothing — the mechanical metrics retest at r = 1.00 for that reason, not because they survived a hard test. The ratings do not. Difficulty retests at r = 0.55 here, against the 0.93 this project had on record from a smaller sample, and every pair that disagreed had played the same trajectory: same moves, same outcome, different number. The report now prints the reliability it measured rather than quoting the older figure, and says which one it replaces. Averaged by band over ~20 runs, though, the ratings finally track the curve — 2.00 / 2.05 / 2.40 with stuck at 1.21 / 1.15 / 1.74, where round 1 was a flat line. So the rule is not "ratings are useless", it is "ratings are a band statistic, never a per-level rank", and that is what the rules section says. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
239 lines
22 KiB
HTML
239 lines
22 KiB
HTML
<!doctype html>
|
||
<html lang="zh-CN">
|
||
<head>
|
||
<meta charset="utf-8">
|
||
<meta name="viewport" content="width=device-width,initial-scale=1">
|
||
<meta http-equiv="refresh" content="60">
|
||
<title>50 关任务看板</title>
|
||
<style>
|
||
:root{
|
||
--ground:#EEF1F4; --surface:#FFFFFF; --inset:#E3E8ED; --panel:#F7F9FA;
|
||
--ink:#141E28; --ink2:#48596A; --ink3:#6B7A88;
|
||
--rule:#D3DAE1; --rule2:#BFC9D2;
|
||
--rail:#435F78; --rail-soft:#8FA6BA;
|
||
--bad:#B23A26; --bad-soft:#F2DDD8;
|
||
--warn:#8A5C0F; --warn-soft:#F4E9D4;
|
||
--good:#236E64; --good-soft:#D9EDEA;
|
||
--live:#1F6FB2; --live-soft:#DCE9F4;
|
||
--shadow:0 1px 2px rgba(20,30,40,.06),0 6px 18px rgba(20,30,40,.05);
|
||
color-scheme:light;
|
||
}
|
||
@media (prefers-color-scheme:dark){:root:not([data-theme=light]){
|
||
--ground:#0F161C; --surface:#141D25; --inset:#0A1015; --panel:#141D25;
|
||
--ink:#E4EAEF; --ink2:#AEBDC9; --ink3:#8494A2;
|
||
--rule:#28343F; --rule2:#35434F;
|
||
--rail:#8CB0CC; --rail-soft:#4E6577;
|
||
--bad:#E4836C; --bad-soft:#3A211B;
|
||
--warn:#E0AE5E; --warn-soft:#33280F;
|
||
--good:#4FC7B7; --good-soft:#11302C;
|
||
--live:#6BB3EE; --live-soft:#12283A;
|
||
--shadow:0 1px 2px rgba(0,0,0,.3),0 6px 18px rgba(0,0,0,.28);
|
||
color-scheme:dark;
|
||
}}
|
||
*{box-sizing:border-box}
|
||
body{margin:0;background:var(--ground);color:var(--ink);
|
||
font-family:"PingFang SC","Hiragino Sans GB","Microsoft YaHei",ui-sans-serif,system-ui,-apple-system,sans-serif;
|
||
line-height:1.7;-webkit-font-smoothing:antialiased}
|
||
.wrap{max-width:1080px;margin:0 auto;padding:0 24px 80px}
|
||
code,.mono{font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;font-variant-numeric:tabular-nums}
|
||
header.head{padding:48px 0 26px;border-bottom:1px solid var(--rule);margin-bottom:30px}
|
||
.eyebrow{font-size:11.5px;letter-spacing:.18em;text-transform:uppercase;color:var(--ink3);margin-bottom:12px}
|
||
h1{font-size:clamp(26px,4vw,38px);line-height:1.2;margin:0 0 14px;letter-spacing:-.02em;text-wrap:balance}
|
||
.meta{font-size:12.5px;color:var(--ink3)}
|
||
.progress{margin:22px 0 0}
|
||
.progress .bar{height:10px;background:var(--inset);border-radius:6px;overflow:hidden}
|
||
.progress .bar i{display:block;height:100%;background:var(--good);border-radius:6px;transition:width .4s}
|
||
.progress .lbl{display:flex;justify-content:space-between;font-size:12.5px;color:var(--ink2);margin-top:7px}
|
||
h2{font-size:21px;margin:44px 0 6px;letter-spacing:-.01em}
|
||
h2 .num{color:var(--rail-soft);font-family:ui-monospace,monospace;font-size:14px;margin-right:9px}
|
||
p{margin:0 0 12px;max-width:74ch}
|
||
.sub{color:var(--ink2);font-size:14px}
|
||
.card{background:var(--surface);border:1px solid var(--rule);border-radius:12px;padding:18px 20px;box-shadow:var(--shadow);margin:16px 0}
|
||
.callout{border-left:3px solid var(--rail);background:var(--panel);border-radius:0 10px 10px 0;padding:14px 18px;margin:16px 0}
|
||
.callout p:last-child{margin-bottom:0}
|
||
.grid{display:grid;gap:14px;grid-template-columns:repeat(auto-fit,minmax(176px,1fr));margin:16px 0}
|
||
.tile{background:var(--surface);border:1px solid var(--rule);border-radius:12px;padding:14px 16px}
|
||
.tile .k{font-size:11px;letter-spacing:.06em;color:var(--ink3);text-transform:uppercase}
|
||
.tile .v{font-family:ui-monospace,monospace;font-size:25px;font-weight:600;line-height:1.25;margin-top:3px}
|
||
.tile .n{font-size:12px;color:var(--ink2);margin-top:2px}
|
||
.tile.ok .v{color:var(--good)} .tile.miss .v{color:var(--bad)} .tile.warn .v{color:var(--warn)}
|
||
table{width:100%;border-collapse:collapse;font-size:13.5px;margin:14px 0}
|
||
th,td{text-align:left;padding:8px 10px;border-bottom:1px solid var(--rule)}
|
||
th{font-size:11px;letter-spacing:.06em;color:var(--ink3);text-transform:uppercase;font-weight:600;white-space:nowrap}
|
||
td.n,th.n{text-align:right;font-family:ui-monospace,monospace;font-variant-numeric:tabular-nums;white-space:nowrap}
|
||
.scroll{overflow-x:auto}
|
||
.tag{display:inline-block;font-size:11px;padding:2px 9px;border-radius:20px;font-weight:600;white-space:nowrap}
|
||
.tag.good{background:var(--good-soft);color:var(--good)}
|
||
.tag.bad{background:var(--bad-soft);color:var(--bad)}
|
||
.tag.live{background:var(--live-soft);color:var(--live)}
|
||
.tag.idle{background:var(--inset);color:var(--ink3)}
|
||
.phase{margin:24px 0}
|
||
.phase h3{font-size:15.5px;margin:0 0 4px;display:flex;align-items:center;gap:10px}
|
||
.phase h3 .pid{font-family:ui-monospace,monospace;font-size:11.5px;color:var(--surface);background:var(--rail);border-radius:5px;padding:2px 7px}
|
||
.tasks{list-style:none;margin:10px 0 0;padding:0;border-left:2px solid var(--rule);margin-left:6px}
|
||
.tasks li{position:relative;padding:9px 0 9px 22px}
|
||
.tasks li::before{content:'';position:absolute;left:-6px;top:17px;width:10px;height:10px;border-radius:50%;
|
||
background:var(--ground);border:2px solid var(--rule2)}
|
||
.tasks li.done::before{background:var(--good);border-color:var(--good)}
|
||
.tasks li.doing::before{background:var(--live);border-color:var(--live);box-shadow:0 0 0 4px var(--live-soft)}
|
||
.tasks li.blocked::before{background:var(--bad);border-color:var(--bad)}
|
||
.tasks .t{display:flex;align-items:baseline;gap:10px;flex-wrap:wrap}
|
||
.tasks .tid{font-family:ui-monospace,monospace;font-size:11.5px;color:var(--ink3)}
|
||
.tasks .tt{font-size:14.5px;font-weight:500}
|
||
.tasks li.done .tt{color:var(--ink2)}
|
||
.tasks .note{font-size:12.5px;color:var(--ink3);margin-top:1px}
|
||
.rules li{margin-bottom:8px}
|
||
.rules b{font-weight:650}
|
||
.rules .how{font-size:12px;color:var(--ink3);margin-left:6px}
|
||
.log{list-style:none;padding:0;margin:12px 0}
|
||
.log li{padding:8px 0 8px 16px;border-left:2px solid var(--rule);font-size:13.5px;color:var(--ink2)}
|
||
.log li b{color:var(--ink);font-weight:600;font-family:ui-monospace,monospace;font-size:12px;margin-right:8px}
|
||
footer{margin-top:56px;padding-top:20px;border-top:1px solid var(--rule);color:var(--ink3);font-size:12px}
|
||
@media(max-width:640px){.wrap{padding:0 16px 60px}}
|
||
</style>
|
||
</head>
|
||
<body>
|
||
<div class="wrap">
|
||
|
||
<header class="head">
|
||
<div class="eyebrow">HEX TRAILS · 关卡调优</div>
|
||
<h1>调出 50 关难度合适、好玩的关卡,交付人工审核</h1>
|
||
<p class="meta mono">第 2 轮 · 更新于 09-14 16:45 · 本页每 60 秒自动刷新</p>
|
||
<div class="progress">
|
||
<div class="bar"><i style="width:86%"></i></div>
|
||
<div class="lbl"><span>18 / 21 项完成</span><span class="mono">86%</span></div>
|
||
</div>
|
||
</header>
|
||
|
||
<h2><span class="num">A</span>现在的状态</h2>
|
||
<div class="grid">
|
||
<div class="tile ok"><div class="k">候选关卡</div><div class="v">50 <span style="font-size:14px;color:var(--ink3)">/ 50</span></div><div class="n">当前关卡集</div></div>
|
||
<div class="tile ok"><div class="k">盲转 / 关</div><div class="v">0.00</div><div class="n">目标 0</div></div>
|
||
<div class="tile ok"><div class="k">转错方向 / 关</div><div class="v">0.00</div><div class="n">目标 0</div></div>
|
||
<div class="tile ok"><div class="k">猴子 动作÷棋子</div><div class="v">6.43</div><div class="n">目标 ≥3.0(不无脑)</div></div>
|
||
</div>
|
||
|
||
<div class="scroll"><table>
|
||
<thead><tr><th>最少旋转数</th><th class="n">候选关数</th><th>说明</th></tr></thead>
|
||
<tbody>
|
||
<tr><td>1 转</td><td class="n">5</td><td class="sub">浅</td></tr>
|
||
<tr><td>2 转</td><td class="n">5</td><td class="sub">浅</td></tr>
|
||
<tr><td>3 转</td><td class="n">24</td><td class="sub">浅</td></tr>
|
||
<tr><td>4 转</td><td class="n">12</td><td class="sub">中</td></tr>
|
||
<tr><td>5 转</td><td class="n">4</td><td class="sub">中</td></tr>
|
||
|
||
</tbody></table></div>
|
||
<p class="sub">路线家族分布:v05 ×10 · spiral ×2 · switchback ×12 · weave ×18 · orbits ×8 终局可走朝向分布:{"3":44,"4":5,"5":1}</p>
|
||
|
||
<h2><span class="num">B</span>什么叫「难度合适且好玩」</h2>
|
||
<div class="callout"><p class="sub">旋转是免费的、是这个游戏的特色,玩家应该频繁做——所以不该限制旋转次数。该限制的是每一次旋转值不值:转了有没有棋子出来、能不能看出来该转哪、以及转完之后有没有「原来这么简单」的反差。评分里只有 difficulty(复测 r=0.93)和 stuck(r=0.85)可信,rotation / clarity / fun 是噪声(0.32 / 0.19 / 0.56),所以「好玩」全部换成机械代理。 另外,演出本身就是奖励——棋子沿弯路走出去的那几秒是减压点,所以开局必须有得看,而不是只有两枚贴边棋子和 0.3 秒。</p></div>
|
||
<ul class="rules sub">
|
||
<li><b>旋转要深</b>:难度来自「需要转很多次」,不是「转错受罚」。旋转数随关号上升,不设上限<span class="how">(求解器最少旋转数)</span></li>
|
||
<li><b>每转都有回报</b>:每一次旋转至少放出 2 枚棋子;无效转动 = 0<span class="how">(deepLevelStats.releasePerTurn / 规则机器人)</span></li>
|
||
<li><b>演出是回报</b>:开局就要有得看:可点 ≥3 枚、其中最好的一条离场演出 ≥0.9s;全关长巡游(≥0.9s)≥3 次<span class="how">(showStats,用真实动画计时)</span></li>
|
||
<li><b>反差感</b>:平均反差 ≥12:棋子在某个朝向看着像噩梦(长路线多弯),转过去就是几步走出(代价 = 格数 + 2×弯数)<span class="how">(六朝向逐棋子代价差)</span></li>
|
||
<li><b>不无脑</b>:猴子 动作÷棋子 ≥3.0(v0.5 全库 1.67 = 乱点就能过)<span class="how">(生成时算)</span></li>
|
||
<li><b>不挫败</b>:stuck ≤2.0;终局任一朝向卡住时,左右转都能开<span class="how">(grok 抽样 + 求解器)</span></li>
|
||
<li><b>不重复</b>:盘面签名互不相同,路线家族分布不偏科<span class="how">(deepLevelKey)</span></li>
|
||
</ul>
|
||
<div class="scroll"><table>
|
||
<thead><tr><th>关号区间</th><th>旋转数</th><th>目标 difficulty 评分</th></tr></thead>
|
||
<tbody>
|
||
<tr><td>L1–L12</td><td>2–3 转</td><td class="mono">1.5 – 2.0</td></tr>
|
||
<tr><td>L13–L32</td><td>3–5 转</td><td class="mono">2.0 – 2.6</td></tr>
|
||
<tr><td>L33–L50</td><td>5–8 转</td><td class="mono">2.6 – 3.0</td></tr>
|
||
</tbody></table></div>
|
||
|
||
<h2><span class="num">C</span>任务</h2>
|
||
|
||
<div class="phase">
|
||
<h3><span class="pid">P0</span>判据:先说清楚什么叫「好」</h3>
|
||
<ul class="tasks">
|
||
<li class="done"><div class="t"><span class="tid">T0.1</span><span class="tt">难度曲线与旋转配额定义</span><span class="tag good">完成</span></div><div class="note">50 关分三档,0 转关卡死 10% 上限(用户硬要求)</div></li>
|
||
<li class="done"><div class="t"><span class="tid">T0.2</span><span class="tt">机械验收门槛</span><span class="tag good">完成</span></div><div class="note">盲转=0、转错=0、终局可走朝向≥2 —— 前两项已由改锁结构达成</div></li>
|
||
<li class="done"><div class="t"><span class="tid">T0.3</span><span class="tt">「好玩」的机械代理指标</span><span class="tag good">完成</span></div><div class="note">猴子 APT ≥3.0。fun 评分复测 r=0.56 不可用,改用「乱点过不了」当代理</div></li>
|
||
</ul>
|
||
</div>
|
||
|
||
<div class="phase">
|
||
<h3><span class="pid">P1</span>产能:解除旋转上限,把反差感做进筛选</h3>
|
||
<ul class="tasks">
|
||
<li class="done"><div class="t"><span class="tid">T1.1</span><span class="tt">growDeepLevel 扩展到 6 个朝向</span><span class="tag good">完成</span></div><div class="note">现在只在朝向 0/1/2 插棋子,所以最少旋转恒等于 3 —— 这是「太简单」的根因</div></li>
|
||
<li class="done"><div class="t"><span class="tid">T1.2</span><span class="tt">解除 rotations===3 的硬限制,允许 4/5/6+</span><span class="tag good">完成</span></div></li>
|
||
<li class="done"><div class="t"><span class="tid">T1.3</span><span class="tt">反差感指标进 deepLevelStats 并作门槛</span><span class="tag good">完成</span></div><div class="note">contrastStats 已进 deepLevelStats 并作门槛;实测 weave 22–33、switchback 29、spiral 18–24、orbits 12–17,petals 仅 2.0–5.7、crossing 3.8–5.5</div></li>
|
||
<li class="done"><div class="t"><span class="tid">T1.4</span><span class="tt">每转释放 ≥2 枚的门槛</span><span class="tag good">完成</span></div><div class="note">改为按朝向配额插棋(每个朝向 ≥2 枚在等),取代原来的随机比例——随机比例会留下空转的朝向</div></li>
|
||
<li class="done"><div class="t"><span class="tid">T1.5</span><span class="tt">扩产到 ≥120 候选并去重、家族均衡</span><span class="tag good">完成</span></div><div class="note">扫了 480 + 240 个种子,得 684 个候选;过两道新闸门后 228 关。扩产的目的是付得起闸门的代价,不是数量本身</div></li>
|
||
<li class="blocked"><div class="t"><span class="tid">T1.6</span><span class="tt">终局三枚互锁(hero+gate+tail)</span><span class="tag bad">受阻</span></div><div class="note">仍是深关卡的瓶颈:684 个候选里深度≥4 的只有 67 个,过闸门后剩 16 个——后档只能做到平均 4.1 转,是供给限制不是设计选择</div></li>
|
||
<li class="done"><div class="t"><span class="tid">T1.7</span><span class="tt">开局展示位(快速爽到)</span><span class="tag good">完成</span></div><div class="note">实测整个构造的开局中位只有 2 枚可点、最佳演出 0.57s——锁链开局全锁死。在构造里预留 2 个开局位(立即可点且路线长到值得看),实测开局可点 2→3 枚、最佳演出 0.72s→1.12s</div></li>
|
||
<li class="done"><div class="t"><span class="tid">T1.8</span><span class="tt">离场演出封顶</span><span class="tag good">完成</span></div><div class="note">计时原本线性无上限,最长一次 17.4s,正式关 18.8% 超过 2s。拐点 2.4s 以下完全不变,以上加速逼近 3.2s 上限。labs/exit-timing 可同步对比</div></li>
|
||
</ul>
|
||
</div>
|
||
|
||
<div class="phase">
|
||
<h3><span class="pid">P2</span>标定:把机械指标映射到真实难度</h3>
|
||
<ul class="tasks">
|
||
<li class="done"><div class="t"><span class="tid">T2.1</span><span class="tt">grok 抽样跑候选池,收集 difficulty / stuck</span><span class="tag good">完成</span></div><div class="note">R1:grok-4.6 xhigh 全量跑 50 关,收齐 difficulty / stuck / 机械指标与自由文本抱怨</div></li>
|
||
<li class="blocked"><div class="t"><span class="tid">T2.2</span><span class="tt">拟合 difficulty ~ 机械特征</span><span class="tag bad">受阻</span></div><div class="note">做不成,且不是样本量问题:27 关里 26 关 difficulty 都打 2 分,响应几乎无方差,回归的是常数。根因在 bench 本身——文字盘面把每颗棋子的路线、挡路者、紧贴者直接列成清单,agent 不必用眼睛顺线走,而那正是这游戏的难点。agent 原话:「挡路名单已经写全,不用顺着格子数」。为解释它另建的 legibility 指标与评分相关 -0.02,同样无效,已记录为负结果不采用</div></li>
|
||
<li class="done"><div class="t"><span class="tid">T2.3</span><span class="tt">用模型给全部候选打分并按曲线选 50 关</span><span class="tag good">完成</span></div><div class="note">select-50 按机械特征打分并均匀铺开,家族上限 36%。权重是设计假设而非拟合结果(见 T2.2),由人工审核裁定</div></li>
|
||
</ul>
|
||
</div>
|
||
|
||
<div class="phase">
|
||
<h3><span class="pid">P3</span>迭代:跑几轮把曲线调平</h3>
|
||
<ul class="tasks">
|
||
<li class="done"><div class="t"><span class="tid">T3.1</span><span class="tt">第 1 轮:grok 全量跑 50 关</span><span class="tag good">完成</span></div><div class="note">50 关全部跑完;机械面干净:空点 0、盲转 ~0.3/关、全部通关。总体读数:整批偏易一档(2 分 vs 刚好的 3 分)</div></li>
|
||
<li class="done"><div class="t"><span class="tid">T3.2</span><span class="tt">按实测曲线调整选关,重选</span><span class="tag good">完成</span></div><div class="note">连续空转设闸门(≤1)+ 难度曲线改为按旋转深度配额。同一规则机器人对照:盲转 0.24→0.12,最长连续盲转 4→1,决策数不变</div></li>
|
||
<li class="done"><div class="t"><span class="tid">T3.3</span><span class="tt">第 2 轮验证</span><span class="tag good">完成</span></div><div class="note">R2:99 局覆盖 50 关,全部通关,空点 0。难度按档 2.00 / 2.05 / 2.40,无解感 1.21 / 1.15 / 1.74 —— 评分第一次出现梯度</div></li>
|
||
<li class="doing"><div class="t"><span class="tid">T3.4</span><span class="tt">收敛判定(难度曲线单调、stuck 达标)</span><span class="tag live">进行中</span></div><div class="note">机械面已收敛:空点 0、不可解态 0、连续空转≤1、终局朝向≥3。难度未达标:后档 2.40 vs 目标 3。瓶颈是深关卡供给(见 T1.6),正在扫第二批种子。注意逐关评分复测 r=0.55 且同轨迹会打出不同分,只有按档≈20 局才可读</div></li>
|
||
</ul>
|
||
</div>
|
||
|
||
<div class="phase">
|
||
<h3><span class="pid">P4</span>交付</h3>
|
||
<ul class="tasks">
|
||
<li class="done"><div class="t"><span class="tid">T4.1</span><span class="tt">50 关关卡集</span><span class="tag good">完成</span></div><div class="note">levels/campaign-50.json + src/levels-c50.js,已注册为可玩版本 c50,198 项测试全绿</div></li>
|
||
<li class="done"><div class="t"><span class="tid">T4.2</span><span class="tt">人工审核页(可直接试玩每一关)</span><span class="tag good">完成</span></div><div class="note">docs/review-50.html:50 张开局盘面缩略图 + 机械指标 + agent 实测 + 试玩直达;并标注「哪些数字能信」,把感知类问题(路线长度、紧贴)显式交给人眼</div></li>
|
||
<li class="done"><div class="t"><span class="tid">T4.3</span><span class="tt">后续关卡制作流程的优化总结</span><span class="tag good">完成</span></div><div class="note">docs/level-process.html:两轮对照、复测可信度表(本批现算)、五条规则各带证据、被否掉的做法清单</div></li>
|
||
</ul>
|
||
</div>
|
||
|
||
|
||
|
||
|
||
<h2><span class="num">E</span>已有的 agent 实测</h2>
|
||
<div class="scroll"><table>
|
||
<thead><tr><th>批次</th><th class="n">关数</th><th class="n">difficulty</th><th class="n">stuck</th><th class="n">盲转/关</th><th class="n">多转/关</th></tr></thead>
|
||
<tbody>
|
||
<tr><td>R2 · grok xhigh</td><td class="n">99</td><td class="n">2.16</td><td class="n">1.37</td><td class="n">0.12</td><td class="n">0.24</td></tr>
|
||
<tr><td>R1 · grok xhigh</td><td class="n">50</td><td class="n">2.10</td><td class="n">1.44</td><td class="n">0.24</td><td class="n">0.38</td></tr>
|
||
<tr><td>Codex CLI · gpt-6-astra low</td><td class="n">18</td><td class="n">2.44</td><td class="n">1.44</td><td class="n">1.17</td><td class="n">1.22</td></tr>
|
||
<tr><td>Codex CLI · spark xhigh</td><td class="n">18</td><td class="n">3.11</td><td class="n">2.28</td><td class="n">1.17</td><td class="n">1.17</td></tr>
|
||
<tr><td>Grok Build CLI · xhigh</td><td class="n">18</td><td class="n">2.39</td><td class="n">1.83</td><td class="n">1.17</td><td class="n">1.22</td></tr>
|
||
<tr><td>pi · Grok 4.6 xhigh</td><td class="n">18</td><td class="n">2.39</td><td class="n">1.89</td><td class="n">1.17</td><td class="n">1.22</td></tr>
|
||
<tr><td>pi · Grok 4.6 xhigh · 复测</td><td class="n">18</td><td class="n">2.44</td><td class="n">1.78</td><td class="n">1.39</td><td class="n">1.56</td></tr>
|
||
<tr><td>pi · Grok 4.6 xhigh · 新门槛</td><td class="n">18</td><td class="n">2.11</td><td class="n">1.39</td><td class="n">0.28</td><td class="n">0.33</td></tr>
|
||
<tr><td>Kimi CLI · k3 high</td><td class="n">18</td><td class="n">2.94</td><td class="n">1.83</td><td class="n">1.17</td><td class="n">1.22</td></tr>
|
||
<tr><td>Codex · high reasoning</td><td class="n">10</td><td class="n">3.00</td><td class="n">1.90</td><td class="n">0.40</td><td class="n">0.50</td></tr>
|
||
<tr><td>Codex CLI · xhigh</td><td class="n">6</td><td class="n">3.00</td><td class="n">2.17</td><td class="n">0.33</td><td class="n">0.33</td></tr>
|
||
</tbody></table></div>
|
||
<p class="sub">difficulty 3 = 刚刚好;stuck 越低越好。这两项是评分里唯二复测可信的(r = 0.93 / 0.85)。</p>
|
||
|
||
<h2><span class="num">F</span>日志</h2>
|
||
<ul class="log">
|
||
<li><b>R2 结果</b>难度评分按档 2.00/2.05/2.40(R1 是三档全平),无解感 1.21/1.15/1.74。意外把每关跑了两次,得到 45 对复测:84% 重放了完全相同的动作序列,机械指标 r=1.00,难度评分 r=0.55——且评分分歧的那几对全是同轨迹。结论:agent 近乎确定性,同一关不必跑两遍</li>
|
||
<li><b>R2 依据</b>后段 14 条抱怨里两类:路线太长(感知,已对照 v0.5 基线否掉)与「转了没反应」(机械,可设闸门)。只改后者:endgameMinOpen 2→3、doubleDead 无闸门→≤2。两条合计只留 16% 候选,所以先扩池</li>
|
||
<li><b>未擅自改动</b>agent 33 条抱怨里两大主题是路线太长(68 格 27 弯)与紧贴易看漏。但已上线的 v0.5 在这两项上更严重(最长 88 格 vs 84 格),属于游戏本来的性格;且文字盘面会同时夸大和缩小感知问题。因此只在审核页标出,不擅自设闸门</li>
|
||
<li><b>R1 结论</b>难度评分在这批关卡上无区分度(26/27 都是 2 分),原因是文字 bench 把判断白送给了 agent。结论:agent 轮次用于抓缺陷(死局、盲转、空点、演出),难度排序只能靠机械假设 + 人工审核。这条改变了后续流程的设计</li>
|
||
<li><b>演出</b>离场动画封顶定稿(拐点 2.4s / 上限 3.2s),最长 17.4s→3.5s;拐点以下手感不变。同时发现开局演出是结构性缺陷并在构造里修掉</li>
|
||
<li><b>P1 进展</b>旋转深度打开:生成分布从「全部恒为3」变成 {3,4,5,6,7,8,9}。两次结构性猜测失败并已撤回(插入端多朝向出口过滤实测零效果)。深关卡的瓶颈定位为终局三枚互锁,改用扩大扫描量应对</li>
|
||
<li><b>方向修正</b>旋转配额的思路被推翻:旋转免费且是核心特色,不该限次数,该限的是每次旋转的回报与可读性。实测发现 17 关最少旋转全部恒为 3(生成器写死),且 petals/crossing 两个家族几乎没有反差感(平均 2.0–5.7 对比 weave 的 22–33)</li>
|
||
<li><b>起点</b>已完成前置工作:擦碰漏报修复(113/581 例)、终局单出口门槛、锁结构改为双向可开 —— 规则机器人盲转/转错/多转已全部归零</li>
|
||
</ul>
|
||
|
||
<footer>
|
||
<p class="mono">看板状态:bench/board.json · 生成:node scripts/build-board.mjs · 页面数字(候选数、盲转、猴子 APT、agent 实测)由脚本从关卡集与 bench/runs 直接测得,不是手写</p>
|
||
</footer>
|
||
|
||
</div>
|
||
</body>
|
||
</html> |