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
38 changes: 38 additions & 0 deletions .github/workflows/conpty-compat.yml
Original file line number Diff line number Diff line change
Expand Up @@ -37,3 +37,41 @@ jobs:
build/Testing/Temporary/
build/conpty-results.xml
build/test-artifacts/conpty/

windows-2025-resize-reply:
# Bounded diagnostic for #145: the stale resize reply was observed on
# windows-2025 in build.yml. This job repeats resize + client size query on
# that host and keeps the raw per-round evidence. It asserts only structural
# integrity; a stale count is reported in the artifact, not used as a gate.
runs-on: windows-2025
timeout-minutes: 20
env:
PYTHONUTF8: '1'
PYTHONPATH: ${{ github.workspace }}
steps:
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
- uses: actions/setup-python@6d4fd22b20465ccc0f7354476588e8df7c9ca0e0 # v7.1.0
with:
python-version: '3.12'
- name: Configure
run: cmake -S . -B build
- name: Build resize-reply diagnostic
run: cmake --build build --config Release --target conpty_resize_reply_probe --parallel 2
- name: Sample resize replies across fresh sessions
shell: pwsh
run: |
$binary = "build/bin/Release/conpty_resize_reply_probe.exe"
foreach ($iteration in 1..5) {
python -m experiments.conpty.resize_reply_run --binary $binary --rounds 200 --mode raw --out "build/r145-session-$iteration"
if ($LASTEXITCODE -ne 0) { exit $LASTEXITCODE }
python -m experiments.conpty.resize_reply_run --binary $binary --rounds 100 --mode startup --out "build/r145-startup-$iteration"
if ($LASTEXITCODE -ne 0) { exit $LASTEXITCODE }
}
- name: Preserve resize-reply evidence
if: always()
uses: actions/upload-artifact@cf430e030ddbb5b0abf93d22962f4752f3646cd9 # v7.0.2
with:
name: conpty-resize-reply-r145
retention-days: 14
if-no-files-found: warn
path: build/r145-*
6 changes: 2 additions & 4 deletions docs/EVIDENCE.md
Original file line number Diff line number Diff line change
Expand Up @@ -67,6 +67,7 @@ R1 固定总出口的源码为 `ce9b24d`,早期 `2dc8d6d` / `9b16acc` 仍分
| 范围 | 结果与复现入口 | 可以支持的结论与限制 |
|---|---|---|
| 默认核心缩小与重绘交错(#156) | [固定四-case机制诊断](../experiments/shell/results/2026-10-29-resize-repaint-witness/README.md)、[脱敏验证](../experiments/shell/results/2026-10-29-resize-repaint-witness/validation.json) | A/C保留2499B,B/D在第五段重绘首次失效且行分配路径不同;只见证机制,原CI切点/根因未知,未修生产。witness结束后Job仍active1,发起一次终止后归零;成员身份/逐句柄退出未知,不称全树自然退出。 |
| 系统 ConPTY resize 后的客户端尺寸回复(#145 未关闭) | [有界重复采样](../experiments/conpty/results/2026-10-29-resize-reply-r145/README.md)、[固定验证身份](../experiments/conpty/results/2026-10-29-resize-reply-r145/validation.json) | 新增 tag 化探针:hosted 2000 次交替 resize + 500 次全新会话、本机 200 + 100,均无陈旧回复,buffer/window 无分歧,resize VT 全部先于回复,回复中位 8.7–16.1ms。只否定“resize 后立即查询存在必然竞态”;原两条 CI 失败、原始探针/5 秒等待与 #145/#38 状态不变。 |
| 持续 cmd 输出与原始 Ctrl-C 回归(#36 未关闭) | [受监督入口](../experiments/conpty/README.md#持续-cmd-输出与-ctrlc-独立回归)、[三次 fresh 公开记录及本地字节复核](../experiments/conpty/results/2026-10-26-ctrl-c-retest/validation.json) | 原百万次输出、单次 ETX、五秒期限和退出 37 保留;三次 fresh 原始字节/Job0 本地重算。后续成功未解释历史失败,未改产品 Ctrl-C 路径。 |
| 持续输出中断的原失败记录 | [#36](https://github.com/JavaZeroo/termforge/issues/36)、[ConPTY 输入机制研究](research/conpty-ctrl-c-input.md)、[原 R1 历史证据](../experiments/shell/results/2026-10-23-r1-foundations/validation.json) | 原 Windows 11 回归中的 normal/resize 超时与 ETW/插桩观察;调试扰动及管道读完成缺口保留。不是当前全套结果,后续未复现不能抹去此失败。 |
| controller B 正常结束后 cmd 退出未验收(#44) | [原失败脱敏记录](../experiments/shell/results/2026-10-26-controller-exit/validation.json)、[新退出诊断及有界重放](../experiments/shell/results/2026-10-26-controller-exit-observation/validation.json)、[关闭合同](https://github.com/JavaZeroo/termforge/issues/44) | 原 child 收完 32B、退出 0/join/Job0;cmd 只留下 close 后 0xC000013A,close 前未知。新观察分列输入、wait、pre-close 与清理;多轮未复现不构成历史修复,继续阻塞 #38。 |
Expand Down Expand Up @@ -185,7 +186,4 @@ python -m unittest experiments.shell.test_workflow_sessions -v
| 初始候选 interactive feed/投影成本 | [2026-10-25 interactive 原始批次](../experiments/measure/results/2026-10-25-core-interactive/) | 旧候选的固定 ASCII 编辑回放与交错样本;不是键盘到呈现延迟,也不能用于验收新字素实现的预算。 |

| 当前成本调查 | 结果与合同 | 结论边界 |
|---|---|---|
| 候选 `.3`→`.4` 字素改动 | [固定字素验证](../experiments/shell/results/2026-10-26-streaming-graphemes/validation.json)、[性能限制与原始样本身份](research/streaming-graphemes.md)、[#54](https://github.com/JavaZeroo/termforge/issues/54) | 同宿主交错诊断中 project/interactive 吞吐中位数约下降 16%/9%;共享宿主、allocator 包装、无真实呈现/输入时延,使其不能作为正式预算或性能通过。#54 受控定位仍阻塞 #34 的性能裁决。 |

目前没有足够证据判断 TermForge 距离 WindTerm 快或慢多少。正式结论必须同时提供负载/配置/环境身份、正确性、完成端点、观测开销、重复样本与限制。未知字段保持未知;历史校准未完成不转成要求用户反复手动运行的前置。执行规则见 [ADR-0002](adr/0002-automation-first-investigation.md),核心选型重审见 [ADR-0003](adr/0003-core-reference-and-reuse.md)。
|---|---|---|
12 changes: 12 additions & 0 deletions experiments/conpty/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -13,3 +13,15 @@ if(MSVC)
else()
target_compile_options(termforge_conpty_probe PRIVATE -Wall -Wextra -Wpedantic)
endif()

# Diagnostic only (issue #145): repeats resize+client size query without
# changing the lifecycle probe's contract. Built explicitly, not registered.
add_executable(conpty_resize_reply_probe EXCLUDE_FROM_ALL resize_reply_probe.cpp)
target_compile_features(conpty_resize_reply_probe PRIVATE cxx_std_17)
target_compile_definitions(conpty_resize_reply_probe PRIVATE WIN32_LEAN_AND_MEAN NOMINMAX _WIN32_WINNT=0x0A00)
if(MSVC)
target_compile_options(conpty_resize_reply_probe PRIVATE /W4 /EHsc)
else()
target_compile_options(conpty_resize_reply_probe PRIVATE -Wall -Wextra -Wpedantic)
endif()

Loading