Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
17 commits
Select commit Hold shift + click to select a range
cd1b0b0
test(qt): expose fixed terminal grid resize gap (#143)
JavaZeroo Oct 28, 2026
542d988
feat(qt): derive bounded Screen grid from resizable view (#143)
JavaZeroo Oct 28, 2026
be1d393
test(qt): observe real child dimensions through nonce protocol (#143)
JavaZeroo Oct 28, 2026
e3abef5
feat(qt): serialize bounded resize with session lifecycle (#143)
JavaZeroo Oct 28, 2026
038ff28
test(qt): reject active resize control after geometry error (#143)
JavaZeroo Oct 28, 2026
1c4deaa
fix(qt): stop pending resize control on invalid geometry (#143)
JavaZeroo Oct 28, 2026
ecf98dd
test(qt): verify bounded grid sequence and every child observation (#…
JavaZeroo Oct 28, 2026
0e2992e
Merge remote-tracking branch 'origin/main' into feat/qt-resize-r2
JavaZeroo Oct 28, 2026
dc761e6
ci(qt): build and supervise the dynamic resize entry (#143)
JavaZeroo Oct 28, 2026
b803319
test(qt): require current font metrics for the terminal grid (#143)
JavaZeroo Oct 28, 2026
82d97d1
fix(qt): refresh terminal metrics on font and pixel-ratio events (#143)
JavaZeroo Oct 28, 2026
678299d
test(qt): cover resized tabs, lifecycle, bounds and real output backp…
JavaZeroo Oct 28, 2026
51c055f
docs(qt): bind dynamic resize evidence and remaining limits (#143)
JavaZeroo Oct 28, 2026
0ff783c
test(qt): verify literal grids in owned child regions
JavaZeroo Oct 28, 2026
bc1805d
Merge commit 'ae985443af1d9e527b0c92e0e2a18c3b62e63866' into feat/qt-…
JavaZeroo Oct 28, 2026
cec1b7a
docs(qt): retain native resize counterexample and area fixture evidence
JavaZeroo Oct 28, 2026
bdd9a61
docs: record isolated native Qt resize validation
JavaZeroo Oct 28, 2026
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
7 changes: 5 additions & 2 deletions .github/workflows/qt-cpp.yml
Original file line number Diff line number Diff line change
Expand Up @@ -42,13 +42,15 @@ jobs:
"-DTERMFORGE_CONPTY_BACKEND_DIR=$dependencyRoot/conpty" `
"-DTERMFORGE_MSVC_RUNTIME_DIR=$dependencyRoot/crt"
- name: Build Qt product and independent smoke
run: cmake --build build/qt-cpp --config Release --target termforge_qt_shell qt_cpp_shell_smoke --parallel 2
run: cmake --build build/qt-cpp --config Release --target termforge_qt_shell qt_cpp_shell_smoke qt_cpp_resize_smoke --parallel 2
- name: Record complete path-free runtime manifests
run: |
python tools/msvc_runtime.py manifest --directory build/qt-cpp/qt-bin/Release --executable termforge_qt_shell.exe
if ($LASTEXITCODE -ne 0) { exit $LASTEXITCODE }
python tools/msvc_runtime.py manifest --directory build/qt-cpp/qt-smoke-bin/Release --executable qt_cpp_shell_smoke.exe
if ($LASTEXITCODE -ne 0) { exit $LASTEXITCODE }
python tools/msvc_runtime.py manifest --directory build/qt-cpp/qt-resize-bin/Release --executable qt_cpp_resize_smoke.exe
if ($LASTEXITCODE -ne 0) { exit $LASTEXITCODE }
- name: Preserve runtime file identities without binaries
if: always()
uses: actions/upload-artifact@cf430e030ddbb5b0abf93d22962f4752f3646cd9 # v7.0.2
Expand All @@ -59,8 +61,9 @@ jobs:
path: |
build/qt-cpp/qt-bin/Release/runtime-manifest.json
build/qt-cpp/qt-smoke-bin/Release/runtime-manifest.json
build/qt-cpp/qt-resize-bin/Release/runtime-manifest.json
- name: Run Qt offscreen smoke in its owned Job
run: ctest --test-dir build/qt-cpp -C Release -R '^qt_cpp_shell$' --no-tests=error --verbose
run: ctest --test-dir build/qt-cpp -C Release -R '^qt_cpp_(shell|resize)$' --no-tests=error --verbose
# Keep this configuration independent from the default/system-backend and
# Alacritty reference jobs. SDKs, runtime folders and raw logs are not
# publication artifacts; this job does not produce a release package.
14 changes: 14 additions & 0 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -404,5 +404,19 @@ if(TERMFORGE_BUILD_QT_SHELL)
"${PROJECT_SOURCE_DIR}/src/qt/run_smoke.py" "$<TARGET_FILE:qt_cpp_shell_smoke>")
set_tests_properties(qt_cpp_shell PROPERTIES TIMEOUT 35
ENVIRONMENT "QT_QPA_PLATFORM=offscreen")
add_executable(qt_cpp_resize_smoke src/qt/resize_smoke.cpp)
set_target_properties(qt_cpp_resize_smoke PROPERTIES
RUNTIME_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/qt-resize-bin/$<CONFIG>")
termforge_qt_entry(qt_cpp_resize_smoke)
target_link_libraries(qt_cpp_resize_smoke PRIVATE Qt6::Test)
add_custom_command(TARGET qt_cpp_resize_smoke POST_BUILD
COMMAND "${CMAKE_COMMAND}" -E copy_if_different
"$<TARGET_FILE:Qt6::QOffscreenIntegrationPlugin>"
"$<TARGET_FILE_DIR:qt_cpp_resize_smoke>/platforms/"
VERBATIM)
add_test(NAME qt_cpp_resize COMMAND "${Python3_EXECUTABLE}"
"${PROJECT_SOURCE_DIR}/src/qt/run_smoke.py" "$<TARGET_FILE:qt_cpp_resize_smoke>")
set_tests_properties(qt_cpp_resize PROPERTIES TIMEOUT 35
ENVIRONMENT "QT_QPA_PLATFORM=offscreen")
endif()
endif()
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@ An independent, fully open-source terminal project targeting WindTerm 2.7.0 feat

## 项目地图

新的[自主 C++ / Qt 会话入口](src/qt/README.md)以显式构建开关提供固定 80×24 的 cmd 标签,可新增、切换、独立关闭并在应用退出前核对会话回收;[限定验证](experiments/shell/results/2026-10-28-qt-tabs/README.md)不继承旧配置能力。当前默认入口和上面的操作说明仍属于既有 Win32 原型。分屏、其他 shell、工作区恢复、完整文字交互及动态 resize 尚待迁移,不能据此声明完整开发版。
新的[自主 C++ / Qt 会话入口](src/qt/README.md)以显式构建开关提供默认 80×24、随可用区域变化的 cmd 标签,可新增、切换、独立关闭并在应用退出前核对会话回收;[基础动态尺寸验证](experiments/shell/results/2026-10-29-qt-resize/README.md)分离窗口、核心、transport 完成和真实 child 尺寸,不继承旧配置能力。当前默认入口和上面的操作说明仍属于既有 Win32 原型。分屏、其他 shell、工作区恢复、完整文字交互及完整 resize/reflow 尚待迁移,不能据此声明完整开发版。

| 要了解什么 | 唯一入口 |
|---|---|
Expand Down
1 change: 1 addition & 0 deletions docs/EVIDENCE.md
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@
| 自主 C++ 限定 1049 协议 | [固定结果](../experiments/core/results/2026-10-29-cpp-1049/README.md)、[验证身份](../experiments/core/results/2026-10-29-cpp-1049/validation.json):文字/光标/颜色及 pending-wrap、重复进入与读者失效;55项中Qt1项分列,13条内部skip及旧负例判据失败保留。未验收非颜色属性/全网格背景、其他模式、真实TUI/IME/DPI、呈现或性能 |
| 自主 C++ 双缓冲存储与文档 epoch 基础 | [固定结果](../experiments/core/results/2026-10-29-buffer-state-r2/README.md)、[验证身份](../experiments/core/results/2026-10-29-buffer-state-r2/validation.json):拥有状态、共享 ID、隐藏帧 resize 回滚与跨缓冲句柄失效;Qt/candidate 关闭配置的完整 50 项及 12 条内部 skip 分列。未接 private CSI,不是原版模式、Qt 产品路线或完整 #27 验收 |
| Qt cmd 标签与退出前回收 | [固定结果](../experiments/shell/results/2026-10-28-qt-tabs/README.md)、[验证身份](../experiments/shell/results/2026-10-28-qt-tabs/validation.json):双 cmd 隔离、失败页、关闭与四个实际事件循环边界;Qt 1 项和其他 49 项诊断及内部跳过分列,旧中断轮不拼接 |
| Qt 基础动态网格与真实 child 尺寸 | [固定结果](../experiments/shell/results/2026-10-29-qt-resize/README.md)、[原冻结与查询](../experiments/shell/results/2026-10-29-qt-resize/validation.json)、[平台区域反例与夹具修订](../experiments/shell/results/2026-10-29-qt-resize/platform-area-validation.json)、[0ff 隔离原生补充](../experiments/shell/results/2026-10-29-qt-resize/native-validation.json):GUI/core、child、错误和字体度量红绿;678 原生极窄失败及 135 条 child 回复保留;0ff 新离屏 57 项与冻结包一次原生成功分列,原生保留全部 40 条 CSBI、实际顶层区域 120px→11 列及 root/Job 回收。两次离屏均分开 Qt 2 项、其余 55 项诊断及 13 条内部 skip;退出竞态旧尺寸保留;原生窗口仅 DPI 96,不是原版 reflow、真实不同 DPI、物理呈现或旧 system 失败修复 |
| Qt app-local 固定微软 CRT 与隔离 Windows 加载 | [固定结果](../experiments/shell/results/2026-10-29-qt-crt-deploy/README.md)、[完整运行时与验证身份](../experiments/shell/results/2026-10-29-qt-crt-deploy/validation.json):原 `cf8` 52 文件首次加载失败与仅追加 CRT/原许可后的成功分列;新源码构建、原生窗口、有限 cmd/关闭、offscreen 及 Job 清理独立记录。不是完整发行、跨 DPI/IME 或物理呈现验收 |
| Qt 正式入口的独立 hosted 构建 | [固定结果](../experiments/shell/results/2026-10-28-qt-cpp-ci/README.md)、[验证身份](../experiments/shell/results/2026-10-28-qt-cpp-ci/validation.json):固定 SDK、VS 2026 hosted 与真实 cmd 的 offscreen / OwnedJob 检查;原依赖换行和 generator 失败保留。没有原生上屏、完整部署哈希或产品包验收 |
| 自主 C++ + Qt Widgets + 固定微软 ConPTY 正式目标 | [ADR-0007](adr/0007-bundled-microsoft-conpty.md) / [ADR-0008](adr/0008-cpp-core-qt-widgets.md) 记录用户确认;新组合的实现与验证另行留证,不引用旧默认或 Alacritty 通过结果代替 |
Expand Down
2 changes: 1 addition & 1 deletion docs/FEATURES.md
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@

| 新路线迁移入口 | 当前状态与边界 | 目标差距 | 路标 |
|---|---|---|---|
| 自主 C++ / Qt / 固定微软 ConPTY | **实现中,未验收**:[显式 Qt 入口](../src/qt/README.md)提供固定 80×24 的 cmd 标签、基本 ASCII/16 色及各会话独立有界队列;双 cmd 输入、关闭和错误隔离及真实事件循环退出前回收有[限定验证](../experiments/shell/results/2026-10-28-qt-tabs/README.md)。Qt 1 项与其余 49 项既有/独立诊断分列 | 分屏、其他 shell、工作区恢复、动态 resize、历史/选择/Find、Unicode/IME、真实 DPI、应用兼容与性能仍需实现或迁移;应用/标签退出策略沿原型合同,完整 WindTerm 标签行为对照未完成;当前不是可发布开发包 | R2 |
| 自主 C++ / Qt / 固定微软 ConPTY | **实现中,未验收**:[显式 Qt 入口](../src/qt/README.md)提供默认 80×24、随可用区域变化的 cmd 标签、基本 ASCII/16 色及各会话独立有界队列;[基础动态尺寸验证](../experiments/shell/results/2026-10-29-qt-resize/README.md)分离窗口/核心/transport 与真实 child,覆盖极小、重复、隐藏页和关闭交叉,并复验原标签算术及事件循环回收。678 原生极窄失败保留;0ff 仅修订字面子区域/顶层实际区域夹具,另有[冻结包一次隔离原生成功](../experiments/shell/results/2026-10-29-qt-resize/native-validation.json):实际顶层区域、core/transport/child 一致,窗口仅 DPI 96。两次离屏完整 57 项分别绑定源码;Qt 2 项与其余 55 项既有/独立诊断、13 条内部 skip 分列 | 分屏、其他 shell、工作区恢复、完整 resize/reflow、历史/选择/Find、Unicode/IME、真实 DPI、应用兼容与性能仍需实现或迁移;物理裁剪不恢复丢弃正文,完整 WindTerm 标签/尺寸行为对照未完成;当前不是可发布开发包 | R2 |

自主 C++ 核心已有 [#130 双缓冲存储基础](../experiments/core/results/2026-10-29-buffer-state-r2/README.md),并接入 [#135 限定 1049 协议](../experiments/core/results/2026-10-29-cpp-1049/README.md):strict/recovery 识别 `?1049h/l`,重复进入归首格、清旧备用文本和复位写入颜色,返回恢复主屏文字/光标/颜色及 pending-wrap。共享行 ID、双帧物理 resize 与逻辑 epoch 防止旧位置、选择、搜索及 viewport 复活,包括清屏后重写相同文字。原版完整网格/背景、非颜色属性及其他模式仍未知;本地55项中 Qt1项与其余54项诊断分列,13条内部跳过保留,不表示完整 [#27](https://github.com/JavaZeroo/termforge/issues/27)、真实 TUI/Qt 交互或系统剪贴板已验收。

Expand Down
2 changes: 1 addition & 1 deletion docs/milestones/R2-local-terminal.md
Original file line number Diff line number Diff line change
Expand Up @@ -43,7 +43,7 @@ flowchart LR

## 下一批的任务边界

1. **从正式路线最小整合接续工作区和后端复验。** #115 已限定验证固定 80×24 单会话,#117 已完成固定依赖的独立 Windows CI;[#124](https://github.com/JavaZeroo/termforge/issues/124)已限定验证 cmd 标签输入/关闭隔离与事件循环退出前回收,完整工作区和恢复仍另行迁移。动态尺寸、C++ 核心模式和 Qt 交互缺口继续保留。#55 已交付含红的真实基线;#51 原生 viewport resize、#63 工作区原生 viewport,以及 #62 的[真实 writer 持块、取消与停止夹具](../research/sender-fence.md)和 #53 原 UI/3MB/八会话 data-only 合同均已在各自范围验证并整合到实验父分支。接续 #52 GUI Vim 与 #47 的完整官方矩阵、同次真实 CF/IME;限定切片关闭不等于联合验收通过。未完成项可以用原冻结输入独立定位,最终修复验收须在联合配置重建;期限、负载和原失败保留,一次未复现不自动构成因果修复。
1. **从正式路线最小整合接续工作区和后端复验。** #115 已限定验证固定 80×24 单会话,#117 已完成固定依赖的独立 Windows CI;[#124](https://github.com/JavaZeroo/termforge/issues/124)已限定验证 cmd 标签输入/关闭隔离与事件循环退出前回收,完整工作区和恢复仍另行迁移。基础动态网格与真实 child 同步见 [#143 的限定证据](../../experiments/shell/results/2026-10-29-qt-resize/README.md);完整 resize/历史、其他 C++ 核心模式和 Qt 交互继续闭合。#55 已交付含红的真实基线;#51 原生 viewport resize、#63 工作区原生 viewport,以及 #62 的[真实 writer 持块、取消与停止夹具](../research/sender-fence.md)和 #53 原 UI/3MB/八会话 data-only 合同均已在各自范围验证并整合到实验父分支。接续 #52 GUI Vim 与 #47 的完整官方矩阵、同次真实 CF/IME;限定切片关闭不等于联合验收通过。未完成项可以用原冻结输入独立定位,最终修复验收须在联合配置重建;期限、负载和原失败保留,一次未复现不自动构成因果修复。
2. **并行处理原版对照、平台语义与性能。** [原生语义处理路径 #56](https://github.com/JavaZeroo/termforge/issues/56)先明确 #41 原合同需要什么、哪些路径可支持;保留必要的上游或独立实现工作,不用“平台不同”豁免缺口。#3/#4 优先建立原版 Windows 本地终端基线;#54 现在冻结重复方法与完成端点并定位吞吐成本,数值预算作为提案交用户确认,不等到 #34 才补性能。
3. **按原版合同补自主 C++ 能力。** #29 核对极窄/极短、软硬行、历史/淘汰、选择/Find、连续 resize 和 child ack;#30 核对 IME 组合/提交/取消与输出/resize/切换、应用键盘/粘贴接收、实际复制及同次八会话。已验收的 #39 提供的是参考实现与固定场景;自主 C++ 是否具备同等字素能力必须独立实现和验证。
4. **补终端模式和应用矩阵。** #27 明确 DECOM/DECAWM、pending-wrap、保存恢复、异常序列与 margin×resize;#28 先固定应用版本/入口/动作及协议字节预期,再逐应用完成进入、操作、resize、退出、主屏恢复。Vim 的一个修复不替代完整 TUI 验收。
Expand Down
Loading