- 门①构建绿:all-plugins barrel+host-dev 双构建日志留档 - 门②SIZES增量实测:九件单件全≤配额,插件gz净增13263B(自律线60K),core基准gz 3222 - 门③浏览器证据:六锚点FNV-1a链verify.ok=true/burst-trail-drift三预设哈希×3重跑一致+几何命中+直方图非空/vignette-dither开关对照哈希互异/CDP dispatchTouchEvent真点击→probe第7条firstInput旁证 - 模板哲学红线被门③实证:particles不内置颜色致首版全黑,host作引擎供色后过——验证门逮住设计而非绕过 - α不接littlejsengine裁定留痕(host.js顶注/index.html/REPORT §4.1),受控面桩即引擎接缝点 - 遗留:probe前四锚tMono=0(冻结lane件,注入时钟拆分留β) - games/wanglanmei-ref/LOOP-LOG.md:参考件内部预判轮1计划(五要素挂点/插件用法图/mmx资产单13次/红线五条) Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
90 lines
3.6 KiB
HTML
90 lines
3.6 KiB
HTML
<!DOCTYPE html>
|
||
<!--
|
||
host-dev/index.html — host-dev 宿主页(LittleJS 增强发行版 · core-protocol-v0 受控面真实接线)
|
||
owner:T1b-α 集成段
|
||
用法:
|
||
· 集成段在 mini-desktop 用锁参 esbuild 把 host-dev/entry.js 打成 dist/host-bundle.js(iife,globalName=GameRuntimeHostDev);
|
||
· serve 本目录,浏览器开 index.html;
|
||
· ?seed=12345 注入主随机种子;?mode=smoke 挂全九插件做各自最小调用演示;
|
||
· window.__probe() 导出 probe JSONL+verifyChain;window.__hostdev 暴露确定性取证入口(CDP harness 用)。
|
||
α 阶段不接 littlejsengine(裁定见 host.js / REPORT):引擎主循环用浏览器 RAF + bundle.tick 模拟(host-dev 桩语义)。
|
||
-->
|
||
<html lang="zh-CN">
|
||
<head>
|
||
<meta charset="UTF-8" />
|
||
<!-- 固定取证视口:390×844 移动竖屏基准;user-scalable=no 防缩放扰动像素哈希。 -->
|
||
<meta name="viewport" content="width=390, height=844, initial-scale=1, user-scalable=no" />
|
||
<title>game-runtime host-dev (core-protocol-v0)</title>
|
||
<style>
|
||
/* 极简布局:黑底 + 居中画布;不引入任何美术/玩法 UI(host-dev 仅为受控面接线与取证)。 */
|
||
html, body {
|
||
margin: 0;
|
||
padding: 0;
|
||
background: #111;
|
||
color: #ccc;
|
||
font-family: -apple-system, "PingFang SC", "Microsoft YaHei", monospace;
|
||
overflow: hidden;
|
||
}
|
||
#wrap {
|
||
display: flex;
|
||
flex-direction: column;
|
||
align-items: center;
|
||
gap: 8px;
|
||
padding: 8px 0;
|
||
}
|
||
/* 画布:CSS 逻辑尺寸 390×844;物理像素由 host.js 按 DPR2 设置(取证清晰)。 */
|
||
#game {
|
||
width: 390px;
|
||
height: 844px;
|
||
background: #000;
|
||
display: block;
|
||
/* 触摸事件全部交给 JS 处理(pointer 桥接),禁浏览器默认手势。 */
|
||
touch-action: none;
|
||
}
|
||
#status {
|
||
font-size: 12px;
|
||
line-height: 1.4;
|
||
min-height: 16px;
|
||
max-width: 390px;
|
||
word-break: break-all;
|
||
text-align: center;
|
||
}
|
||
</style>
|
||
</head>
|
||
<body>
|
||
<div id="wrap">
|
||
<!-- 状态行:host-dev 可视反馈(取证不依赖它,仅人看)。 -->
|
||
<div id="status">booting host-dev...</div>
|
||
<!-- 受控画布:插件经 getContext2d 拿到的就是它。 -->
|
||
<canvas id="game"></canvas>
|
||
</div>
|
||
|
||
<!-- 发行版打包产物(集成段生成):iife 全局 GameRuntimeHostDev(含 bootHostDev)。 -->
|
||
<script src="./dist/host-bundle.js"></script>
|
||
<script>
|
||
// 引导:拿全局入口 → bootHostDev。失败把错误打到 status + console(冒烟门要看 console 零未捕获错误)。
|
||
(function () {
|
||
'use strict';
|
||
var statusEl = document.getElementById('status');
|
||
var canvas = document.getElementById('game');
|
||
try {
|
||
var G = window.GameRuntimeHostDev;
|
||
if (!G || typeof G.bootHostDev !== 'function') {
|
||
throw new Error('GameRuntimeHostDev.bootHostDev 未找到(host-bundle.js 未正确加载或 globalName 不符)');
|
||
}
|
||
// 启动并把句柄留全局,便于 CDP / 控制台手验。
|
||
window.__host = G.bootHostDev({ canvas: canvas, statusEl: statusEl });
|
||
// 标记「引导完成」供 CDP 探活(区分「脚本没加载」与「加载了但 boot 抛错」)。
|
||
window.__hostBooted = true;
|
||
} catch (e) {
|
||
window.__hostBooted = false;
|
||
window.__hostBootError = String((e && e.message) || e);
|
||
if (statusEl) statusEl.textContent = 'BOOT ERROR: ' + window.__hostBootError;
|
||
// 重新抛出,使 ?mode=smoke 的「console 零未捕获错误」门能逮住引导失败。
|
||
throw e;
|
||
}
|
||
})();
|
||
</script>
|
||
</body>
|
||
</html>
|