# C# 文档平铺与输入呈现检查记录(2026-10-15) 本记录保存本轮实现、历史失败和最终复测。最新文档定向原生检查及两次追加的真实编辑、保存、预览循环通过;240 Hz、全部首次显示低于 1 秒及 GPU/CUDA 等要求仍未完成,尚未满足完整交付标准。 ## 已实现 - Markdown 正文平铺到预览区域,移除正文外层卡片的边框、圆角、阴影和渐变底;保留网站原有正文、代码块和字体样式。 - 使用网站原始 `docs-reader.js` 及其阅读进度公式,顶部固定显示 3 CSS px 的紫色至青色渐变条。实际视口滚动改变后向页面派发 `scroll`,由原脚本更新进度;预览和分屏按各自视口处理。短文及空文检查覆盖有限值和原公式行为。 - 原始 9 份网站样式及原始脚本保持原字节;额外加载 1 份明确的桌面宿主样式 `Host/DesktopDocument.css` 实现平铺要求,不将这项有意差异称为网站整页像素一致。 - 后台页面收到无可见变化的鼠标移动时复用绘制快照;只更新必要的输入元数据,不重复构建整页绘制列表或读取完整编辑模型。真实页面、模型、视口变化仍会更新快照。 - LAPIC 调度中断及无 MSI 时的 xHCI 后备轮询间隔调整为 1 ms,并修正调度器末尾仍按单次中断是否达到 10 ms 判断强制轮转的问题;保留原调度计账,已用原生加载期间的快捷键响应复测。 - 在原生输入到桌面的边界统一滚轮方向:底层正值表示向下,桌面接口正值表示向上。保留桌面和 DOM 的既有方向契约,真实滚轮事件推动预览滚动。 - 原生浏览器及其克隆页面使用单个外部资源 2,500,000 字符的准入上限,在大型依赖进入 AST 解析前拒绝加载。当前 Monaco Core 的 2,293,601 字符仍在范围内;3,568,548 字符的 Mermaid 会触发原网站的组件失败提示及源码回退。此项是针对该 OOM 路径的功能降级保护,没有修复通用堆碎片或连续分配器,也没有实现 Mermaid/SVG 对等能力。 ## 已有检查与保留的失败 包含新增准入检查的全量宿主测试 **1045 项通过**:`build/CSharp/HostTests-1792017665044/Result.json`。准入定向检查另存于 `build/CSharp/NativeScriptAdmissionFinal-20261015/NativeScriptAdmission.trx`,覆盖克隆及可信文档不绕过上限、拒绝前无 AST 准备、原站错误回退、后续脚本和滚动活性,以及真实 Monaco 长度。宿主测试本身不执行客体内核。 新版原生 Markdown 检查中,默认预览的真实帧缓冲像素已确认正文平铺、标题绘制和顶部渐变条。200% 缩放下进度条为 6 个物理像素高,对应 3 CSS px;正文与进度条使用实际预览视口。证据: - `build/CSharpBoot/FlatDocumentReader/Proof-1792015793390551900/DesktopDocuments.json` - `build/CSharpBoot/FlatDocumentReader/Proof-1792015793390551900/DesktopDocuments-DefaultPreview.png` - `build/CSharpBoot/FlatDocumentReader/Proof-1792015793390551900/Serial.log` 同一早期检查在加载 Monaco 时失败:Win+D 从输入到确认耗时 **1.985 秒**,确认发生在核心脚本结束之后,没有通过“加载期间小于 1 秒且真实重叠”的要求。日志显示页面工作线程和 UI 线程已分离;故障定位为上述 1 ms 中断与 10 ms 轮转门槛不匹配,原始失败记录保留。 调度及滚轮方向修复后,一次完整界面定向流程通过:两次 Win+D 的隐藏、恢复各耗时 **109 ms**,均在 Monaco 核心脚本执行期间确认;默认预览、分屏修改、保存、重开及长文实际滚轮操作完成,顶部进度条实际填充增加 **260 个物理像素**。记录:`build/CSharpBoot/FlatReaderWheelFinal/Proof-1792016805298082800/DesktopDocuments.json`。该次完成后 CLI 打印中文曾发生 Unicode 编码错误,输出编码已修复;不能因此忽略后续重复测试结果。 重复检查曾出现真实 OOM:`build/CSharpBoot/FlatReaderAccepted/Proof-1792016935723732500/DesktopDocuments.json` 及同目录 `Serial.log` 保留失败。自动加载 Mermaid 时申请 872,496 字节连续内存失败;当时仍有约 75 MiB 空闲,但最大连续空闲块仅 536 KiB。该失败不能被其他通过记录覆盖,也不能因新增准入保护而称为系统 OOM 已根治。 新增 2.5M 准入后,最新原生文档定向流程及 **2 次追加编辑、保存、预览循环通过**,CLI 正常退出:`build/CSharpBoot/FlatReaderBudgetAccepted/Proof-1792017316100492500/Result.json` 及同目录 `DesktopDocuments.json`。两次 Win+D 分别为 **109/110 ms**,均与实际 Monaco 核心脚本执行重叠;实际发送 6 步向下滚轮后正文上移,原始 PNG 中顶部进度条填充增长 **57 个物理像素**。此数为本轮结果,前述 +260 像素属于另一轮历史检查。Mermaid 在解析前被拒绝,原站组件失败提示及源码可见,后续操作继续完成;不宣称图表渲染成功。 同镜像无串口启动的连续两帧桌面检查通过:`build/CSharpBoot/NoSerial-1792017679829200200/Result.json`。最新文档流程的 10 个 CSS 首帧样本为 **0.361–1.663 秒**,其中 4 个超过 1 秒;样本来自 `build/CSharpBoot/FlatReaderBudgetAccepted/Proof-1792017316100492500/Serial.log`,增强 JavaScript 完成时间另计,未通过“全部完整预览首次显示低于 1 秒”的要求。 以下为**修复调度轮转前**的鼠标实测。保守口径采用宿主和客体耗时中较大者,并只计入输入序列更新且位置发生变化的实际完成呈现,不以重复帧充数。 | 输入路径 | 保守有效光标呈现频率 | 240 Hz 目标 | 原始证据 | | --- | ---: | --- | --- | | USB | 123.184 Hz | 失败 | `build/CSharpBoot/PointerReader/Proof-1792015745159249400/PointerCadence/Review/Reanalysis.json` | | PS/2 | 219.568 Hz | 失败 | `build/CSharpBoot/PointerReaderPs2/Proof-1792015862832341600/PointerCadence/Result.json` | USB 复核文件另存,不修改其原始 `PointerCadence/Result.json`。两组记录均保留原生输入时间、已完成呈现和失败状态;引导成功不代表呈现频率验收成功。 最终默认 WHPX 路径复测仍未达到 240 Hz: | 输入路径 | 保守有效光标呈现频率 | 240 Hz 目标 | 原始证据 | | --- | ---: | --- | --- | | USB | 123.5889 Hz | 失败 | `build/CSharpBoot/FlatReaderFinalUsbCadence/Proof-1792017525905501900/PointerCadence/Result.json` | | PS/2 | 224.2970 Hz | 失败 | `build/CSharpBoot/FlatReaderFinalPs2Cadence/Proof-1792017600100179200/PointerCadence/Result.json` | ## 证据边界 EDID 宣告 240 Hz、帧率控制目标为 240 Hz、1 ms 中断以及宿主每秒发送约 1000 次输入请求,分别只是显示能力、目标和输入条件。它们不能替代客体实际完成帧的测量,也不能证明实体显示器扫描输出或 VSync 已匹配。截图只证明相应画面,不能单独证明帧率。 当前没有真正的 GPU/CUDA 渲染加速,也没有实体机 240 Hz 验收。浏览器默认地址为 Bing,但原生 HTTPS/TLS 尚不可用,Bing 主页及其完整 CSS/JS 对比尚未实现;连接失败必须明确显示,不能用缓存或替代页面冒充成功。系统仍是 RAM-only 实验版本,文件只保存在内存,关机不保留。 可见窗口检查仍有启动路径限制:GTK 加默认 WHPX 在固件阶段等待 90 秒超时,记录为 `build/CSharp/Interactive-1792017700158/Launch.json`。GTK 加 WHPX 的 `kernel-irqchip=off` 兼容试验确实进入桌面,完成默认预览、编辑、分屏、保存、重开、长文滚轮和 1 次追加循环,但准备第 2 次循环时超时,整体 `Result=false`、`QemuExit=1`;记录为 `build/CSharpBoot/FlatReaderGtkCompatibility/Proof-1792018021101155600/Result.json`。它不是完整验收通过,也不能复用默认 WHPX 路径的计时数据。已回退启动默认 WHPX 加 SDL 的新镜像窗口,原生桌面就绪标记、存活进程及非零 Windows 窗口句柄均已确认:`build/CSharp/Interactive-1792018349022/Launch.json`。此窗口使用 3840×2160 客体帧缓冲;`ConsoleRefreshSummary.json` 实际观测到 10/30 ms 的宿主轮询间隔公告,不能将它们称作显示器帧率,也没有满足 240 Hz。旧的用户测试窗口保持原状。 同一 GTK/用户态 APIC 兼容配置的独立指针测试在启动线程合约检查即失败,尚未进入指针捕获:`build/CSharpBoot/FlatReaderGtkPointerCompatibility/Proof-1792018414707903400/Result.json`(`Passed=false`、`QemuExitCode=1`,镜像未改变)。日志中线程检查为 `False/Steps=0/Collections=0`;25 ms 睡眠观测为 `65,234,441` ticks、频率 `48,710,000`,与另一启动的校准频率也不一致。保留失败,不产生该配置的帧率结论;该兼容参数维持显式诊断选项,默认配置没有改变。 最后复核时,前述 SDL 进程 48068 已退出,保存的串口没有记录 panic,现有证据不足以确定退出原因。已重新打开同一镜像并核对原生就绪标记、存活进程及可见窗口句柄,新会话为 `build/CSharp/Interactive-1792018692274/Launch.json`(PID 63436);时间点观察另存于同目录 `ProcessObservation.json`。这些是启动及窗口观察,不是长期稳定性验收。 ## 实际截图 - [平铺预览](screenshots/CSharpFlatMarkdown20261015.png) - [滚动前的阅读进度](screenshots/CSharpReadingProgressBefore20261015.png) - [滚动后的阅读进度](screenshots/CSharpReadingProgressAfter20261015.png) - [鼠标测量后的客体画面](screenshots/CSharpPointerCadence20261015.png) 截图直接复制自原生 QEMU 帧缓冲,未修改像素;截图本身不证明刷新率。 ## 专用启动 U 盘 已按项目安全流程写入并回读核验完整 128 MiB 镜像和实际盘尾备份 GPT,句柄关闭,U 盘保持离线。记录:`build/usb-media/XFEstudio-CSharp-FlatReader-1792017950324/Completion.json`。源镜像 SHA256 为 `d9b209c5dca849a9396ca4997b6cf08e5226b041697b2f5ac0e27fd8681d2223`;按实际容量调整 GPT 后的完整镜像 SHA256 为 `2e5659f45abc02445bda3fe4c8da2caa5879e9f7cedfbe20a26a8667093884bf`。这是已验证文档流程的 RAM-only 实验镜像,不是完整发行版或实体输入、显示刷新率验收。