Skip to content
Merged
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
3 changes: 3 additions & 0 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -263,6 +263,9 @@ if(BUILD_TESTING)
add_executable(transport_completion_test experiments/shell/transport_completion_test.cpp)
termforge_warnings(transport_completion_test)
add_test(NAME transport_completion COMMAND transport_completion_test)
add_executable(scenario_tick_gate_test experiments/shell/scenario_tick_gate_test.cpp)
termforge_warnings(scenario_tick_gate_test)
add_test(NAME scenario_tick_gate COMMAND scenario_tick_gate_test)
if(TERMFORGE_BUILD_CANDIDATE_ADAPTER)
add_test(NAME candidate_core COMMAND candidate_core_test)
endif()
Expand Down
1 change: 1 addition & 0 deletions docs/EVIDENCE.md
Original file line number Diff line number Diff line change
Expand Up @@ -85,6 +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。 |
| 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,不追溯补造校准或低扰动结论。 |
Expand Down
2 changes: 1 addition & 1 deletion docs/FEATURES.md
Original file line number Diff line number Diff line change
Expand Up @@ -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)另有两轮系统证据 | hosted reverse 场景的复合断言失败由 [#66](https://github.com/JavaZeroo/termforge/issues/66) 独立定位;普通尾空格经 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 验收仍独立进行;普通尾空格经 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 |
Expand Down
20 changes: 20 additions & 0 deletions docs/research/selection-session-tick-gate.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
# 选择字节场景的双会话阶段门槛

`ui-selection-bytes` 与仅限一次性 hosted VM 的 `ui-copy-bytes-system` 共用九阶段场景。独立 Python oracle 要求每次相邻观察之间,bottom 和 main 各自至少推进三个 timer tick;这验证两个真实会话都获得执行机会,不是实际上屏端点。

[#66](https://github.com/JavaZeroo/termforge/issues/66) 的[原 Windows CI](https://github.com/JavaZeroo/termforge/actions/runs/40306319630/job/121516200920)在第二轮系统复制的 reverse 阶段失败。原件拆解为 bottom `14→16`,main `11→14`:只有 bottom 的两 tick 不满足三 tick 门槛。grid、DPI、capture 和完整重绘字段符合期望;native 进程正常退出,两会话已关闭,自有 Job 为零且 desktop 已删除。不能把复合错误字符串解释成绘制或剪贴板损坏,也不能把正常退出当作该轮验收成功。

旧场景只根据 main 计数推进。现在每个原有 `three_ticks` 等待点都使用 `TwoSessionTickGate`,在动作后的同一位置保存两会话独立基点,再分别要求至少三个 tick。没有增加 sleep、修改时限或降低 Python oracle。相同 gate 同时用于正逆拖选、受控 DPI、清除、空 Copy 和实际输入后的观察,因为这些阶段使用同一双会话合同。

共享 helper 的确定性反例直接使用原 CI 数值:`{14,11}→{16,14}` 必须等待;只有 bottom 再推进到 17 后才满足门槛。另验证主会话过慢、不同绝对计数、基点重置及计数倒退。真实数据模式继续由独立文本、运输、物理行、完整重绘及回收 oracle 验证;系统 CF 必须在真实 hosted VM 运行,不能用本地数据模式或伪造环境变量代替。

[固定源码与脱敏复核](../../experiments/shell/results/2026-10-26-selection-tick-gate/validation.json)保留原 artifact 身份、原失败和新数据模式结果。原始运输、完整屏幕、frame 与 desktop 信息留本地;最终 `frame.bmp` 不是 reverse 阶段截图。每阶段 `frame_matches_full` 也不证明实际呈现完成。

```powershell
ctest --test-dir build/r66 -C Release -R '^scenario_tick_gate$' --output-on-failure
$env:TERMFORGE_BIN_DIR = "$PWD/build/r66/bin/Release"
$env:PYTHONUTF8 = '1'
python -m unittest experiments.shell.test_selection_bytes -v
```

普通本地环境会明确跳过实际系统 CF,用例仍检查 native/Python 的 hosted 保护。完整系统门槛由 PR 的 Windows hosted CI 执行;本页和固定记录不借用其他核心/后端或历史成功。
Loading
Loading