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
28 changes: 21 additions & 7 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -62,13 +62,16 @@ if(TERMFORGE_BUILD_CANDIDATE_ADAPTER)
endfunction()

add_executable(candidate_core_test experiments/core/candidate_terminal_test.cpp experiments/core/candidate_terminal.cpp)
target_link_libraries(candidate_core_test PRIVATE termforge_core termforge_candidate_core)
termforge_warnings(candidate_core_test)
if(WIN32)
target_link_libraries(candidate_core_test PRIVATE ws2_32 userenv ntdll)
else()
target_link_libraries(candidate_core_test PRIVATE pthread dl m)
endif()
add_executable(candidate_resize_map_test experiments/core/candidate_resize_map_test.cpp)
foreach(candidate_test IN ITEMS candidate_core_test candidate_resize_map_test)
target_link_libraries(${candidate_test} PRIVATE termforge_core termforge_candidate_core)
termforge_warnings(${candidate_test})
if(WIN32)
target_link_libraries(${candidate_test} PRIVATE ws2_32 userenv ntdll)
else()
target_link_libraries(${candidate_test} PRIVATE pthread dl m)
endif()
endforeach()
endif()

add_executable(resize_test experiments/core/resize_test.cpp)
Expand Down Expand Up @@ -268,6 +271,17 @@ if(BUILD_TESTING)
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)
add_test(NAME candidate_resize_map COMMAND candidate_resize_map_test)
add_test(NAME candidate_source_visible_suffix COMMAND candidate_core_test --source-visible-suffix)
add_test(NAME candidate_source_new_background COMMAND candidate_core_test --source-new-background)
add_test(NAME candidate_source_partial_capacity COMMAND candidate_core_test --source-partial-capacity)
add_test(NAME candidate_history_viewport_projection COMMAND candidate_core_test --history-viewport-projection)
add_test(NAME candidate_history_viewport_text COMMAND candidate_core_test --history-viewport-text)
add_test(NAME candidate_history_viewport_wide COMMAND candidate_core_test --history-viewport-wide)
add_test(NAME candidate_history_viewport_find COMMAND candidate_core_test --history-viewport-find)
set_tests_properties(candidate_source_visible_suffix candidate_source_new_background candidate_source_partial_capacity
candidate_history_viewport_projection candidate_history_viewport_text
candidate_history_viewport_wide candidate_history_viewport_find PROPERTIES TIMEOUT 10)
endif()
add_test(NAME resize_core COMMAND resize_test)
add_test(NAME history_core COMMAND history_test)
Expand Down
14 changes: 11 additions & 3 deletions docs/EVIDENCE.md
Original file line number Diff line number Diff line change
Expand Up @@ -9,8 +9,8 @@
| 配置 | 证据定位 |
|---|---|
| main 默认:自研核心 + 系统 ConPTY | R1 限定总验收和有限 VT/Unicode 子集;默认构建不需要 Rust |
| 当前源码显式候选:`termforge.6` + 系统 ConPTY | [固定来源/补丁台账](../experiments/candidates/alacritty/PROVENANCE.md)、[适配边界](../experiments/core/CANDIDATE.md)、[#39 字素合同](research/streaming-graphemes.md);仅按已有合同验收 |
| PR #50 实验:`termforge.4` + 固定官方 ConPTY | [Draft PR](https://github.com/JavaZeroo/termforge/pull/50) / [#47](https://github.com/JavaZeroo/termforge/issues/47);[联合基线](research/joint-conpty-baseline.md)已固定,产品回归未全绿;[resize #51](https://github.com/JavaZeroo/termforge/issues/51)、[GUI Vim #52](https://github.com/JavaZeroo/termforge/issues/52)、[工作区 #63](https://github.com/JavaZeroo/termforge/issues/63)仍开放。[#53 的未完成粘贴、负例及原八会话证据](https://github.com/JavaZeroo/termforge/blob/848cb0e621a291f732cc0e046d0b2fab6a77d962/docs/research/resize-replay-cost.md)已按限定合同整合到实验父分支;不包含同次真实 CF/IME 或完整官方矩阵验收 |
| 当前源码显式候选:`termforge.10` + 系统 ConPTY | [固定来源/补丁台账](../experiments/candidates/alacritty/PROVENANCE.md)、[适配边界](../experiments/core/CANDIDATE.md)、[#39 字素合同](research/streaming-graphemes.md);固定长行复制反例已修复,部分可见重绘顺序仍错 |
| PR #50 实验:`termforge.5` + 固定官方 ConPTY | [Draft PR](https://github.com/JavaZeroo/termforge/pull/50) / [#47](https://github.com/JavaZeroo/termforge/issues/47);早期 `.4` 的[联合基线](research/joint-conpty-baseline.md)保留。#51/#63 已在实验父分支限定闭合,#52 仍开放;#53 的[固定粘贴与八会话证据](https://github.com/JavaZeroo/termforge/blob/848cb0e621a291f732cc0e046d0b2fab6a77d962/docs/research/resize-replay-cost.md)不包含同次真实 CF/IME。完整后端矩阵仍未验收,不能引用当前候选/system 的成功代替 |

R1 固定总出口的源码为 `ce9b24d`,早期 `2dc8d6d` / `9b16acc` 仍分别只代表原记录。源 VT、原生控制台 CHAR_INFO、transport、末端状态、自有 DIB、绘制提交和真实呈现是不同检查点;未知端点保持未知。

Expand All @@ -36,8 +36,16 @@ R1 固定总出口的源码为 `ce9b24d`,早期 `2dc8d6d` / `9b16acc` 仍分
| R2 流式字素与固定 emoji(#39) | [合同](research/streaming-graphemes.md)、[红/绿及实际场景验证](../experiments/shell/results/2026-10-26-streaming-graphemes/validation.json) | 已合并 #39:.4 的固定 ZWJ/keycap 原子格/选择/绘制和单列 resize。766 个规范用例只验证分段 helper;64 标量超限按明确无损分片,不宣称完整字素布局或完整 Unicode/IME。 |
| 真实备用屏切换(#27 限定切片) | [五阶段原生快照与候选验证](../experiments/shell/results/2026-10-26-alternate-screen/validation.json)、[候选接口](../experiments/core/CANDIDATE.md) | 真实 1049h/1049l 五阶段的源 VT、CHAR_INFO、样式/光标恢复及候选历史隔离;origin/wrap、margin/resize 交叉与 #27 整体验收另做。 |
| 局部滚动区域(#27 限定切片) | [原生阶段快照、独立 transport 重放与候选验证](../experiments/shell/results/2026-10-26-scroll-region/validation.json)、[候选接口](../experiments/core/CANDIDATE.md) | 真实 DECSTBM 局部滚动的源、原生快照与 transport 独立重放;区域外保持/历史隔离通过,不要求控制字节原样回显。 |
| ConPTY resize 重放、历史与 Find/选区(#29) | [限定合同](adr/0005-physical-row-resize.md)、[重放与历史验证](../experiments/core/results/2026-10-26-resize-replay/validation.json)、[文字列位置回归](../experiments/core/results/2026-10-27-replay-coordinates/README.md)、[快照/清空修复](../experiments/core/results/2026-10-27-resize-snapshot/README.md)、[候选接口](../experiments/core/CANDIDATE.md) | 固定 861B 重放和独立列位置回归保留;`.5` 验证 resize 后 pending 可见网格一致及主屏 ED3/RIS 清空不复活。`.6` 的[缓存与淘汰修复](../experiments/core/results/2026-10-28-history-cache/README.md)覆盖透明输入、主/备用屏归属、原生前缀和旧回放缓存失效。混宽历史视口、完整 resize/reflow 与真实 child/呈现仍未完成。 |
| ConPTY resize 重放、历史与 Find/选区(#29) | [限定合同](adr/0005-physical-row-resize.md)、[重放与历史验证](../experiments/core/results/2026-10-26-resize-replay/validation.json)、[文字列位置回归](../experiments/core/results/2026-10-27-replay-coordinates/README.md)、[快照/清空修复](../experiments/core/results/2026-10-27-resize-snapshot/README.md)、[候选接口](../experiments/core/CANDIDATE.md) | 固定 861B 重放和独立列位置回归保留;`.5` 验证 resize 后 pending 可见网格一致及主屏 ED3/RIS 清空不复活。`.6` 的[缓存与淘汰修复](../experiments/core/results/2026-10-28-history-cache/README.md)覆盖透明输入、主/备用屏归属、原生前缀和旧回放缓存失效。该检查点尚未覆盖混宽历史视口;后续投影见下列独立证据。完整 resize/reflow 与真实 child/呈现仍未完成。 |
| WindTerm resize 文本保留与回带(#29) | [方法与边界](research/windterm-resize-text.md)、[两次事实/哈希](../experiments/core/results/2026-10-27-resize-snapshot/windterm-observations.json) | 原版 2.7.0 的隔离 Telnet 五阶段观察:42 条已知文本保留,恢复宽/高后采集投影恢复;不把文本索引当物理格,不验证候选冻结/清空、ConPTY child、实际呈现或性能。 |
| WindTerm 长历史行的视图折行(#29) | [逐字符观察与边界](research/windterm-history-layout.md)、[两次事实/哈希](../experiments/core/results/2026-10-28-history-layout/windterm-observations.json) | 独立的两次七阶段观察:185 字符软行由 80/80/25 变为 62/62/61,两条 77 字符硬行各变为 62/15;文档文本与位置不变,恢复宽度后投影恢复。仅 ASCII 文本坐标接口;覆盖写入、选择/Find、物理格及呈现仍未知。 |
| 候选原生重排边界与未解决的源文本重复(#29) | [工作检查点与反例](../experiments/core/results/2026-10-28-reflow-metadata/README.md)、[来源与验证](../experiments/core/results/2026-10-28-reflow-metadata/validation.json) | `.7` 修复原生硬/软边界传递及缩宽容量计账;Rust 与 runner 通过,C++ 长行复制仍红。混宽历史、来源归属、选择/Find 及完整产品矩阵未完成。 |
| 单次 feed 旧来源追踪(#29) | [固定实现与检查](../experiments/core/results/2026-10-28-feed-origins/README.md) | `.9` 原生 24 项公开集成、既有 workspace、C ABI 与 trace 检查通过;C++ 长历史复制仍红,来源映射不授予历史保留许可,新增成本未测。 |
| C++ 历史来源、部分淘汰与字素维护(#29) | [反例、修复与剩余范围](../experiments/core/results/2026-10-28-source-ownership/README.md)、[分次验证身份](../experiments/core/results/2026-10-28-source-ownership/validation.json) | 固定复制/空硬行/跨软行 Find、可见后缀、部分淘汰与样式空格反例修复;`.10` 历史维护不再封闭待续字素。该检查点完整矩阵有真实 shell 失败、混宽视图未闭合,旧结果保留;后续视图修复及新矩阵见下列独立记录。部分重绘源顺序仍错,不能宣布 #29 或产品通过。 |
| 完整历史显示与源坐标(#29) | [实现、反例与边界](../experiments/core/results/2026-10-28-history-viewport/README.md)、[固定源码验证](../experiments/core/results/2026-10-28-history-viewport/validation.json) | `f41f747` 候选/system CTest 57/57,内部 9 项跳过;矩形页、宽字旧 gap、源列 Find、空历史锚点和形状门禁有独立红→绿。两个旧 UI 场景在 `1fafb99` 各通过一次,不能反填旧根因。部分可见源顺序、混合来源、系统 CF/真实 DPI/实验后端与性能仍未验收。 |
| 候选一次 resize 来源映射与真实淘汰计数(#29) | [接口范围及检查点](../experiments/core/results/2026-10-28-resize-origins/README.md)、[源码/构建/日志身份](../experiments/core/results/2026-10-28-resize-origins/validation.json) | `.8` 导出双屏物理来源和硬边界,修复缩高来源漏记、多行滚动少计与扩高假计;Rust、C++ 映射 ABI 和 runner 通过,C++ 长行复制仍失败,历史合并尚未消费映射。未测性能。 |
| WindTerm 首次增高的前置条件停止(#29) | [独立观察与边界](research/windterm-resize-text.md#独立观察初始-18-行直接增高)、[合成输入](../experiments/core/results/2026-10-28-history-layout/windterm-first-grow-input.json)、[事实与哈希](../experiments/core/results/2026-10-28-history-layout/windterm-first-grow-observations.json) | 独立一次 18→26 行观察中未见编号历史进入非负 y;128 次有界查询不变,末尾空串为同一文末位置别名。按计划未发送 CUP/重绘,B 案例未运行,覆盖写入政策仍未知。 |
| WindTerm 查询后固定状态的 CUP 改写(#29) | [独立观察与限制](research/windterm-resize-text.md#独立观察dsr-后固定状态下的-cup-改写)、[精确输入](../experiments/core/results/2026-10-28-history-layout/windterm-fenced-cup-input.json)、[事实与哈希](../experiments/core/results/2026-10-28-history-layout/windterm-fenced-cup-observations.json) | 单次有界序列在完整前置状态核对后只改 H0026 文字;DSR 回复改变而选择文档位置不变。未裁决未查询状态、一般覆盖政策、物理 grid、ConPTY 或性能。 |
| R2 复杂标量序列输入(#30 限定切片) | [真实键盘接收验证](../experiments/shell/results/2026-10-26-unicode-keyboard/validation.json)、[场景与复现](../experiments/shell/README.md) | 固定 ZWJ/keycap 通过 WM_CHAR/ConPTY/ReadConsoleW 精确接收;只证明输入保真,不证明绘制、字素宽度或完整应用键盘模式。 |
| 自有窗口绘制正确性 | [呈现探针](../experiments/presentation/README.md)、[共享 renderer](../experiments/presentation/render.hpp)、[度量测试](../experiments/presentation/renderer_metrics_test.cpp) | 自有 DIB 的 retained/full RGB、字体/光标/缺字负例与覆盖;BitBlt/GdiFlush 提交不等于实际上屏,presented_done=null。 |
| 进程生命周期和平台边界 | [ConPTY 探针](../experiments/conpty/README.md)、[跨环境记录](research/conpty-platform-check-2026-10-22.md)、[旧平台探针](../.github/workflows/conpty-compat.yml) | 受控后代、取消/超时和短批次回收;Windows 11/Server 2025 有固定记录,Server 2022 稳态句柄门槛仍失败。长期无泄漏未知。 |
Expand Down
Loading