diff --git a/docs/EVIDENCE.md b/docs/EVIDENCE.md index 11c12d3f..14468402 100644 --- a/docs/EVIDENCE.md +++ b/docs/EVIDENCE.md @@ -18,6 +18,8 @@ R1 固定总出口的源码为 `ce9b24d`,早期 `2dc8d6d` / `9b16acc` 仍分 后续合并推送的两个独立失败见[原件审计](../experiments/shell/results/2026-10-26-postmerge-ci/validation.json):main `098f9ab` 工作区第二轮保存 stage2 [#72](https://github.com/JavaZeroo/termforge/issues/72),实验分支源码 `af563ba` 的 681 高度选择场景 [#73](https://github.com/JavaZeroo/termforge/issues/73)。两次 CI 实际均为默认自研核心/system;return2、Job0、desktop 已删除,原生退出/EOF 与逐运行 EXE 绑定仍未知。它们不等同已修 #61/#66,另一批 PR 成功不能覆盖这些失败。 +[#99 剪贴板阶段观测](research/clipboard-stage-observation.md)保存原两轮四 case、无内容阶段记录及完整 CI 的独立失败。该批未复现 45 秒超时,临时观测已撤回;不能据此关闭 #99,另一个选择复制入口的 OpenClipboard5 由 #85 继续跟踪。 + ## 产品能力的限定验收 | 范围 | 结果与复现入口 | 可以支持的结论与限制 | diff --git a/docs/FEATURES.md b/docs/FEATURES.md index b6bc7f8a..b5b1f2f3 100644 --- a/docs/FEATURES.md +++ b/docs/FEATURES.md @@ -70,7 +70,7 @@ | 组合验收基础 | **限定验收**:[固定源码审计](../experiments/shell/results/2026-10-24-r1-workflow-foundation/validation.json)覆盖基础数据与快照;[受控夹具](../experiments/shell/WORKFLOW.md)分离编号日志、ConPTY传输、原始接收与阶段日志;固定输入前缀保持4096 UTF-16容量,旧IME模式仍要求空前缀 | 该基础证据不单独验收八会话或真实Copy→Paste→IME;组合出口见 #18 独立验收 | R1 | | 八会话文字工作流 | **限定验收**:[R1 固定源码整体验收](../experiments/shell/results/2026-10-24-r1-system-workflow/validation.json)覆盖同次 8 会话/拒绝第 9 个、后台有限洪流、历史/Find/实际选择与 CF 复制/确认粘贴/真实拼音、切换缩放、淘汰、取消关闭和重复回收;实际字节、目标隔离、动作与 Job/desktop 回收有独立审计 | 限定 Windows 固定拼音、本地 cmd 与有界负载;这是固定 R1 配置的组合验收,不能替代 R2 候选/新后端组合。实际呈现、常用 TUI、长期稳定及 UI/性能等价仍未验收 | R1 | | 活体资源与滚动端点 | **限定测量**:普通启动默认关闭;[R1 组合审计](../experiments/shell/results/2026-10-24-r1-system-workflow/validation.json)绑定实际接收、state 与同 revision 的 WM_PAINT/BitBlt/GdiFlush 提交,保留跨时钟校准与阶段资源,可离线重算 | launcher-tree 不等于 UI 归因;观察进程成本不等于增量采样成本,短命进程及退出 CPU 可能漏采。短驻留不证明长期无泄漏,`presented_done=null`,不构成性能通过 | R1;扩展 R4 / R5 | -| 自动正确性与构建 | **限定验收**:Windows shell/ConPTY/呈现及 Windows/Linux 核心 CI、差分/恢复/队列/生命周期场景 | 产品打包、干净机器使用、依赖升级、长期回归和更广平台矩阵;#40 的 CI 纯夹具超时,以及窄窗口选择 #73 等独立失败仍未闭合;#72 保存完成判据的限定修正不代替完整回归 | R2 / R4 | +| 自动正确性与构建 | **限定验收**:Windows shell/ConPTY/呈现及 Windows/Linux 核心 CI、差分/恢复/队列/生命周期场景 | 产品打包、干净机器使用、依赖升级、长期回归和更广平台矩阵;#40 的 CI 纯夹具超时、窄窗口选择 #73 及系统剪贴板 #85/#99 等独立失败仍未闭合;#72 保存完成判据的限定修正不代替完整回归 | R2 / R4 | | Windows 产品交付 | **实现中,未验收**:首个 [v0.1.0-alpha.1 预发布](releases/v0.1.0-alpha.1.md)提供 Windows x64、静态 MSVC 运行库、附资源许可和构建身份的免安装 ZIP;未签名,已验环境限 Windows 11 本机与 Server 2025 CI,布局仍写入 LOCALAPPDATA | 这是 R1 体验包,尚非 R2 日常开发版;干净机器与更广平台矩阵、签名/安装、配置升级及持续运行仍待完成。Windows 10 未验收,Server 2022 已知资源门槛未过 | R2 / R3 | | Linux/macOS 与其他架构 | **未实现**客户端;Linux 核心 CI 已有。[官方平台范围台账](../research/windterm-2.7.0-platform-scope.md)已固定 2.7.0 的 Windows x86/x64、macOS x64、Linux x64 资产及声明下限;这不是 TermForge 支持或实测结论 | 最终需真实 Linux/macOS 客户端;平台调查可提前进行,整合及完整验收排在 Windows 11 x64 完整版本之后。其他系统版本、最低版本和架构由用户后续明确;旧系统及 ARM 等保持调查记录,不自动承诺或排除,也不能由核心 CI 推断产品支持 | 持续调查;R5 全平台出口 | | 吞吐、响应、内存与稳定性 | **实现中,未验收**:已有机制实验、连续 CPU 区间校准与合成回归;候选字素改动的受限诊断中 project/interactive 吞吐中位数约下降 16%/9%,由 [#54](https://github.com/JavaZeroo/termforge/issues/54) 跟踪 | 共享宿主、allocator 包装与缺少真实呈现/输入时延端点使该诊断不构成正式预算。仍需同负载/同正确性、无插桩对照、观测开销和长期/多会话公平性;可靠原版基线后提出逐项预算及允许波动范围,**由用户明确确认**。与 WindTerm 的实际差距**待取证** | 当前优先;贯穿 R1–R5 | diff --git a/docs/research/clipboard-stage-observation.md b/docs/research/clipboard-stage-observation.md new file mode 100644 index 00000000..f57ab8b7 --- /dev/null +++ b/docs/research/clipboard-stage-observation.md @@ -0,0 +1,45 @@ +# Hosted 剪贴板超时的有界阶段观测 + +[#99](https://github.com/JavaZeroo/termforge/issues/99) 的原 `ui-clipboard-system` 在 occupied 错误反馈后触发 launcher 45 秒期限。原件无法区分后续等待边界。本调查加入临时阶段记录,完成预先固定的一个批次:**两轮均通过,原超时未复现,原因仍未知**。完整 CI 的其他失败分别保留,可靠性缺口没有关闭。 + +## 方法与身份 + +观测源码 [`b9789543a792b0a0b96139377ea43f4dfab46626`](https://github.com/JavaZeroo/termforge/commit/b9789543a792b0a0b96139377ea43f4dfab46626),tree `bb8d6ce8464ec8b50ff86000dfb1f0b39b3b9888`,基于 #98 的 `678804ff5201fab4296b133af9457b7120739b68`。只在诊断分支首轮 push/default Windows hosted VM 启用;PR 与 external candidate 检查关闭记录。 + +原 `ShellTests.test_system_clipboard_product_read_errors_cancel_and_close` 的两轮、四 case、256 B 基线、精确重试字节、45/60 秒期限及完整回归上下文未改。本机仅构建和验证非 hosted 拒绝守卫,没有调用真实系统剪贴板。 + +记录白名单为 case/stage、callback 计数、单调时长、固定动作前后事件、paste busy、helper 零等待状态及 owner 固定步骤/错误数字。稳定阶段最多每秒一条,总量最多 256 条;不含剪贴板或终端文字、PID/HWND、路径或凭据。owner 多个原子字段不是一致快照;事件只表示调用边界,文件 I/O 可能影响时序。 + +观测结束后,临时 C++ 记录与 CI 启用步骤全部撤回,三个文件恢复到上述父提交;固定观测提交保留原代码供审查。当前代码不会自动继续这个诊断批次,没有因本调查改变产品行为。 + +## 实际结果 + +[push/default run 40459936505,Windows job 122041868650](https://github.com/JavaZeroo/termforge/actions/runs/40459936505/job/122041868650) 使用默认核心与系统 ConPTY。[白名单摘要](../../experiments/shell/results/2026-10-27-clipboard-stages/validation.json)记录来源、构建清单和原件哈希;[trace 0](../../experiments/shell/results/2026-10-27-clipboard-stages/trace-0.jsonl)及[trace 1](../../experiments/shell/results/2026-10-27-clipboard-stages/trace-1.jsonl)经字段检查后保留原字节。 + +| 检查 | 第一轮 | 第二轮 | +|---|---|---| +| occupied / oversize / cancel / close 接收字节 | 270 / 270 / 268 / 256 | 270 / 270 / 268 / 256 | +| 记录条数 / callback 次数 | 72 / 45 | 72 / 45 | +| complete-before-close 记录 | 1614 ms | 1527 ms | +| launcher 退出 / outer 超时 / stderr | 0 / false / 空 | 0 / false / 空 | +| Job active / total / terminated | 0 / 27 / 0 | 0 / 27 / 0 | +| desktop 回收 / 记录截断 | true / false | true / false | + +原 `validate_clipboard_workflow` 与结果 validator 离线重算通过,包含四 case 的独立字节预期、owner 释放/退出、helper 回收及错误反馈。cancel/close 的晚发布按既有合同观察到 1418、requester 已退出,没有改记为成功发布。另核对 trace 字段集合/类型、记录序号、时间和 callback 单调性、各 case 阶段/动作顺序及条数上限。1614/1527 ms 是带诊断的关闭前记录,不是自然退出、性能或呈现端点。 + +[artifact 12714865514](https://github.com/JavaZeroo/termforge/actions/runs/40459936505/artifacts/12714865514) 为 4269771 B,ZIP SHA-256 `4b597e169d36624c87a6a9859e0fc3b2a37846569bca3eaca4c51322ec7d2791`,与 GitHub digest 一致。完整 ZIP、原文件和离线审计保留在 ignored `local/r99`;首次下载的 1572864 B 不完整文件保留并排除。CI 清单记录该次 clean build 的 shell、launcher、clipboard reader、input client 四个 EXE 哈希及 checkout;EXE 本体未归档,没有声称在本地重新哈希。含进程身份的原 workflow/sample 不直接公开。 + +## 完整 CI 与独立失败 + +| 检查 | Windows | Linux | 状态 | +|---|---|---|---| +| push/default,40459936505 | 50/52,280.05 s | 32/33,12.67 s | 整体失败,Windows 启用诊断 | +| PR/default,40459942201 | 51/52,276.72 s | 32/33,12.95 s | 整体失败,诊断关闭 | +| push/external candidate,40459936582 | success | success | 独立候选配置 | +| PR/external candidate,40459942259 | success | success | 独立候选配置 | + +PR 实际 checkout 为 `b58c029fc0f861c2e7d251d125b18ec70e80dda9`。四个 default job 均因本次新增清单路径触发既有 workflow 路径计数断言 `2 != 1`。本地单独复现该断言;撤回临时工作流后,原 ActionOracleTest 7/7 通过(0.487 s)。这是诊断配置回归的修正,不是 #99 超时修复;后续 CI 不回填这一批为通过。 + +push Windows 另有 `test_mouse_selection_to_real_system_clipboard` 的 `ui-copy-system` 第二轮 `OpenClipboard: 5`。第一轮原 validator 离线通过;第二轮已有 12 条基础记录、22 条交互记录,最后为实际 Copy popup 成功读回。之后、构造自有占用 owner 之前有三个夹具剪贴板调用,具体哪个失败及原因未知。此入口补入 [#85](https://github.com/JavaZeroo/termforge/issues/85),与旧入口及 #99 分列,不由同一 API 错误推断同因。 + +本批已按预定停止条件结束,没有追加重试或改变超时、字节门槛。#99 继续开放;本报告不声称原因修复、完整产品验收或 WindTerm 等价。后续执行状态由 issue 维护。 diff --git a/experiments/shell/results/2026-10-27-clipboard-stages/trace-0.jsonl b/experiments/shell/results/2026-10-27-clipboard-stages/trace-0.jsonl new file mode 100644 index 00000000..7c11e336 --- /dev/null +++ b/experiments/shell/results/2026-10-27-clipboard-stages/trace-0.jsonl @@ -0,0 +1,72 @@ +{"schema":"termforge-clipboard-stage-r99-v1","tag":"[DEBUG-r99]","record":0,"turn":1,"elapsed_ms":61,"case":0,"stage":0,"event":"tick","paste_busy":false,"helper_wait":null,"owner_step":null,"owner_released_wait":null,"owner_worker_error":null,"owner_native_error":null,"truncated":false} +{"schema":"termforge-clipboard-stage-r99-v1","tag":"[DEBUG-r99]","record":1,"turn":3,"elapsed_ms":121,"case":0,"stage":1,"event":"tick","paste_busy":false,"helper_wait":null,"owner_step":null,"owner_released_wait":null,"owner_worker_error":null,"owner_native_error":null,"truncated":false} +{"schema":"termforge-clipboard-stage-r99-v1","tag":"[DEBUG-r99]","record":2,"turn":5,"elapsed_ms":189,"case":0,"stage":2,"event":"tick","paste_busy":false,"helper_wait":null,"owner_step":null,"owner_released_wait":null,"owner_worker_error":null,"owner_native_error":null,"truncated":false} +{"schema":"termforge-clipboard-stage-r99-v1","tag":"[DEBUG-r99]","record":3,"turn":6,"elapsed_ms":220,"case":0,"stage":3,"event":"tick","paste_busy":false,"helper_wait":null,"owner_step":null,"owner_released_wait":null,"owner_worker_error":null,"owner_native_error":null,"truncated":false} +{"schema":"termforge-clipboard-stage-r99-v1","tag":"[DEBUG-r99]","record":4,"turn":6,"elapsed_ms":220,"case":0,"stage":3,"event":"prepare-owner-begin","paste_busy":false,"helper_wait":null,"owner_step":null,"owner_released_wait":null,"owner_worker_error":null,"owner_native_error":null,"truncated":false} +{"schema":"termforge-clipboard-stage-r99-v1","tag":"[DEBUG-r99]","record":5,"turn":6,"elapsed_ms":222,"case":0,"stage":3,"event":"prepare-owner-end","paste_busy":false,"helper_wait":null,"owner_step":"Wait-release","owner_released_wait":258,"owner_worker_error":0,"owner_native_error":0,"truncated":false} +{"schema":"termforge-clipboard-stage-r99-v1","tag":"[DEBUG-r99]","record":6,"turn":7,"elapsed_ms":251,"case":0,"stage":4,"event":"tick","paste_busy":true,"helper_wait":0,"owner_step":"Wait-release","owner_released_wait":258,"owner_worker_error":0,"owner_native_error":0,"truncated":false} +{"schema":"termforge-clipboard-stage-r99-v1","tag":"[DEBUG-r99]","record":7,"turn":9,"elapsed_ms":315,"case":0,"stage":5,"event":"tick","paste_busy":false,"helper_wait":0,"owner_step":"Wait-release","owner_released_wait":258,"owner_worker_error":0,"owner_native_error":0,"truncated":false} +{"schema":"termforge-clipboard-stage-r99-v1","tag":"[DEBUG-r99]","record":8,"turn":9,"elapsed_ms":315,"case":0,"stage":5,"event":"owner-release-begin","paste_busy":false,"helper_wait":0,"owner_step":"Wait-release","owner_released_wait":258,"owner_worker_error":0,"owner_native_error":0,"truncated":false} +{"schema":"termforge-clipboard-stage-r99-v1","tag":"[DEBUG-r99]","record":9,"turn":9,"elapsed_ms":315,"case":0,"stage":5,"event":"owner-release-end","paste_busy":false,"helper_wait":0,"owner_step":"GetMessageW","owner_released_wait":0,"owner_worker_error":0,"owner_native_error":0,"truncated":false} +{"schema":"termforge-clipboard-stage-r99-v1","tag":"[DEBUG-r99]","record":10,"turn":10,"elapsed_ms":346,"case":0,"stage":6,"event":"tick","paste_busy":false,"helper_wait":0,"owner_step":"GetMessageW","owner_released_wait":0,"owner_worker_error":0,"owner_native_error":0,"truncated":false} +{"schema":"termforge-clipboard-stage-r99-v1","tag":"[DEBUG-r99]","record":11,"turn":10,"elapsed_ms":346,"case":0,"stage":6,"event":"owner-finish-begin","paste_busy":false,"helper_wait":0,"owner_step":"GetMessageW","owner_released_wait":0,"owner_worker_error":0,"owner_native_error":0,"truncated":false} +{"schema":"termforge-clipboard-stage-r99-v1","tag":"[DEBUG-r99]","record":12,"turn":10,"elapsed_ms":347,"case":0,"stage":6,"event":"owner-finish-end","paste_busy":false,"helper_wait":0,"owner_step":"GetMessageW","owner_released_wait":0,"owner_worker_error":0,"owner_native_error":0,"truncated":false} +{"schema":"termforge-clipboard-stage-r99-v1","tag":"[DEBUG-r99]","record":13,"turn":10,"elapsed_ms":347,"case":0,"stage":6,"event":"owner-reset-end","paste_busy":false,"helper_wait":0,"owner_step":null,"owner_released_wait":null,"owner_worker_error":null,"owner_native_error":null,"truncated":false} +{"schema":"termforge-clipboard-stage-r99-v1","tag":"[DEBUG-r99]","record":14,"turn":10,"elapsed_ms":347,"case":0,"stage":6,"event":"after-marker-begin","paste_busy":false,"helper_wait":0,"owner_step":null,"owner_released_wait":null,"owner_worker_error":null,"owner_native_error":null,"truncated":false} +{"schema":"termforge-clipboard-stage-r99-v1","tag":"[DEBUG-r99]","record":15,"turn":10,"elapsed_ms":350,"case":0,"stage":7,"event":"after-marker-end","paste_busy":false,"helper_wait":0,"owner_step":null,"owner_released_wait":null,"owner_worker_error":null,"owner_native_error":null,"truncated":false} +{"schema":"termforge-clipboard-stage-r99-v1","tag":"[DEBUG-r99]","record":16,"turn":11,"elapsed_ms":383,"case":0,"stage":7,"event":"retry-clipboard-begin","paste_busy":false,"helper_wait":0,"owner_step":null,"owner_released_wait":null,"owner_worker_error":null,"owner_native_error":null,"truncated":false} +{"schema":"termforge-clipboard-stage-r99-v1","tag":"[DEBUG-r99]","record":17,"turn":11,"elapsed_ms":383,"case":0,"stage":7,"event":"retry-clipboard-end","paste_busy":false,"helper_wait":0,"owner_step":null,"owner_released_wait":null,"owner_worker_error":null,"owner_native_error":null,"truncated":false} +{"schema":"termforge-clipboard-stage-r99-v1","tag":"[DEBUG-r99]","record":18,"turn":11,"elapsed_ms":383,"case":0,"stage":7,"event":"retry-command-begin","paste_busy":false,"helper_wait":0,"owner_step":null,"owner_released_wait":null,"owner_worker_error":null,"owner_native_error":null,"truncated":false} +{"schema":"termforge-clipboard-stage-r99-v1","tag":"[DEBUG-r99]","record":19,"turn":11,"elapsed_ms":385,"case":0,"stage":8,"event":"retry-command-end","paste_busy":true,"helper_wait":0,"owner_step":null,"owner_released_wait":null,"owner_worker_error":null,"owner_native_error":null,"truncated":false} +{"schema":"termforge-clipboard-stage-r99-v1","tag":"[DEBUG-r99]","record":20,"turn":14,"elapsed_ms":501,"case":0,"stage":9,"event":"tick","paste_busy":false,"helper_wait":0,"owner_step":null,"owner_released_wait":null,"owner_worker_error":null,"owner_native_error":null,"truncated":false} +{"schema":"termforge-clipboard-stage-r99-v1","tag":"[DEBUG-r99]","record":21,"turn":16,"elapsed_ms":580,"case":1,"stage":2,"event":"tick","paste_busy":false,"helper_wait":null,"owner_step":null,"owner_released_wait":null,"owner_worker_error":null,"owner_native_error":null,"truncated":false} +{"schema":"termforge-clipboard-stage-r99-v1","tag":"[DEBUG-r99]","record":22,"turn":17,"elapsed_ms":612,"case":1,"stage":3,"event":"tick","paste_busy":false,"helper_wait":null,"owner_step":null,"owner_released_wait":null,"owner_worker_error":null,"owner_native_error":null,"truncated":false} +{"schema":"termforge-clipboard-stage-r99-v1","tag":"[DEBUG-r99]","record":23,"turn":17,"elapsed_ms":612,"case":1,"stage":3,"event":"prepare-owner-begin","paste_busy":false,"helper_wait":null,"owner_step":null,"owner_released_wait":null,"owner_worker_error":null,"owner_native_error":null,"truncated":false} +{"schema":"termforge-clipboard-stage-r99-v1","tag":"[DEBUG-r99]","record":24,"turn":17,"elapsed_ms":614,"case":1,"stage":3,"event":"prepare-owner-end","paste_busy":false,"helper_wait":null,"owner_step":null,"owner_released_wait":null,"owner_worker_error":null,"owner_native_error":null,"truncated":false} +{"schema":"termforge-clipboard-stage-r99-v1","tag":"[DEBUG-r99]","record":25,"turn":18,"elapsed_ms":644,"case":1,"stage":4,"event":"tick","paste_busy":true,"helper_wait":0,"owner_step":null,"owner_released_wait":null,"owner_worker_error":null,"owner_native_error":null,"truncated":false} +{"schema":"termforge-clipboard-stage-r99-v1","tag":"[DEBUG-r99]","record":26,"turn":21,"elapsed_ms":741,"case":1,"stage":5,"event":"tick","paste_busy":false,"helper_wait":0,"owner_step":null,"owner_released_wait":null,"owner_worker_error":null,"owner_native_error":null,"truncated":false} +{"schema":"termforge-clipboard-stage-r99-v1","tag":"[DEBUG-r99]","record":27,"turn":22,"elapsed_ms":787,"case":1,"stage":6,"event":"tick","paste_busy":false,"helper_wait":0,"owner_step":null,"owner_released_wait":null,"owner_worker_error":null,"owner_native_error":null,"truncated":false} +{"schema":"termforge-clipboard-stage-r99-v1","tag":"[DEBUG-r99]","record":28,"turn":22,"elapsed_ms":787,"case":1,"stage":6,"event":"owner-finish-begin","paste_busy":false,"helper_wait":0,"owner_step":null,"owner_released_wait":null,"owner_worker_error":null,"owner_native_error":null,"truncated":false} +{"schema":"termforge-clipboard-stage-r99-v1","tag":"[DEBUG-r99]","record":29,"turn":22,"elapsed_ms":787,"case":1,"stage":6,"event":"owner-finish-end","paste_busy":false,"helper_wait":0,"owner_step":null,"owner_released_wait":null,"owner_worker_error":null,"owner_native_error":null,"truncated":false} +{"schema":"termforge-clipboard-stage-r99-v1","tag":"[DEBUG-r99]","record":30,"turn":22,"elapsed_ms":788,"case":1,"stage":6,"event":"owner-reset-end","paste_busy":false,"helper_wait":0,"owner_step":null,"owner_released_wait":null,"owner_worker_error":null,"owner_native_error":null,"truncated":false} +{"schema":"termforge-clipboard-stage-r99-v1","tag":"[DEBUG-r99]","record":31,"turn":22,"elapsed_ms":788,"case":1,"stage":6,"event":"after-marker-begin","paste_busy":false,"helper_wait":0,"owner_step":null,"owner_released_wait":null,"owner_worker_error":null,"owner_native_error":null,"truncated":false} +{"schema":"termforge-clipboard-stage-r99-v1","tag":"[DEBUG-r99]","record":32,"turn":22,"elapsed_ms":792,"case":1,"stage":7,"event":"after-marker-end","paste_busy":false,"helper_wait":0,"owner_step":null,"owner_released_wait":null,"owner_worker_error":null,"owner_native_error":null,"truncated":false} +{"schema":"termforge-clipboard-stage-r99-v1","tag":"[DEBUG-r99]","record":33,"turn":23,"elapsed_ms":825,"case":1,"stage":7,"event":"retry-clipboard-begin","paste_busy":false,"helper_wait":0,"owner_step":null,"owner_released_wait":null,"owner_worker_error":null,"owner_native_error":null,"truncated":false} +{"schema":"termforge-clipboard-stage-r99-v1","tag":"[DEBUG-r99]","record":34,"turn":23,"elapsed_ms":825,"case":1,"stage":7,"event":"retry-clipboard-end","paste_busy":false,"helper_wait":0,"owner_step":null,"owner_released_wait":null,"owner_worker_error":null,"owner_native_error":null,"truncated":false} +{"schema":"termforge-clipboard-stage-r99-v1","tag":"[DEBUG-r99]","record":35,"turn":23,"elapsed_ms":826,"case":1,"stage":7,"event":"retry-command-begin","paste_busy":false,"helper_wait":0,"owner_step":null,"owner_released_wait":null,"owner_worker_error":null,"owner_native_error":null,"truncated":false} +{"schema":"termforge-clipboard-stage-r99-v1","tag":"[DEBUG-r99]","record":36,"turn":23,"elapsed_ms":828,"case":1,"stage":8,"event":"retry-command-end","paste_busy":true,"helper_wait":0,"owner_step":null,"owner_released_wait":null,"owner_worker_error":null,"owner_native_error":null,"truncated":false} +{"schema":"termforge-clipboard-stage-r99-v1","tag":"[DEBUG-r99]","record":37,"turn":27,"elapsed_ms":944,"case":1,"stage":9,"event":"tick","paste_busy":false,"helper_wait":0,"owner_step":null,"owner_released_wait":null,"owner_worker_error":null,"owner_native_error":null,"truncated":false} +{"schema":"termforge-clipboard-stage-r99-v1","tag":"[DEBUG-r99]","record":38,"turn":29,"elapsed_ms":1040,"case":2,"stage":2,"event":"tick","paste_busy":false,"helper_wait":null,"owner_step":null,"owner_released_wait":null,"owner_worker_error":null,"owner_native_error":null,"truncated":false} +{"schema":"termforge-clipboard-stage-r99-v1","tag":"[DEBUG-r99]","record":39,"turn":30,"elapsed_ms":1087,"case":2,"stage":3,"event":"tick","paste_busy":false,"helper_wait":null,"owner_step":null,"owner_released_wait":null,"owner_worker_error":null,"owner_native_error":null,"truncated":false} +{"schema":"termforge-clipboard-stage-r99-v1","tag":"[DEBUG-r99]","record":40,"turn":30,"elapsed_ms":1087,"case":2,"stage":3,"event":"prepare-owner-begin","paste_busy":false,"helper_wait":null,"owner_step":null,"owner_released_wait":null,"owner_worker_error":null,"owner_native_error":null,"truncated":false} +{"schema":"termforge-clipboard-stage-r99-v1","tag":"[DEBUG-r99]","record":41,"turn":30,"elapsed_ms":1089,"case":2,"stage":3,"event":"prepare-owner-end","paste_busy":false,"helper_wait":null,"owner_step":"GetMessageW","owner_released_wait":258,"owner_worker_error":0,"owner_native_error":0,"truncated":false} +{"schema":"termforge-clipboard-stage-r99-v1","tag":"[DEBUG-r99]","record":42,"turn":31,"elapsed_ms":1135,"case":2,"stage":4,"event":"tick","paste_busy":true,"helper_wait":258,"owner_step":"WaitForSingleObject-render-release","owner_released_wait":258,"owner_worker_error":0,"owner_native_error":0,"truncated":false} +{"schema":"termforge-clipboard-stage-r99-v1","tag":"[DEBUG-r99]","record":43,"turn":32,"elapsed_ms":1167,"case":2,"stage":5,"event":"tick","paste_busy":false,"helper_wait":0,"owner_step":"WaitForSingleObject-render-release","owner_released_wait":258,"owner_worker_error":0,"owner_native_error":0,"truncated":false} +{"schema":"termforge-clipboard-stage-r99-v1","tag":"[DEBUG-r99]","record":44,"turn":32,"elapsed_ms":1167,"case":2,"stage":5,"event":"owner-release-begin","paste_busy":false,"helper_wait":0,"owner_step":"WaitForSingleObject-render-release","owner_released_wait":258,"owner_worker_error":0,"owner_native_error":0,"truncated":false} +{"schema":"termforge-clipboard-stage-r99-v1","tag":"[DEBUG-r99]","record":45,"turn":32,"elapsed_ms":1167,"case":2,"stage":5,"event":"owner-release-end","paste_busy":false,"helper_wait":0,"owner_step":"SetEvent-render-released","owner_released_wait":0,"owner_worker_error":1418,"owner_native_error":1418,"truncated":false} +{"schema":"termforge-clipboard-stage-r99-v1","tag":"[DEBUG-r99]","record":46,"turn":33,"elapsed_ms":1214,"case":2,"stage":6,"event":"tick","paste_busy":false,"helper_wait":0,"owner_step":"SetEvent-render-released","owner_released_wait":0,"owner_worker_error":1418,"owner_native_error":1418,"truncated":false} +{"schema":"termforge-clipboard-stage-r99-v1","tag":"[DEBUG-r99]","record":47,"turn":33,"elapsed_ms":1214,"case":2,"stage":6,"event":"owner-finish-begin","paste_busy":false,"helper_wait":0,"owner_step":"SetEvent-render-released","owner_released_wait":0,"owner_worker_error":1418,"owner_native_error":1418,"truncated":false} +{"schema":"termforge-clipboard-stage-r99-v1","tag":"[DEBUG-r99]","record":48,"turn":33,"elapsed_ms":1215,"case":2,"stage":6,"event":"owner-finish-end","paste_busy":false,"helper_wait":0,"owner_step":"GetMessageW","owner_released_wait":0,"owner_worker_error":1418,"owner_native_error":1418,"truncated":false} +{"schema":"termforge-clipboard-stage-r99-v1","tag":"[DEBUG-r99]","record":49,"turn":33,"elapsed_ms":1216,"case":2,"stage":6,"event":"owner-reset-end","paste_busy":false,"helper_wait":0,"owner_step":null,"owner_released_wait":null,"owner_worker_error":null,"owner_native_error":null,"truncated":false} +{"schema":"termforge-clipboard-stage-r99-v1","tag":"[DEBUG-r99]","record":50,"turn":33,"elapsed_ms":1216,"case":2,"stage":6,"event":"after-marker-begin","paste_busy":false,"helper_wait":0,"owner_step":null,"owner_released_wait":null,"owner_worker_error":null,"owner_native_error":null,"truncated":false} +{"schema":"termforge-clipboard-stage-r99-v1","tag":"[DEBUG-r99]","record":51,"turn":33,"elapsed_ms":1219,"case":2,"stage":7,"event":"after-marker-end","paste_busy":false,"helper_wait":0,"owner_step":null,"owner_released_wait":null,"owner_worker_error":null,"owner_native_error":null,"truncated":false} +{"schema":"termforge-clipboard-stage-r99-v1","tag":"[DEBUG-r99]","record":52,"turn":34,"elapsed_ms":1251,"case":2,"stage":7,"event":"retry-clipboard-begin","paste_busy":false,"helper_wait":0,"owner_step":null,"owner_released_wait":null,"owner_worker_error":null,"owner_native_error":null,"truncated":false} +{"schema":"termforge-clipboard-stage-r99-v1","tag":"[DEBUG-r99]","record":53,"turn":34,"elapsed_ms":1251,"case":2,"stage":7,"event":"retry-clipboard-end","paste_busy":false,"helper_wait":0,"owner_step":null,"owner_released_wait":null,"owner_worker_error":null,"owner_native_error":null,"truncated":false} +{"schema":"termforge-clipboard-stage-r99-v1","tag":"[DEBUG-r99]","record":54,"turn":34,"elapsed_ms":1252,"case":2,"stage":7,"event":"retry-command-begin","paste_busy":false,"helper_wait":0,"owner_step":null,"owner_released_wait":null,"owner_worker_error":null,"owner_native_error":null,"truncated":false} +{"schema":"termforge-clipboard-stage-r99-v1","tag":"[DEBUG-r99]","record":55,"turn":34,"elapsed_ms":1254,"case":2,"stage":8,"event":"retry-command-end","paste_busy":true,"helper_wait":0,"owner_step":null,"owner_released_wait":null,"owner_worker_error":null,"owner_native_error":null,"truncated":false} +{"schema":"termforge-clipboard-stage-r99-v1","tag":"[DEBUG-r99]","record":56,"turn":38,"elapsed_ms":1371,"case":2,"stage":9,"event":"tick","paste_busy":false,"helper_wait":0,"owner_step":null,"owner_released_wait":null,"owner_worker_error":null,"owner_native_error":null,"truncated":false} +{"schema":"termforge-clipboard-stage-r99-v1","tag":"[DEBUG-r99]","record":57,"turn":40,"elapsed_ms":1451,"case":3,"stage":2,"event":"tick","paste_busy":false,"helper_wait":null,"owner_step":null,"owner_released_wait":null,"owner_worker_error":null,"owner_native_error":null,"truncated":false} +{"schema":"termforge-clipboard-stage-r99-v1","tag":"[DEBUG-r99]","record":58,"turn":41,"elapsed_ms":1483,"case":3,"stage":3,"event":"tick","paste_busy":false,"helper_wait":null,"owner_step":null,"owner_released_wait":null,"owner_worker_error":null,"owner_native_error":null,"truncated":false} +{"schema":"termforge-clipboard-stage-r99-v1","tag":"[DEBUG-r99]","record":59,"turn":41,"elapsed_ms":1483,"case":3,"stage":3,"event":"prepare-owner-begin","paste_busy":false,"helper_wait":null,"owner_step":null,"owner_released_wait":null,"owner_worker_error":null,"owner_native_error":null,"truncated":false} +{"schema":"termforge-clipboard-stage-r99-v1","tag":"[DEBUG-r99]","record":60,"turn":41,"elapsed_ms":1484,"case":3,"stage":3,"event":"prepare-owner-end","paste_busy":false,"helper_wait":null,"owner_step":"GetMessageW","owner_released_wait":258,"owner_worker_error":0,"owner_native_error":0,"truncated":false} +{"schema":"termforge-clipboard-stage-r99-v1","tag":"[DEBUG-r99]","record":61,"turn":42,"elapsed_ms":1514,"case":3,"stage":4,"event":"tick","paste_busy":true,"helper_wait":258,"owner_step":"WaitForSingleObject-render-release","owner_released_wait":258,"owner_worker_error":0,"owner_native_error":0,"truncated":false} +{"schema":"termforge-clipboard-stage-r99-v1","tag":"[DEBUG-r99]","record":62,"turn":43,"elapsed_ms":1546,"case":3,"stage":5,"event":"tick","paste_busy":null,"helper_wait":0,"owner_step":"WaitForSingleObject-render-release","owner_released_wait":258,"owner_worker_error":0,"owner_native_error":0,"truncated":false} +{"schema":"termforge-clipboard-stage-r99-v1","tag":"[DEBUG-r99]","record":63,"turn":43,"elapsed_ms":1547,"case":3,"stage":5,"event":"owner-release-begin","paste_busy":null,"helper_wait":0,"owner_step":"WaitForSingleObject-render-release","owner_released_wait":258,"owner_worker_error":0,"owner_native_error":0,"truncated":false} +{"schema":"termforge-clipboard-stage-r99-v1","tag":"[DEBUG-r99]","record":64,"turn":43,"elapsed_ms":1547,"case":3,"stage":5,"event":"owner-release-end","paste_busy":null,"helper_wait":0,"owner_step":"WaitForSingleObject-render-release","owner_released_wait":258,"owner_worker_error":0,"owner_native_error":0,"truncated":false} +{"schema":"termforge-clipboard-stage-r99-v1","tag":"[DEBUG-r99]","record":65,"turn":44,"elapsed_ms":1580,"case":3,"stage":6,"event":"tick","paste_busy":null,"helper_wait":0,"owner_step":"SetEvent-render-released","owner_released_wait":0,"owner_worker_error":1418,"owner_native_error":1418,"truncated":false} +{"schema":"termforge-clipboard-stage-r99-v1","tag":"[DEBUG-r99]","record":66,"turn":44,"elapsed_ms":1580,"case":3,"stage":6,"event":"owner-finish-begin","paste_busy":null,"helper_wait":0,"owner_step":"SetEvent-render-released","owner_released_wait":0,"owner_worker_error":1418,"owner_native_error":1418,"truncated":false} +{"schema":"termforge-clipboard-stage-r99-v1","tag":"[DEBUG-r99]","record":67,"turn":44,"elapsed_ms":1582,"case":3,"stage":6,"event":"owner-finish-end","paste_busy":null,"helper_wait":0,"owner_step":"GetMessageW","owner_released_wait":0,"owner_worker_error":1418,"owner_native_error":1418,"truncated":false} +{"schema":"termforge-clipboard-stage-r99-v1","tag":"[DEBUG-r99]","record":68,"turn":44,"elapsed_ms":1582,"case":3,"stage":6,"event":"owner-reset-end","paste_busy":null,"helper_wait":0,"owner_step":null,"owner_released_wait":null,"owner_worker_error":null,"owner_native_error":null,"truncated":false} +{"schema":"termforge-clipboard-stage-r99-v1","tag":"[DEBUG-r99]","record":69,"turn":44,"elapsed_ms":1582,"case":3,"stage":6,"event":"after-marker-begin","paste_busy":null,"helper_wait":0,"owner_step":null,"owner_released_wait":null,"owner_worker_error":null,"owner_native_error":null,"truncated":false} +{"schema":"termforge-clipboard-stage-r99-v1","tag":"[DEBUG-r99]","record":70,"turn":44,"elapsed_ms":1584,"case":3,"stage":7,"event":"after-marker-end","paste_busy":null,"helper_wait":0,"owner_step":null,"owner_released_wait":null,"owner_worker_error":null,"owner_native_error":null,"truncated":false} +{"schema":"termforge-clipboard-stage-r99-v1","tag":"[DEBUG-r99]","record":71,"turn":45,"elapsed_ms":1614,"case":3,"stage":100,"event":"complete-before-close","paste_busy":null,"helper_wait":null,"owner_step":null,"owner_released_wait":null,"owner_worker_error":null,"owner_native_error":null,"truncated":false} diff --git a/experiments/shell/results/2026-10-27-clipboard-stages/trace-1.jsonl b/experiments/shell/results/2026-10-27-clipboard-stages/trace-1.jsonl new file mode 100644 index 00000000..d6687b3f --- /dev/null +++ b/experiments/shell/results/2026-10-27-clipboard-stages/trace-1.jsonl @@ -0,0 +1,72 @@ +{"schema":"termforge-clipboard-stage-r99-v1","tag":"[DEBUG-r99]","record":0,"turn":1,"elapsed_ms":63,"case":0,"stage":0,"event":"tick","paste_busy":false,"helper_wait":null,"owner_step":null,"owner_released_wait":null,"owner_worker_error":null,"owner_native_error":null,"truncated":false} +{"schema":"termforge-clipboard-stage-r99-v1","tag":"[DEBUG-r99]","record":1,"turn":3,"elapsed_ms":115,"case":0,"stage":1,"event":"tick","paste_busy":false,"helper_wait":null,"owner_step":null,"owner_released_wait":null,"owner_worker_error":null,"owner_native_error":null,"truncated":false} +{"schema":"termforge-clipboard-stage-r99-v1","tag":"[DEBUG-r99]","record":2,"turn":5,"elapsed_ms":185,"case":0,"stage":2,"event":"tick","paste_busy":false,"helper_wait":null,"owner_step":null,"owner_released_wait":null,"owner_worker_error":null,"owner_native_error":null,"truncated":false} +{"schema":"termforge-clipboard-stage-r99-v1","tag":"[DEBUG-r99]","record":3,"turn":7,"elapsed_ms":253,"case":0,"stage":3,"event":"tick","paste_busy":false,"helper_wait":null,"owner_step":null,"owner_released_wait":null,"owner_worker_error":null,"owner_native_error":null,"truncated":false} +{"schema":"termforge-clipboard-stage-r99-v1","tag":"[DEBUG-r99]","record":4,"turn":7,"elapsed_ms":254,"case":0,"stage":3,"event":"prepare-owner-begin","paste_busy":false,"helper_wait":null,"owner_step":null,"owner_released_wait":null,"owner_worker_error":null,"owner_native_error":null,"truncated":false} +{"schema":"termforge-clipboard-stage-r99-v1","tag":"[DEBUG-r99]","record":5,"turn":7,"elapsed_ms":255,"case":0,"stage":3,"event":"prepare-owner-end","paste_busy":false,"helper_wait":null,"owner_step":"Wait-release","owner_released_wait":258,"owner_worker_error":0,"owner_native_error":0,"truncated":false} +{"schema":"termforge-clipboard-stage-r99-v1","tag":"[DEBUG-r99]","record":6,"turn":8,"elapsed_ms":285,"case":0,"stage":4,"event":"tick","paste_busy":true,"helper_wait":0,"owner_step":"Wait-release","owner_released_wait":258,"owner_worker_error":0,"owner_native_error":0,"truncated":false} +{"schema":"termforge-clipboard-stage-r99-v1","tag":"[DEBUG-r99]","record":7,"turn":10,"elapsed_ms":364,"case":0,"stage":5,"event":"tick","paste_busy":false,"helper_wait":0,"owner_step":"Wait-release","owner_released_wait":258,"owner_worker_error":0,"owner_native_error":0,"truncated":false} +{"schema":"termforge-clipboard-stage-r99-v1","tag":"[DEBUG-r99]","record":8,"turn":10,"elapsed_ms":365,"case":0,"stage":5,"event":"owner-release-begin","paste_busy":false,"helper_wait":0,"owner_step":"Wait-release","owner_released_wait":258,"owner_worker_error":0,"owner_native_error":0,"truncated":false} +{"schema":"termforge-clipboard-stage-r99-v1","tag":"[DEBUG-r99]","record":9,"turn":10,"elapsed_ms":365,"case":0,"stage":5,"event":"owner-release-end","paste_busy":false,"helper_wait":0,"owner_step":"GetMessageW","owner_released_wait":0,"owner_worker_error":0,"owner_native_error":0,"truncated":false} +{"schema":"termforge-clipboard-stage-r99-v1","tag":"[DEBUG-r99]","record":10,"turn":11,"elapsed_ms":412,"case":0,"stage":6,"event":"tick","paste_busy":false,"helper_wait":0,"owner_step":"GetMessageW","owner_released_wait":0,"owner_worker_error":0,"owner_native_error":0,"truncated":false} +{"schema":"termforge-clipboard-stage-r99-v1","tag":"[DEBUG-r99]","record":11,"turn":11,"elapsed_ms":412,"case":0,"stage":6,"event":"owner-finish-begin","paste_busy":false,"helper_wait":0,"owner_step":"GetMessageW","owner_released_wait":0,"owner_worker_error":0,"owner_native_error":0,"truncated":false} +{"schema":"termforge-clipboard-stage-r99-v1","tag":"[DEBUG-r99]","record":12,"turn":11,"elapsed_ms":413,"case":0,"stage":6,"event":"owner-finish-end","paste_busy":false,"helper_wait":0,"owner_step":"GetMessageW","owner_released_wait":0,"owner_worker_error":0,"owner_native_error":0,"truncated":false} +{"schema":"termforge-clipboard-stage-r99-v1","tag":"[DEBUG-r99]","record":13,"turn":11,"elapsed_ms":413,"case":0,"stage":6,"event":"owner-reset-end","paste_busy":false,"helper_wait":0,"owner_step":null,"owner_released_wait":null,"owner_worker_error":null,"owner_native_error":null,"truncated":false} +{"schema":"termforge-clipboard-stage-r99-v1","tag":"[DEBUG-r99]","record":14,"turn":11,"elapsed_ms":413,"case":0,"stage":6,"event":"after-marker-begin","paste_busy":false,"helper_wait":0,"owner_step":null,"owner_released_wait":null,"owner_worker_error":null,"owner_native_error":null,"truncated":false} +{"schema":"termforge-clipboard-stage-r99-v1","tag":"[DEBUG-r99]","record":15,"turn":11,"elapsed_ms":416,"case":0,"stage":7,"event":"after-marker-end","paste_busy":false,"helper_wait":0,"owner_step":null,"owner_released_wait":null,"owner_worker_error":null,"owner_native_error":null,"truncated":false} +{"schema":"termforge-clipboard-stage-r99-v1","tag":"[DEBUG-r99]","record":16,"turn":12,"elapsed_ms":448,"case":0,"stage":7,"event":"retry-clipboard-begin","paste_busy":false,"helper_wait":0,"owner_step":null,"owner_released_wait":null,"owner_worker_error":null,"owner_native_error":null,"truncated":false} +{"schema":"termforge-clipboard-stage-r99-v1","tag":"[DEBUG-r99]","record":17,"turn":12,"elapsed_ms":448,"case":0,"stage":7,"event":"retry-clipboard-end","paste_busy":false,"helper_wait":0,"owner_step":null,"owner_released_wait":null,"owner_worker_error":null,"owner_native_error":null,"truncated":false} +{"schema":"termforge-clipboard-stage-r99-v1","tag":"[DEBUG-r99]","record":18,"turn":12,"elapsed_ms":449,"case":0,"stage":7,"event":"retry-command-begin","paste_busy":false,"helper_wait":0,"owner_step":null,"owner_released_wait":null,"owner_worker_error":null,"owner_native_error":null,"truncated":false} +{"schema":"termforge-clipboard-stage-r99-v1","tag":"[DEBUG-r99]","record":19,"turn":12,"elapsed_ms":451,"case":0,"stage":8,"event":"retry-command-end","paste_busy":true,"helper_wait":0,"owner_step":null,"owner_released_wait":null,"owner_worker_error":null,"owner_native_error":null,"truncated":false} +{"schema":"termforge-clipboard-stage-r99-v1","tag":"[DEBUG-r99]","record":20,"turn":16,"elapsed_ms":573,"case":0,"stage":9,"event":"tick","paste_busy":false,"helper_wait":0,"owner_step":null,"owner_released_wait":null,"owner_worker_error":null,"owner_native_error":null,"truncated":false} +{"schema":"termforge-clipboard-stage-r99-v1","tag":"[DEBUG-r99]","record":21,"turn":17,"elapsed_ms":603,"case":1,"stage":2,"event":"tick","paste_busy":false,"helper_wait":null,"owner_step":null,"owner_released_wait":null,"owner_worker_error":null,"owner_native_error":null,"truncated":false} +{"schema":"termforge-clipboard-stage-r99-v1","tag":"[DEBUG-r99]","record":22,"turn":18,"elapsed_ms":635,"case":1,"stage":3,"event":"tick","paste_busy":false,"helper_wait":null,"owner_step":null,"owner_released_wait":null,"owner_worker_error":null,"owner_native_error":null,"truncated":false} +{"schema":"termforge-clipboard-stage-r99-v1","tag":"[DEBUG-r99]","record":23,"turn":18,"elapsed_ms":635,"case":1,"stage":3,"event":"prepare-owner-begin","paste_busy":false,"helper_wait":null,"owner_step":null,"owner_released_wait":null,"owner_worker_error":null,"owner_native_error":null,"truncated":false} +{"schema":"termforge-clipboard-stage-r99-v1","tag":"[DEBUG-r99]","record":24,"turn":18,"elapsed_ms":637,"case":1,"stage":3,"event":"prepare-owner-end","paste_busy":false,"helper_wait":null,"owner_step":null,"owner_released_wait":null,"owner_worker_error":null,"owner_native_error":null,"truncated":false} +{"schema":"termforge-clipboard-stage-r99-v1","tag":"[DEBUG-r99]","record":25,"turn":19,"elapsed_ms":667,"case":1,"stage":4,"event":"tick","paste_busy":true,"helper_wait":0,"owner_step":null,"owner_released_wait":null,"owner_worker_error":null,"owner_native_error":null,"truncated":false} +{"schema":"termforge-clipboard-stage-r99-v1","tag":"[DEBUG-r99]","record":26,"turn":22,"elapsed_ms":762,"case":1,"stage":5,"event":"tick","paste_busy":false,"helper_wait":0,"owner_step":null,"owner_released_wait":null,"owner_worker_error":null,"owner_native_error":null,"truncated":false} +{"schema":"termforge-clipboard-stage-r99-v1","tag":"[DEBUG-r99]","record":27,"turn":23,"elapsed_ms":809,"case":1,"stage":6,"event":"tick","paste_busy":false,"helper_wait":0,"owner_step":null,"owner_released_wait":null,"owner_worker_error":null,"owner_native_error":null,"truncated":false} +{"schema":"termforge-clipboard-stage-r99-v1","tag":"[DEBUG-r99]","record":28,"turn":23,"elapsed_ms":810,"case":1,"stage":6,"event":"owner-finish-begin","paste_busy":false,"helper_wait":0,"owner_step":null,"owner_released_wait":null,"owner_worker_error":null,"owner_native_error":null,"truncated":false} +{"schema":"termforge-clipboard-stage-r99-v1","tag":"[DEBUG-r99]","record":29,"turn":23,"elapsed_ms":810,"case":1,"stage":6,"event":"owner-finish-end","paste_busy":false,"helper_wait":0,"owner_step":null,"owner_released_wait":null,"owner_worker_error":null,"owner_native_error":null,"truncated":false} +{"schema":"termforge-clipboard-stage-r99-v1","tag":"[DEBUG-r99]","record":30,"turn":23,"elapsed_ms":810,"case":1,"stage":6,"event":"owner-reset-end","paste_busy":false,"helper_wait":0,"owner_step":null,"owner_released_wait":null,"owner_worker_error":null,"owner_native_error":null,"truncated":false} +{"schema":"termforge-clipboard-stage-r99-v1","tag":"[DEBUG-r99]","record":31,"turn":23,"elapsed_ms":810,"case":1,"stage":6,"event":"after-marker-begin","paste_busy":false,"helper_wait":0,"owner_step":null,"owner_released_wait":null,"owner_worker_error":null,"owner_native_error":null,"truncated":false} +{"schema":"termforge-clipboard-stage-r99-v1","tag":"[DEBUG-r99]","record":32,"turn":23,"elapsed_ms":813,"case":1,"stage":7,"event":"after-marker-end","paste_busy":false,"helper_wait":0,"owner_step":null,"owner_released_wait":null,"owner_worker_error":null,"owner_native_error":null,"truncated":false} +{"schema":"termforge-clipboard-stage-r99-v1","tag":"[DEBUG-r99]","record":33,"turn":24,"elapsed_ms":847,"case":1,"stage":7,"event":"retry-clipboard-begin","paste_busy":false,"helper_wait":0,"owner_step":null,"owner_released_wait":null,"owner_worker_error":null,"owner_native_error":null,"truncated":false} +{"schema":"termforge-clipboard-stage-r99-v1","tag":"[DEBUG-r99]","record":34,"turn":24,"elapsed_ms":848,"case":1,"stage":7,"event":"retry-clipboard-end","paste_busy":false,"helper_wait":0,"owner_step":null,"owner_released_wait":null,"owner_worker_error":null,"owner_native_error":null,"truncated":false} +{"schema":"termforge-clipboard-stage-r99-v1","tag":"[DEBUG-r99]","record":35,"turn":24,"elapsed_ms":848,"case":1,"stage":7,"event":"retry-command-begin","paste_busy":false,"helper_wait":0,"owner_step":null,"owner_released_wait":null,"owner_worker_error":null,"owner_native_error":null,"truncated":false} +{"schema":"termforge-clipboard-stage-r99-v1","tag":"[DEBUG-r99]","record":36,"turn":24,"elapsed_ms":849,"case":1,"stage":8,"event":"retry-command-end","paste_busy":true,"helper_wait":0,"owner_step":null,"owner_released_wait":null,"owner_worker_error":null,"owner_native_error":null,"truncated":false} +{"schema":"termforge-clipboard-stage-r99-v1","tag":"[DEBUG-r99]","record":37,"turn":28,"elapsed_ms":970,"case":1,"stage":9,"event":"tick","paste_busy":false,"helper_wait":0,"owner_step":null,"owner_released_wait":null,"owner_worker_error":null,"owner_native_error":null,"truncated":false} +{"schema":"termforge-clipboard-stage-r99-v1","tag":"[DEBUG-r99]","record":38,"turn":29,"elapsed_ms":999,"case":2,"stage":2,"event":"tick","paste_busy":false,"helper_wait":null,"owner_step":null,"owner_released_wait":null,"owner_worker_error":null,"owner_native_error":null,"truncated":false} +{"schema":"termforge-clipboard-stage-r99-v1","tag":"[DEBUG-r99]","record":39,"turn":30,"elapsed_ms":1031,"case":2,"stage":3,"event":"tick","paste_busy":false,"helper_wait":null,"owner_step":null,"owner_released_wait":null,"owner_worker_error":null,"owner_native_error":null,"truncated":false} +{"schema":"termforge-clipboard-stage-r99-v1","tag":"[DEBUG-r99]","record":40,"turn":30,"elapsed_ms":1031,"case":2,"stage":3,"event":"prepare-owner-begin","paste_busy":false,"helper_wait":null,"owner_step":null,"owner_released_wait":null,"owner_worker_error":null,"owner_native_error":null,"truncated":false} +{"schema":"termforge-clipboard-stage-r99-v1","tag":"[DEBUG-r99]","record":41,"turn":30,"elapsed_ms":1033,"case":2,"stage":3,"event":"prepare-owner-end","paste_busy":false,"helper_wait":null,"owner_step":"GetMessageW","owner_released_wait":258,"owner_worker_error":0,"owner_native_error":0,"truncated":false} +{"schema":"termforge-clipboard-stage-r99-v1","tag":"[DEBUG-r99]","record":42,"turn":31,"elapsed_ms":1063,"case":2,"stage":4,"event":"tick","paste_busy":true,"helper_wait":258,"owner_step":"WaitForSingleObject-render-release","owner_released_wait":258,"owner_worker_error":0,"owner_native_error":0,"truncated":false} +{"schema":"termforge-clipboard-stage-r99-v1","tag":"[DEBUG-r99]","record":43,"turn":32,"elapsed_ms":1094,"case":2,"stage":5,"event":"tick","paste_busy":false,"helper_wait":0,"owner_step":"WaitForSingleObject-render-release","owner_released_wait":258,"owner_worker_error":0,"owner_native_error":0,"truncated":false} +{"schema":"termforge-clipboard-stage-r99-v1","tag":"[DEBUG-r99]","record":44,"turn":32,"elapsed_ms":1094,"case":2,"stage":5,"event":"owner-release-begin","paste_busy":false,"helper_wait":0,"owner_step":"WaitForSingleObject-render-release","owner_released_wait":258,"owner_worker_error":0,"owner_native_error":0,"truncated":false} +{"schema":"termforge-clipboard-stage-r99-v1","tag":"[DEBUG-r99]","record":45,"turn":32,"elapsed_ms":1095,"case":2,"stage":5,"event":"owner-release-end","paste_busy":false,"helper_wait":0,"owner_step":"SetEvent-render-released","owner_released_wait":0,"owner_worker_error":1418,"owner_native_error":1418,"truncated":false} +{"schema":"termforge-clipboard-stage-r99-v1","tag":"[DEBUG-r99]","record":46,"turn":33,"elapsed_ms":1126,"case":2,"stage":6,"event":"tick","paste_busy":false,"helper_wait":0,"owner_step":"SetEvent-render-released","owner_released_wait":0,"owner_worker_error":1418,"owner_native_error":1418,"truncated":false} +{"schema":"termforge-clipboard-stage-r99-v1","tag":"[DEBUG-r99]","record":47,"turn":33,"elapsed_ms":1126,"case":2,"stage":6,"event":"owner-finish-begin","paste_busy":false,"helper_wait":0,"owner_step":"SetEvent-render-released","owner_released_wait":0,"owner_worker_error":1418,"owner_native_error":1418,"truncated":false} +{"schema":"termforge-clipboard-stage-r99-v1","tag":"[DEBUG-r99]","record":48,"turn":33,"elapsed_ms":1127,"case":2,"stage":6,"event":"owner-finish-end","paste_busy":false,"helper_wait":0,"owner_step":"GetMessageW","owner_released_wait":0,"owner_worker_error":1418,"owner_native_error":1418,"truncated":false} +{"schema":"termforge-clipboard-stage-r99-v1","tag":"[DEBUG-r99]","record":49,"turn":33,"elapsed_ms":1127,"case":2,"stage":6,"event":"owner-reset-end","paste_busy":false,"helper_wait":0,"owner_step":null,"owner_released_wait":null,"owner_worker_error":null,"owner_native_error":null,"truncated":false} +{"schema":"termforge-clipboard-stage-r99-v1","tag":"[DEBUG-r99]","record":50,"turn":33,"elapsed_ms":1127,"case":2,"stage":6,"event":"after-marker-begin","paste_busy":false,"helper_wait":0,"owner_step":null,"owner_released_wait":null,"owner_worker_error":null,"owner_native_error":null,"truncated":false} +{"schema":"termforge-clipboard-stage-r99-v1","tag":"[DEBUG-r99]","record":51,"turn":33,"elapsed_ms":1130,"case":2,"stage":7,"event":"after-marker-end","paste_busy":false,"helper_wait":0,"owner_step":null,"owner_released_wait":null,"owner_worker_error":null,"owner_native_error":null,"truncated":false} +{"schema":"termforge-clipboard-stage-r99-v1","tag":"[DEBUG-r99]","record":52,"turn":34,"elapsed_ms":1161,"case":2,"stage":7,"event":"retry-clipboard-begin","paste_busy":false,"helper_wait":0,"owner_step":null,"owner_released_wait":null,"owner_worker_error":null,"owner_native_error":null,"truncated":false} +{"schema":"termforge-clipboard-stage-r99-v1","tag":"[DEBUG-r99]","record":53,"turn":34,"elapsed_ms":1161,"case":2,"stage":7,"event":"retry-clipboard-end","paste_busy":false,"helper_wait":0,"owner_step":null,"owner_released_wait":null,"owner_worker_error":null,"owner_native_error":null,"truncated":false} +{"schema":"termforge-clipboard-stage-r99-v1","tag":"[DEBUG-r99]","record":54,"turn":34,"elapsed_ms":1161,"case":2,"stage":7,"event":"retry-command-begin","paste_busy":false,"helper_wait":0,"owner_step":null,"owner_released_wait":null,"owner_worker_error":null,"owner_native_error":null,"truncated":false} +{"schema":"termforge-clipboard-stage-r99-v1","tag":"[DEBUG-r99]","record":55,"turn":34,"elapsed_ms":1163,"case":2,"stage":8,"event":"retry-command-end","paste_busy":true,"helper_wait":0,"owner_step":null,"owner_released_wait":null,"owner_worker_error":null,"owner_native_error":null,"truncated":false} +{"schema":"termforge-clipboard-stage-r99-v1","tag":"[DEBUG-r99]","record":56,"turn":38,"elapsed_ms":1271,"case":2,"stage":9,"event":"tick","paste_busy":false,"helper_wait":0,"owner_step":null,"owner_released_wait":null,"owner_worker_error":null,"owner_native_error":null,"truncated":false} +{"schema":"termforge-clipboard-stage-r99-v1","tag":"[DEBUG-r99]","record":57,"turn":40,"elapsed_ms":1332,"case":3,"stage":2,"event":"tick","paste_busy":false,"helper_wait":null,"owner_step":null,"owner_released_wait":null,"owner_worker_error":null,"owner_native_error":null,"truncated":false} +{"schema":"termforge-clipboard-stage-r99-v1","tag":"[DEBUG-r99]","record":58,"turn":41,"elapsed_ms":1366,"case":3,"stage":3,"event":"tick","paste_busy":false,"helper_wait":null,"owner_step":null,"owner_released_wait":null,"owner_worker_error":null,"owner_native_error":null,"truncated":false} +{"schema":"termforge-clipboard-stage-r99-v1","tag":"[DEBUG-r99]","record":59,"turn":41,"elapsed_ms":1366,"case":3,"stage":3,"event":"prepare-owner-begin","paste_busy":false,"helper_wait":null,"owner_step":null,"owner_released_wait":null,"owner_worker_error":null,"owner_native_error":null,"truncated":false} +{"schema":"termforge-clipboard-stage-r99-v1","tag":"[DEBUG-r99]","record":60,"turn":41,"elapsed_ms":1368,"case":3,"stage":3,"event":"prepare-owner-end","paste_busy":false,"helper_wait":null,"owner_step":"GetMessageW","owner_released_wait":258,"owner_worker_error":0,"owner_native_error":0,"truncated":false} +{"schema":"termforge-clipboard-stage-r99-v1","tag":"[DEBUG-r99]","record":61,"turn":42,"elapsed_ms":1396,"case":3,"stage":4,"event":"tick","paste_busy":true,"helper_wait":258,"owner_step":"WaitForSingleObject-render-release","owner_released_wait":258,"owner_worker_error":0,"owner_native_error":0,"truncated":false} +{"schema":"termforge-clipboard-stage-r99-v1","tag":"[DEBUG-r99]","record":62,"turn":43,"elapsed_ms":1427,"case":3,"stage":5,"event":"tick","paste_busy":null,"helper_wait":0,"owner_step":"WaitForSingleObject-render-release","owner_released_wait":258,"owner_worker_error":0,"owner_native_error":0,"truncated":false} +{"schema":"termforge-clipboard-stage-r99-v1","tag":"[DEBUG-r99]","record":63,"turn":43,"elapsed_ms":1428,"case":3,"stage":5,"event":"owner-release-begin","paste_busy":null,"helper_wait":0,"owner_step":"WaitForSingleObject-render-release","owner_released_wait":258,"owner_worker_error":0,"owner_native_error":0,"truncated":false} +{"schema":"termforge-clipboard-stage-r99-v1","tag":"[DEBUG-r99]","record":64,"turn":43,"elapsed_ms":1428,"case":3,"stage":5,"event":"owner-release-end","paste_busy":null,"helper_wait":0,"owner_step":"SetEvent-render-released","owner_released_wait":0,"owner_worker_error":1418,"owner_native_error":1418,"truncated":false} +{"schema":"termforge-clipboard-stage-r99-v1","tag":"[DEBUG-r99]","record":65,"turn":44,"elapsed_ms":1459,"case":3,"stage":6,"event":"tick","paste_busy":null,"helper_wait":0,"owner_step":"SetEvent-render-released","owner_released_wait":0,"owner_worker_error":1418,"owner_native_error":1418,"truncated":false} +{"schema":"termforge-clipboard-stage-r99-v1","tag":"[DEBUG-r99]","record":66,"turn":44,"elapsed_ms":1459,"case":3,"stage":6,"event":"owner-finish-begin","paste_busy":null,"helper_wait":0,"owner_step":"SetEvent-render-released","owner_released_wait":0,"owner_worker_error":1418,"owner_native_error":1418,"truncated":false} +{"schema":"termforge-clipboard-stage-r99-v1","tag":"[DEBUG-r99]","record":67,"turn":44,"elapsed_ms":1460,"case":3,"stage":6,"event":"owner-finish-end","paste_busy":null,"helper_wait":0,"owner_step":"GetMessageW","owner_released_wait":0,"owner_worker_error":1418,"owner_native_error":1418,"truncated":false} +{"schema":"termforge-clipboard-stage-r99-v1","tag":"[DEBUG-r99]","record":68,"turn":44,"elapsed_ms":1460,"case":3,"stage":6,"event":"owner-reset-end","paste_busy":null,"helper_wait":0,"owner_step":null,"owner_released_wait":null,"owner_worker_error":null,"owner_native_error":null,"truncated":false} +{"schema":"termforge-clipboard-stage-r99-v1","tag":"[DEBUG-r99]","record":69,"turn":44,"elapsed_ms":1460,"case":3,"stage":6,"event":"after-marker-begin","paste_busy":null,"helper_wait":0,"owner_step":null,"owner_released_wait":null,"owner_worker_error":null,"owner_native_error":null,"truncated":false} +{"schema":"termforge-clipboard-stage-r99-v1","tag":"[DEBUG-r99]","record":70,"turn":44,"elapsed_ms":1462,"case":3,"stage":7,"event":"after-marker-end","paste_busy":null,"helper_wait":0,"owner_step":null,"owner_released_wait":null,"owner_worker_error":null,"owner_native_error":null,"truncated":false} +{"schema":"termforge-clipboard-stage-r99-v1","tag":"[DEBUG-r99]","record":71,"turn":45,"elapsed_ms":1527,"case":3,"stage":100,"event":"complete-before-close","paste_busy":null,"helper_wait":null,"owner_step":null,"owner_released_wait":null,"owner_worker_error":null,"owner_native_error":null,"truncated":false} diff --git a/experiments/shell/results/2026-10-27-clipboard-stages/validation.json b/experiments/shell/results/2026-10-27-clipboard-stages/validation.json new file mode 100644 index 00000000..f7f575cc --- /dev/null +++ b/experiments/shell/results/2026-10-27-clipboard-stages/validation.json @@ -0,0 +1,282 @@ +{ + "schema": "termforge-clipboard-stage-observation-v1", + "source": "b9789543a792b0a0b96139377ea43f4dfab46626", + "run_id": 40459936505, + "job_id": 122041868650, + "artifact_id": 12714865514, + "artifact": { + "bytes": 4269771, + "sha256": "4b597e169d36624c87a6a9859e0fc3b2a37846569bca3eaca4c51322ec7d2791" + }, + "build_receipt_file": { + "bytes": 732, + "sha256": "af9e2ede8f1f0d77a9e670a68252ecf776b2b98b81c626d94e833c6d430f0844" + }, + "build_receipt": { + "schema": "termforge-clipboard-stage-build-r99-v1", + "files": { + "shell_input_client.exe": { + "bytes": 52224, + "sha256": "944c8b6a5dfdb4725b5a9d2c39d40b5ca7c2a429f1aebef23299eece286f8099" + }, + "termforge_shell.exe": { + "bytes": 1283072, + "sha256": "b38f109255baf4c9b8e40b91107873c5e6f57852152cb5781b2798f1aadf3561" + }, + "shell_clipboard_reader.exe": { + "bytes": 32256, + "sha256": "5f3cac4487bc3bf343bf972ef3481d97cbaab399dc9256ea4c1a52c390cb729a" + }, + "shell_test_launcher.exe": { + "bytes": 56320, + "sha256": "7fa383d355f29630812496216a6a8b5037d6c6397ad85fd5204d5ad33339fc48" + } + }, + "source": "b9789543a792b0a0b96139377ea43f4dfab46626" + }, + "samples": [ + { + "repeat": 0, + "trace": { + "bytes": 21810, + "sha256": "13bb8dc1fa4167b5baafaba6e999cd5fccdb25ac79a53b9b0a8012bdabfd27c4", + "file": "trace-0.jsonl" + }, + "sample": { + "bytes": 2027, + "sha256": "77af1bec6e478701e1ea977b4d5022b7750242517603e71e1f3d64efea064652" + }, + "workflow_file": { + "bytes": 2686, + "sha256": "d8f3caf1707451b8ee8d79a26869c92660bbccf7b3cddd9b41277a9ea6781976" + }, + "trace_rows": 72, + "turns": 45, + "first_elapsed_ms": 61, + "complete_before_close_ms": 1614, + "truncated": false, + "exit_code": 0, + "timed_out": false, + "job_after": { + "active": 0, + "total": 27, + "terminated": 0 + }, + "desktop_gone": true, + "cases": { + "occupied": { + "received": 270, + "helper_exited": true, + "retry": true, + "owner_release": { + "reason": "ordinary", + "publication_succeeded": false, + "expected_requester_gone": false, + "native_error": 0, + "release_event": true, + "thread_exited": true + } + }, + "oversize": { + "received": 270, + "helper_exited": true, + "retry": true, + "owner_release": null + }, + "cancel": { + "received": 268, + "helper_exited": true, + "retry": true, + "owner_release": { + "reason": "requester-cancelled", + "publication_succeeded": false, + "expected_requester_gone": true, + "native_error": 1418, + "release_event": true, + "thread_exited": true + } + }, + "close": { + "received": 256, + "helper_exited": true, + "retry": false, + "owner_release": { + "reason": "target-closed", + "publication_succeeded": false, + "expected_requester_gone": true, + "native_error": 1418, + "release_event": true, + "thread_exited": true + } + } + } + }, + { + "repeat": 1, + "trace": { + "bytes": 21806, + "sha256": "a4838fac461364dce95f0f68e7a3c927ed4f264c88f6629fc2b2bafc607205b4", + "file": "trace-1.jsonl" + }, + "sample": { + "bytes": 2027, + "sha256": "5ff403b8493652dcaa4ec4c985bc9760e698371a3dae0fe289a17aadacc8376d" + }, + "workflow_file": { + "bytes": 2686, + "sha256": "9312881e90286002d2fa5eed62142eb0dc794fa0a6322ad5ced9495a65acd97b" + }, + "trace_rows": 72, + "turns": 45, + "first_elapsed_ms": 63, + "complete_before_close_ms": 1527, + "truncated": false, + "exit_code": 0, + "timed_out": false, + "job_after": { + "active": 0, + "total": 27, + "terminated": 0 + }, + "desktop_gone": true, + "cases": { + "occupied": { + "received": 270, + "helper_exited": true, + "retry": true, + "owner_release": { + "reason": "ordinary", + "publication_succeeded": false, + "expected_requester_gone": false, + "native_error": 0, + "release_event": true, + "thread_exited": true + } + }, + "oversize": { + "received": 270, + "helper_exited": true, + "retry": true, + "owner_release": null + }, + "cancel": { + "received": 268, + "helper_exited": true, + "retry": true, + "owner_release": { + "reason": "requester-cancelled", + "publication_succeeded": false, + "expected_requester_gone": true, + "native_error": 1418, + "release_event": true, + "thread_exited": true + } + }, + "close": { + "received": 256, + "helper_exited": true, + "retry": false, + "owner_release": { + "reason": "target-closed", + "publication_succeeded": false, + "expected_requester_gone": true, + "native_error": 1418, + "release_event": true, + "thread_exited": true + } + } + } + } + ], + "scope": "Original timeout not reproduced in this fixed batch. No causal fix, product acceptance, performance or WindTerm equivalence claim.", + "configuration": { + "core": "default", + "conpty": "system", + "host": "GitHub-hosted windows-2025", + "trace_enabled": true, + "method": "ShellTests.test_system_clipboard_product_read_errors_cancel_and_close", + "repeats": 2, + "launcher_deadline_seconds": 45, + "outer_deadline_seconds": 60 + }, + "ci": [ + { + "run_id": 40459936505, + "event": "push", + "workflow": "default", + "source": "b9789543a792b0a0b96139377ea43f4dfab46626", + "windows": { + "job_id": 122041868650, + "passed": 50, + "total": 52, + "seconds": 280.05, + "failures": [ + "workflow artifact-path count assertion", + "ui-copy-system repeat 1 OpenClipboard: 5" + ] + }, + "linux": { + "job_id": 122041868427, + "passed": 32, + "total": 33, + "seconds": 12.67, + "failures": [ + "workflow artifact-path count assertion" + ] + } + }, + { + "run_id": 40459942201, + "event": "pull_request", + "workflow": "default", + "source": "b58c029fc0f861c2e7d251d125b18ec70e80dda9", + "trace_enabled": false, + "windows": { + "job_id": 122041885778, + "passed": 51, + "total": 52, + "seconds": 276.72, + "failures": [ + "workflow artifact-path count assertion" + ] + }, + "linux": { + "job_id": 122041885396, + "passed": 32, + "total": 33, + "seconds": 12.95, + "failures": [ + "workflow artifact-path count assertion" + ] + } + }, + { + "run_id": 40459936582, + "event": "push", + "workflow": "external-candidate", + "trace_enabled": false, + "conclusion": "success" + }, + { + "run_id": 40459942259, + "event": "pull_request", + "workflow": "external-candidate", + "trace_enabled": false, + "conclusion": "success" + } + ], + "observation_sources": { + ".github/workflows/build.yml": "1508ad7b088ab24e66f7eb45164892843ed1d56ba7b99f9e1345b362d4c43d5a", + "experiments/shell/clipboard_scenario_state.hpp": "1e99dcfd4eed0b036c89bf08f7dbdb7b6e95f3a166ebff9fe337cb4aafbd9f73", + "experiments/shell/workspace_clipboard_scenario.hpp": "b19e32352b5c0b3417ee04ad41b1badc423f6e1ab3749d59a79cd716af20bbd4" + }, + "limitations": [ + "Trace file I/O can alter scheduling; successful observation cannot explain the original timeout.", + "Begin/end events observe call boundaries; owner atomic fields are not one coherent snapshot.", + "complete_before_close_ms ends before close_all and is not natural-exit or presentation latency.", + "The CI receipt hashes clean-build files; unarchived EXE bytes were not independently rehashed locally.", + "Original private workflow files include process identity and remain local; only whitelisted summaries and content-free traces are published.", + "Default and candidate, push and PR, and observation and cleanup runs retain separate identities.", + "Temporary instrumentation and CI opt-in are removed after this batch; their exact source remains in the observation commit." + ] +}