From 96f10a05f8c372054a7de360ed20052558357a44 Mon Sep 17 00:00:00 2001 From: JavaZeroo <71128095+JavaZeroo@users.noreply.github.com> Date: Mon, 26 Oct 2026 19:03:09 +0800 Subject: [PATCH] docs: publish audited hosted CF evidence and close stale task status --- docs/EVIDENCE.md | 2 +- docs/FEATURES.md | 2 +- docs/TRACKING.md | 2 +- docs/research/selection-session-tick-gate.md | 2 + .../hosted-validation.json | 531 ++++++++++++++++++ 5 files changed, 536 insertions(+), 3 deletions(-) create mode 100644 experiments/shell/results/2026-10-26-selection-tick-gate/hosted-validation.json diff --git a/docs/EVIDENCE.md b/docs/EVIDENCE.md index a0ccc930..52600ade 100644 --- a/docs/EVIDENCE.md +++ b/docs/EVIDENCE.md @@ -85,7 +85,7 @@ R1 固定总出口的源码为 `ce9b24d`,早期 `2dc8d6d` / `9b16acc` 仍分 | 增量查找与原生控件 | [搜索模块](../experiments/core/text_search.hpp)、[独立内容测试](../experiments/core/search_test.cpp)、[查找控件](../experiments/shell/find_bar.hpp)、[真实控件测试](../experiments/shell/find_bar_test.cpp) | 独立搜索模块与原生 Find 控件的 Unicode/预算/版本/焦点和回收;完整会话行为引用查找验收。 | | 选择/查找窗口整合(历史) | [最新边界与六轮窗口验证](../experiments/shell/results/2026-10-24-r1-window-boundaries/validation.json)、[前轮整合](../experiments/shell/results/2026-10-24-r1-selection-find/validation.json)、[自动回归](../experiments/shell/test_shell.py) | 历史窗口整合与边界记录;原先漏证据的负例保留。后续系统入口、DPI 与 IME 的结论引用各自独立验收。 | | 选择字节与受控 DPI | [源码身份、真实窗口与保留失败](../experiments/shell/results/2026-10-24-r1-selection-bytes/validation.json)、[系统 CF 两轮审计](../experiments/shell/results/2026-10-24-r1-styled-system-copy/validation.json) | 样式尾空格、软硬行和受控 DPI 的精确 CF 字节已核对;普通尾空格被 ConPTY 规范化的红样本保留,不恢复已丢信息,也不代表真实异 DPI 跨屏。 | -| 选择字节的双会话阶段等待(#66) | [独立阶段合同](research/selection-session-tick-gate.md)、[原 hosted 计数及本地复验](../experiments/shell/results/2026-10-26-selection-tick-gate/validation.json) | 原 reverse 只满足 main 的三 tick,bottom 实际仅两 tick;修正场景等待双方独立进度,保留 Python oracle、九阶段、CF 保护及原期限。本地数据两轮不代替真实 hosted CF。 | +| 选择字节的双会话阶段等待(#66) | [独立阶段合同](research/selection-session-tick-gate.md)、[原 hosted 计数及本地复验](../experiments/shell/results/2026-10-26-selection-tick-gate/validation.json)、[同实现 hosted CF 复核](../experiments/shell/results/2026-10-26-selection-tick-gate/hosted-validation.json) | 原 reverse 只满足 main 的三 tick,bottom 实际仅两 tick;修正场景等待双方独立进度,保留 Python oracle、九阶段、CF 保护及原期限。本地数据与真实 hosted CF 各两轮分列;后者的源字节/CF/重绘/回收已独立复核,逐运行 EXE 哈希缺口保留。 | | R1 组合夹具基础 | [夹具协议](../experiments/shell/WORKFLOW.md)、[固定源码数据审计](../experiments/shell/results/2026-10-24-r1-workflow-foundation/validation.json)、[动作/Paste复验](../experiments/shell/results/2026-10-24-r1-workflow-foundation/regression.json)、[真实IME复验](../experiments/shell/results/2026-10-24-r1-workflow-foundation/ime-regression.json)、[主CI 40034110925](https://github.com/JavaZeroo/termforge/actions/runs/40034110925)、[verify 40034133987](https://github.com/JavaZeroo/termforge/actions/runs/40034133987) | 组合夹具的数据、快照与既有回归基础;不单独验收真实 Paste/IME、八会话或 R1 总出口。 | | R1 八会话数据工作流 | [协议/自动入口](../experiments/shell/WORKFLOW.md)、[固定源码审计](../experiments/shell/results/2026-10-24-r1-eight-sessions/validation.json)、[既有能力复验](../experiments/shell/results/2026-10-24-r1-eight-sessions/regression.json)、[主CI](https://github.com/JavaZeroo/termforge/actions/runs/40040980384)、[同源码真实IME复验](https://github.com/JavaZeroo/termforge/actions/runs/40040994121) | 固定源码 72fe231 的八会话数据工作流、容量/后台/阅读/查找/淘汰/回收已独立复核;这是 data-only 记录,同次真实 CF/IME 以 R1 总出口为准。 | | 历史 launcher-tree 资源观察 | [复用采样器的adapter](../experiments/shell/workflow_resources.py)、[同一固定源码审计](../experiments/shell/results/2026-10-24-r1-eight-sessions/validation.json) | 历史 launcher-tree 资源记录可离线重算;不是 UI-root 归因。观测成本/调度缺口显著,phase_windows=null,不追溯补造校准或低扰动结论。 | diff --git a/docs/FEATURES.md b/docs/FEATURES.md index b79c693c..5425f04a 100644 --- a/docs/FEATURES.md +++ b/docs/FEATURES.md @@ -24,7 +24,7 @@ |---|---|---|---| | 本地命令输入/输出 | **实现中,未验收**:Windows shell → ConPTY → 有界队列 → 终端核心 → HWND;普通字符、中文字符消息、基础编辑和回收有固定场景。[持续 cmd 输出/Ctrl-C 回归](../experiments/conpty/README.md#持续-cmd-输出与-ctrlc-独立回归)保留完整负载、单次 ETX、原始字节和清理 | [#36](https://github.com/JavaZeroo/termforge/issues/36) 的历史 normal/resize 超时原因未知;旧、新探针的后续成功不是因果修复。原生控制处理函数、完整键盘模式及四 shell 交叉仍需验收;中文字符消息不等于 IME | R1 / R2 | | 历史浏览 | **限定验收**:100 行有界物理行历史、只读投影、滚轮/翻页/原生滚动条与每会话阅读锚点;编号内容、隐藏输出、淘汰、缩放与回收有[固定回归](../experiments/shell/results/2026-10-23-r1-foundations/validation.json),组合出口见八会话工作流 | 候选历史/resize 合同另列;完整 reflow 与大历史规模的内存、搜索和滚动性能未验收 | R1;扩展 R2 / R4 | -| 选择与复制 | **限定验收**:屏幕/100行有界历史的拖选、词/行、全选、自动滚动及每会话高亮;菜单/快捷键和实际 CF_UNICODETEXT 精确往返。[最终系统审计](../experiments/shell/results/2026-10-24-r1-selection-accepted/validation.json)覆盖占用反馈/保持/重试、live覆盖失效、同组标签、原生rename EDIT复制与关闭后目标隔离;[带样式尾空格/软硬行/受控DPI](../experiments/shell/results/2026-10-24-r1-styled-system-copy/validation.json)另有两轮系统证据 | [#66](https://github.com/JavaZeroo/termforge/issues/66) 已定位为场景只等待单会话,改为[双方各三 tick 的阶段门槛](research/selection-session-tick-gate.md);本地数据两轮已复验,真实 hosted CF 验收仍独立进行;普通尾空格经 ConPTY 规范化后不保留;显式空白端点策略未对照,词规则与容量为本项目策略。限定动作与参考差异见统一文字动作,完整组合见 #18 的独立验收;矩形选择归 R4,受控 DPI 不等于真实跨显示器 | R1;扩展 R2 / R4 | +| 选择与复制 | **限定验收**:屏幕/100行有界历史的拖选、词/行、全选、自动滚动及每会话高亮;菜单/快捷键和实际 CF_UNICODETEXT 精确往返。[最终系统审计](../experiments/shell/results/2026-10-24-r1-selection-accepted/validation.json)覆盖占用反馈/保持/重试、live覆盖失效、同组标签、原生rename EDIT复制与关闭后目标隔离;[带样式尾空格/软硬行/受控DPI](../experiments/shell/results/2026-10-24-r1-styled-system-copy/validation.json)另有两轮系统证据 | [#66](https://github.com/JavaZeroo/termforge/issues/66) 已定位为场景只等待单会话,改为[双方各三 tick 的阶段门槛](research/selection-session-tick-gate.md);本地数据两轮与[同实现 hosted CF 两轮](../experiments/shell/results/2026-10-26-selection-tick-gate/hosted-validation.json)已分配置复核,#66 限定闭合;普通尾空格经 ConPTY 规范化后不保留;显式空白端点策略未对照,词规则与容量为本项目策略。限定动作与参考差异见统一文字动作,完整组合见 #18 的独立验收;矩形选择归 R4,受控 DPI 不等于真实跨显示器 | R1;扩展 R2 / R4 | | 粘贴 | **限定验收**:有界传输、异步读取、确认与目标绑定;正常系统粘贴、占用/超限错误与重试、读取和发送途中取消/关闭、隐藏目标、洪流及精确接收前缀均有重复验证。[最终系统证据](../experiments/shell/results/2026-10-24-r1-clipboard-accepted/validation.json)保留晚发布原始 1418 和完整回收 | 默认 Return 等限定参考动作已在统一文字动作验收,全流程交叉见 #18 的独立验收;bracketed paste/应用模式归 R2,未宣称全部系统或任意负载验收 | R1;应用模式 R2 | | 查找与定位 | **限定验收**:有界增量字面量搜索、原生查找框、方向/循环/高亮、中文、追加与淘汰;持续输出时可显式使用有效局部命中,运行中查询替换/取消/关闭均有[托管两轮独立证据](../experiments/shell/results/2026-10-24-r1-find-accepted/validation.json) | 局部结果不表示全局末端/循环;动作与受控 DPI 交叉见统一文字动作,组合与资源见 #18 的独立验收。正则、跨会话、完整 Unicode caseless 和大历史规模归 R4 | R1 / R4 | | 统一文字动作 | **限定验收**:共用目标/可用状态,实际终端右键/快捷键、原生 Find/rename 编辑、busy/closing/失效选区反馈及受控 DPI/zoom 保持;[最终系统审计](../experiments/shell/results/2026-10-24-r1-actions-accepted/validation.json)与[逐项对照](research/r1-action-comparison.md)覆盖 Find 实际 Ctrl+C/V、中文重选、默认 Return 和会话隔离 | 复杂 busy/closing 参考行为仍未知,采用明确项目策略;完整流程与八会话有限资源已由 #18 另验收,真实跨显示器及完整 WindTerm 等价未验收 | R1 | diff --git a/docs/TRACKING.md b/docs/TRACKING.md index 7b74f909..1055b2aa 100644 --- a/docs/TRACKING.md +++ b/docs/TRACKING.md @@ -35,7 +35,7 @@ | 工作 | 责任任务 | 完成条件的归属 | |---|---|---| | 持续输出中的 Ctrl-C 历史失败 | [原始 ETX 回归 #36](https://github.com/JavaZeroo/termforge/issues/36) | 有界定位历史因果与原生交付;后续通过不回填旧因 | -| 新增实际回归 | [恢复 oracle 修正 #61](https://github.com/JavaZeroo/termforge/issues/61) · [InputPump gate #62](https://github.com/JavaZeroo/termforge/issues/62) · [工作区 stage52 #63](https://github.com/JavaZeroo/termforge/issues/63) · [hosted reverse #66](https://github.com/JavaZeroo/termforge/issues/66) | #61 有同字节因果与两配置限定修正;其余真实失败继续开放,不放宽期限、负载或几何断言 | +| 新增实际回归 | [恢复 oracle 修正 #61](https://github.com/JavaZeroo/termforge/issues/61) · [InputPump gate #62](https://github.com/JavaZeroo/termforge/issues/62) · [工作区 stage52 #63](https://github.com/JavaZeroo/termforge/issues/63) · [hosted reverse #66](https://github.com/JavaZeroo/termforge/issues/66) | #61 恢复 oracle、#66 双会话 tick 门槛已按原合同限定闭合;#62/#63 继续开放,不放宽期限、负载或几何断言 | | 原 10 秒纯夹具超时 | [IME inventory 定位 #40](https://github.com/JavaZeroo/termforge/issues/40) | 阶段与清理已补齐;下一步是固定源码/宿主的有界原因定位 | | controller 自然退出 | [close 前退出 #44](https://github.com/JavaZeroo/termforge/issues/44) | 保留 send/wait/pre-close 与清理差异;不能以 close 后结果当自然退出 | | 旧 normal-1 未知异常 | [事件转换边界 #57](https://github.com/JavaZeroo/termforge/issues/57) | 独立于已修合法空标题 #45;原事件 kind/载荷未知,不能回填根因 | diff --git a/docs/research/selection-session-tick-gate.md b/docs/research/selection-session-tick-gate.md index c34f5bb9..3687b325 100644 --- a/docs/research/selection-session-tick-gate.md +++ b/docs/research/selection-session-tick-gate.md @@ -18,3 +18,5 @@ python -m unittest experiments.shell.test_selection_bytes -v ``` 普通本地环境会明确跳过实际系统 CF,用例仍检查 native/Python 的 hosted 保护。完整系统门槛由 PR 的 Windows hosted CI 执行;本页和固定记录不借用其他核心/后端或历史成功。 + +[同实现的 hosted 复核](../../experiments/shell/results/2026-10-26-selection-tick-gate/hosted-validation.json)固定实现 `dcb7e6e`、PR head `c634134` 与实际 checkout tree 相等。Windows [CI 40310013544](https://github.com/JavaZeroo/termforge/actions/runs/40310013544) 的 `system-0/1` 确实执行,各九阶段;原字节、CF、完整重绘、隔离和回收合同均通过,后八阶段的双会话计数差至少三。首阶段没有相邻观察,delta 保持 null;逐运行 EXE 哈希仍缺失,不声称 source-to-binary 或实际呈现证明。两条 CI 与独立双轴复核通过,#66 限定关闭,不扩大到候选/实验后端或完整 R2。 diff --git a/experiments/shell/results/2026-10-26-selection-tick-gate/hosted-validation.json b/experiments/shell/results/2026-10-26-selection-tick-gate/hosted-validation.json new file mode 100644 index 00000000..f540e95e --- /dev/null +++ b/experiments/shell/results/2026-10-26-selection-tick-gate/hosted-validation.json @@ -0,0 +1,531 @@ +{ + "schema": "r66-hosted-artifact-readonly-verification-v1", + "run": 40310013544, + "windows_job": 121528530213, + "ubuntu_job": 121528530449, + "artifact_id": 12644531840, + "artifact_name": "r1-windows-input", + "artifact_bytes": 4305851, + "artifact_download_count": 1, + "zip_sha256": "65deb082d294c0a12b660a965e8ac554ab3a747f383013cfd500826280da3691", + "github_digest_matches": true, + "pr_head": "c63413430e9f9c8a18a728bcaf6b90cdbdb65abd", + "actual_checkout": "89dbc711bcff319cd7fc08a1082236d59c36407b", + "actual_checkout_tree": "2278af80cf52de77dfca699f3a2b47e4b40cc374", + "head_tree_equals_actual_checkout_tree": true, + "source_git_blob_sha1": { + "experiments/shell/scenario_tick_gate.hpp": "938059af4fa61fe49e2c39b39ace298f91068c33", + "experiments/shell/workspace_selection_bytes_scenario.hpp": "d4365a261c96d6203b380c627682628b31777acf", + "experiments/shell/selection_bytes_checks.py": "6026dc5a0aee332e6d609951729edc17c1be3593", + "experiments/shell/test_selection_bytes.py": "cf3eb4a38d33d5c0f051a16e5706732d125f425a", + "experiments/shell/run.py": "271d8ac7b937027dd668dee0b3c3c66fc572aec5" + }, + "source_implementation": "dcb7e6ed0ebc2cb358b68823c348c2fd9a78dac9", + "original_deadlines": { + "native_seconds": 30, + "outer_seconds": 40, + "source_unchanged": true + }, + "runs": [ + { + "case": "system-0", + "actually_executed": true, + "skipped": false, + "mode": "ui-copy-bytes-system", + "collector_status": "passed", + "exit_code": 0, + "outer_timed_out": false, + "native_result": { + "valid": true, + "mode": "ui-copy-bytes-system", + "sessions_closed": 2, + "active_children_after": 0, + "presented_done": null + }, + "job_after": { + "active": 0, + "total": 11, + "terminated": 0 + }, + "job_after_cleanup": { + "active": 0, + "total": 11, + "terminated": 0 + }, + "desktop_gone": true, + "pure_record_oracle": "passed", + "selected_text_cf_physical_rows_focus_and_input": "passed unchanged original oracle", + "producer_transport_and_raw_validation": { + "bottom": { + "producer_sha256": "e8f12ba1dfede1f963c49264142db4c8790c29d27876a9dfaad57fb3e4a86b8b", + "producer_facts_sha256": "df7fe9106a98a3785c4c623ff3306957ac9b7af3843bf8a6072c8826459668c7", + "transport_sha256": "17c95de568d55b3f3dc3e512be078fb32faf9d0d50e4875f691127de6ebe4f2e", + "transport_bytes": 1607, + "literal_styled_tails": 8, + "raw_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "raw_bytes": 0 + }, + "main": { + "producer_sha256": "4ae7ba438881c4049c6cd1540175acf68bdb3b8e64146c4541eea70fbb6b9e31", + "producer_facts_sha256": "67bbbd89891bbe141d604f3f196fb6e3a41376142ef7db91b63163b856ecb60a", + "transport_sha256": "5e34e6d135e18762e9541e3b81bfbf9117f70fbf4cc02138c5406ae9656ceb18", + "transport_bytes": 1651, + "literal_styled_tails": 8, + "raw_sha256": "2d711642b726b04401627ca9fbac32f5c8530fb1903cc4db02258717921a4881", + "raw_bytes": 1 + } + }, + "phases": [ + { + "phase": "forward", + "ticks_bottom_main": [ + 14, + 11 + ], + "adjacent_delta_bottom_main": null, + "copy_entry": "queued-Ctrl-Shift-C", + "controlled_dpi": 96, + "os_window_dpi": 96, + "clipboard_matches_expected": true, + "raw_input_matches_expected": true, + "raw_bottom_bytes": 0, + "raw_main_bytes": 0, + "full_redraw_matches_both": true, + "capture_released_both": true + }, + { + "phase": "reverse", + "ticks_bottom_main": [ + 17, + 14 + ], + "adjacent_delta_bottom_main": [ + 3, + 3 + ], + "copy_entry": "queued-Ctrl-Shift-C", + "controlled_dpi": 96, + "os_window_dpi": 96, + "clipboard_matches_expected": true, + "raw_input_matches_expected": true, + "raw_bottom_bytes": 0, + "raw_main_bytes": 0, + "full_redraw_matches_both": true, + "capture_released_both": true + }, + { + "phase": "dpi-96", + "ticks_bottom_main": [ + 20, + 17 + ], + "adjacent_delta_bottom_main": [ + 3, + 3 + ], + "copy_entry": "queued-Ctrl-Shift-C", + "controlled_dpi": 96, + "os_window_dpi": 96, + "clipboard_matches_expected": true, + "raw_input_matches_expected": true, + "raw_bottom_bytes": 0, + "raw_main_bytes": 0, + "full_redraw_matches_both": true, + "capture_released_both": true + }, + { + "phase": "dpi-144", + "ticks_bottom_main": [ + 26, + 23 + ], + "adjacent_delta_bottom_main": [ + 6, + 6 + ], + "copy_entry": "queued-Ctrl-Shift-C", + "controlled_dpi": 144, + "os_window_dpi": 96, + "clipboard_matches_expected": true, + "raw_input_matches_expected": true, + "raw_bottom_bytes": 0, + "raw_main_bytes": 0, + "full_redraw_matches_both": true, + "capture_released_both": true + }, + { + "phase": "dpi-192", + "ticks_bottom_main": [ + 32, + 29 + ], + "adjacent_delta_bottom_main": [ + 6, + 6 + ], + "copy_entry": "queued-Ctrl-Shift-C", + "controlled_dpi": 192, + "os_window_dpi": 96, + "clipboard_matches_expected": true, + "raw_input_matches_expected": true, + "raw_bottom_bytes": 0, + "raw_main_bytes": 0, + "full_redraw_matches_both": true, + "capture_released_both": true + }, + { + "phase": "dpi-96-restored", + "ticks_bottom_main": [ + 39, + 36 + ], + "adjacent_delta_bottom_main": [ + 7, + 7 + ], + "copy_entry": "queued-Ctrl-Shift-C", + "controlled_dpi": 96, + "os_window_dpi": 96, + "clipboard_matches_expected": true, + "raw_input_matches_expected": true, + "raw_bottom_bytes": 0, + "raw_main_bytes": 0, + "full_redraw_matches_both": true, + "capture_released_both": true + }, + { + "phase": "cleared", + "ticks_bottom_main": [ + 42, + 39 + ], + "adjacent_delta_bottom_main": [ + 3, + 3 + ], + "copy_entry": "none", + "controlled_dpi": 96, + "os_window_dpi": 96, + "clipboard_matches_expected": true, + "raw_input_matches_expected": true, + "raw_bottom_bytes": 0, + "raw_main_bytes": 0, + "full_redraw_matches_both": true, + "capture_released_both": true + }, + { + "phase": "empty-copy", + "ticks_bottom_main": [ + 46, + 43 + ], + "adjacent_delta_bottom_main": [ + 4, + 4 + ], + "copy_entry": "queued-Ctrl-Shift-C-empty", + "controlled_dpi": 96, + "os_window_dpi": 96, + "clipboard_matches_expected": true, + "raw_input_matches_expected": true, + "raw_bottom_bytes": 0, + "raw_main_bytes": 0, + "full_redraw_matches_both": true, + "capture_released_both": true + }, + { + "phase": "input-after", + "ticks_bottom_main": [ + 50, + 47 + ], + "adjacent_delta_bottom_main": [ + 4, + 4 + ], + "copy_entry": "none", + "controlled_dpi": 96, + "os_window_dpi": 96, + "clipboard_matches_expected": true, + "raw_input_matches_expected": true, + "raw_bottom_bytes": 0, + "raw_main_bytes": 1, + "full_redraw_matches_both": true, + "capture_released_both": true + } + ], + "private_sha256": { + "sample.json": "d8ddc3b4bbcca8bcbd2638fb2001afa293e2eb4ce9631249980be9264a8297f6", + "selection-bytes.json": "b3f2811d036a80b978e4ce3bd6b0a18ec505678fd02505ddb79932e305dce7fe", + "selection-bytes-progress.jsonl": "68a4c4a858108680d98cb85b88b160ae6e4ad4c79db85ac6d83872b307410997", + "frame.bmp": "f24abb53b0fcf3ce76e4a4bb1b2810638fbfc3b5a1cc27ddfd8d319116a0c0a0" + } + }, + { + "case": "system-1", + "actually_executed": true, + "skipped": false, + "mode": "ui-copy-bytes-system", + "collector_status": "passed", + "exit_code": 0, + "outer_timed_out": false, + "native_result": { + "valid": true, + "mode": "ui-copy-bytes-system", + "sessions_closed": 2, + "active_children_after": 0, + "presented_done": null + }, + "job_after": { + "active": 0, + "total": 11, + "terminated": 0 + }, + "job_after_cleanup": { + "active": 0, + "total": 11, + "terminated": 0 + }, + "desktop_gone": true, + "pure_record_oracle": "passed", + "selected_text_cf_physical_rows_focus_and_input": "passed unchanged original oracle", + "producer_transport_and_raw_validation": { + "bottom": { + "producer_sha256": "e8f12ba1dfede1f963c49264142db4c8790c29d27876a9dfaad57fb3e4a86b8b", + "producer_facts_sha256": "df7fe9106a98a3785c4c623ff3306957ac9b7af3843bf8a6072c8826459668c7", + "transport_sha256": "eb624a4055fa798e5ce689f4df34ab92da4e063a7e341821991aa57de3fd79ea", + "transport_bytes": 1607, + "literal_styled_tails": 8, + "raw_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "raw_bytes": 0 + }, + "main": { + "producer_sha256": "4ae7ba438881c4049c6cd1540175acf68bdb3b8e64146c4541eea70fbb6b9e31", + "producer_facts_sha256": "67bbbd89891bbe141d604f3f196fb6e3a41376142ef7db91b63163b856ecb60a", + "transport_sha256": "dadd06731ec0f72d661f7e77af3715e5bc9c6c3efaeb8a1cf2b7d4bdfa818607", + "transport_bytes": 1651, + "literal_styled_tails": 8, + "raw_sha256": "2d711642b726b04401627ca9fbac32f5c8530fb1903cc4db02258717921a4881", + "raw_bytes": 1 + } + }, + "phases": [ + { + "phase": "forward", + "ticks_bottom_main": [ + 13, + 11 + ], + "adjacent_delta_bottom_main": null, + "copy_entry": "queued-Ctrl-Shift-C", + "controlled_dpi": 96, + "os_window_dpi": 96, + "clipboard_matches_expected": true, + "raw_input_matches_expected": true, + "raw_bottom_bytes": 0, + "raw_main_bytes": 0, + "full_redraw_matches_both": true, + "capture_released_both": true + }, + { + "phase": "reverse", + "ticks_bottom_main": [ + 16, + 14 + ], + "adjacent_delta_bottom_main": [ + 3, + 3 + ], + "copy_entry": "queued-Ctrl-Shift-C", + "controlled_dpi": 96, + "os_window_dpi": 96, + "clipboard_matches_expected": true, + "raw_input_matches_expected": true, + "raw_bottom_bytes": 0, + "raw_main_bytes": 0, + "full_redraw_matches_both": true, + "capture_released_both": true + }, + { + "phase": "dpi-96", + "ticks_bottom_main": [ + 19, + 17 + ], + "adjacent_delta_bottom_main": [ + 3, + 3 + ], + "copy_entry": "queued-Ctrl-Shift-C", + "controlled_dpi": 96, + "os_window_dpi": 96, + "clipboard_matches_expected": true, + "raw_input_matches_expected": true, + "raw_bottom_bytes": 0, + "raw_main_bytes": 0, + "full_redraw_matches_both": true, + "capture_released_both": true + }, + { + "phase": "dpi-144", + "ticks_bottom_main": [ + 26, + 24 + ], + "adjacent_delta_bottom_main": [ + 7, + 7 + ], + "copy_entry": "queued-Ctrl-Shift-C", + "controlled_dpi": 144, + "os_window_dpi": 96, + "clipboard_matches_expected": true, + "raw_input_matches_expected": true, + "raw_bottom_bytes": 0, + "raw_main_bytes": 0, + "full_redraw_matches_both": true, + "capture_released_both": true + }, + { + "phase": "dpi-192", + "ticks_bottom_main": [ + 32, + 30 + ], + "adjacent_delta_bottom_main": [ + 6, + 6 + ], + "copy_entry": "queued-Ctrl-Shift-C", + "controlled_dpi": 192, + "os_window_dpi": 96, + "clipboard_matches_expected": true, + "raw_input_matches_expected": true, + "raw_bottom_bytes": 0, + "raw_main_bytes": 0, + "full_redraw_matches_both": true, + "capture_released_both": true + }, + { + "phase": "dpi-96-restored", + "ticks_bottom_main": [ + 38, + 36 + ], + "adjacent_delta_bottom_main": [ + 6, + 6 + ], + "copy_entry": "queued-Ctrl-Shift-C", + "controlled_dpi": 96, + "os_window_dpi": 96, + "clipboard_matches_expected": true, + "raw_input_matches_expected": true, + "raw_bottom_bytes": 0, + "raw_main_bytes": 0, + "full_redraw_matches_both": true, + "capture_released_both": true + }, + { + "phase": "cleared", + "ticks_bottom_main": [ + 41, + 39 + ], + "adjacent_delta_bottom_main": [ + 3, + 3 + ], + "copy_entry": "none", + "controlled_dpi": 96, + "os_window_dpi": 96, + "clipboard_matches_expected": true, + "raw_input_matches_expected": true, + "raw_bottom_bytes": 0, + "raw_main_bytes": 0, + "full_redraw_matches_both": true, + "capture_released_both": true + }, + { + "phase": "empty-copy", + "ticks_bottom_main": [ + 45, + 43 + ], + "adjacent_delta_bottom_main": [ + 4, + 4 + ], + "copy_entry": "queued-Ctrl-Shift-C-empty", + "controlled_dpi": 96, + "os_window_dpi": 96, + "clipboard_matches_expected": true, + "raw_input_matches_expected": true, + "raw_bottom_bytes": 0, + "raw_main_bytes": 0, + "full_redraw_matches_both": true, + "capture_released_both": true + }, + { + "phase": "input-after", + "ticks_bottom_main": [ + 48, + 46 + ], + "adjacent_delta_bottom_main": [ + 3, + 3 + ], + "copy_entry": "none", + "controlled_dpi": 96, + "os_window_dpi": 96, + "clipboard_matches_expected": true, + "raw_input_matches_expected": true, + "raw_bottom_bytes": 0, + "raw_main_bytes": 1, + "full_redraw_matches_both": true, + "capture_released_both": true + } + ], + "private_sha256": { + "sample.json": "3b5007dcee24f76d1d6e05611c450a5c029264fb3c0e932071899e9f5347107a", + "selection-bytes.json": "560ed6cb5ce9c8194e37390b366c7702301f2c4f578d39321ccb46a071830e57", + "selection-bytes-progress.jsonl": "39cb26370ad921e0050bb6e28f30f563b52bc7c85ce01a037ff9c7f4f01e4d0c", + "frame.bmp": "f24abb53b0fcf3ce76e4a4bb1b2810638fbfc3b5a1cc27ddfd8d319116a0c0a0" + } + } + ], + "related_same_job_binary_identity_records": [ + { + "record_sha256": "6fb2b96c7b97641c5d49fc342fb67bbad727ea30c687cca55fee3cb450696979", + "binary_sha256": { + "termforge_shell.exe": "a8fabc15d39faab0ed850281d813460015c61c1bbefd4eb454b06fdcfb8ba430", + "shell_test_launcher.exe": "d5725950098f581df5115bd4c3301a66fae0ec6ca692a76e3600c21df80927d9", + "shell_text_client.exe": "ce509e23426bafa5e44c242fb608040031bd270d57e50305277186a8846a93ba", + "shell_clipboard_reader.exe": "83371f7b313c56c709ec64aa550a9e6dc680a6dc309f260f638a033460994b6c" + } + }, + { + "record_sha256": "38b950babacc394f00cd86d84947dfb0daba80db5920fee697e9d98150e82989", + "binary_sha256": { + "termforge_shell": "a8fabc15d39faab0ed850281d813460015c61c1bbefd4eb454b06fdcfb8ba430", + "shell_test_launcher": "d5725950098f581df5115bd4c3301a66fae0ec6ca692a76e3600c21df80927d9", + "shell_text_client": "ce509e23426bafa5e44c242fb608040031bd270d57e50305277186a8846a93ba", + "shell_input_client": "bff86ebfa601545e07f00cb427b65b1bcecebbd0b86223994aeccd490df09b85" + } + }, + { + "record_sha256": "11704c7a4415e5a13a956de5926e7d1e6d16b53b047f46668d5d087b17860668", + "binary_sha256": { + "termforge_shell": "a8fabc15d39faab0ed850281d813460015c61c1bbefd4eb454b06fdcfb8ba430", + "shell_test_launcher": "d5725950098f581df5115bd4c3301a66fae0ec6ca692a76e3600c21df80927d9", + "shell_text_client": "ce509e23426bafa5e44c242fb608040031bd270d57e50305277186a8846a93ba", + "shell_input_client": "bff86ebfa601545e07f00cb427b65b1bcecebbd0b86223994aeccd490df09b85" + } + } + ], + "binary_identity_limitation": "Selection per-run records do not independently hash the EXE; related same-job manifests report hashes but are not a source-to-binary attestation. The original failed selection run has the same gap.", + "first_phase_timer_limitation": "Forward has no preceding snapshot; its counts are positive. All following eight phase transitions independently have both deltas >=3. Internal action baselines are enforced by fixed source but not directly logged.", + "scope": "Read-only verification of actual hosted CF samples; no code/proof edits, new test runs, live clipboard access or full R2/parity claim." +}