feat(saa): Phase 4 E_live 校准——像素活性 OR 状态活性(治无运动点击类假阴)
play.cdp.cjs E_live(守卫E):加 stateProgressed(score/remaining 玩前→玩后真变=游戏在响应输入) + 玩前/玩后态捕获(s0/s1);E_live pass = 像素 distinct≥2 OR 状态活性。 - 治无运动点击类(打地鼠等):画面只在命中瞬间变、像素采样易错过→E_live 假阴;但 score/remaining 会真变。 - 只加 OR、只放宽不收紧:真冻屏(score/remaining 不变、含仅计时 elapsed 变的)→stateProgressed=false→E_live 仍判否,绝不放过真冻屏。 - 验证:node --check 过;stateProgressed 5 例核验(命中→true / 冻屏→false / null→false / 仅时间变→false);对 gd-breakout 跑确定性 harness(无 M3)——liveByState 字段出、E_live pass、harness 不崩。 - 范围(创始人定):VLM 门(gateMode=vlm)降 backlog(VLM 单帧比 E_live 弱、有'好玩'判定天花板);#7 打地鼠经查实为 H_progress(已 Phase 1 移出硬门)非 E_live。 Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
parent
ad22be9b3a
commit
9d463f0873
@ -174,6 +174,17 @@ async function readGameState(cdp) {
|
||||
);
|
||||
}
|
||||
|
||||
/** Phase 4 E_live 校准(2026-06-20):判玩前→玩后「游戏进展态」是否真变化(score/remaining 任一数值变=游戏在响应输入)。
|
||||
* 用于给 E_live 补「状态活性」证据:无运动点击类(打地鼠等)画面只在命中瞬间变、像素采样易错过→假阴;
|
||||
* 但其 score/remaining 会真变。真冻屏 score/remaining 不变→返 false→E_live 仍判否,绝不放过真冻屏(只放宽不收紧)。 */
|
||||
function stateProgressed(s0, s1) {
|
||||
if (!s0 || !s1) return false;
|
||||
for (const k of ['score', 'remaining']) {
|
||||
if (typeof s0[k] === 'number' && typeof s1[k] === 'number' && s0[k] !== s1[k]) return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
/** 判一条机制断言(s0=玩前态 / s1=玩后态)。op:increased/decreased/changed/>/>=/</<=/==/in。返回逐条明细。 */
|
||||
function checkAssertion(a, s0, s1) {
|
||||
const p = a.path;
|
||||
@ -925,6 +936,7 @@ async function main() {
|
||||
// 首帧截图 + 渲染快照(守卫D 初值 + 守卫E t0)。
|
||||
await saveScreenshot(cdp, path.join(evDir, 'first-paint.png'));
|
||||
const px0 = await brightPixels(cdp, '#game-engine');
|
||||
const s0 = await readGameState(cdp); // Phase 4 E_live 校准:玩前进展态(与玩后对比补「状态活性」)
|
||||
// 守卫H 玩前态:真玩输入前读一次可观测状态(基线,供机制断言对照)。
|
||||
const state0 = await readGameState(cdp);
|
||||
|
||||
@ -961,12 +973,16 @@ async function main() {
|
||||
// 守卫D:真渲染(输入后再测,取较优)。
|
||||
const px1 = await brightPixels(cdp, '#game-engine');
|
||||
hashes.push(px1.hash);
|
||||
const s1 = await readGameState(cdp); // Phase 4 E_live 校准:玩后进展态
|
||||
const bright = Math.max(px0.bright, px1.bright), maxCh = Math.max(px0.maxCh, px1.maxCh);
|
||||
verdict.guards.D_render = { pass: bright > 50 && maxCh > 80, bright, maxCh };
|
||||
|
||||
// 守卫E:活性 —— 整段真玩出现 ≥2 个不同画面态(真在动/真在响应);全程恒同一帧=冻屏判否。
|
||||
// Phase 4 校准(2026-06-20):像素活性 OR 状态活性(score/remaining 真变)——治无运动点击类(打地鼠等)像素采样
|
||||
// 错过命中瞬间的假阴;真冻屏像素+状态皆不变→仍判否(只加 OR、只放宽不收紧,绝不放过真冻屏)。
|
||||
const distinct = new Set(hashes);
|
||||
verdict.guards.E_live = { pass: distinct.size >= 2, distinctStates: distinct.size, samples: hashes.length };
|
||||
const liveByState = stateProgressed(s0, s1);
|
||||
verdict.guards.E_live = { pass: distinct.size >= 2 || liveByState, distinctStates: distinct.size, samples: hashes.length, liveByState };
|
||||
|
||||
// 守卫B:未捕获错误。
|
||||
const unc = await cdp.evaluate('(function(){ var n=window.__genInternals; var u=(n&&n.uncaught)?n.uncaught:[]; return u.slice(0,10); })()');
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user