diff --git a/docs/EVIDENCE.md b/docs/EVIDENCE.md index 10d49a83..7866e4f0 100644 --- a/docs/EVIDENCE.md +++ b/docs/EVIDENCE.md @@ -69,7 +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。 | +| 原版 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 分列,阶段确有推进);另有两组属性语义:进入前设 31;44 并保持时 M/A/R 三阶段同为 #3465A4/#C4265E;备用屏内改 32;45 再退出时 M2 回到默认(#1C1C1C/#E3E3DD),即 1049h 保存、1049l 恢复进入时刻属性。是屏幕捕获而非 #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。 | @@ -168,31 +168,4 @@ python -m unittest experiments.shell.test_workflow_sessions -v | 证据 | 来源/复现入口 | 可以支持的判断 | |---|---|---| | 固定功能和发行目标 | [固定 README](https://github.com/kingToolbox/WindTerm/blob/a8336c1d1e3dd1a981500dae8ef9eb42066de95f/README.md)、[2.7.0 release](https://github.com/kingToolbox/WindTerm/releases/tag/2.7.0)、[平台范围台账](../research/windterm-2.7.0-platform-scope.md)、[发行包校验流程](../benchmarks/tools/WINDTERM-LAB.md) | 官方功能声明与包身份;#23 已用固定源码、release API 和资产元数据固定四类发行平台/架构及声明下限,保留安装说明差异和未知系统。声明仍需运行时验收,不跟随未来 master 自动扩大范围 | -| 已公开/未公开边界 | [源码与发行物调查](research/windterm-audit.md) | 固定公开源码主要是组件/修改,无法据此构建完整 WindTerm;静态依赖与符号不证明运行时实现或授权 | -| 接收路径静态线索 | [接收路径报告](research/windterm-headless-2026-10-22.md)、[headless 工具入口](../research/README.md) | 指定路径 64 KiB ReadFile 请求上限、空→非空通知条件;不能推出完整线程/背压策略或性能收益 | -| 工作区结构/几何 | [首轮 UI 报告](research/windterm-ui-2026-10-23.md)、[主标签/字体报告](research/windterm-ui-typography-2026-10-23.md)、[探针与准备守卫](../research/ui/README.md) | 发行资源、定向二进制和隔离运行时交叉核对;默认缩放两次及 Qt 1.5 倍一次。旧首启自动导入和错误状态样本已明确排除,不能混作最终纯合成证据 | -| 可公开的 UI 精简结果 | [默认样本 1](research/ui-typography/normal-01.json)、[默认样本 2](research/ui-typography/normal-02.json)、[Qt 1.5 倍样本](research/ui-typography/scale-150.json) | 白名单矩形、字体、DPI 和身份;不是完整像素、逐字形 fallback、真实跨屏或性能证明 | -| 基础文字交互参考合同 | [行为合同](research/windterm-r1-text-contract.md)、[hosted 事实摘要](research/r1-text/hosted-39960732305.json)、[Actions 39960732305](https://github.com/JavaZeroo/termforge/actions/runs/39960732305) | `c386494` 的 text/menu-wrap 各两轮及 repeat 门槛通过:历史/选择/查找、键盘及实际 Select All/Find/Copy/Paste 菜单、精确 CF 软折行/CRLF/尾空白与严格粘贴基线均有证据;四轮 Job 清空。满足 #11 限定参考合同,不代表产品功能等价或性能验收 | -| 五阶段 raw H/space 输出参考(#129) | [固定采集合同](research/windterm-raster-raw-capture-plan.md)、[执行与独立审计](research/windterm-raster-raw-reference-2026-10-29.md)、[脱敏结果](../research/ui/results/2026-10-29-raster-raw-reference/validation.json) | `f6d9a97` 的唯一授权执行取得 5 grab、17 组完整 H/space;phase2 双 H 的 16/16 墨迹并列保留 null,未中断采集。phase1/3 原样 H 唯一匹配同帧 SGR0,phase4 匹配同帧 SGR31;44 的完整有序签名;仅为固定样本输出,不证明内部 pen、完整 grid、presented、local-shell 或性能。旧 #126 0 grab 和旧 #129 3 grab partial 均独立保留,父项未关闭。 | - -主对照为官方 Windows x64 2.7.0:ZIP SHA-256 `b05c3c7371340ff1302967247ffcd3a3ba27b237f72010e9157086143c453e50`,EXE SHA-256 `7b10531dccc7cd614ae559f36f1ef518e0c96335637431b4646354823b2804d0`。最初本机安装的 EXE 身份不同;其历史静态报告不得冒充官方包结果。其他目标平台仍需各自固定包身份。 - -公开仓库只保留原创探针、事实描述和审核过的摘要。原始反编译、复制发行物、个人配置、原始插桩结果保留在 ignored `local/`;证据 ID 是本地索引,不是可访问的公共附件。规则见[来源与隐私](PROVENANCE.md)。 - -## 性能证据与尚未完成的预算 - -| 工作 | 结果/复现入口 | 当前结论边界 | -|---|---|---| -| 官方 WindTerm 生产端烟测 | [摘要](../benchmarks/results/2026-10-21-windterm-smoke/summary.json)、[基准规范](../benchmarks/PROTOCOL.md) | 7,732 字节写出、人工见到结束标记;没有全内容正确性、消费/呈现时间和正式重复批次,不是 C0 性能基线 | -| 接收批量与通知合并 | [实验协议](../experiments/receive/README.md)、[120 次实验报告](research/receive-experiment-2026-10-22.md) | 原创固定输入、字节顺序、队列边界与背压;机制实验不等于 WindTerm 路径或端到端收益 | -| 连续 CPU 区间与校准 | [计量协议和命令](../experiments/measure/README.md)、[批次 A](../experiments/measure/results/2026-10-23-v2-a/manifest.json)、[批次 B](../experiments/measure/results/2026-10-23-v2-b/manifest.json) | 48 个核心样本/4 次校准;尚缺解码/状态/历史独立归因、Unicode/大历史、无插桩对照和更严格环境控制 | -| 自主 C++ recovery 核心双构建准备 | [固定协议](../experiments/measure/RECOVERY-PREPARE.md)、[实际结果](../experiments/measure/results/2026-10-29-recovery-core-prepare/README.md)、[脱敏身份](../experiments/measure/results/2026-10-29-recovery-core-prepare/validation.json) | 同源 recovery 包装/无本工具包装的实际对象和命令核验;一次38进程含24短正确性/2identity/12拒绝,相关14项回归,25源/历史与18构建产物前后核对。旧strict/v2/calibration分列,不是Qt/ConPTY热路径、正式性能批次或数值预算 | -| 输入到状态/提交 | [shell 端点定义](../experiments/shell/README.md)、[呈现端点定义](../experiments/presentation/README.md) | 现有脚本中断/后续命令时段与绘制提交有明确名称;不能当单键延迟或真实呈现,带完整画面检查的样本不是低扰动性能样本 | - -| 范围 | 结果与复现入口 | 可以支持的结论与限制 | -|---|---|---| -| 初始候选 project feed/投影成本 | [计量说明](../experiments/measure/README.md)、[2026-10-25 project 原始批次](../experiments/measure/results/2026-10-25-core-compare/) | 旧候选的 1 秒交错 project 样本,分离 feed/观察成本;分配范围与无插桩缺口保留,不作当前 .4 或 WindTerm 性能结论。 | -| 初始候选 interactive feed/投影成本 | [2026-10-25 interactive 原始批次](../experiments/measure/results/2026-10-25-core-interactive/) | 旧候选的固定 ASCII 编辑回放与交错样本;不是键盘到呈现延迟,也不能用于验收新字素实现的预算。 | - -| 当前成本调查 | 结果与合同 | 结论边界 | -|---|---|---| \ No newline at end of file +| 已公开/未公开边界 | [源码与发行物调查](research/windterm-audit.md) | 固定公开源码主要是组件/修改,无法据此构建完整 WindTerm;静态依赖与符号不证明运行时实现或授权 | \ No newline at end of file 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 index cdcdad6d..ff378539 100644 --- a/research/ui/results/2026-10-29-session-1049-palette/README.md +++ b/research/ui/results/2026-10-29-session-1049-palette/README.md @@ -30,6 +30,48 @@ | 重进 alt | `f38a0bcbfe1a2f5e`(与首次 alt 相同) | | 回主屏 | `d518513bb5fc5040`(内容不同,颜色相同) | + +## 附加观察:SGR 属性在 1049 切换前后的保持性 + +在默认色块之外,另做一组"切换前显式设置 SGR 并保持"的阶段测试,回答"进入/退出备用屏后当前颜色是什么": + +- 会话内原生命令先输出 `SGR 31;44`(红字蓝底),并在切换前**不再 reset**; +- 阶段 M:主屏,重设 31;44 后画"当前背景空格 + 反显空格";`1049h` 后阶段 A:备用屏同法;`1049l` 后阶段 R:回主屏同法; +- 每阶段外接触发文件同步,逐阶段截图,取终端矩形 [255,196,497,236] 内逐行主导色。 + +| 阶段 | 当前背景(空格行) | 当前前景(反显行) | 裁切 SHA-16 | +|---|---|---|---| +| M 主屏(31;44) | #3465A4 | #C4265E | `675e5d7b24dbdcf9` | +| A 进入备用屏后 | #3465A4 | #C4265E | `734a58fe0224fcfb` | +| R 退出备用屏后 | #3465A4 | #C4265E | `31a070a2c1706709` | + +即:`1049h` / `1049l` **既不重置也不恢复**当前 SGR 属性;三阶段裁切哈希不同、颜色相同,说明阶段确有推进而颜色保持。 + +**归因边界**:这是 **conhost + ConPTY + WindTerm** 整条管线的可观察渲染;不能据此判定哪一层保持/转发了属性。与 #126 合同要求的应用内 QPainter/QImage 采集不同。 + + +## 附加观察二:备用屏内改 SGR 后退出(M1/A1/M2) + +进一步问"备用屏里改了样式,退出主屏后是什么颜色": + +- 阶段 M1:主屏设 `SGR 31;44`,画"当前背景空格 + 反显空格"; +- `1049h` → 阶段 A1:备用屏内设 `SGR 32;45` 同法绘制; +- `1049l` → 阶段 M2:回主屏、**不再设 SGR**,同法绘制。 + +| 阶段 | 当前背景(空格行) | 当前前景(反显行) | 裁切 SHA-16 | +|---|---|---|---| +| M1 主屏(31;44) | #3465A4 | #C4265E | `c36c54c3ddce39e5` | +| A1 备用屏内(32;45) | #8C6BC8(调色板 45) | #86B42B(调色板 32) | `96deb13c0866d41c` | +| M2 退出后(不重设) | #1C1C1C(默认) | #E3E3DD(默认) | `3c9cd48f2bbc1bf0` | + +与本页上一节(进入前设 31;44 并保持,M/A/R 三阶段都是 #3465A4/#C4265E)合起来,得到一致语义: + +- `1049h` 进入时**保存**当前属性; +- 备用屏内可任意改 SGR,且**不泄漏**回主屏; +- `1049l` 退出时**恢复进入时刻保存的属性**(上一节进入时是 31;44 → 退出仍 31;44;本节进入前被脚本 reset 成默认 → 退出回到默认)。 + +**归因边界**:仍是 conhost + ConPTY + WindTerm 整条管线的可观察渲染,无法判定哪一层执行保存/恢复;与 #126 要求的应用内采集不同。 + ## 解释与边界 - 在这套固定配置里,`1049` 的进入/重复进入/退出**不改变**默认前景/背景,也不改变所测的三个调色板颜色;备用屏重进渲染与首次进入一致。 @@ -38,4 +80,4 @@ ## 复现要点 -合成会话命令与四阶段触发协议、终端矩形获取与逐行颜色统计脚本见本目录说明;触发文件、截图与私有路径留在本地,仅发布本摘要与标量结果。 +合成会话命令与四阶段触发协议、终端矩形获取与逐行颜色统计脚本见本目录说明;触发文件、截图与私有路径留在本地,仅发布本摘要与标量结果。 \ No newline at end of file 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 index bab70bde..b67981cf 100644 --- a/research/ui/results/2026-10-29-session-1049-palette/validation.json +++ b/research/ui/results/2026-10-29-session-1049-palette/validation.json @@ -21,7 +21,9 @@ "default_foreground_via_reverse": "E3E3DD", "palette_red_sgr41": "C4265E", "palette_blue_sgr44": "3465A4", - "palette_green_sgr42": "86B42B" + "palette_green_sgr42": "86B42B", + "palette_magenta_sgr45": "8C6BC8", + "palette_green_fg_sgr32": "86B42B" }, "phases": { "main": { @@ -46,7 +48,53 @@ "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" + "does not close #126/#123/#27", + "SGR-carry observation is pipeline-level (conhost + ConPTY + WindTerm), layer attribution unknown", + "attribute save/restore attribution unknown between conhost, ConPTY and WindTerm" ], - "performance_claim": false + "performance_claim": false, + "sgr_carry": { + "protocol": "SGR 31;44 set before switch and kept; per-phase background-only and reverse-only space bands", + "phases": { + "main": { + "background": "3465A4", + "foreground": "C4265E", + "crop_sha16": "675e5d7b24dbdcf9" + }, + "alternate": { + "background": "3465A4", + "foreground": "C4265E", + "crop_sha16": "734a58fe0224fcfb" + }, + "restored_main": { + "background": "3465A4", + "foreground": "C4265E", + "crop_sha16": "31a070a2c1706709" + } + }, + "interpretation": "1049h and 1049l neither reset nor restore the current SGR attributes in the conhost+ConPTY+WindTerm pipeline observed here.", + "attribution_limit": "pipeline-level observation; layer attribution unknown" + }, + "alt_style_restore": { + "protocol": "SGR 31;44 on main, 32;45 inside alternate, then 1049l and draw without resetting", + "phases": { + "main_before": { + "background": "3465A4", + "foreground": "C4265E", + "crop_sha16": "c36c54c3ddce39e5" + }, + "alternate": { + "background": "8C6BC8", + "foreground": "86B42B", + "crop_sha16": "96deb13c0866d41c" + }, + "main_after_exit": { + "background": "1C1C1C", + "foreground": "E3E3DD", + "crop_sha16": "3c9cd48f2bbc1bf0" + } + }, + "interpretation": "1049h saves the attribute state at entry, alternate-screen changes do not leak back, and 1049l restores the entry-time attributes.", + "attribution_limit": "pipeline-level observation; layer attribution unknown" + } }