zizi c99014c243 test(aigc-3b-B): 派发面 e2e 真证安全面+全自动管线闭合(HMAC双向),P5 生成质量转 L1
3b-B e2e(mini-desktop 真跑·证据 wg1/gen-worker/evidence-3bB/):

 P0-P4 安全面+全自动管线=真证闭合(铁证 backend-callback-hmac.log + p4*.txt):
- HMAC 双向证:缺签名头→HTTP 401 / 错签(deadbeef≠482147b5)→HTTP 401 / 正签→过门(走到下游"任务不存在"非401)
  =关死 /dify/callback-internal 裸 @PermitAll 缺口
- 全自动派发链真通:执行器认领 taskId→dispatchGeneric 投 §6.1 job→worker 真生成(真烧模型)→
  HMAC 签名回调→验签通过→handleCallback 落库(gen-9303/9304/9305 三轮齐全)

 P5 一句话真生成=未达终局:三款全 nine_gate_failed。但截图(gen-9303-after-play.png)证生成
  真出 on-theme 可渲可动的「点击小怪物」游戏(Score/3s 倒计时/多彩怪物 monsters/targetScore=12),
  仅点击→计分坏(Score 仍 0)→九门确定性地板正确拦截「看着像但玩不了」=质量门正确履职、拒发不可玩。

判:L0 交付(管线+安全+质量门)已完成且证;缺=便宜模型把「点击命中→计分」写对=L1 生成域
  (prompt 点击坑+模型档+player/calibration,run_studio 自修 max_repairs 未救回)→转 L1 v3 迭代。

附带:serve-and-play.sh 跨平台 Chrome 探测(CHROME_BIN 覆盖>Linux /usr/bin>macOS>PATH 兜底,
  Linux 在前因 mini-desktop x86 是权威 e2e 机);p3bB_*.sql 发布四态/翻 feed 桩。

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-14 16:20:28 +00:00

41 lines
1.1 KiB
JavaScript

'use strict';
export default function createGame(opts) {
const o = opts || {};
let ctx = null;
const W = 390, H = 844;
const BUTTON_RADIUS = 60;
const COLORS = ['#FF4136', '#2ECC40', '#0074D9', '#FFDC00'];
const BRIGHT_COLORS = ['#FF6B6B', '#5FDC6F', '#4A9EF5', '#FFE54C'];
const TONES = [262, 330, 392, 494]; // C4 E4 G4 B4
const HIGHLIGHT_DURATION = 500; // ms
const GAP_DURATION = 200; // ms
const BUTTON_Y = 550;
const totalButtonWidth = 4 * BUTTON_RADIUS * 2 + 3 * 30;
const startX = (W - totalButtonWidth) / 2 + BUTTON_RADIUS;
const buttonPositions = COLORS.map((_, i) => ({
x: startX + i * (BUTTON_RADIUS * 2 + 30),
y: BUTTON_Y,
color: COLORS[i],
brightColor: BRIGHT_COLORS[i]
}));
let phase = 'playing';
let score = 0; // 已完成的关卡数
let sequence = [];
let userStep = 0;
let remaining = 0;
let gameoverReason = '';
let inputSub = null;
// 动画状态
let showState = 'idle'; // 'showing' | 'waiting' | 'idle'
let showStartTime = -1;
let activeIndex = -1;
let isLight = false;
let lastPlayedIndex = -1;
// 按钮缩放动画
let popTimers = [0, 0, 0, 0]; // 剩余秒数