diff --git a/docs/EVIDENCE.md b/docs/EVIDENCE.md index 667fc374..083a9af6 100644 --- a/docs/EVIDENCE.md +++ b/docs/EVIDENCE.md @@ -144,6 +144,7 @@ python -m unittest experiments.shell.test_workflow_sessions -v | 工作区结构/几何 | [首轮 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 限定参考合同,不代表产品功能等价或性能验收 | +| 固定 Vim 与原生尺寸/CPR 参考 | [四个有界样本及限制](research/vim-windterm-reference.md)、[白名单记录](../research/ui/results/2026-10-27-vim-native-reference/validation.json) | 原版一次原 Vim 插入、60×12、精确115 B输入、保存/主提示符完成;随后原尺寸门槛未过。独立样本观察 buffer60×3000/viewport60×12,CPR原入口未完成;显式VT输出变体获回复及shell自然退出37。四份分别记录,不能合成完整TUI、兼容修复或产品后端决定 | 主对照为官方 Windows x64 2.7.0:ZIP SHA-256 `b05c3c7371340ff1302967247ffcd3a3ba27b237f72010e9157086143c453e50`,EXE SHA-256 `7b10531dccc7cd614ae559f36f1ef518e0c96335637431b4646354823b2804d0`。最初本机安装的 EXE 身份不同;其历史静态报告不得冒充官方包结果。其他目标平台仍需各自固定包身份。 diff --git a/docs/research/vim-msys-runtime-prototype.md b/docs/research/vim-msys-runtime-prototype.md index 5454d59b..cdf34780 100644 --- a/docs/research/vim-msys-runtime-prototype.md +++ b/docs/research/vim-msys-runtime-prototype.md @@ -47,4 +47,4 @@ TermForge 基点 `ed55a8758423b3273fbd98f07e0bfd77d88e46ac`,产品代码与 `c [白名单验证记录](../../experiments/shell/results/2026-10-27-vim-msys-runtime-prototype/validation.json)包含源码、EXE/DLL、补丁/许可、对象差异、全部七轮结果、原文件哈希与回收状态;DLL、原始终端输出、个人路径及完整工具日志仅本地保存。 -本实验为原诊断补充了重建基点 red 与修补变体四轮 green,但没有重新执行完整 57 项 CTest,没有获得 WindTerm 同应用对照,也没有形成性能或普遍可靠性结论。原固定运行库下的完整官方 56/57 结果保持不变;#52、#47 和 Draft PR #50 的正式出口继续开放,不能用替换外部应用 DLL 自动关闭原合同。 +本实验为原诊断补充了重建基点 red 与修补变体四轮 green,但没有重新执行完整 57 项 CTest;该批没有运行 WindTerm,也没有形成性能或普遍可靠性结论。后续[原版有限对照](vim-windterm-reference.md)单独记录原 Vim 编辑、原生尺寸差异及 CPR 模式变体,不能与本批拼成完整通过。原固定运行库下的完整官方 56/57 结果保持不变;#52、#47 和 Draft PR #50 的正式出口继续开放,不能用替换外部应用 DLL 自动关闭原合同。 diff --git a/docs/research/vim-windterm-reference.md b/docs/research/vim-windterm-reference.md new file mode 100644 index 00000000..6da9363f --- /dev/null +++ b/docs/research/vim-windterm-reference.md @@ -0,0 +1,52 @@ +# WindTerm 2.7.0 的 Vim、原生尺寸与 CPR 有界对照 + +固定原版在一次观察中完成了原 Vim 的插入、60×12 resize、原 93 B Ctrl-O 命令、写盘和返回主提示符。后续原生尺寸与 CPR 检查暴露了入口差异:另一份原版样本的缓冲区为 **60×3000**、可见窗口为 **60×12**;未改动的 CPR 入口没有观察到回复,而显式启用 VT 输出的独立变体得到回复并正常退出 shell。 + +四个样本各自有边界,不能合并为一次完整 TUI 通过。没有修改 TermForge 产品/测试源码,没有采用修补 MSYS DLL 或选择 WinPTY 为产品后端。#52 的原固定运行库兼容方案仍未完成。 + +## 身份、隔离与停止条件 + +- 原版:官方 WindTerm 2.7.0 Windows x64,EXE SHA256 `7b10531dccc7cd614ae559f36f1ef518e0c96335637431b4646354823b2804d0`;每次复制的 4,047 文件清单 SHA256 `e459adf2f12adb6a1b7f55e66a9da1c22794185e66e848057d21e0c60d669203`,沿用[既有准备守卫](../../research/ui/launch.py)。原版 cmd 横幅记录 Windows `10.0.26200.9457`。 +- Vim:与[隔离运行库实验](vim-msys-runtime-prototype.md)相同的固定 Vim 9.1 patches 1–532,EXE SHA256 `2e0fda63a89171adfc46c9417d5105cc39ed778cc69a890b83a4eabc34e7646a`;使用未修补 MSYS DLL,SHA256 `3096d2ba9be20e90be1399edd391bac65d84bc387f5a419b502c9b326081930f`。配置 PATH 指向冻结的原始五文件副本;本批没有观察实际加载模块路径。 +- 公开自有夹具按源码基点 `b60cd65b9fa6af724279780faa8d78847eb5cef0` 核对。`entry` 只固定文件哈希,不补造当时未记录的 HEAD;其余三份计划明确记录该提交。原 `candidate-vim.vim` 334 B,SHA256 `386d475e5297169cf7fcc425dcc0f6b0174c237ff86be03564b2d505c5d79797`;原尺寸/CPR helper EXE 分别为 `a7a45db0976dd1e157871b6a9b50b1362ceb8cb8ea604470e58791920805d408` / `691b440e9c500c76c1c09c448aafbe2316793bf341ffe69bbc2bf70e41be64cc`。 +- 每次只创建一个合成本地 Shell 配置、独立 HOME/cache、非输入 window station 和自有 Job;不操作个人剪贴板、显示设置或 WSL。REA CLI 固定 6.7.0,使用既有 `instrument-with-frida attach` 入口。 +- 每个问题在启动前各声明最多一次运行,合计四次,均已停止。CLI 采集 30 s、外层监督 45 s;第一份入口观察的脚本期限为 28 s,其余为 25 s,另有晚 0.5 s 的脚本兜底。后续样本针对新的尺寸/模式问题,不重跑前一场景取绿。 + +## 四个独立样本 + +| 样本 | 实际结果 | 未覆盖或失败 | +|---|---|---| +| `entry`:入口可行性 | 实际 `winpty_open`、`winpty_spawn`、91×23 `winpty_set_size` 调用;原 Vim 写出 READY、进入插入并逐字接收标记 | Vim 由 `cmd /k` 直接启动;不含 resize、写盘、CPR、正常退出,结束由自有回收完成 | +| `vim`:原输入与真实窗口 resize | 从 cmd 提示符键入原启动命令;READY 和 `[New]` 后插入;原 93 B 命令写出 `60x12`;原 `Ctrl-O:wq` 保存并恢复 `TF>` | 原尺寸门槛未通过,脚本在 stage56 超时;CPR 和 shell exit 尚未运行。shell-handle 观察器存在一次参数类型错误,正常退出没有证据 | +| `native`:独立尺寸/CPR | 原尺寸 helper 输出 `TF_SIZE_60x3000`;独立 `GetConsoleScreenBufferInfo` 同时记录 buffer 60×3000、window `[0,0,59,11]`、viewport 60×12 | 原 `dwSize=60×12` 预期为 false。CPR 文件为空,脚本在 stage52 超时,query 进程退出码未观察;未发送 `exit 37` | +| `mode`:独立 VT 输出变体 | 读到输出模式 3;仅开启 VT 输出后模式为 7,未改动的 CPR helper 返回 0,文件为 `ESC[7;1R`;模式恢复,shell 自然退出 37 | 新增模式包装器属于不同配置,不代表前一原入口已通过;没有运行 Vim,CPR 的实际生产方未跟踪 | + +`vim` 的窗口准备先在 shell 中校准像素尺寸:1360×860/91×23 → 895×563/52×12 → 990×563/60×12,再恢复 1360×860 后启动 Vim。插入标记之后,只请求一次 990×563,观测到实际 WinPTY 60×12 调用成功及 UI capacity 12。该几何和 Qt 事件调度不同于 TermForge,不能用它比较竞态概率、输入延迟或性能。 + +## Vim 文件的独立核对 + +`vim` 样本的输入日志 **115 B** 与以下序列逐字节相同:`i`、`TF_CANDIDATE_TUI`、原 93 B resize 命令、`Ctrl-O:wq\r`。插入事件文件 **58 B** 精确符合 `INSERT`、逐字符、`LEAVE / INSERT / LEAVE`;保存文件 **17 B** 为标记加 LF,resize 文件 **5 B** 为 `60x12`。恢复主提示符来自该样本的 UI 模型观察;实际呈现端点保持 `null`。 + +该样本的输入命名管道成功匹配,但 WriteFile 探针没有记录调用;这不能解释为没有输入。完整 Vim 日志直接证明上述应用接收序列。`winpty_spawn` 的 shell-handle 观察器向 Frida 传入了 Boolean,出现 `expected an integer`,后续独立样本改为整数参数;保留该错误,不补造该样本的进程退出证据。 + +这里只观察到一次完成的 Vim 编辑过程,不能证明原版不会遇到同类竞态,也不追溯归因此前未记录输入的失败。第一份 stage56 样本没有保存实际尺寸 helper 文本;后一份独立的 60×3000 结果支持尺寸区别,不能冒充前一份缺失记录。 + +## 原生尺寸与 VT 模式的解释 + +`shell_size_client` 查询的是 `dwSize`。Windows 将它定义为整个屏幕缓冲区尺寸,`srWindow` 则描述显示窗口,两者不是同一字段。[Microsoft 字段说明](https://learn.microsoft.com/en-us/windows/console/console-screen-buffer-info-str)。本批原版的 60×3000 与 60×12 是运行观察;现有 TermForge 原生缓冲区判据仍未改变,是否调整跨后端合同需明确提案及用户确认。 + +现有 [CPR helper](../../experiments/shell/query_client.cpp)设置输入的 `ENABLE_VIRTUAL_TERMINAL_INPUT`,没有启用输出的 `ENABLE_VIRTUAL_TERMINAL_PROCESSING`。Windows 文档将后者定义为输出 VT 控制序列的解析开关,并说明输入 VT 标志通常与它配合使用。[Microsoft 模式说明](https://learn.microsoft.com/en-us/windows/console/setconsolemode)。 + +`mode` 样本实际输出模式为 **3 → 7 → 3**;输入模式为 **503 → 512 → 503**。包装器只在自有控制台设置输出标志,运行相同 helper 后恢复两种模式。helper 原 5 s `WaitForSingleObject` 保留,父进程额外提供 7 s 监督以约束可能阻塞的 `ReadConsoleW`;本次没有触发监督超时。shell 退出 37 来自复制的真实进程句柄,不是回收产生的退出码。 + +这些事实支持继续核对夹具的模式前提;**前一失败样本未记录模式,不能将本次读到的 3 回填为它的实测值,也不能据此宣称已因果修复该失败**。CPR 可能由原生控制台处理,本批没有证明回复来自 WindTerm 的末端解析器。模式变体成功与原入口 stage52 未完成分别保留。 + +## 回收、公开材料与结论边界 + +四次配置检查均只含一个合成会话;Job 最终 active 均为 0,总进程数分别为 13、14、15、10,原始 terminated 计数均为 0。外层仍明确请求了终止与回收,该计数不等于所有成员自然退出;只有 `mode` 的 shell 单独观察到自然退出 37。 + +[白名单摘要](../../research/ui/results/2026-10-27-vim-native-reference/validation.json)记录每份样本的输入/工具/原件哈希、实际调用、错误、文件检查和限制。导出重新核对四份私有记录及合成文件,未重新启动 GUI。REA provider 的 subject/environment 仍为 `null`、捕获时 state 为 `running`;包身份由本地准备守卫单独补充,不能改写成 provider 自己完成了身份认证。采集结束后的自有回收另列。 + +原件和临时原创驱动保留在 ignored `local/r52-windterm-reference`、`local/r52-windterm-vim-contract`、`local/r52-windterm-native-size`、`local/r52-windterm-cpr-mode`,每处计划/驱动/参数/观察/回收可本地复核。公开摘要不含私有驱动全文或原始插桩输出,因此不是一套公开的一键复现包;不得据此扩大重复性结论。发行物、DLL、资源、绝对路径、PID/句柄及用户配置均不进入公开材料。 + +本批补充原版同 Vim 的有限行为证据,以及原生 buffer/viewport、控制台模式的真实差别。#52/#28/#56 可据此继续调查兼容方案;原固定运行库的官方完整 CTest **56/57、402.66 s、8 项内部 skip**没有重跑,也没有被这些样本替代。#47、Draft #50、完整 R2 和产品架构选择保持各自原出口,不据此采用 WinPTY、替换用户应用运行库或更改验收门槛。 diff --git a/research/ui/results/2026-10-27-vim-native-reference/validation.json b/research/ui/results/2026-10-27-vim-native-reference/validation.json new file mode 100644 index 00000000..e02b6d9c --- /dev/null +++ b/research/ui/results/2026-10-27-vim-native-reference/validation.json @@ -0,0 +1,808 @@ +{ + "schema_version": 1, + "purpose": "bounded original WindTerm behavior observation, not product acceptance", + "source_commit": "b60cd65b9fa6af724279780faa8d78847eb5cef0", + "reference_version": "WindTerm 2.7.0 Windows x64", + "environment": { + "observed_cmd_banner_windows_version": "10.0.26200.9457", + "rea_cli_version": "6.7.0", + "window_station": "per-run-owned-non-input", + "profile": "one-synthetic-local-shell" + }, + "observations": [ + { + "id": "entry", + "declared_maximum_runs": 1, + "actual_runs": 1, + "source_commit_recorded_in_plan": null, + "rea_duration_seconds": 30, + "scenario_timeout_ms": 28000, + "status": "observed", + "stage": 5, + "scenario_elapsed_ms_diagnostic_only": 2010, + "scenario_error": null, + "script_sha256": "e8774e12a08eedf872ae87aa045057b76fb2c91b125a289e43fbf6c555834b3f", + "template_sha256": "30c93bba80eff6881dca333fdbcda21838475ea0eb44aed7664dff434967e1a7", + "fixture_sha256": "386d475e5297169cf7fcc425dcc0f6b0174c237ff86be03564b2d505c5d79797", + "probe_files_sha256": { + "launch.py": "8b5ffe020fd3c92f23b188e5673b32396c882d9e6d1cdfc8b57fd14cc2ffee2d", + "qt_r1_text.js": "30c93bba80eff6881dca333fdbcda21838475ea0eb44aed7664dff434967e1a7", + "driver.js": "cf445845d21860f3102f8f546dfe3f452e2908badc0b62ad8d6dde634fa034fa", + "candidate-vim.vim": "386d475e5297169cf7fcc425dcc0f6b0174c237ff86be03564b2d505c5d79797", + "launcher.patch": "a3c3163fde217b5198fae8b1c80f45e9fb4f843df83ad6cc8de347eac1e0a411" + }, + "source_files_sha256": { + "research/ui/r1_launch.py": "54fb41872c6abcc48242a0938044184854b016785cc13659c66b1bf404da0d8a", + "research/ui/launch.py": "6970e0d4f2fe5e7ec4827df7aa1026cd0e74aeb828cdc9b7a0b42b3c887eb4e6", + "research/ui/qt_r1_text.js": "f5820d413fdd72c13dffcefbf4d0ade615abfe15754c6b0b52e1e098814eea6f" + }, + "helper_exe_sha256": {}, + "reference_identity": { + "exe_sha256": "7b10531dccc7cd614ae559f36f1ef518e0c96335637431b4646354823b2804d0", + "files_manifest_sha256": "e459adf2f12adb6a1b7f55e66a9da1c22794185e66e848057d21e0c60d669203" + }, + "provider": { + "evidence_id": "ev_8e744c8ba99a794f4c59caeade8fc5fb62bdea0169cfc89c21cd2981660f06f1", + "name": "Frida", + "version": null, + "confidence": "observed", + "subject": null, + "environment": null, + "captured_state": "running", + "messages_truncated": false, + "cleanup_error": null, + "limitations": [ + "Artifact identity is unavailable for this observation.", + "The target operating system and architecture were not reported by this observation." + ] + }, + "backend_calls": [ + { + "function": "winpty_open", + "success": true, + "size": null + }, + { + "function": "winpty_spawn", + "success": true, + "size": null + }, + { + "function": "winpty_set_size", + "success": true, + "size": [ + 91, + 23 + ] + } + ], + "probe_error": { + "count": 0, + "kind": null + }, + "profile_check": { + "only_synthetic_session": true, + "session_count": 1 + }, + "outer_cleanup": { + "job_accounting": { + "active": 0, + "total": 13, + "terminated": 0 + }, + "deliberate_termination_requested": true, + "termination_counter_is_not_natural_exit_proof": true + }, + "raw_files": { + "run.json": { + "bytes": 615, + "sha256": "df015ba174dc04e60906175a9205f996d629d8ae29c7d07b696ca407dfe8eb6f" + }, + "probe.js": { + "bytes": 17645, + "sha256": "e8774e12a08eedf872ae87aa045057b76fb2c91b125a289e43fbf6c555834b3f" + }, + "probe-result.json": { + "bytes": 137, + "sha256": "0f9b75e9023dfa3b034e8b69d3fa75e732274233dd87f0307cfc9ae29f50c267" + }, + "profile-check.json": { + "bytes": 52, + "sha256": "5e522a64e98197722ccd084639b1ce50258b238e03be2f016e81c8af023b5ee1" + }, + "cleanup.json": { + "bytes": 43, + "sha256": "43174a2e069f646c7d5370c56c5b4aedae68af7b4735434b0aba110f7442a969" + }, + "evidence.json": { + "bytes": 35278, + "sha256": "78edce088914731eb60d070c4695463cb2d9c1fd491fa4d35ad86d4fe5f210f1" + }, + "stderr.txt": { + "bytes": 0, + "sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + }, + "files.json": { + "bytes": 637666, + "sha256": "a25c87cba935294d5bfd3bbc76c650d31a8473809564d798ad5a889e4aea00e8" + } + }, + "synthetic_artifacts": { + "candidate-input.bin": { + "bytes": 0, + "sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + }, + "candidate-insert-log.txt": { + "bytes": 39, + "sha256": "dd1833a26b6aa08e7d20b2e6731bb15db71a01c24705592ef26670f4d3639665" + }, + "candidate-startup-log.txt": { + "bytes": 6, + "sha256": "3dfa3fb239f56c778a1e9b33eb31328349edd155a95806dac4378904e88527e5" + }, + "candidate-vim.vim": { + "bytes": 334, + "sha256": "386d475e5297169cf7fcc425dcc0f6b0174c237ff86be03564b2d505c5d79797" + } + }, + "limitations": [ + "Vim is started by cmd /k instead of a typed launch command in this entry feasibility probe.", + "No resize/Ctrl-O/write/exit/CPR or full original method is claimed.", + "Qt/Frida observation perturbs scheduling; not physical input or performance.", + "The Vim input log may remain unflushed because this pilot deliberately ends by owned cleanup." + ], + "full_vim_contract_verified": false, + "presented_done": null, + "coverage": { + "direct_cmd_start": true, + "ready": true, + "insert_marker": true, + "resize": false, + "save": false, + "normal_shell_exit": false + }, + "runtime_files_sha256": { + "msys-2.0.dll": "3096d2ba9be20e90be1399edd391bac65d84bc387f5a419b502c9b326081930f", + "msys-iconv-2.dll": "9cbf5613b946be7bad403ac0d7277efbd514a35faa644c6a0d6e7f6cc0b40780", + "msys-intl-8.dll": "23d30f4bcbc0a258cf5ecfe29e707f9b05d51c32d5b16a910f1012b889136c12", + "msys-ncursesw6.dll": "73ff8bc8b1f515e57b185e57d25d9ad29067057ff0819a8e588677c65ca61629", + "vim.exe": "2e0fda63a89171adfc46c9417d5105cc39ed778cc69a890b83a4eabc34e7646a" + } + }, + { + "id": "vim", + "declared_maximum_runs": 1, + "actual_runs": 1, + "source_commit_recorded_in_plan": "b60cd65b9fa6af724279780faa8d78847eb5cef0", + "rea_duration_seconds": 30, + "scenario_timeout_ms": 25000, + "status": "failed", + "stage": 56, + "scenario_elapsed_ms_diagnostic_only": 25088, + "scenario_error": "Error: scenario timeout", + "script_sha256": "9ec842a01202da3e4a25207a3aa368074b2662443052612d120fd6a8add3f4df", + "template_sha256": "144caee2c053240eca713a5d4b42f12bb6324400f3c5c6eafe5ead618bad8a4c", + "fixture_sha256": "386d475e5297169cf7fcc425dcc0f6b0174c237ff86be03564b2d505c5d79797", + "probe_files_sha256": { + "launch.py": "c24a82e3f0e546ae176b2ba3f463c5a1f576bf6e226110567208703b4738203c", + "launcher.patch": "1e440626b2bc20a9b2a6a5ea5263c4437ab06fe5285ce931cfb8b153bc475f9a", + "candidate-vim.vim": "386d475e5297169cf7fcc425dcc0f6b0174c237ff86be03564b2d505c5d79797", + "driver.js": "95177a635e6c5bfca11eb17c394957d8aa5e0dcb6dcec96d77809b2331bc490f", + "qt_r1_text.js": "144caee2c053240eca713a5d4b42f12bb6324400f3c5c6eafe5ead618bad8a4c" + }, + "source_files_sha256": { + "research/ui/r1_launch.py": "54fb41872c6abcc48242a0938044184854b016785cc13659c66b1bf404da0d8a", + "research/ui/launch.py": "6970e0d4f2fe5e7ec4827df7aa1026cd0e74aeb828cdc9b7a0b42b3c887eb4e6", + "research/ui/qt_r1_text.js": "f5820d413fdd72c13dffcefbf4d0ade615abfe15754c6b0b52e1e098814eea6f", + "experiments/shell/shell.cpp": "b4f6fe98812d1d23fa5f5bbcc7376437404af6cdb67cd6cdcdf448b57cb31fe9", + "experiments/shell/test_candidate_tui.py": "a300380b97ad424c5af06219a021a256de6178c3af7fb7e933e24bb8142201ee", + "experiments/shell/query_client.cpp": "10d982efc87fa6a832fb674a43b515e2d993dcf8b40bcfa845aae5a2e7ae0545", + "experiments/shell/size_client.cpp": "cb11661bec9551053eec0dbb474bce2ac899a06ee2e50830a370af4816df39f4" + }, + "helper_exe_sha256": { + "shell_query_client.exe": "691b440e9c500c76c1c09c448aafbe2316793bf341ffe69bbc2bf70e41be64cc", + "shell_size_client.exe": "a7a45db0976dd1e157871b6a9b50b1362ceb8cb8ea604470e58791920805d408" + }, + "reference_identity": { + "exe_sha256": "7b10531dccc7cd614ae559f36f1ef518e0c96335637431b4646354823b2804d0", + "files_manifest_sha256": "e459adf2f12adb6a1b7f55e66a9da1c22794185e66e848057d21e0c60d669203" + }, + "provider": { + "evidence_id": "ev_1958f096bb4e6fe83d95cadf88cd600433cd9f39ec5172e577cbde3a1e8bc21b", + "name": "Frida", + "version": null, + "confidence": "observed", + "subject": null, + "environment": null, + "captured_state": "running", + "messages_truncated": false, + "cleanup_error": null, + "limitations": [ + "Artifact identity is unavailable for this observation.", + "The target operating system and architecture were not reported by this observation." + ] + }, + "backend_calls": [ + { + "function": "winpty_open", + "success": true, + "size": null + }, + { + "function": "winpty_conin_name", + "success": true, + "size": null + }, + { + "function": "winpty_set_size", + "success": true, + "size": [ + 91, + 23 + ] + }, + { + "function": "winpty_set_size", + "success": true, + "size": [ + 52, + 12 + ] + }, + { + "function": "winpty_set_size", + "success": true, + "size": [ + 60, + 12 + ] + }, + { + "function": "winpty_set_size", + "success": true, + "size": [ + 91, + 23 + ] + }, + { + "function": "winpty_set_size", + "success": true, + "size": [ + 60, + 12 + ] + } + ], + "probe_error": { + "count": 1, + "kind": "shell-handle-argument-type" + }, + "profile_check": { + "only_synthetic_session": true, + "session_count": 1 + }, + "outer_cleanup": { + "job_accounting": { + "active": 0, + "total": 14, + "terminated": 0 + }, + "deliberate_termination_requested": true, + "termination_counter_is_not_natural_exit_proof": true + }, + "raw_files": { + "run.json": { + "bytes": 614, + "sha256": "4008e44a44e3d601afae3fb6d08e77f5e88715281ba4d01eb49bac54bc4ecc23" + }, + "probe.js": { + "bytes": 23964, + "sha256": "9ec842a01202da3e4a25207a3aa368074b2662443052612d120fd6a8add3f4df" + }, + "probe-result.json": { + "bytes": 378, + "sha256": "d33a9b0c3348921efeeee60187254405066026aa1af20ef60931fd67fdc1c4f1" + }, + "profile-check.json": { + "bytes": 52, + "sha256": "5e522a64e98197722ccd084639b1ce50258b238e03be2f016e81c8af023b5ee1" + }, + "cleanup.json": { + "bytes": 43, + "sha256": "b77999aca40acf28442897d9e5eea89029418b73111973255ec0d654bba760c8" + }, + "evidence.json": { + "bytes": 101735, + "sha256": "99e68d373210e3dc735d2b434e0db3f5dd88317531ba191c82ecd7cee847d978" + }, + "stderr.txt": { + "bytes": 0, + "sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + }, + "files.json": { + "bytes": 637666, + "sha256": "a25c87cba935294d5bfd3bbc76c650d31a8473809564d798ad5a889e4aea00e8" + } + }, + "synthetic_artifacts": { + "candidate-input.bin": { + "bytes": 115, + "sha256": "4bd689a84f1eb7336afb3b607dec760d117caef3d83f3e8e1b6b1f83d70b4b68" + }, + "candidate-insert-log.txt": { + "bytes": 58, + "sha256": "3d07108bcc44f0831b31530265fac711c1d1e69194aa9309897e4440c26de65a" + }, + "candidate-resize-log.txt": { + "bytes": 5, + "sha256": "2d3db728e657a0e1ab99b23acb6b2d08c586c4eaba6e65a66ab65e7fb47693b7" + }, + "candidate-startup-log.txt": { + "bytes": 6, + "sha256": "3dfa3fb239f56c778a1e9b33eb31328349edd155a95806dac4378904e88527e5" + }, + "candidate-tui.txt": { + "bytes": 17, + "sha256": "d9d3b8d10b660a808ece2b2c46b3767713ba4e74631c56b376b492eadf511dec" + }, + "candidate-vim.vim": { + "bytes": 334, + "sha256": "386d475e5297169cf7fcc425dcc0f6b0174c237ff86be03564b2d505c5d79797" + } + }, + "limitations": [ + "Qt/Frida hooks perturb scheduling; reference geometry and event-loop timing differ from TermForge.", + "The reference uses its observed WinPTY backend; there is no ConPTY flags24 equivalence.", + "Input is Qt synthetic key delivery, not physical input.", + "Original runtime files are pinned but actual Vim loaded-module paths are not observed.", + "WinPTY input-pipe WriteFile calls are observed only after matching its named pipe; asynchronous completions may be incomplete.", + "Whole WindTerm process is deliberately reclaimed after observation; only the shell exit handle may prove shell natural exit.", + "No full57 regression, repeatability or presentation/performance acceptance." + ], + "full_vim_contract_verified": false, + "presented_done": null, + "coverage": { + "typed_original_launch": true, + "ready_and_new": true, + "insert_marker": true, + "vim_resize_60x12": true, + "exact_input_115_bytes": true, + "exact_event_file": true, + "exact_saved_file": true, + "restored_main_prompt": true, + "original_native_size_gate_passed": false, + "cpr_ran": false, + "normal_shell_exit_observed": false + }, + "prelaunch_geometry_calibration": [ + { + "pixels": [ + 1360, + 860 + ], + "size": [ + 91, + 23 + ] + }, + { + "pixels": [ + 895, + 563 + ], + "size": [ + 52, + 12 + ] + }, + { + "pixels": [ + 990, + 563 + ], + "size": [ + 60, + 12 + ] + } + ], + "target_pixels": [ + 990, + 563 + ], + "input_capture": { + "named_pipe_matched": true, + "write_records": 0, + "zero_records_is_not_zero_input": true, + "actual_vim_input_log_exact": true, + "expected_input_sha256": "4bd689a84f1eb7336afb3b607dec760d117caef3d83f3e8e1b6b1f83d70b4b68" + }, + "runtime_files_sha256": { + "msys-2.0.dll": "3096d2ba9be20e90be1399edd391bac65d84bc387f5a419b502c9b326081930f", + "msys-iconv-2.dll": "9cbf5613b946be7bad403ac0d7277efbd514a35faa644c6a0d6e7f6cc0b40780", + "msys-intl-8.dll": "23d30f4bcbc0a258cf5ecfe29e707f9b05d51c32d5b16a910f1012b889136c12", + "msys-ncursesw6.dll": "73ff8bc8b1f515e57b185e57d25d9ad29067057ff0819a8e588677c65ca61629", + "vim.exe": "2e0fda63a89171adfc46c9417d5105cc39ed778cc69a890b83a4eabc34e7646a" + } + }, + { + "id": "native", + "declared_maximum_runs": 1, + "actual_runs": 1, + "source_commit_recorded_in_plan": "b60cd65b9fa6af724279780faa8d78847eb5cef0", + "rea_duration_seconds": 30, + "scenario_timeout_ms": 25000, + "status": "failed", + "stage": 52, + "scenario_elapsed_ms_diagnostic_only": 25049, + "scenario_error": "Error: scenario timeout", + "script_sha256": "6fdf5b858f28053425b91db6120650b6fecfb04501865c9bd347c585451d36a0", + "template_sha256": "50372e7df493445fec62ed9a93b37725f2bc5e1805173c8126e9b15d4d2513eb", + "fixture_sha256": "e3712da5d12d088868de039835041d634dbefe6714077292ad9d97b484913939", + "probe_files_sha256": { + "native_size.py": "e3712da5d12d088868de039835041d634dbefe6714077292ad9d97b484913939", + "launch.py": "1fe09af15a7f21eae90e2750e9ddd8fb6660ac6a50dc3029f3f96b4336b6f390", + "launcher.patch": "b8248a3db99e6bf9e0c57f2e2bfaf955f0d79eb13c66113b75c2df6341b5ee47", + "driver.js": "4ba8d4a737e1b07785028189bf1e7c375e08e049bef9e358d920a3e7277a609c", + "qt_r1_text.js": "50372e7df493445fec62ed9a93b37725f2bc5e1805173c8126e9b15d4d2513eb" + }, + "source_files_sha256": { + "research/ui/r1_launch.py": "54fb41872c6abcc48242a0938044184854b016785cc13659c66b1bf404da0d8a", + "research/ui/launch.py": "6970e0d4f2fe5e7ec4827df7aa1026cd0e74aeb828cdc9b7a0b42b3c887eb4e6", + "research/ui/qt_r1_text.js": "f5820d413fdd72c13dffcefbf4d0ade615abfe15754c6b0b52e1e098814eea6f", + "experiments/shell/size_client.cpp": "cb11661bec9551053eec0dbb474bce2ac899a06ee2e50830a370af4816df39f4", + "experiments/shell/query_client.cpp": "10d982efc87fa6a832fb674a43b515e2d993dcf8b40bcfa845aae5a2e7ae0545" + }, + "helper_exe_sha256": { + "shell_size_client.exe": "a7a45db0976dd1e157871b6a9b50b1362ceb8cb8ea604470e58791920805d408", + "shell_query_client.exe": "691b440e9c500c76c1c09c448aafbe2316793bf341ffe69bbc2bf70e41be64cc" + }, + "reference_identity": { + "exe_sha256": "7b10531dccc7cd614ae559f36f1ef518e0c96335637431b4646354823b2804d0", + "files_manifest_sha256": "e459adf2f12adb6a1b7f55e66a9da1c22794185e66e848057d21e0c60d669203" + }, + "provider": { + "evidence_id": "ev_a30c2cddfec137471e5583ee699123e5472cfca1e56d70c4191e92355c7a175a", + "name": "Frida", + "version": null, + "confidence": "observed", + "subject": null, + "environment": null, + "captured_state": "running", + "messages_truncated": false, + "cleanup_error": null, + "limitations": [ + "Artifact identity is unavailable for this observation.", + "The target operating system and architecture were not reported by this observation." + ] + }, + "backend_calls": [ + { + "function": "winpty_open", + "success": true, + "size": null + }, + { + "function": "winpty_spawn", + "success": true, + "size": null + }, + { + "function": "winpty_set_size", + "success": true, + "size": [ + 91, + 23 + ] + }, + { + "function": "winpty_set_size", + "success": true, + "size": [ + 60, + 12 + ] + } + ], + "probe_error": { + "count": 0, + "kind": null + }, + "profile_check": { + "only_synthetic_session": true, + "session_count": 1 + }, + "outer_cleanup": { + "job_accounting": { + "active": 0, + "total": 15, + "terminated": 0 + }, + "deliberate_termination_requested": true, + "termination_counter_is_not_natural_exit_proof": true + }, + "raw_files": { + "run.json": { + "bytes": 615, + "sha256": "11ffb4a721570976ddfee849b6bfa144035cc0b07bbdae772d33c922ddeac4c3" + }, + "probe.js": { + "bytes": 20813, + "sha256": "6fdf5b858f28053425b91db6120650b6fecfb04501865c9bd347c585451d36a0" + }, + "probe-result.json": { + "bytes": 413, + "sha256": "ad10920cb07300b7ee2d1eaac0722a44718f3c1573803a063b09596e3f627c14" + }, + "profile-check.json": { + "bytes": 52, + "sha256": "5e522a64e98197722ccd084639b1ce50258b238e03be2f016e81c8af023b5ee1" + }, + "cleanup.json": { + "bytes": 43, + "sha256": "61cfd944477da214d7cdeb0ea35df03f50b15c61527b13979bbc78ee05c1b3a6" + }, + "evidence.json": { + "bytes": 36505, + "sha256": "55001f84f47c90b633300697747a7b5ac16dc51a8ea9e943d538f9bd9ca44f33" + }, + "stderr.txt": { + "bytes": 0, + "sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + }, + "files.json": { + "bytes": 637666, + "sha256": "a25c87cba935294d5bfd3bbc76c650d31a8473809564d798ad5a889e4aea00e8" + } + }, + "synthetic_artifacts": { + "candidate-replies.bin": { + "bytes": 0, + "sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + }, + "native-size.json": { + "bytes": 127, + "sha256": "665c0ee3dd9ecb263e8773262c403cf64bacfd909ace63c8c70216519a7e06db" + }, + "native_size.py": { + "bytes": 1386, + "sha256": "e3712da5d12d088868de039835041d634dbefe6714077292ad9d97b484913939" + } + }, + "limitations": [ + "No Vim in this independent sample; never combine it with the prior sample as one full scenario.", + "Qt/Frida scheduling and synthetic input; not physical input or performance.", + "Original dwSize60x12 assertion remains unchanged even if viewport is60x12.", + "The earlier shell-handle hook passed a Boolean where Frida required an integer; this sample corrects only that probe argument.", + "No input-pipe WriteFile tracking; prior unmatched writes are not a zero-input claim.", + "CPR origin may be the native console rather than WindTerm itself; this sample does not trace the producer.", + "Outer WindTerm cleanup deliberately terminates its owned process tree; only recorded shell exit can be natural." + ], + "full_vim_contract_verified": false, + "presented_done": null, + "native": { + "buffer": [ + 60, + 3000 + ], + "window": [ + 0, + 0, + 59, + 11 + ], + "viewport": [ + 60, + 12 + ], + "cursor": [ + 0, + 9 + ], + "attributes": 7, + "maximum": [ + 60, + 172 + ] + }, + "size_helper": "TF_SIZE_60x3000", + "original_buffer_60x12_matches": false, + "cpr": { + "response_bytes": 0, + "observed": false, + "producer": null, + "query_exit_code": null, + "shell_exit_command_sent": false + } + }, + { + "id": "mode", + "declared_maximum_runs": 1, + "actual_runs": 1, + "source_commit_recorded_in_plan": "b60cd65b9fa6af724279780faa8d78847eb5cef0", + "rea_duration_seconds": 30, + "scenario_timeout_ms": 25000, + "status": "observed-mode-variant", + "stage": 6, + "scenario_elapsed_ms_diagnostic_only": 2072, + "scenario_error": null, + "script_sha256": "d4d7eb7e8cddc0f247ab5fdd6699c172d10828d38bf0de7c0e349335c33c008a", + "template_sha256": "3eaf2aaa122bc95424e84316e8b2c0f010122a750d6ddcdd0d1fb2a1d9167d50", + "fixture_sha256": "4c2022640afe72e8811c80beadb580fa7237e0710373666b7399735078931e80", + "probe_files_sha256": { + "launch.py": "f173292c0407d2032173dd40ef8e250cd1fee268ab8adc9f3c89ca17b342d92d", + "launcher.patch": "f94ebb59f80b43d75b60a11457da110685be325c394fc20e92d189d0932672a3", + "cpr_mode.py": "4c2022640afe72e8811c80beadb580fa7237e0710373666b7399735078931e80", + "driver.js": "34bb3f4ded92d2bc254cf232e92a17c0f2c89c539037939759706915ddcca240", + "stages.js": "599d0fa733e680551752a359f0b1721d9b0251b9cca9e3171f6d7e99555a0bb1", + "qt_r1_text.js": "3eaf2aaa122bc95424e84316e8b2c0f010122a750d6ddcdd0d1fb2a1d9167d50" + }, + "source_files_sha256": {}, + "helper_exe_sha256": { + "shell_query_client.exe": "691b440e9c500c76c1c09c448aafbe2316793bf341ffe69bbc2bf70e41be64cc", + "shell_size_client.exe": "a7a45db0976dd1e157871b6a9b50b1362ceb8cb8ea604470e58791920805d408" + }, + "reference_identity": { + "exe_sha256": "7b10531dccc7cd614ae559f36f1ef518e0c96335637431b4646354823b2804d0", + "files_manifest_sha256": "e459adf2f12adb6a1b7f55e66a9da1c22794185e66e848057d21e0c60d669203" + }, + "provider": { + "evidence_id": "ev_bd0edb379354ad528be42fae8d14ff68867cd44937736efc85d25ce6d9814369", + "name": "Frida", + "version": null, + "confidence": "observed", + "subject": null, + "environment": null, + "captured_state": "running", + "messages_truncated": false, + "cleanup_error": null, + "limitations": [ + "Artifact identity is unavailable for this observation.", + "The target operating system and architecture were not reported by this observation." + ] + }, + "backend_calls": [ + { + "function": "winpty_open", + "success": true, + "size": null + }, + { + "function": "winpty_spawn", + "success": true, + "size": null + }, + { + "function": "winpty_set_size", + "success": true, + "size": [ + 91, + 23 + ] + }, + { + "function": "winpty_set_size", + "success": true, + "size": [ + 60, + 12 + ] + } + ], + "probe_error": { + "count": 0, + "kind": null + }, + "profile_check": { + "only_synthetic_session": true, + "session_count": 1 + }, + "outer_cleanup": { + "job_accounting": { + "active": 0, + "total": 10, + "terminated": 0 + }, + "deliberate_termination_requested": true, + "termination_counter_is_not_natural_exit_proof": true + }, + "raw_files": { + "run.json": { + "bytes": 615, + "sha256": "237437dbba6364c627abe4070ee6ace480899e30ffa1e4bd4af70ad7e2846703" + }, + "probe.js": { + "bytes": 20385, + "sha256": "d4d7eb7e8cddc0f247ab5fdd6699c172d10828d38bf0de7c0e349335c33c008a" + }, + "probe-result.json": { + "bytes": 599, + "sha256": "0403786252a7645516ce01828290c2da87fe24c783aaa364e7fd5442eda5c55c" + }, + "profile-check.json": { + "bytes": 52, + "sha256": "5e522a64e98197722ccd084639b1ce50258b238e03be2f016e81c8af023b5ee1" + }, + "cleanup.json": { + "bytes": 43, + "sha256": "4eb92b3fbbccaaafadac2890d56ca14e7f057cc9be16207dd90f81ec823c5ef6" + }, + "evidence.json": { + "bytes": 51939, + "sha256": "01686e0703da3a1d0fb4183a702e76b03bd15f352e44ede465c3d4c81489d4af" + }, + "stderr.txt": { + "bytes": 0, + "sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + }, + "files.json": { + "bytes": 637666, + "sha256": "a25c87cba935294d5bfd3bbc76c650d31a8473809564d798ad5a889e4aea00e8" + } + }, + "synthetic_artifacts": { + "candidate-replies.bin": { + "bytes": 6, + "sha256": "492cbb9f988cb4c7cd28d78fa972aff059026fcca9efb775699dda04999ceea4" + }, + "cpr-mode.json": { + "bytes": 383, + "sha256": "0d5c4d3c47895a73217abac0330a895fb479bfb29dc4130880c6e204c460e6ca" + }, + "cpr_mode.py": { + "bytes": 1975, + "sha256": "4c2022640afe72e8811c80beadb580fa7237e0710373666b7399735078931e80" + } + }, + "limitations": [ + "The added mode-setting wrapper is a different fixture configuration, not a pass of the original unmodified entry.", + "No input flush, no external application/runtime changes, no product/test source change.", + "This is one new sample, not a controlled same-process replay of the earlier failure.", + "CPR producer is not traced; native console may answer rather than WindTerm.", + "Parent supervision bounds a possible blocking ReadConsoleW beyond the original client WaitForSingleObject; it is not a product deadline change.", + "No Vim or native-size acceptance in this sample; do not combine runs as one complete workflow.", + "Qt/Frida synthetic input and deliberate outer cleanup; no performance or presentation claim." + ], + "full_vim_contract_verified": false, + "presented_done": null, + "mode_observation": { + "output_mode_before": 3, + "input_mode_before": 503, + "requested_output_mode": 7, + "query_client_unchanged": true, + "query_supervision_seconds": 7, + "timed_out": false, + "exit_code": 0, + "output_mode_active": 7, + "input_mode_after_query": 512, + "output_restore_ok": true, + "input_restore_ok": true, + "output_mode_restored": 3, + "input_mode_restored": 503 + }, + "cpr": { + "response_bytes": 6, + "response_hex": "1b5b373b3152", + "producer": null, + "query_exit_code": 0 + }, + "natural_shell_exit_code": 37, + "original_unmodified_entry_passed": false + } + ], + "all_owned_jobs_empty_after_cleanup": true, + "same_run_complete_vim_size_cpr_exit": false, + "termforge_tests_changed": false, + "runtime_patch_adopted": false, + "product_backend_selected": false, + "original_fixed_runtime_official_ctest_latest": { + "passed": 56, + "total": 57, + "seconds": 402.66, + "internal_skips": 8, + "rerun_in_this_batch": false + }, + "performance_acceptance": false, + "presented_done": null +}