# Bing 灰页与完整初始化排查(2026-10-16) 本轮针对用户报告的“QEMU 与实体启动后均只有灰色主页和几个按钮”,完成 **0.3.0-dev.4-bing-content.1** 的 Desktop 单系统实验镜像。最终 QEMU 验收已通过主页照片、热点、两次实际搜索、PNG 图标和滚动,以及 Monaco 实际编辑、文档、终端和两次存储冷启动。本轮遵从“不需要写入”,未打开或写入实体磁盘;实体启动、完整 Chromium 兼容仍未验收。结构化记录见 [验证 JSON](validation-results/BingContent20261016.json)。 ## 最终产物与结果 | 项目 | 结果 | | --- | --- | | 宿主 | 17 组、1594 项通过;浏览器 543 项、私有 Jint 40 项 | | 源码绑定 | 宿主 879 个、来宾 522 个,合并 910 个输入;工作区及 Git 暂存字节全部一致 | | 原生验收 | `build/IndependentKernel/Proof-1792106960660102600/Result.json`;源码冻结、原镜像未变、QEMU 正常退出 | | 存储 | `UsbStorage-1792106963461882100/Result.json`;两次真实冷启动、五个测试卷读写及独立回读 | | 离线保护检查 | Bing 20 项、单系统策略 11 项、交付分派保护 5 项通过;这些不计作来宾验收 | | 包校验 | ZIP 全回读、1577 个解压文件哈希、重定位及 Windows PowerShell 5.1.26100.9711 启动计划通过 | [独立 Desktop 启动包](../dist/XFESystem-Desktop-Independent-USB-0.3.0-dev.4-bing-content.1-1792107552800-e0d0cd5e.zip);已在主目录 `dist` 保留同字节 ZIP 及解压目录,可运行其中的 `Start.ps1`。包名中的 USB 表示持久化镜像格式,本轮没有写入实体 U 盘。[主页实际画面](../dist/XFESystem-Desktop-Independent-USB-0.3.0-dev.4-bing-content.1-1792107552800-e0d0cd5e/Validation/Guest/Browser-Bing-Native-1.png)、[首次搜索](../dist/XFESystem-Desktop-Independent-USB-0.3.0-dev.4-bing-content.1-1792107552800-e0d0cd5e/Validation/Guest/Browser-Bing-Search-Native.png)、[连续第二次搜索](../dist/XFESystem-Desktop-Independent-USB-0.3.0-dev.4-bing-content.1-1792107552800-e0d0cd5e/Validation/Guest/Browser-Bing-SecondSearch-Native.png)均直接来自最终来宾 framebuffer。 镜像 SHA256:`860459d96ea3c91018c4ef14defcda0081a21d9ef7a009ad05b1d08e0f797ac6`;内核:`31cffbcc84ff94e04413fbfd085fedd98cf298d06f2c95db2b6c2f573444b5bc`;ZIP:`b9844f7af42fe403f5ad0a4c00e938b46ac07b840cce55f5c56abb759b1bf011`。 ## 为什么 CPU 充足仍然加载不全 问题首先是浏览器接口和绘制链不完整。此前 Bing 的 CSP 被解释成全面禁用脚本,图片没有完整的二进制传输、解码与绘制链,动态脚本、DOM 集合、表单和若干 Web API 也有兼容问题。增加 CPU 无法补出缺少的接口,HTTP 200、标题或少量按钮也不能证明页面加载完成。 另一个问题是执行时限。QEMU TCG 下,一批实际搜索初始化脚本完整执行约需 3.82 秒;旧的固定 3 秒时限会在它更新图片和控件前终止执行。修复图像解码后仍可复现这种“文字已出现、图标只有占位”的状态。默认时限调整为 10 秒,保留 500 万语句、256,000,000 字节脚本分配、递归、DOM 与资源预算。这项调整提供执行余量,不能作为性能提升的证据。 连续第二次查询还暴露了实时 DOM 集合的分配热点。失败的宿主实际页面采样中,递归 `Descendants` 迭代器与 `ChildNodes` 枚举器分别约分配 158.86 MB 和 74.69 MB;反复读取集合长度和索引会反复遍历,最终触发 256 MB 脚本分配上限。这些是采样归属值,不能当作精确堆存活量。现在沿现有节点的父子与兄弟指针遍历,静态 `NodeList` 固定成员但按访问创建包装对象;保留实时集合的可见更新。500 个元素的同一分配回归中,原遍历在 128 MB 预算内失败,新遍历通过;真实两次查询也不再触发该错误。不同网络捕获的内容会变化,不能把两次捕获用作受控加载时间对照。Jint 的限制使用当前线程累计分配,因此包含脚本调用的宿主 DOM 代码。[Jint 内存限制实现](https://raw.githubusercontent.com/sebastienros/jint/v4.11.0/Jint/Constraints/MemoryLimitConstraint.cs)、[AngleSharp 1.7.1 集合实现](https://raw.githubusercontent.com/AngleSharp/AngleSharp/v1.7.1/src/AngleSharp/Dom/Internal/HtmlCollection.cs) Windows 上的 Edge/Chrome 使用 Blink 与 V8。V8 包含编译执行路径;本系统使用 Jint 解释 JavaScript。NativeAOT 编译的是 C# 解释器,无法使其中运行的 JavaScript 自动成为 V8 式机器码。当前内核实际执行一个 BSP,采用软件绘制。Monaco 已有的独立性能测量及正则、CSS 主题变量修复保留,见 [MonacoStutter20261016.md](MonacoStutter20261016.md)。参考:[V8 Sparkplug](https://v8.dev/blog/sparkplug)、[Blink 样式失效处理](https://chromium.googlesource.com/chromium/src/+/refs/heads/main/third_party/blink/renderer/core/css/style_engine.cc)。没有移植或复制 Chromium C++ 源码。 ## 本轮修复 - 按 nonce、`strict-dynamic`、多条策略共同约束处理已支持的 CSP;动态创建的经典脚本经过同一检查,片段插入脚本保持惰性,未知策略保守拒绝。没有放开字符串编译或直接关闭 CSP。[CSP 规范](https://www.w3.org/TR/CSP3/) - 增加实际二进制图片传输、页面内缓存、像素预算与绘制,支持 JPEG、WebP、GIF、PNG,以及受限 SVG。PNG 使用逐行、纯托管 DEFLATE 解码,避免独立内核加载宿主 zlib 失败;校验块 CRC、尺寸、流结束及解压上限,支持调色板、透明度、位深、滤波和 Adam7。[PNG 规范](https://www.w3.org/TR/png-3/) - 修复 DOM 实时集合的索引与属性描述符,使页面水合复用原 DOM;补上字节字符串 base64、真实随机源、图片解码 Promise、会话 Cookie、同源异步 GET fetch/XHR、真实 GET 表单提交等接口。网络和解码工作离开 JavaScript 回调,继续执行 TLS、同源、重定向和资源限制。 - `NodeList`、`HTMLCollection`、`CSSRuleList` 使用实际接口、索引、迭代和成员语义。导航支持 `location.href`、`assign`、`replace` 等实际请求。fetch/XHR 的合法请求头真实传入宿主与原生传输,保留字段/字符限制,忽略受控请求头,拒绝控制字符,并在跨源重定向时停止转发脚本提供的字段。只支持 GET 和同源脚本请求,不宣称已实现 CORS 或 POST。 - 增加 HTML `innerText` 的实际节点更新及换行处理、超链接 URL 组成部分、可包装的 DOM 方法。`form.submit` 原先只读,导致 Bing 后续初始化失败;现可由页面包装并调用原表单操作。 - 增加受限的自主自定义元素注册、原位升级、构造、属性与连接/断开回调,以及真实 AbortSignal 事件、监听器移除和排队请求取消。自定义内建元素、Shadow DOM、ElementInternals、作用域注册表等仍未支持,没有用空实现宣称完整支持。[HTML 自定义元素规范](https://html.spec.whatwg.org/multipage/custom-elements.html)、[DOM 取消信号规范](https://dom.spec.whatwg.org/#interface-abortcontroller) - CSS 与 `matchMedia` 共用有界媒体查询求值,修复多个 `and` 条件的解析,按实际窗口大小更新查询并发出变化事件。旧版 `matchMedia` 固定返回假,会影响首页组件显示。 - 增加同一容器中的浮动排版与定位元素 `clip: rect(...)`;修复 SVG 百分比/固有尺寸、图片自然高度、行内块换行、行向 flex 换行、最近层叠上下文及零缩放元素。与相同 UA 的 Edge 对照中,搜索页顶部由错误的 199 像素恢复为 149 像素,辅助功能链接也不再直接露出。[CSS 浮动规则](https://www.w3.org/TR/CSS22/visuren.html#floats) - 原生画面复核发现,搜索按钮的文字因缺少 `text-indent` 而叠在放大镜上。补上首行缩进、负缩进与控件裁剪,并验证 em 长度继承和百分比按接收块宽度计算。按钮原始值和点击区域继续保留,未对 Bing 标签做专门隐藏。 - 属性预算使用经过全量验证后的字符增量,保留入口失效、结构/文本全量验证和超额回滚;跟踪属性、离线节点和相同 CSS 声明不再引起无用排版,选择器相关属性与 `attr()` 生成内容仍会失效。 - 内部导航变化会刷新地址栏的实际显示区域。此前地址模型已更新,场景缓存却仍显示首页网址;回归检查先复现遗漏的提交区域,再验证修复。 图像库仍包含 ImageSharp 的原始分许可文本,不能称其为 MIT。新增 SharpZipLib 1.4.2 的完整 MIT 文本按 NuGet 所指向的提交保存,未增加平台 zlib 导入。所有版权文件通过项目收集器随包绑定。 ## 如何判断 Bing 真正可用 验收版本 6 使用来宾自己的 e1000/NAT、TLS 与随机源,没有宿主 HTTP 代理、页面脚本注入或宿主浏览器画面替代。通过实际 QMP 键鼠打开并最大化产品浏览器,要求原始脚本执行结束且没有预算中断,再核对: 1. 真正的 HTTPS HTML、不可变 DOM 快照、原生呈现计数和截图相互绑定。 2. 实际主页照片的解码颜色与 framebuffer 采样相符,导航和六条真实热点链接存在,热点文字实际绘出。 3. 点击搜索框,输入 `Microsoft .NET` 并按 Enter;新的原生 HTTPS 响应和实际查询值、可见微软结果链接一致。 4. 搜索页小尺寸 PNG 的解码像素与实际画面相符,不能只解码一张透明 sprite 就通过。 5. 实际滚轮输入产生新的滚动快照和可见结果文字;后续快照仍检查初始化错误,避免早期画面通过后漏掉延迟超时。 6. 实际滚回顶部、选中查询框、输入第二次查询 `Microsoft CSharp` 并回车;要求新 HTTPS 响应、不同页面正文、更新后的输入值、微软 C# 结果链接和新的实际截图,防止只通过从首页进入结果页的第一步。 PowerShell 启动器和打包器同步检查这些记录及哈希。离线负向控制包含灰页、无照片/热点、无搜索、无 PNG、未画出的图标、未执行完脚本、延迟超时、截图/日志篡改和路径逃逸。这些小型 fixture 是验证器单元测试,不是来宾验收。 官方 Edge 参考页同样出现过 `_w is not defined`;仅将这一项已核对的上游错误单独识别,其他 JavaScript 初始化错误继续使验收失败。匿名 Cookie、授权头的值已从新原生诊断记录中脱敏,实际网络和会话行为保持不变。原始网站捕获仅保存在忽略目录,不提交带账户信息的官方截图或会话数据。 ## 已保留的失败与边界 早期仅检查 TLS 和文字的旧验收不能证明图片、搜索和后续初始化正常。版本 2 曾通过,但后续串口暴露 PNG 原生压缩依赖和脚本超时;版本 3 的新检查又实际拒绝了延迟超时。最大化定向诊断进一步发现超链接组成部分、只读表单方法和自定义元素接口缺失。版本 5 的完整原生验收通过后,进一步的宿主第二次查询又捕获集合接口、请求头、导航接口与实时集合遍历分配问题,因此版本 5 不用于最终新源码的交付。所有失败和中间构建均保留,不能用后来的成功改写其结果。 宿主检查中还保留了一次 HTTP fixture 导入位置错误、一次未修改 Core 光标代码时的暖分配检查波动、一次恢复依赖锁文件导致的源码冻结拒绝,以及 `innerText` 修复后旧 Monaco 空闲检查错误要求大量测宽重试回收的记录。后者改为检查实际稳定的存活句柄数量,另有独立分离节点回收检查;编辑器模型、定时器与内存检查继续保留。 新增 500 元素遍历回归最初使用 64 MB 的测试预算,正常节点包装也超过该值;保留失败记录后,改用同一 128 MB 预算分别验证旧/新遍历,旧版失败、新版通过。产品默认 256 MB 未提高。首次版本 6 完整验收虽已通过,随后画面检查发现按钮文字重叠,最终产物改用补齐文字缩进后重新构建和验收的内核。 文字缩进后的首轮宿主回归中,一项 Monaco 语言切换用例在打开阶段出现空会话。原失败保存在 `build/CSharp/HostTests-1792106858160/Failure.json` 与 Desktop TRX;只增加了失败时的原始状态输出,没有改断言条件、产品行为或预算。四个对应定向用例及后续完整 17 组、1594 项重跑通过。该次空会话暂未复现,根因未确定,不能据此保证长期稳定。 这仍是有界 CSS/DOM/JavaScript 浏览器,不等同于完整 Chromium。搜索结果 URL 换行、旋转边框图标等仍有排版差异;复杂浮动、Grid、完整层叠/字体/排版、跨源 fetch、POST、模块脚本、服务工作线程等并未因此全部实现。`AllUserRequirementsMet=false`、`FullCssParityVerified=false`、`FullReleaseQualified=false` 保留。来宾成功不代表实体网络、实体启动、GPU、SMP 或长期稳定性已经验收。本轮遵从“不需要写入”,未打开或写入实体磁盘。