From c1d4a2ac3826db5a0eeb543ec4fbd9336cead8c2 Mon Sep 17 00:00:00 2001 From: JavaZeroo <71128095+JavaZeroo@users.noreply.github.com> Date: Thu, 29 Oct 2026 20:50:35 +0800 Subject: [PATCH] research(ui): capture 1049 stage colours with SGR blocks refs #126 #123 A synthetic session draws SGR0/7/41/44/42 space blocks across main, alternate, re-entry and restored phases; terminal-rectangle sampling shows identical colours in all four phases and crop hashes showing the phases did advance. --- docs/EVIDENCE.md | 1 + .../2026-10-29-session-1049-palette/README.md | 41 +++++++++++++++ .../validation.json | 52 +++++++++++++++++++ 3 files changed, 94 insertions(+) create mode 100644 research/ui/results/2026-10-29-session-1049-palette/README.md create mode 100644 research/ui/results/2026-10-29-session-1049-palette/validation.json diff --git a/docs/EVIDENCE.md b/docs/EVIDENCE.md index 7c46df97..10d49a83 100644 --- a/docs/EVIDENCE.md +++ b/docs/EVIDENCE.md @@ -69,6 +69,7 @@ R1 固定总出口的源码为 `ce9b24d`,早期 `2dc8d6d` / `9b16acc` 仍分 |---|---|---| | 行存储封存与结构单一发布(#169 第二片) | [固定结果](../experiments/core/results/2026-10-29-sealed-row-storage/README.md)、[验证身份](../experiments/core/results/2026-10-29-sealed-row-storage/validation.json) | `Screen::lines/history` 私有,只读口 + 23 文件/363 处迁移;Find overlay 改文档 rank;默认 Release 构建 exit 0、核心 8/8、扩展快测 20/20、candidate 源 /W4 编译 0。无新 VT/重排行为;运行中跨重排 Search、Qt 与候选运行由宿主作业复核。 | | Node 纯夹具在 CI 的耗时分布(#144 未闭) | [固定结果](research/ui/results/2026-10-29-node-contract-timing/README.md)、[验证身份](research/ui/results/2026-10-29-node-contract-timing/validation.json) | hosted windows-2025、Node v22.23.4:顺序 60 次 + 20×4 并发共 140 次、0 超时;warm ~63–78ms、冷启动 1.469s、并发最大 0.125s。10s 预算余量充足,两次 10s 失败不能用夹具成本解释;宿主停顿假设未复现,#144/#38 不关闭。 | +| 原版 1049 阶段颜色(屏幕捕获,#126/#123 补充) | [固定结果](research/ui/results/2026-10-29-session-1049-palette/README.md)、[验证身份](research/ui/results/2026-10-29-session-1049-palette/validation.json) | 合成会话 + 原生 SGR 色块 + 屏幕捕获:默认背景 #1C1C1C、反显前景 #E3E3DD、红 #C4265E、蓝 #3465A4、绿 #86B42B;主屏/alt/重进 alt/回主屏四阶段颜色完全一致(裁切 SHA 分列,阶段确有推进)。是屏幕捕获而非 #126 要求的应用内 QImage 采集;不关闭 #126/#123。 | | 原版合成会话的 UIA 可见性(#155 辅助) | [固定记录](research/windterm-synthetic-session-uia.md) | 隔离 VM 上确认:profile 被读取、组名进入主窗口与新建会话对话框,但**会话叶不在 UIA 树**(raw_children=0、无展开/选择模式);参数与累积状态均已排除;未发现命令行开会话入口。菜单与新建会话对话框可枚举/可写,但没有命令行字段。结论:UIA 不能作为驱动原版合成会话的前提。 | | 每屏 margin 的原生 gap:路径结论(#56) | [决策记录](research/conpty-margin-path-decision.md)、[合同与四阶段 oracle](research/conpty-native-margin-path.md)、[fork 构建/运行](https://github.com/JavaZeroo/termforge/pull/98) | 固定上游源码根因(共享 _scrollMargins)、hash 与 20 次同源运行(baseline red→patched 四阶段绿、412/412 adapter、17/17 回归)已固定;结论是“推荐 MIT fork,采纳需用户在 #34 确认”。不改变 ADR-0007 现状、#41 开放状态与产品后端。 | | 保留历史的内存与单次 Search 成本(#164 剩余项) | [固定结果](../experiments/core/results/2026-10-29-history-memory/README.md)、[验证身份](../experiments/core/results/2026-10-29-history-memory/validation.json) | 生产 `Screen`/`TextSearch` 在 H=100/1000/10000、各 3 个新进程样本:每行私有增量收敛 ~5.8–6.9 KB,H=10000 私有提交 ~59 MB;整文档 Search ~54 ms/199 步。不是 r164 fork 对照,也不是性能预算;不关闭 #164。 | diff --git a/research/ui/results/2026-10-29-session-1049-palette/README.md b/research/ui/results/2026-10-29-session-1049-palette/README.md new file mode 100644 index 00000000..cdcdad6d --- /dev/null +++ b/research/ui/results/2026-10-29-session-1049-palette/README.md @@ -0,0 +1,41 @@ +# 原版会话 1049 阶段的默认颜色与调色板(屏幕捕获) + +本片用"合成会话 + 原生注入 + 屏幕捕获"读取原版 2.7.0 在 `1049h` 进入、重复进入与 `1049l` 退出时的**渲染颜色**,作为 [#126](../..#126) 与 [#123](../..#123) 的独立补充证据。它与 #126 合同要求的"应用内 QImage.pixel"是**不同的采集路径**,结论只在本路径与本配置内成立。 + +## 方法 + +- 隔离 Windows 11 VM、固定官方 2.7.0 包(EXE 与 4,047 文件身份同其它记录),合成 profile 只有一个会话 `TF_UI_CMD`; +- 会话命令是一个极简原生程序:启用 `ENABLE_VIRTUAL_TERMINAL_PROCESSING` 后按阶段输出纯色块(`SGR0` 空空格、`SGR7` 反显空格、`SGR41/44/42` 背景空格,各 40 列),阶段之间等待外部触发文件; +- 四个阶段:主屏 → `1049h` 备用屏 → `1049l` 后再次 `1049h` → `1049l` 回主屏; +- 宿主在每阶段稳定时通过 QEMU agent 抓取 1024×768 截图;终端内容矩形由 UIA 取得(本次为 [255,196,497,236]),逐行取该矩形内的主导颜色。 + +## 结果 + +| 色块 | 含义 | 像素颜色 | +|---|---|---| +| `SGR0` 空格 | 默认背景 | **#1C1C1C** | +| `SGR7` 反显空格 | 默认前景(填成背景) | **#E3E3DD** | +| `SGR41` | 调色板红 | **#C4265E** | +| `SGR44` | 调色板蓝 | **#3465A4** | +| `SGR42` | 调色板绿 | **#86B42B** | + +四个阶段(主屏 / alt / 重进 alt / 回主屏)的五行颜色**完全一致**。 + +阶段确实发生了推进(终端矩形裁切图的 SHA-256 前 16 位): + +| 阶段 | 裁切 SHA-16 | +|---|---| +| 主屏 | `e7dd9042d1ecbb16` | +| alt | `f38a0bcbfe1a2f5e` | +| 重进 alt | `f38a0bcbfe1a2f5e`(与首次 alt 相同) | +| 回主屏 | `d518513bb5fc5040`(内容不同,颜色相同) | + +## 解释与边界 + +- 在这套固定配置里,`1049` 的进入/重复进入/退出**不改变**默认前景/背景,也不改变所测的三个调色板颜色;备用屏重进渲染与首次进入一致。 +- 采集是**操作系统屏幕捕获**,不是应用内 `QImage::pixel`;不覆盖 ClearType 文本、完整样式、非颜色属性、字体/DPI 差异、其他调色板项或 SGR 变更后的 alt 状态。 +- 未测 #126 合同要求的 `isAltScreen/isMainScreen` 调用与 QPainter 颜色;本片不关闭 #126/#123/#27,也不构成原版行为等价声明。 + +## 复现要点 + +合成会话命令与四阶段触发协议、终端矩形获取与逐行颜色统计脚本见本目录说明;触发文件、截图与私有路径留在本地,仅发布本摘要与标量结果。 diff --git a/research/ui/results/2026-10-29-session-1049-palette/validation.json b/research/ui/results/2026-10-29-session-1049-palette/validation.json new file mode 100644 index 00000000..bab70bde --- /dev/null +++ b/research/ui/results/2026-10-29-session-1049-palette/validation.json @@ -0,0 +1,52 @@ +{ + "schema": "termforge-ui-1049-palette-capture-v1", + "issues": [ + 126, + 123 + ], + "method": "synthetic session + native SGR blocks + QEMU-agent screenshots + UIA terminal rect + per-row dominant color", + "environment": { + "platform": "Windows 11 VM (isolated)", + "display": "1024x768", + "dpi": "fixed 96 (guest setting)" + }, + "terminal_rect": [ + 255, + 196, + 497, + 236 + ], + "colors": { + "default_background": "1C1C1C", + "default_foreground_via_reverse": "E3E3DD", + "palette_red_sgr41": "C4265E", + "palette_blue_sgr44": "3465A4", + "palette_green_sgr42": "86B42B" + }, + "phases": { + "main": { + "crop_sha16": "e7dd9042d1ecbb16", + "colors_identical": true + }, + "alternate": { + "crop_sha16": "f38a0bcbfe1a2f5e", + "colors_identical": true + }, + "alternate_reentry": { + "crop_sha16": "f38a0bcbfe1a2f5e", + "colors_identical": true + }, + "restored_main": { + "crop_sha16": "d518513bb5fc5040", + "colors_identical": true + } + }, + "limitations": [ + "OS screen capture, not the application QImage grab required by #126", + "ClearType text rendering not studied; only space-filled SGR blocks", + "single VM, single fixed DPI, one package identity", + "no SGR-changed alternate state, no non-colour attributes, no font study", + "does not close #126/#123/#27" + ], + "performance_claim": false +}