Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions docs/EVIDENCE.md
Original file line number Diff line number Diff line change
Expand Up @@ -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 继续跟踪。

## 产品能力的限定验收

| 范围 | 结果与复现入口 | 可以支持的结论与限制 |
Expand Down
2 changes: 1 addition & 1 deletion docs/FEATURES.md
Original file line number Diff line number Diff line change
Expand Up @@ -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 |
Expand Down
45 changes: 45 additions & 0 deletions docs/research/clipboard-stage-observation.md
Original file line number Diff line number Diff line change
@@ -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 维护。
Loading