diff --git a/.github/workflows/qt-cpp.yml b/.github/workflows/qt-cpp.yml index 97e813f7..ae3e7bd7 100644 --- a/.github/workflows/qt-cpp.yml +++ b/.github/workflows/qt-cpp.yml @@ -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 @@ -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. diff --git a/CMakeLists.txt b/CMakeLists.txt index c4e2dbbc..9c3cc83d 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -404,5 +404,19 @@ if(TERMFORGE_BUILD_QT_SHELL) "${PROJECT_SOURCE_DIR}/src/qt/run_smoke.py" "$") 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/$") + 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 + "$" + "$/platforms/" + VERBATIM) + add_test(NAME qt_cpp_resize COMMAND "${Python3_EXECUTABLE}" + "${PROJECT_SOURCE_DIR}/src/qt/run_smoke.py" "$") + set_tests_properties(qt_cpp_resize PROPERTIES TIMEOUT 35 + ENVIRONMENT "QT_QPA_PLATFORM=offscreen") endif() endif() diff --git a/README.md b/README.md index 67c329f8..b18668e4 100644 --- a/README.md +++ b/README.md @@ -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 尚待迁移,不能据此声明完整开发版。 | 要了解什么 | 唯一入口 | |---|---| diff --git a/docs/EVIDENCE.md b/docs/EVIDENCE.md index 5b007108..1383f741 100644 --- a/docs/EVIDENCE.md +++ b/docs/EVIDENCE.md @@ -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 通过结果代替 | diff --git a/docs/FEATURES.md b/docs/FEATURES.md index 31168415..bf9b36fa 100644 --- a/docs/FEATURES.md +++ b/docs/FEATURES.md @@ -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 交互或系统剪贴板已验收。 diff --git a/docs/milestones/R2-local-terminal.md b/docs/milestones/R2-local-terminal.md index 8a936d1c..5d090db0 100644 --- a/docs/milestones/R2-local-terminal.md +++ b/docs/milestones/R2-local-terminal.md @@ -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 验收。 diff --git a/experiments/shell/results/2026-10-29-qt-resize/README.md b/experiments/shell/results/2026-10-29-qt-resize/README.md new file mode 100644 index 00000000..882d56d9 --- /dev/null +++ b/experiments/shell/results/2026-10-29-qt-resize/README.md @@ -0,0 +1,74 @@ +# Qt 基础动态网格与真实 child 尺寸 + +本结果仅覆盖 [#143](https://github.com/JavaZeroo/termforge/issues/143) 的基础窗口/核心/固定 ConPTY 尺寸同步,父项 [#29](https://github.com/JavaZeroo/termforge/issues/29) 继续负责完整 resize、历史与内容策略。初次冻结源码为 **`678299d54454e26ac04ef6d1c46237ab6b33752b`**,基于 `730404de` 开工并合入 main **`4d7bd8a`** 的 CRT/1049 基础;其离屏完整矩阵与随后原生失败均保留。夹具修订源码为 **`0ff783cb14f23dfa641b6b6f45894c038cca048c`**,生产实现没有变化。[原验证身份](validation.json)与[平台可用区域补充记录](platform-area-validation.json)分列,不拼接成一次验收。 + +## 原生反例与可用区域夹具修订 + +678 的 offscreen 完整 57 项通过后,同一 40 文件包在隔离 Win11 **26300.9711、Session 1、windows 插件**实际执行失败:root exit 1,非超时、无强制结束,v2 Job active 0 / total 8、cleanup true。80×24→60×12→100×30→80×24 正常;请求 1×24 时,事件派发前记录 widget 25×574、core 1×24,随后实际 HWND 外框宽 136px,Q107..234 共 128 次 child window/buffer 均为 **11×24**,最终独立尺寸 oracle 失败。135 条完整 child 回复及原生窗口记录均保留。此时不能把调用成功或初始 widget 请求当作稳定可用区域,也不能据此断言 transport 损坏;原记录没有最后的 core 观测,平台调整的因果仍待新原生记录确认。此环境与 CRT 原测试的 26300.9457 / Session 2 分列。 + +本地旧包曾在现有桌面上用 OwnedJob 复现 exit 1、Job 0/4/0,但遗漏独立 WindowStation/Desktop;这份记录明确带隔离缺口,不计隔离原生验证,后续本机只执行 offscreen。原包、原 full、失败 raw 均未覆盖。 + +0ff 仅修订测试:字面 80×24→60×12→100×30→80×24、1×24、80×1、实际 1px×1px 对应 1×1、回到 80×24 和重复,放入可见 owned parent 的子区域,避免顶层标题栏的最小宽度影响夹具输入。原字面预期、独立 nonce/CSBI、5 秒/128 条/10ms 查询预算及 25 秒外层监督均未改。另保留原独立顶层的一列请求,记录 requested pixels → 事件派发后的 actual widget area → 当前字体独立推导的 effective grid → core/transport/child;不把预期硬改成 11。超界 600×240 区域仍核对实际 core/child 500×200,改为可见 owner 内的大 child;5416×5326 的 child 只在 1200×900 owner 内可见,明确属于裁剪的网格上限验证,不计完整上屏。 + +修订后 targeted offscreen 1/1 通过;固定 0ff source/tree 后,**新的唯一完整矩阵 57/57、exit 0,13 条内部 skip**,与 678 的完整矩阵分开。7329 个冻结文件 post-run 零变化(source 2786,其他输入/运行时数量与旧记录一致);原 Qt smoke Job 0/26/0、新 resize Job 0/27/0,均无超时/强制回收。主序列保留全部 12 条旧/新回复及 8 个 Qt 事件;2 MiB 输出实际读取 2,097,195 字节、队列 high-water 262,144、自然退出 37。CTest 302.43s、resize 11.01s 为诊断记录。新 [40 文件运行时清单](resize-child-region-runtime.json)及私有 ZIP 另绑 0ff。[平台区域补充记录](platform-area-validation.json)本身不含新源码 guest 运行;后续原生结果另列如下,不将离屏通过转记成原生成功。 + +0ff 完整矩阵结束、审计完成后再合入 main `ae985443` 的独立 SGR1 研究工具与离线测试;该合并没有 Qt/core/runtime 实现变更,未为它重跑产品完整矩阵。完整 57 项和新包身份均继续只属于 0ff;后续合并配置的 CI 和原生复验另列。 + +## 修订源码 0ff 的隔离原生验证 + +主代理在上述隔离 Win11 **26300.9711、Session 1**,对冻结的 0ff 40 文件 ZIP 只执行一次 `windows` 插件测试;[原生补充结果](native-validation.json)绑定包 SHA-256 `1b1ac682efbc32f3a48b57eef927f95ab293c2533b9444ea6b69d99273f93bde`,与完整离屏矩阵及发布合并配置分别记录。直接启动前核对保留 root handle 的 PID 和继承 Job,然后写入固定 `GO\n`;native root 预算 25 秒、共享 cleanup 5 秒、外层请求执行预算 40 秒,均未因原失败扩展。native 和外层请求 root 均 **exit 0、未超时、未强制结束**;外层 v2 Job active 0 / total 31 / after active 0,root reaped、cleanup verified。显式生命周期用例仍包含预期的 child 取消,不将其描述为所有子进程自然退出。 + +全部 **83 条有序结构化观察、40 条完整 child CSBI 回复、15 条可见 HWND 的尺寸/DPI 观察**经去除 PID 和 HWND 标识后公开。sample 的 14 条 ACK 只统计主序列,不是全部用例总数: + +- 字面 owned child 区域的普通序列、1×24、80×1、实际 1px×1px、恢复及重复均通过,主序列派发 8 个 Qt 事件。 +- 独立顶层仍保留请求 25×574px、初始 core 1×24;原生事件处理后实际区域 **120×574px**,当前字体独立推导为 **11×24**,随后 core、transport 完成及 nonce 1701 的真实 child window/buffer 同为 11×24。生产策略未改;新记录直接支持“顶层平台最小尺寸改变可用区域”的解释,旧 678 缺少最终 core 观测的事实仍保留。 +- 上限用例实际 child/core 为 500×200;5416×5326px 的大 child 在本次原生 owner 中只可见 **1200×749px**,与离屏 1200×900 的观察分列,不称完整上屏。 +- 隐藏页、survivor、字体变化、启动错误和 pending/关闭/自然退出交叉完成;自然退出竞态保留 core 请求 60×12、transport/child 旧 80×24,仅计生命周期。 +- 2 MiB 用例实际读取 2,097,195 字节、队列 high-water 262,144,排空后自然退出 37;同尺寸 cmd 正文保留。夹具不逐字节核对完整 2 MiB payload,此结果不作完整负载正确性或性能验收。 + +执行前后 System32 所查五个 CRT DLL 均不存在,使用包内固定 app-local CRT。结束后的只读 guest 审计重新核对旧/新各 40 文件、原失败与新成功、请求 metadata 与实际 staged 脚本哈希,以及 pending 请求为零且无队列 quarantine;本地离线发布另核对 ZIP 全部成员、19 项 source blob 和 39 项原始/既有公开文件未变。原始脚本、请求、窗口标识和宿主路径留在私有目录,只公开合成数值及原件哈希。 + +本次观察到的窗口 **仅 DPI 96**。这是该冻结源码的有限原生窗口/真实 child 验证,不是完整不同 DPI、IME/Find/rename、物理输入、实际上屏、性能、产品发布或完整 #29/#31/R2 验收;`presented_done=null`。旧原生失败及本机未隔离桌面复现的缺口均未抹去。 + +## 实现边界 + +窗口和标签页解除固定大小,使用原有 Roboto Mono 字体度量、八像素边距及一行状态区计算网格,沿现有 Screen 上限限制为 1..500 列、1..200 行。当前字体或像素比例事件会重新计算度量;本轮实际字体测试是同一字体 11pt→12pt,没有验证真实跨 DPI。 + +GUI 线程继续拥有 Parser/Screen。单个 latest-size 槽限制待处理控制请求,现有生命周期 worker 独占启动之后的 resize/wait/cancel/close;native 调用期间不持有 GUI 使用的控制锁,reader、输入 worker 和有界输出队列继续工作。同尺寸跳过重新初始化;关闭、错误和退出清除待处理请求,已选取的 native 操作由该 worker 收尾,状态不会重新接受请求。底层 Session API、旧 Win32/system 路线和实验后端未改成新的产品路线。 + +请求/core、transport 完成与 child ACK 是三个观测边界。测试 child 只收到 `Q nonce`,逐次调用真实 `GetConsoleScreenBufferInfo` 并返回 buffer、完整 window RECT、错误码及 nonce,不收到期待尺寸。独立命名管道绑定 server/client PID、session 和本 Session child,响应不受 1×1 屏幕容量限制;所有旧/新回复按序保留。调用成功、请求值或 CSI 窗口重绘均不作 child ACK。 + +## 红绿与已知失败 + +| 切片 | 真实红例 | 修订后的限定结果 | +|---|---|---| +| public Qt view → Core | `cd1b0b0` 请求 60×12,窗口仍 736×574、core 80×24 | `542d988` 窗口 556×310、core 60×12;该阶段尚未查询真实 child | +| Core → real child | `be1d393` 的 128 次独立查询全为 80×24,尽管 core 已是 60×12 | `e3abef5` 保留 Q101 的旧 80×24,以及 Q102 的新 60×12,buffer/window 同时匹配 | +| 非法尺寸与 pending | `038ff28` 拒绝零列后仍接受控制并保留 pending | `1c4deaa` 进入关闭,accepting/pending 均为 false,并完成回收 | +| 当前字体度量 | `b803319` 改为 12pt 后,请求 60 列却得到 66 列 | `82d97d1` 重读度量,core 60×12,并保留 child 旧值到新值的独立回复 | + +前三组增量发生在 CRT 合并前的本机配置,字体组及最终配置使用合并后的固定 app-local CRT,分别绑定源码,未把不同配置拼成一组比较。前三组中的 native/error 二进制及字体二进制已私有冻结;最早 GUI-only 红绿 EXE 在覆盖前没有冻结,身份明确为 null,没有补造。一次新增测试编译失败来自字符串字面量的 `send` 重载歧义,改成显式 `std::string`;它不计产品行为红例。 + +## 初次源码 678 的唯一完整矩阵 + +环境为 Windows 11 Pro 10.0.26200 x64、VS 2022 / VC Tools 14.42.34433(compiler self 19.42.34433.0)、CMake 3.31.0、Python 3.12.10、Release。Qt 6.10.3 官方 MSVC 2022 x64 SDK、固定 ConPTY 1.25.260930003 与 CRT 14.51.36247.0 均在本工作树全新离线准备;candidate adapter 关闭,Qt 使用 **offscreen**。 + +build-all 成功后,干净的实现 commit/tree 与运行时一起冻结,再执行唯一完整 CTest **57/57、exit 0**;7324 个冻结文件在结束后逐一复核,零变化:source 2781、Qt SDK 4358、ConPTY 输入 2、CRT 输入 12、原始归档/许可 4、产品运行时 38、原 Qt smoke 40、resize smoke 40、既有诊断运行时 49。三个 Qt 数量包含其自身 manifest;[产品清单](product-runtime.json)、[原 smoke 清单](shell-smoke-runtime.json)、[resize 清单](resize-smoke-runtime.json)分别绑定除清单自身外的 37/39/39 文件。 + +Qt 两项与其余 55 项既有/独立诊断分列: + +- 原 `qt_cpp_shell` 的 `750/427/778/147`、退出 37/41、错误墨迹、标签输入/关闭隔离及真实 `app.exec()` 退出前回收原样通过;外层 Job active 0 / total 26 / terminated 0。 +- `qt_cpp_resize` 覆盖初始 80×24→60×12→100×30→80×24,以及 1×24、80×1、实际 1×1、回到 80×24、重复;每个稳定尺寸点都保留独立 child window/buffer ACK。另验证可容 600×240 格的区域受既有上限约束,实际 core/初始 child 为 500×200。 +- 主序列实际派发 8 个 Qt 事件;隐藏页保持自己的旧尺寸值,显示/layout 后同步。关闭该页后 survivor 可继续查询并调整到 100×30,最终独立回收。 +- 覆盖启动后立即关闭、已观察到 pending 时关闭、pending 中自然退出、启动失败与非法尺寸。自然退出竞态中特意保留 **core 请求 60×12、transport/child 仍 80×24** 的结果;它验证退出会清掉未应用请求,不计作尺寸同步通过。 +- 有限 2 MiB ASCII 输出与尺寸请求交叉,实际 transport 读取 2,097,195 字节,输出队列 high-water **262,144** 达到既有容量后仍可排空,自然退出 37。重复同尺寸后真实 cmd 算术正文 `918` 保留。resize 根 exit 0,Job active 0 / total 25 / terminated 0,无超时/强制回收。 + +完整矩阵内部 **13 条 skip** 原因逐项保留,包括参考组件未构建、须一次性环境的真实 CF/剪贴板、opt-in 失败注入,以及 **OpenClipboard denied (5)**。其私有诊断原件身份保留,只删除公开文本中的绝对路径。跳过项不算系统剪贴板或新 Qt 能力通过。CTest 总耗时 301.08s、resize 8.94s 只是原始诊断记录,不是性能指标或批准的门槛。 + +两个 Qt 测试仍由原监督器在 `GO\n` 前纳入 OwnedJob,整体期限 25 秒、CTest 35 秒;新尺寸阶段 5 秒/最多 128 条回复及 10ms 非匹配查询节奏在执行前固定,没有修改旧算术/退出 oracle 或延长期限取绿。全部原始回复、失败样本及回收状态分列。 + +## 保持开放的范围 + +Screen 继续采用现有物理行裁剪,不回填历史、恢复被裁掉的内容或宣称目标 reflow 已实现。完整 WindTerm 尺寸/样式对照、真实 TUI、Unicode/IME/选择/Find、实际不同 DPI、物理键盘与呈现、性能、完整 #29/#31/R2 均未由本项验收,`presented_done=null`。本机既有诊断通过也不解释或修复 hosted system 路线的 [#80](https://github.com/JavaZeroo/termforge/issues/80)、[#144](https://github.com/JavaZeroo/termforge/issues/144)、[#145](https://github.com/JavaZeroo/termforge/issues/145) 原失败。 + +源码 678 的 resize 独立运行时按冻结的 40 个文件逐项核对并打成私有 ZIP,包含自身 manifest;随后 `windows` 插件执行的失败已在上方及补充记录保留,不回填为本次 offscreen 57 项的成功。0ff 新包与其一次原生验证、合并配置 CI 和双轴审查继续使用各自身份。 diff --git a/experiments/shell/results/2026-10-29-qt-resize/native-validation.json b/experiments/shell/results/2026-10-29-qt-resize/native-validation.json new file mode 100644 index 00000000..bd8baa51 --- /dev/null +++ b/experiments/shell/results/2026-10-29-qt-resize/native-validation.json @@ -0,0 +1,1540 @@ +{ + "schema": "termforge-qt-resize-native-validation-v1", + "issue": 143, + "status": "native_windows_fixture_passed_limited_scope", + "source_commit": "0ff783cb14f23dfa641b6b6f45894c038cca048c", + "full_matrix_report": "platform-area-validation.json", + "prior_failure_report": "platform-area-validation.json", + "prior_failure_preserved": true, + "prior_public_json_files_unchanged": true, + "runtime": { + "files_verified": 40, + "archive_bytes": 23837280, + "archive_sha256": "1b1ac682efbc32f3a48b57eef927f95ab293c2533b9444ea6b69d99273f93bde", + "external_manifest_sha256": "44b040dea3912d7a37325f9b696767f338a8f58eb1e544b0db9e0ff3a5fe2edc", + "runtime_manifest_sha256": "76c689435fff1ca74ae82f4cfc1ee683fe8ef2760589877c9adc1b0e4540dcdf", + "executable_sha256": "2a7450c79d5181137d65d11cd4737bdedfb4d83205252c405bcac380e4799e33", + "manifest_file": "resize-child-region-runtime.json" + }, + "environment": { + "guest_caption": "Microsoft Windows 11 企业评估版", + "guest_version": "10.0.26300", + "guest_build": "26300", + "ubr": 9711 + }, + "interactive_session_id": 1, + "qt_platform": "windows", + "window_dpi_observed": [ + 96 + ], + "execution_contract": { + "maximum_native_gui_launches": 1, + "stdin_gate_hex": "474f0a", + "retained_handle_pid_and_inherited_job_verified_before_go": true, + "native_root_budget_ms": 25000, + "shared_native_cleanup_budget_ms": 5000, + "outer_vm_request_budget_ms": 40000, + "host_poll_seconds": 55, + "local_script_sha256": { + "unpack.ps1": "e42d4482c940136147dea022fc97367755722acfd106397245d080f4ece8603a", + "native-smoke.ps1": "f22d80edf1d05d13783c1def8516282428f8d44a096ca8a638da4fe97935d5d1", + "preflight.ps1": "ad970a33cab7e4a23614671d1ca41b6ef4c1e3f9ba431ea2bc61c38357f89b67" + }, + "staged_request_script_sha256": "5a5c89d1fdad7e7e72c5fed12c7088b75a2e39a8e6cb309887523cd974f75851", + "staged_request_script_matches_request_metadata": true + }, + "native_root": { + "status": "passed", + "exit_code": 0, + "timed_out": false, + "forced_root_termination": false, + "root_reaped": true + }, + "outer_request": { + "Schema": "termforge-owned-vm-request-v2", + "Status": "passed", + "RootExitCode": 0, + "JobBeforeActive": 0, + "JobBeforeTotal": 31, + "JobAfterActive": 0, + "TimedOut": false, + "TerminationRequested": false, + "RootReaped": true, + "CleanupVerified": true, + "CreatedSuspended": true, + "RootHandleIdentityVerified": true, + "RootImageVerified": true, + "RootAssignedBeforeResume": true, + "KillOnCloseVerified": true, + "BreakawayDenied": true, + "MembersStable": true + }, + "post_run_audit": { + "status": "passed", + "old_and_new_runtime_files_verified": 80, + "pending_requests": 0, + "queue_quarantine_absent": true, + "old_failure_and_new_success_rechecked": true + }, + "system_crt_before": { + "msvcp140_2.dll": false, + "msvcp140_1.dll": false, + "vcruntime140.dll": false, + "vcruntime140_1.dll": false, + "msvcp140.dll": false + }, + "system_crt_after": { + "msvcp140_2.dll": false, + "msvcp140_1.dll": false, + "vcruntime140.dll": false, + "vcruntime140_1.dll": false, + "msvcp140.dll": false + }, + "sample": { + "schema": "termforge-qt-resize-smoke-v1", + "grid_sequence_cases": 8, + "child_ack_replies": 14, + "qt_heartbeat_events": 8, + "output_bytes": 2097195, + "output_queue_high_water": 262144, + "same_size_cmd_output_retained": true, + "child_exit": 37, + "cleanup_verified": true, + "presented_done": null + }, + "observation_counts": { + "termforge-qt-child-size-v1": 40, + "termforge-qt-resize-state-v1": 31, + "termforge-qt-resize-area-v1": 11, + "termforge-qt-resize-error-v1": 1 + }, + "observations": [ + { + "schema": "termforge-qt-child-size-v1", + "nonce": 0, + "query_error": 0, + "buffer_columns": 80, + "buffer_rows": 24, + "window_left": 0, + "window_top": 0, + "window_right": 79, + "window_bottom": 23 + }, + { + "schema": "termforge-qt-resize-state-v1", + "stage": 0, + "requested_columns": 80, + "requested_rows": 24, + "widget_width": 736, + "widget_height": 574, + "core_columns": 80, + "core_rows": 24, + "transport_columns": 80, + "transport_rows": 24, + "requested_revision": 0, + "transport_revision": 0, + "accepting": 1, + "pending": 0 + }, + { + "schema": "termforge-qt-resize-state-v1", + "stage": 1, + "requested_columns": 60, + "requested_rows": 12, + "widget_width": 556, + "widget_height": 310, + "core_columns": 60, + "core_rows": 12, + "transport_columns": 80, + "transport_rows": 24, + "requested_revision": 1, + "transport_revision": 0, + "accepting": 1, + "pending": 1 + }, + { + "schema": "termforge-qt-resize-area-v1", + "kind": "literal-child-region", + "stage": 1, + "requested_pixel_width": 556, + "requested_pixel_height": 310, + "actual_pixel_width": 556, + "actual_pixel_height": 310, + "expected_columns": 60, + "expected_rows": 12, + "top_level": 0, + "visible_to_window": 1, + "window_visible": 1, + "window_width": 1200, + "window_height": 749, + "visible_region_width": 556, + "visible_region_height": 310 + }, + { + "schema": "termforge-qt-child-size-v1", + "nonce": 101, + "query_error": 0, + "buffer_columns": 80, + "buffer_rows": 24, + "window_left": 0, + "window_top": 0, + "window_right": 79, + "window_bottom": 23 + }, + { + "schema": "termforge-qt-child-size-v1", + "nonce": 102, + "query_error": 0, + "buffer_columns": 60, + "buffer_rows": 12, + "window_left": 0, + "window_top": 0, + "window_right": 59, + "window_bottom": 11 + }, + { + "schema": "termforge-qt-resize-state-v1", + "stage": 1, + "requested_columns": 60, + "requested_rows": 12, + "widget_width": 556, + "widget_height": 310, + "core_columns": 60, + "core_rows": 12, + "transport_columns": 60, + "transport_rows": 12, + "requested_revision": 1, + "transport_revision": 1, + "accepting": 1, + "pending": 0 + }, + { + "schema": "termforge-qt-resize-state-v1", + "stage": 2, + "requested_columns": 100, + "requested_rows": 30, + "widget_width": 916, + "widget_height": 706, + "core_columns": 100, + "core_rows": 30, + "transport_columns": 60, + "transport_rows": 12, + "requested_revision": 2, + "transport_revision": 1, + "accepting": 1, + "pending": 1 + }, + { + "schema": "termforge-qt-resize-area-v1", + "kind": "literal-child-region", + "stage": 2, + "requested_pixel_width": 916, + "requested_pixel_height": 706, + "actual_pixel_width": 916, + "actual_pixel_height": 706, + "expected_columns": 100, + "expected_rows": 30, + "top_level": 0, + "visible_to_window": 1, + "window_visible": 1, + "window_width": 1200, + "window_height": 749, + "visible_region_width": 916, + "visible_region_height": 706 + }, + { + "schema": "termforge-qt-child-size-v1", + "nonce": 103, + "query_error": 0, + "buffer_columns": 100, + "buffer_rows": 30, + "window_left": 0, + "window_top": 0, + "window_right": 99, + "window_bottom": 29 + }, + { + "schema": "termforge-qt-resize-state-v1", + "stage": 2, + "requested_columns": 100, + "requested_rows": 30, + "widget_width": 916, + "widget_height": 706, + "core_columns": 100, + "core_rows": 30, + "transport_columns": 100, + "transport_rows": 30, + "requested_revision": 2, + "transport_revision": 2, + "accepting": 1, + "pending": 0 + }, + { + "schema": "termforge-qt-resize-state-v1", + "stage": 3, + "requested_columns": 80, + "requested_rows": 24, + "widget_width": 736, + "widget_height": 574, + "core_columns": 80, + "core_rows": 24, + "transport_columns": 100, + "transport_rows": 30, + "requested_revision": 3, + "transport_revision": 2, + "accepting": 1, + "pending": 1 + }, + { + "schema": "termforge-qt-resize-area-v1", + "kind": "literal-child-region", + "stage": 3, + "requested_pixel_width": 736, + "requested_pixel_height": 574, + "actual_pixel_width": 736, + "actual_pixel_height": 574, + "expected_columns": 80, + "expected_rows": 24, + "top_level": 0, + "visible_to_window": 1, + "window_visible": 1, + "window_width": 1200, + "window_height": 749, + "visible_region_width": 736, + "visible_region_height": 574 + }, + { + "schema": "termforge-qt-child-size-v1", + "nonce": 104, + "query_error": 0, + "buffer_columns": 100, + "buffer_rows": 30, + "window_left": 0, + "window_top": 0, + "window_right": 99, + "window_bottom": 29 + }, + { + "schema": "termforge-qt-child-size-v1", + "nonce": 105, + "query_error": 0, + "buffer_columns": 80, + "buffer_rows": 24, + "window_left": 0, + "window_top": 0, + "window_right": 79, + "window_bottom": 23 + }, + { + "schema": "termforge-qt-resize-state-v1", + "stage": 3, + "requested_columns": 80, + "requested_rows": 24, + "widget_width": 736, + "widget_height": 574, + "core_columns": 80, + "core_rows": 24, + "transport_columns": 80, + "transport_rows": 24, + "requested_revision": 3, + "transport_revision": 3, + "accepting": 1, + "pending": 0 + }, + { + "schema": "termforge-qt-resize-state-v1", + "stage": 4, + "requested_columns": 1, + "requested_rows": 24, + "widget_width": 25, + "widget_height": 574, + "core_columns": 1, + "core_rows": 24, + "transport_columns": 80, + "transport_rows": 24, + "requested_revision": 4, + "transport_revision": 3, + "accepting": 1, + "pending": 1 + }, + { + "schema": "termforge-qt-resize-area-v1", + "kind": "literal-child-region", + "stage": 4, + "requested_pixel_width": 25, + "requested_pixel_height": 574, + "actual_pixel_width": 25, + "actual_pixel_height": 574, + "expected_columns": 1, + "expected_rows": 24, + "top_level": 0, + "visible_to_window": 1, + "window_visible": 1, + "window_width": 1200, + "window_height": 749, + "visible_region_width": 25, + "visible_region_height": 574 + }, + { + "schema": "termforge-qt-child-size-v1", + "nonce": 106, + "query_error": 0, + "buffer_columns": 80, + "buffer_rows": 24, + "window_left": 0, + "window_top": 0, + "window_right": 79, + "window_bottom": 23 + }, + { + "schema": "termforge-qt-child-size-v1", + "nonce": 107, + "query_error": 0, + "buffer_columns": 1, + "buffer_rows": 24, + "window_left": 0, + "window_top": 0, + "window_right": 0, + "window_bottom": 23 + }, + { + "schema": "termforge-qt-resize-state-v1", + "stage": 4, + "requested_columns": 1, + "requested_rows": 24, + "widget_width": 25, + "widget_height": 574, + "core_columns": 1, + "core_rows": 24, + "transport_columns": 1, + "transport_rows": 24, + "requested_revision": 4, + "transport_revision": 4, + "accepting": 1, + "pending": 0 + }, + { + "schema": "termforge-qt-resize-state-v1", + "stage": 5, + "requested_columns": 80, + "requested_rows": 1, + "widget_width": 736, + "widget_height": 68, + "core_columns": 80, + "core_rows": 1, + "transport_columns": 1, + "transport_rows": 24, + "requested_revision": 5, + "transport_revision": 4, + "accepting": 1, + "pending": 1 + }, + { + "schema": "termforge-qt-resize-area-v1", + "kind": "literal-child-region", + "stage": 5, + "requested_pixel_width": 736, + "requested_pixel_height": 68, + "actual_pixel_width": 736, + "actual_pixel_height": 68, + "expected_columns": 80, + "expected_rows": 1, + "top_level": 0, + "visible_to_window": 1, + "window_visible": 1, + "window_width": 1200, + "window_height": 749, + "visible_region_width": 736, + "visible_region_height": 68 + }, + { + "schema": "termforge-qt-child-size-v1", + "nonce": 108, + "query_error": 0, + "buffer_columns": 1, + "buffer_rows": 24, + "window_left": 0, + "window_top": 0, + "window_right": 0, + "window_bottom": 23 + }, + { + "schema": "termforge-qt-child-size-v1", + "nonce": 109, + "query_error": 0, + "buffer_columns": 80, + "buffer_rows": 1, + "window_left": 0, + "window_top": 0, + "window_right": 79, + "window_bottom": 0 + }, + { + "schema": "termforge-qt-resize-state-v1", + "stage": 5, + "requested_columns": 80, + "requested_rows": 1, + "widget_width": 736, + "widget_height": 68, + "core_columns": 80, + "core_rows": 1, + "transport_columns": 80, + "transport_rows": 1, + "requested_revision": 5, + "transport_revision": 5, + "accepting": 1, + "pending": 0 + }, + { + "schema": "termforge-qt-resize-state-v1", + "stage": 6, + "requested_columns": 1, + "requested_rows": 1, + "widget_width": 1, + "widget_height": 1, + "core_columns": 1, + "core_rows": 1, + "transport_columns": 80, + "transport_rows": 1, + "requested_revision": 6, + "transport_revision": 5, + "accepting": 1, + "pending": 1 + }, + { + "schema": "termforge-qt-resize-area-v1", + "kind": "literal-child-region", + "stage": 6, + "requested_pixel_width": 1, + "requested_pixel_height": 1, + "actual_pixel_width": 1, + "actual_pixel_height": 1, + "expected_columns": 1, + "expected_rows": 1, + "top_level": 0, + "visible_to_window": 1, + "window_visible": 1, + "window_width": 1200, + "window_height": 749, + "visible_region_width": 1, + "visible_region_height": 1 + }, + { + "schema": "termforge-qt-child-size-v1", + "nonce": 110, + "query_error": 0, + "buffer_columns": 80, + "buffer_rows": 1, + "window_left": 0, + "window_top": 0, + "window_right": 79, + "window_bottom": 0 + }, + { + "schema": "termforge-qt-child-size-v1", + "nonce": 111, + "query_error": 0, + "buffer_columns": 1, + "buffer_rows": 1, + "window_left": 0, + "window_top": 0, + "window_right": 0, + "window_bottom": 0 + }, + { + "schema": "termforge-qt-resize-state-v1", + "stage": 6, + "requested_columns": 1, + "requested_rows": 1, + "widget_width": 1, + "widget_height": 1, + "core_columns": 1, + "core_rows": 1, + "transport_columns": 1, + "transport_rows": 1, + "requested_revision": 6, + "transport_revision": 6, + "accepting": 1, + "pending": 0 + }, + { + "schema": "termforge-qt-resize-state-v1", + "stage": 7, + "requested_columns": 80, + "requested_rows": 24, + "widget_width": 736, + "widget_height": 574, + "core_columns": 80, + "core_rows": 24, + "transport_columns": 1, + "transport_rows": 1, + "requested_revision": 7, + "transport_revision": 6, + "accepting": 1, + "pending": 1 + }, + { + "schema": "termforge-qt-resize-area-v1", + "kind": "literal-child-region", + "stage": 7, + "requested_pixel_width": 736, + "requested_pixel_height": 574, + "actual_pixel_width": 736, + "actual_pixel_height": 574, + "expected_columns": 80, + "expected_rows": 24, + "top_level": 0, + "visible_to_window": 1, + "window_visible": 1, + "window_width": 1200, + "window_height": 749, + "visible_region_width": 736, + "visible_region_height": 574 + }, + { + "schema": "termforge-qt-child-size-v1", + "nonce": 112, + "query_error": 0, + "buffer_columns": 1, + "buffer_rows": 1, + "window_left": 0, + "window_top": 0, + "window_right": 0, + "window_bottom": 0 + }, + { + "schema": "termforge-qt-child-size-v1", + "nonce": 113, + "query_error": 0, + "buffer_columns": 80, + "buffer_rows": 24, + "window_left": 0, + "window_top": 0, + "window_right": 79, + "window_bottom": 23 + }, + { + "schema": "termforge-qt-resize-state-v1", + "stage": 7, + "requested_columns": 80, + "requested_rows": 24, + "widget_width": 736, + "widget_height": 574, + "core_columns": 80, + "core_rows": 24, + "transport_columns": 80, + "transport_rows": 24, + "requested_revision": 7, + "transport_revision": 7, + "accepting": 1, + "pending": 0 + }, + { + "schema": "termforge-qt-resize-state-v1", + "stage": 8, + "requested_columns": 80, + "requested_rows": 24, + "widget_width": 736, + "widget_height": 574, + "core_columns": 80, + "core_rows": 24, + "transport_columns": 80, + "transport_rows": 24, + "requested_revision": 7, + "transport_revision": 7, + "accepting": 1, + "pending": 0 + }, + { + "schema": "termforge-qt-resize-area-v1", + "kind": "literal-child-region", + "stage": 8, + "requested_pixel_width": 736, + "requested_pixel_height": 574, + "actual_pixel_width": 736, + "actual_pixel_height": 574, + "expected_columns": 80, + "expected_rows": 24, + "top_level": 0, + "visible_to_window": 1, + "window_visible": 1, + "window_width": 1200, + "window_height": 749, + "visible_region_width": 736, + "visible_region_height": 574 + }, + { + "schema": "termforge-qt-child-size-v1", + "nonce": 114, + "query_error": 0, + "buffer_columns": 80, + "buffer_rows": 24, + "window_left": 0, + "window_top": 0, + "window_right": 79, + "window_bottom": 23 + }, + { + "schema": "termforge-qt-resize-state-v1", + "stage": 8, + "requested_columns": 80, + "requested_rows": 24, + "widget_width": 736, + "widget_height": 574, + "core_columns": 80, + "core_rows": 24, + "transport_columns": 80, + "transport_rows": 24, + "requested_revision": 7, + "transport_revision": 7, + "accepting": 1, + "pending": 0 + }, + { + "schema": "termforge-qt-child-size-v1", + "nonce": 115, + "query_error": 0, + "buffer_columns": 80, + "buffer_rows": 24, + "window_left": 0, + "window_top": 0, + "window_right": 79, + "window_bottom": 23 + }, + { + "schema": "termforge-qt-child-size-v1", + "nonce": 0, + "query_error": 0, + "buffer_columns": 80, + "buffer_rows": 24, + "window_left": 0, + "window_top": 0, + "window_right": 79, + "window_bottom": 23 + }, + { + "schema": "termforge-qt-resize-state-v1", + "stage": 1700, + "requested_columns": 1, + "requested_rows": 24, + "widget_width": 25, + "widget_height": 574, + "core_columns": 1, + "core_rows": 24, + "transport_columns": 80, + "transport_rows": 24, + "requested_revision": 1, + "transport_revision": 0, + "accepting": 1, + "pending": 1 + }, + { + "schema": "termforge-qt-resize-area-v1", + "kind": "top-level-effective", + "stage": 1700, + "requested_pixel_width": 25, + "requested_pixel_height": 574, + "actual_pixel_width": 120, + "actual_pixel_height": 574, + "expected_columns": 11, + "expected_rows": 24, + "top_level": 1, + "visible_to_window": 1, + "window_visible": 1, + "window_width": 120, + "window_height": 574, + "visible_region_width": 120, + "visible_region_height": 574 + }, + { + "schema": "termforge-qt-child-size-v1", + "nonce": 1701, + "query_error": 0, + "buffer_columns": 11, + "buffer_rows": 24, + "window_left": 0, + "window_top": 0, + "window_right": 10, + "window_bottom": 23 + }, + { + "schema": "termforge-qt-resize-state-v1", + "stage": 1700, + "requested_columns": 1, + "requested_rows": 24, + "widget_width": 120, + "widget_height": 574, + "core_columns": 11, + "core_rows": 24, + "transport_columns": 11, + "transport_rows": 24, + "requested_revision": 2, + "transport_revision": 2, + "accepting": 1, + "pending": 0 + }, + { + "schema": "termforge-qt-resize-area-v1", + "kind": "top-level-effective", + "stage": 1700, + "requested_pixel_width": 25, + "requested_pixel_height": 574, + "actual_pixel_width": 120, + "actual_pixel_height": 574, + "expected_columns": 11, + "expected_rows": 24, + "top_level": 1, + "visible_to_window": 1, + "window_visible": 1, + "window_width": 120, + "window_height": 574, + "visible_region_width": 120, + "visible_region_height": 574 + }, + { + "schema": "termforge-qt-child-size-v1", + "nonce": 0, + "query_error": 0, + "buffer_columns": 80, + "buffer_rows": 24, + "window_left": 0, + "window_top": 0, + "window_right": 79, + "window_bottom": 23 + }, + { + "schema": "termforge-qt-resize-state-v1", + "stage": 700, + "requested_columns": 60, + "requested_rows": 12, + "widget_width": 616, + "widget_height": 336, + "core_columns": 60, + "core_rows": 12, + "transport_columns": 80, + "transport_rows": 24, + "requested_revision": 2, + "transport_revision": 0, + "accepting": 1, + "pending": 1 + }, + { + "schema": "termforge-qt-child-size-v1", + "nonce": 701, + "query_error": 0, + "buffer_columns": 80, + "buffer_rows": 24, + "window_left": 0, + "window_top": 0, + "window_right": 79, + "window_bottom": 23 + }, + { + "schema": "termforge-qt-child-size-v1", + "nonce": 702, + "query_error": 0, + "buffer_columns": 60, + "buffer_rows": 12, + "window_left": 0, + "window_top": 0, + "window_right": 59, + "window_bottom": 11 + }, + { + "schema": "termforge-qt-child-size-v1", + "nonce": 0, + "query_error": 0, + "buffer_columns": 80, + "buffer_rows": 24, + "window_left": 0, + "window_top": 0, + "window_right": 79, + "window_bottom": 23 + }, + { + "schema": "termforge-qt-resize-error-v1", + "accepting": 0, + "pending": 0, + "error_recorded": 1 + }, + { + "schema": "termforge-qt-child-size-v1", + "nonce": 0, + "query_error": 0, + "buffer_columns": 80, + "buffer_rows": 24, + "window_left": 0, + "window_top": 0, + "window_right": 79, + "window_bottom": 23 + }, + { + "schema": "termforge-qt-child-size-v1", + "nonce": 0, + "query_error": 0, + "buffer_columns": 80, + "buffer_rows": 24, + "window_left": 0, + "window_top": 0, + "window_right": 79, + "window_bottom": 23 + }, + { + "schema": "termforge-qt-child-size-v1", + "nonce": 801, + "query_error": 0, + "buffer_columns": 80, + "buffer_rows": 24, + "window_left": 0, + "window_top": 0, + "window_right": 79, + "window_bottom": 23 + }, + { + "schema": "termforge-qt-child-size-v1", + "nonce": 802, + "query_error": 0, + "buffer_columns": 60, + "buffer_rows": 12, + "window_left": 0, + "window_top": 0, + "window_right": 59, + "window_bottom": 11 + }, + { + "schema": "termforge-qt-resize-state-v1", + "stage": 800, + "requested_columns": 60, + "requested_rows": 12, + "widget_width": 556, + "widget_height": 310, + "core_columns": 60, + "core_rows": 12, + "transport_columns": 60, + "transport_rows": 12, + "requested_revision": 1, + "transport_revision": 1, + "accepting": 1, + "pending": 0 + }, + { + "schema": "termforge-qt-child-size-v1", + "nonce": 899, + "query_error": 0, + "buffer_columns": 80, + "buffer_rows": 24, + "window_left": 0, + "window_top": 0, + "window_right": 79, + "window_bottom": 23 + }, + { + "schema": "termforge-qt-child-size-v1", + "nonce": 901, + "query_error": 0, + "buffer_columns": 80, + "buffer_rows": 24, + "window_left": 0, + "window_top": 0, + "window_right": 79, + "window_bottom": 23 + }, + { + "schema": "termforge-qt-child-size-v1", + "nonce": 902, + "query_error": 0, + "buffer_columns": 60, + "buffer_rows": 12, + "window_left": 0, + "window_top": 0, + "window_right": 59, + "window_bottom": 11 + }, + { + "schema": "termforge-qt-resize-state-v1", + "stage": 801, + "requested_columns": 60, + "requested_rows": 12, + "widget_width": 556, + "widget_height": 310, + "core_columns": 60, + "core_rows": 12, + "transport_columns": 60, + "transport_rows": 12, + "requested_revision": 1, + "transport_revision": 1, + "accepting": 1, + "pending": 0 + }, + { + "schema": "termforge-qt-child-size-v1", + "nonce": 1001, + "query_error": 0, + "buffer_columns": 60, + "buffer_rows": 12, + "window_left": 0, + "window_top": 0, + "window_right": 59, + "window_bottom": 11 + }, + { + "schema": "termforge-qt-child-size-v1", + "nonce": 1002, + "query_error": 0, + "buffer_columns": 100, + "buffer_rows": 30, + "window_left": 0, + "window_top": 0, + "window_right": 99, + "window_bottom": 29 + }, + { + "schema": "termforge-qt-resize-state-v1", + "stage": 802, + "requested_columns": 100, + "requested_rows": 30, + "widget_width": 916, + "widget_height": 706, + "core_columns": 100, + "core_rows": 30, + "transport_columns": 100, + "transport_rows": 30, + "requested_revision": 2, + "transport_revision": 2, + "accepting": 1, + "pending": 0 + }, + { + "schema": "termforge-qt-resize-state-v1", + "stage": 900, + "requested_columns": 60, + "requested_rows": 12, + "widget_width": 736, + "widget_height": 574, + "core_columns": 60, + "core_rows": 12, + "transport_columns": 80, + "transport_rows": 24, + "requested_revision": 1, + "transport_revision": 0, + "accepting": 1, + "pending": 1 + }, + { + "schema": "termforge-qt-resize-state-v1", + "stage": 900, + "requested_columns": 60, + "requested_rows": 12, + "widget_width": 736, + "widget_height": 574, + "core_columns": 60, + "core_rows": 12, + "transport_columns": 80, + "transport_rows": 24, + "requested_revision": 1, + "transport_revision": 0, + "accepting": 0, + "pending": 0 + }, + { + "schema": "termforge-qt-child-size-v1", + "nonce": 0, + "query_error": 0, + "buffer_columns": 80, + "buffer_rows": 24, + "window_left": 0, + "window_top": 0, + "window_right": 79, + "window_bottom": 23 + }, + { + "schema": "termforge-qt-resize-state-v1", + "stage": 901, + "requested_columns": 60, + "requested_rows": 12, + "widget_width": 736, + "widget_height": 574, + "core_columns": 60, + "core_rows": 12, + "transport_columns": 80, + "transport_rows": 24, + "requested_revision": 1, + "transport_revision": 0, + "accepting": 1, + "pending": 1 + }, + { + "schema": "termforge-qt-resize-state-v1", + "stage": 901, + "requested_columns": 60, + "requested_rows": 12, + "widget_width": 736, + "widget_height": 574, + "core_columns": 60, + "core_rows": 12, + "transport_columns": 80, + "transport_rows": 24, + "requested_revision": 1, + "transport_revision": 0, + "accepting": 0, + "pending": 0 + }, + { + "schema": "termforge-qt-child-size-v1", + "nonce": 0, + "query_error": 0, + "buffer_columns": 80, + "buffer_rows": 24, + "window_left": 0, + "window_top": 0, + "window_right": 79, + "window_bottom": 23 + }, + { + "schema": "termforge-qt-resize-state-v1", + "stage": 902, + "requested_columns": 60, + "requested_rows": 12, + "widget_width": 736, + "widget_height": 574, + "core_columns": 60, + "core_rows": 12, + "transport_columns": 80, + "transport_rows": 24, + "requested_revision": 1, + "transport_revision": 0, + "accepting": 1, + "pending": 1 + }, + { + "schema": "termforge-qt-child-size-v1", + "nonce": 1201, + "query_error": 0, + "buffer_columns": 80, + "buffer_rows": 24, + "window_left": 0, + "window_top": 0, + "window_right": 79, + "window_bottom": 23 + }, + { + "schema": "termforge-qt-resize-state-v1", + "stage": 902, + "requested_columns": 60, + "requested_rows": 12, + "widget_width": 736, + "widget_height": 574, + "core_columns": 60, + "core_rows": 12, + "transport_columns": 80, + "transport_rows": 24, + "requested_revision": 1, + "transport_revision": 0, + "accepting": 0, + "pending": 0 + }, + { + "schema": "termforge-qt-resize-state-v1", + "stage": 903, + "requested_columns": 80, + "requested_rows": 24, + "widget_width": 736, + "widget_height": 574, + "core_columns": 80, + "core_rows": 24, + "transport_columns": 0, + "transport_rows": 0, + "requested_revision": 0, + "transport_revision": 0, + "accepting": 0, + "pending": 0 + }, + { + "schema": "termforge-qt-child-size-v1", + "nonce": 0, + "query_error": 0, + "buffer_columns": 80, + "buffer_rows": 24, + "window_left": 0, + "window_top": 0, + "window_right": 79, + "window_bottom": 23 + }, + { + "schema": "termforge-qt-child-size-v1", + "nonce": 1301, + "query_error": 0, + "buffer_columns": 100, + "buffer_rows": 30, + "window_left": 0, + "window_top": 0, + "window_right": 99, + "window_bottom": 29 + }, + { + "schema": "termforge-qt-child-size-v1", + "nonce": 1302, + "query_error": 0, + "buffer_columns": 100, + "buffer_rows": 30, + "window_left": 0, + "window_top": 0, + "window_right": 99, + "window_bottom": 29 + }, + { + "schema": "termforge-qt-child-size-v1", + "nonce": 1401, + "query_error": 0, + "buffer_columns": 100, + "buffer_rows": 30, + "window_left": 0, + "window_top": 0, + "window_right": 99, + "window_bottom": 29 + }, + { + "schema": "termforge-qt-child-size-v1", + "nonce": 0, + "query_error": 0, + "buffer_columns": 500, + "buffer_rows": 200, + "window_left": 0, + "window_top": 0, + "window_right": 499, + "window_bottom": 199 + }, + { + "schema": "termforge-qt-resize-state-v1", + "stage": 1600, + "requested_columns": 600, + "requested_rows": 240, + "widget_width": 5416, + "widget_height": 5326, + "core_columns": 500, + "core_rows": 200, + "transport_columns": 500, + "transport_rows": 200, + "requested_revision": 1, + "transport_revision": 1, + "accepting": 1, + "pending": 0 + }, + { + "schema": "termforge-qt-resize-area-v1", + "kind": "bounded-child-region", + "stage": 1600, + "requested_pixel_width": 5416, + "requested_pixel_height": 5326, + "actual_pixel_width": 5416, + "actual_pixel_height": 5326, + "expected_columns": 500, + "expected_rows": 200, + "top_level": 0, + "visible_to_window": 1, + "window_visible": 1, + "window_width": 1200, + "window_height": 749, + "visible_region_width": 1200, + "visible_region_height": 749 + }, + { + "schema": "termforge-qt-child-size-v1", + "nonce": 1601, + "query_error": 0, + "buffer_columns": 500, + "buffer_rows": 200, + "window_left": 0, + "window_top": 0, + "window_right": 499, + "window_bottom": 199 + } + ], + "windows": [ + { + "visible": true, + "rect": [ + 0, + 0, + 1216, + 788 + ], + "dpi": 96, + "class": "Qt6103QWindowIcon" + }, + { + "visible": true, + "rect": [ + 136, + 42, + 888, + 655 + ], + "dpi": 96, + "class": "Qt6103QWindowIcon" + }, + { + "visible": true, + "rect": [ + 136, + 42, + 272, + 655 + ], + "dpi": 96, + "class": "Qt6103QWindowIcon" + }, + { + "visible": true, + "rect": [ + 136, + 42, + 888, + 655 + ], + "dpi": 96, + "class": "Qt6103QWindowIcon" + }, + { + "visible": true, + "rect": [ + 136, + 42, + 768, + 417 + ], + "dpi": 96, + "class": "Qt6103QWindowIcon" + }, + { + "visible": true, + "rect": [ + 136, + 42, + 888, + 655 + ], + "dpi": 96, + "class": "Qt6103QWindowIcon" + }, + { + "visible": true, + "rect": [ + 133, + 27, + 891, + 670 + ], + "dpi": 96, + "class": "Qt6103QWindowIcon" + }, + { + "visible": true, + "rect": [ + 133, + 27, + 711, + 405 + ], + "dpi": 96, + "class": "Qt6103QWindowIcon" + }, + { + "visible": true, + "rect": [ + 133, + 27, + 1071, + 801 + ], + "dpi": 96, + "class": "Qt6103QWindowIcon" + }, + { + "visible": true, + "rect": [ + 136, + 42, + 888, + 655 + ], + "dpi": 96, + "class": "Qt6103QWindowIcon" + }, + { + "visible": true, + "rect": [ + 136, + 42, + 888, + 655 + ], + "dpi": 96, + "class": "Qt6103QWindowIcon" + }, + { + "visible": true, + "rect": [ + 136, + 42, + 888, + 655 + ], + "dpi": 96, + "class": "Qt6103QWindowIcon" + }, + { + "visible": true, + "rect": [ + 136, + 42, + 888, + 655 + ], + "dpi": 96, + "class": "Qt6103QWindowIcon" + }, + { + "visible": true, + "rect": [ + 136, + 42, + 888, + 655 + ], + "dpi": 96, + "class": "Qt6103QWindowIcon" + }, + { + "visible": true, + "rect": [ + 0, + 0, + 1216, + 788 + ], + "dpi": 96, + "class": "Qt6103QWindowIcon" + } + ], + "interpretation": [ + "Literal owned child regions preserve 1x24, 80x1 and actual 1px by 1px expectations.", + "The retained decorated top-level request is 25x574px; actual area is 120x574px, and independently derived 11x24 matches core, applied transport and nonce child CSBI.", + "Native bounded 5416x5326 child is clipped to 1200x749 visible owner area; offscreen 1200x900 is a separate observation.", + "40 CSBI replies cover all cases; sample child_ack_replies 14 counts the main sequence only.", + "Pending natural-exit race retains old 80x24 transport/child and is lifecycle evidence only.", + "No forced native or request root termination; explicit lifecycle child cancellation cases remain intentional.", + "2 MiB case proves observed output, drain, EOF and bounded queue, not full payload correctness or performance acceptance." + ], + "private_raw_records": [ + { + "name": "final-audit-result.json", + "bytes": 2578, + "sha256": "13c07805f22a76837b0c49146809f85a016fb6e1e209d100955b9c11c3851202", + "published": false + }, + { + "name": "final-audit.ps1", + "bytes": 3034, + "sha256": "0d7e83d747bc9569ebdb4bdd3eac3d74b80b7b3b0743df915e5f4d7dd2bf97ea", + "published": false + }, + { + "name": "native-gui.attempted", + "bytes": 0, + "sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "published": false + }, + { + "name": "native-observation.json", + "bytes": 26866, + "sha256": "54eebc292e9decc8b0fa9225848e07b4f6375b5667fee39fdefd5681eec02d5e", + "published": false + }, + { + "name": "native-request-exit.json", + "bytes": 75, + "sha256": "40da338a6ec0c3a977f49e03516919fbfd1d3c674f99c8ce8c2cce07495ce79d", + "published": false + }, + { + "name": "native-request-result.json", + "bytes": 38050, + "sha256": "5067ae8f507234f65a3370728ebd16bec59cb2f8609b10dc941c1ed8c8c43606", + "published": false + }, + { + "name": "native-smoke.ps1", + "bytes": 7999, + "sha256": "f22d80edf1d05d13783c1def8516282428f8d44a096ca8a638da4fe97935d5d1", + "published": false + }, + { + "name": "plan.json", + "bytes": 1259, + "sha256": "5c5253e2319e06f8a82e57af1bb8803c593442590d92191920db7261e057481e", + "published": false + }, + { + "name": "preflight-result.json", + "bytes": 540, + "sha256": "a35616efcd7d09cb7613d0cd188327d5bd6fbdf8db4480a58a752c725c479ec3", + "published": false + }, + { + "name": "preflight.ps1", + "bytes": 1414, + "sha256": "ad970a33cab7e4a23614671d1ca41b6ef4c1e3f9ba431ea2bc61c38357f89b67", + "published": false + }, + { + "name": "prepare.py", + "bytes": 3516, + "sha256": "e2e197fd3b7a9da5c6a9ac3933adb331775305690bbdeeb066055843a40d5388", + "published": false + }, + { + "name": "runtime-input.json", + "bytes": 6611, + "sha256": "44b040dea3912d7a37325f9b696767f338a8f58eb1e544b0db9e0ff3a5fe2edc", + "published": false + }, + { + "name": "runtime.zip", + "bytes": 23837280, + "sha256": "1b1ac682efbc32f3a48b57eef927f95ab293c2533b9444ea6b69d99273f93bde", + "published": false + }, + { + "name": "transfer-manifest.json", + "bytes": 24, + "sha256": "66db75e3c8b8dfc068f7c703e412ca42f99477f599f96faa939500cbcba5843a", + "published": false + }, + { + "name": "transfer-runtime.json", + "bytes": 28, + "sha256": "035ac483917f7457dac3685e07f2e394363461b00fef3203117c84248b8a4976", + "published": false + }, + { + "name": "unpack-result.json", + "bytes": 291, + "sha256": "26a0b66fe6cb6c9afb23c4a75cb1573672d45a2251f0704b70a717fd2ac79bda", + "published": false + }, + { + "name": "unpack.ps1", + "bytes": 1962, + "sha256": "e42d4482c940136147dea022fc97367755722acfd106397245d080f4ece8603a", + "published": false + } + ], + "limitations": [ + "Single isolated native run at DPI 96 only; not full different-DPI product validation.", + "Prior 678 native failure and local non-isolated-desktop reproduction remain unchanged.", + "No new complete matrix; the separate 57/57 offscreen matrix belongs to source 0ff only, with 13 skips retained.", + "No WindTerm resize/reflow, history, Unicode/IME/Find, physical input, presented, performance, release or full #29/#31/R2 acceptance." + ], + "presented_done": null +} diff --git a/experiments/shell/results/2026-10-29-qt-resize/platform-area-validation.json b/experiments/shell/results/2026-10-29-qt-resize/platform-area-validation.json new file mode 100644 index 00000000..a1c1bde3 --- /dev/null +++ b/experiments/shell/results/2026-10-29-qt-resize/platform-area-validation.json @@ -0,0 +1,5233 @@ +{ + "schema": "termforge-qt-resize-platform-area-validation-v1", + "issue": 143, + "status": "fixture_corrected_offscreen_only_native_followup_pending", + "post_full_publication_union": { + "merged_main": "ae985443af1d9e527b0c92e0e2a18c3b62e63866", + "merge_commit": "bc1805d43231214b73d8602fcaf5b3f46059eef4", + "scope": "Independent SGR1 research tools and offline tests, plus a fixture-copy CMake line; no Qt/core/runtime implementation changes", + "full_matrix_and_native_package_source_unchanged": "0ff783cb14f23dfa641b6b6f45894c038cca048c", + "union_ci_results_must_be_recorded_separately": true + }, + "prior_offscreen": { + "source_commit": "678299d54454e26ac04ef6d1c46237ab6b33752b", + "validation_file": "validation.json", + "full_matrix_unchanged": true + }, + "prior_native_failure": { + "source_commit": "678299d54454e26ac04ef6d1c46237ab6b33752b", + "qt_platform": "windows", + "environment": { + "caption": "Microsoft Windows 11 \u4f01\u4e1a\u8bc4\u4f30\u7248", + "build": "26300", + "ubr": 9711, + "session_id": 1 + }, + "root_exit_code": 1, + "root_timeout_ms": 25000, + "timed_out": false, + "forced_root_termination": false, + "root_reaped": true, + "request_execution": { + "Schema": "termforge-owned-vm-request-v2", + "RootExitCode": 1, + "JobBeforeActive": 0, + "JobBeforeTotal": 8, + "JobAfterActive": 0, + "TimedOut": false, + "TerminationRequested": false, + "RootReaped": true, + "CleanupVerified": true + }, + "system_crt_before": { + "msvcp140_2.dll": false, + "msvcp140_1.dll": false, + "vcruntime140.dll": false, + "vcruntime140_1.dll": false, + "msvcp140.dll": false + }, + "system_crt_after": { + "msvcp140_2.dll": false, + "msvcp140_1.dll": false, + "vcruntime140.dll": false, + "vcruntime140_1.dll": false, + "msvcp140.dll": false + }, + "windows": [ + { + "visible": true, + "rect": [ + 136, + 42, + 888, + 655 + ], + "dpi": 96, + "class": "Qt6103QWindowIcon" + }, + { + "visible": true, + "rect": [ + 136, + 42, + 708, + 391 + ], + "dpi": 96, + "class": "Qt6103QWindowIcon" + }, + { + "visible": true, + "rect": [ + 136, + 42, + 1068, + 787 + ], + "dpi": 96, + "class": "Qt6103QWindowIcon" + }, + { + "visible": true, + "rect": [ + 136, + 42, + 272, + 655 + ], + "dpi": 96, + "class": "Qt6103QWindowIcon" + } + ], + "observations": [ + { + "schema": "termforge-qt-child-size-v1", + "nonce": 0, + "query_error": 0, + "buffer_columns": 80, + "buffer_rows": 24, + "window_left": 0, + "window_top": 0, + "window_right": 79, + "window_bottom": 23 + }, + { + "schema": "termforge-qt-resize-state-v1", + "stage": 0, + "requested_columns": 80, + "requested_rows": 24, + "widget_width": 736, + "widget_height": 574, + "core_columns": 80, + "core_rows": 24, + "transport_columns": 80, + "transport_rows": 24, + "requested_revision": 0, + "transport_revision": 0, + "accepting": 1, + "pending": 0 + }, + { + "schema": "termforge-qt-resize-state-v1", + "stage": 1, + "requested_columns": 60, + "requested_rows": 12, + "widget_width": 556, + "widget_height": 310, + "core_columns": 60, + "core_rows": 12, + "transport_columns": 80, + "transport_rows": 24, + "requested_revision": 1, + "transport_revision": 0, + "accepting": 1, + "pending": 1 + }, + { + "schema": "termforge-qt-child-size-v1", + "nonce": 101, + "query_error": 0, + "buffer_columns": 80, + "buffer_rows": 24, + "window_left": 0, + "window_top": 0, + "window_right": 79, + "window_bottom": 23 + }, + { + "schema": "termforge-qt-child-size-v1", + "nonce": 102, + "query_error": 0, + "buffer_columns": 60, + "buffer_rows": 12, + "window_left": 0, + "window_top": 0, + "window_right": 59, + "window_bottom": 11 + }, + { + "schema": "termforge-qt-resize-state-v1", + "stage": 1, + "requested_columns": 60, + "requested_rows": 12, + "widget_width": 556, + "widget_height": 310, + "core_columns": 60, + "core_rows": 12, + "transport_columns": 60, + "transport_rows": 12, + "requested_revision": 1, + "transport_revision": 1, + "accepting": 1, + "pending": 0 + }, + { + "schema": "termforge-qt-resize-state-v1", + "stage": 2, + "requested_columns": 100, + "requested_rows": 30, + "widget_width": 916, + "widget_height": 706, + "core_columns": 100, + "core_rows": 30, + "transport_columns": 60, + "transport_rows": 12, + "requested_revision": 2, + "transport_revision": 1, + "accepting": 1, + "pending": 1 + }, + { + "schema": "termforge-qt-child-size-v1", + "nonce": 103, + "query_error": 0, + "buffer_columns": 60, + "buffer_rows": 12, + "window_left": 0, + "window_top": 0, + "window_right": 59, + "window_bottom": 11 + }, + { + "schema": "termforge-qt-child-size-v1", + "nonce": 104, + "query_error": 0, + "buffer_columns": 100, + "buffer_rows": 30, + "window_left": 0, + "window_top": 0, + "window_right": 99, + "window_bottom": 29 + }, + { + "schema": "termforge-qt-resize-state-v1", + "stage": 2, + "requested_columns": 100, + "requested_rows": 30, + "widget_width": 916, + "widget_height": 706, + "core_columns": 100, + "core_rows": 30, + "transport_columns": 100, + "transport_rows": 30, + "requested_revision": 2, + "transport_revision": 2, + "accepting": 1, + "pending": 0 + }, + { + "schema": "termforge-qt-resize-state-v1", + "stage": 3, + "requested_columns": 80, + "requested_rows": 24, + "widget_width": 736, + "widget_height": 574, + "core_columns": 80, + "core_rows": 24, + "transport_columns": 100, + "transport_rows": 30, + "requested_revision": 3, + "transport_revision": 2, + "accepting": 1, + "pending": 1 + }, + { + "schema": "termforge-qt-child-size-v1", + "nonce": 105, + "query_error": 0, + "buffer_columns": 100, + "buffer_rows": 30, + "window_left": 0, + "window_top": 0, + "window_right": 99, + "window_bottom": 29 + }, + { + "schema": "termforge-qt-child-size-v1", + "nonce": 106, + "query_error": 0, + "buffer_columns": 80, + "buffer_rows": 24, + "window_left": 0, + "window_top": 0, + "window_right": 79, + "window_bottom": 23 + }, + { + "schema": "termforge-qt-resize-state-v1", + "stage": 3, + "requested_columns": 80, + "requested_rows": 24, + "widget_width": 736, + "widget_height": 574, + "core_columns": 80, + "core_rows": 24, + "transport_columns": 80, + "transport_rows": 24, + "requested_revision": 3, + "transport_revision": 3, + "accepting": 1, + "pending": 0 + }, + { + "schema": "termforge-qt-resize-state-v1", + "stage": 4, + "requested_columns": 1, + "requested_rows": 24, + "widget_width": 25, + "widget_height": 574, + "core_columns": 1, + "core_rows": 24, + "transport_columns": 80, + "transport_rows": 24, + "requested_revision": 4, + "transport_revision": 3, + "accepting": 1, + "pending": 1 + }, + { + "schema": "termforge-qt-child-size-v1", + "nonce": 107, + "query_error": 0, + "buffer_columns": 11, + "buffer_rows": 24, + "window_left": 0, + "window_top": 0, + "window_right": 10, + "window_bottom": 23 + }, + { + "schema": "termforge-qt-child-size-v1", + "nonce": 108, + "query_error": 0, + "buffer_columns": 11, + "buffer_rows": 24, + "window_left": 0, + "window_top": 0, + "window_right": 10, + "window_bottom": 23 + }, + { + "schema": "termforge-qt-child-size-v1", + "nonce": 109, + "query_error": 0, + "buffer_columns": 11, + "buffer_rows": 24, + "window_left": 0, + "window_top": 0, + "window_right": 10, + "window_bottom": 23 + }, + { + "schema": "termforge-qt-child-size-v1", + "nonce": 110, + "query_error": 0, + "buffer_columns": 11, + "buffer_rows": 24, + "window_left": 0, + "window_top": 0, + "window_right": 10, + "window_bottom": 23 + }, + { + "schema": "termforge-qt-child-size-v1", + "nonce": 111, + "query_error": 0, + "buffer_columns": 11, + "buffer_rows": 24, + "window_left": 0, + "window_top": 0, + "window_right": 10, + "window_bottom": 23 + }, + { + "schema": "termforge-qt-child-size-v1", + "nonce": 112, + "query_error": 0, + "buffer_columns": 11, + "buffer_rows": 24, + "window_left": 0, + "window_top": 0, + "window_right": 10, + "window_bottom": 23 + }, + { + "schema": "termforge-qt-child-size-v1", + "nonce": 113, + "query_error": 0, + "buffer_columns": 11, + "buffer_rows": 24, + "window_left": 0, + "window_top": 0, + "window_right": 10, + "window_bottom": 23 + }, + { + "schema": "termforge-qt-child-size-v1", + "nonce": 114, + "query_error": 0, + "buffer_columns": 11, + "buffer_rows": 24, + "window_left": 0, + "window_top": 0, + "window_right": 10, + "window_bottom": 23 + }, + { + "schema": "termforge-qt-child-size-v1", + "nonce": 115, + "query_error": 0, + "buffer_columns": 11, + "buffer_rows": 24, + "window_left": 0, + "window_top": 0, + "window_right": 10, + "window_bottom": 23 + }, + { + "schema": "termforge-qt-child-size-v1", + "nonce": 116, + "query_error": 0, + "buffer_columns": 11, + "buffer_rows": 24, + "window_left": 0, + "window_top": 0, + "window_right": 10, + "window_bottom": 23 + }, + { + "schema": "termforge-qt-child-size-v1", + "nonce": 117, + "query_error": 0, + "buffer_columns": 11, + "buffer_rows": 24, + "window_left": 0, + "window_top": 0, + "window_right": 10, + "window_bottom": 23 + }, + { + "schema": "termforge-qt-child-size-v1", + "nonce": 118, + "query_error": 0, + "buffer_columns": 11, + "buffer_rows": 24, + "window_left": 0, + "window_top": 0, + "window_right": 10, + "window_bottom": 23 + }, + { + "schema": "termforge-qt-child-size-v1", + "nonce": 119, + "query_error": 0, + "buffer_columns": 11, + "buffer_rows": 24, + "window_left": 0, + "window_top": 0, + "window_right": 10, + "window_bottom": 23 + }, + { + "schema": "termforge-qt-child-size-v1", + "nonce": 120, + "query_error": 0, + "buffer_columns": 11, + "buffer_rows": 24, + "window_left": 0, + "window_top": 0, + "window_right": 10, + "window_bottom": 23 + }, + { + "schema": "termforge-qt-child-size-v1", + "nonce": 121, + "query_error": 0, + "buffer_columns": 11, + "buffer_rows": 24, + "window_left": 0, + "window_top": 0, + "window_right": 10, + "window_bottom": 23 + }, + { + "schema": "termforge-qt-child-size-v1", + "nonce": 122, + "query_error": 0, + "buffer_columns": 11, + "buffer_rows": 24, + "window_left": 0, + "window_top": 0, + "window_right": 10, + "window_bottom": 23 + }, + { + "schema": "termforge-qt-child-size-v1", + "nonce": 123, + "query_error": 0, + "buffer_columns": 11, + "buffer_rows": 24, + "window_left": 0, + "window_top": 0, + "window_right": 10, + "window_bottom": 23 + }, + { + "schema": "termforge-qt-child-size-v1", + "nonce": 124, + "query_error": 0, + "buffer_columns": 11, + "buffer_rows": 24, + "window_left": 0, + "window_top": 0, + "window_right": 10, + "window_bottom": 23 + }, + { + "schema": "termforge-qt-child-size-v1", + "nonce": 125, + "query_error": 0, + "buffer_columns": 11, + "buffer_rows": 24, + "window_left": 0, + "window_top": 0, + "window_right": 10, + "window_bottom": 23 + }, + { + "schema": "termforge-qt-child-size-v1", + "nonce": 126, + "query_error": 0, + "buffer_columns": 11, + "buffer_rows": 24, + "window_left": 0, + "window_top": 0, + "window_right": 10, + "window_bottom": 23 + }, + { + "schema": "termforge-qt-child-size-v1", + "nonce": 127, + "query_error": 0, + "buffer_columns": 11, + "buffer_rows": 24, + "window_left": 0, + "window_top": 0, + "window_right": 10, + "window_bottom": 23 + }, + { + "schema": "termforge-qt-child-size-v1", + "nonce": 128, + "query_error": 0, + "buffer_columns": 11, + "buffer_rows": 24, + "window_left": 0, + "window_top": 0, + "window_right": 10, + "window_bottom": 23 + }, + { + "schema": "termforge-qt-child-size-v1", + "nonce": 129, + "query_error": 0, + "buffer_columns": 11, + "buffer_rows": 24, + "window_left": 0, + "window_top": 0, + "window_right": 10, + "window_bottom": 23 + }, + { + "schema": "termforge-qt-child-size-v1", + "nonce": 130, + "query_error": 0, + "buffer_columns": 11, + "buffer_rows": 24, + "window_left": 0, + "window_top": 0, + "window_right": 10, + "window_bottom": 23 + }, + { + "schema": "termforge-qt-child-size-v1", + "nonce": 131, + "query_error": 0, + "buffer_columns": 11, + "buffer_rows": 24, + "window_left": 0, + "window_top": 0, + "window_right": 10, + "window_bottom": 23 + }, + { + "schema": "termforge-qt-child-size-v1", + "nonce": 132, + "query_error": 0, + "buffer_columns": 11, + "buffer_rows": 24, + "window_left": 0, + "window_top": 0, + "window_right": 10, + "window_bottom": 23 + }, + { + "schema": "termforge-qt-child-size-v1", + "nonce": 133, + "query_error": 0, + "buffer_columns": 11, + "buffer_rows": 24, + "window_left": 0, + "window_top": 0, + "window_right": 10, + "window_bottom": 23 + }, + { + "schema": "termforge-qt-child-size-v1", + "nonce": 134, + "query_error": 0, + "buffer_columns": 11, + "buffer_rows": 24, + "window_left": 0, + "window_top": 0, + "window_right": 10, + "window_bottom": 23 + }, + { + "schema": "termforge-qt-child-size-v1", + "nonce": 135, + "query_error": 0, + "buffer_columns": 11, + "buffer_rows": 24, + "window_left": 0, + "window_top": 0, + "window_right": 10, + "window_bottom": 23 + }, + { + "schema": "termforge-qt-child-size-v1", + "nonce": 136, + "query_error": 0, + "buffer_columns": 11, + "buffer_rows": 24, + "window_left": 0, + "window_top": 0, + "window_right": 10, + "window_bottom": 23 + }, + { + "schema": "termforge-qt-child-size-v1", + "nonce": 137, + "query_error": 0, + "buffer_columns": 11, + "buffer_rows": 24, + "window_left": 0, + "window_top": 0, + "window_right": 10, + "window_bottom": 23 + }, + { + "schema": "termforge-qt-child-size-v1", + "nonce": 138, + "query_error": 0, + "buffer_columns": 11, + "buffer_rows": 24, + "window_left": 0, + "window_top": 0, + "window_right": 10, + "window_bottom": 23 + }, + { + "schema": "termforge-qt-child-size-v1", + "nonce": 139, + "query_error": 0, + "buffer_columns": 11, + "buffer_rows": 24, + "window_left": 0, + "window_top": 0, + "window_right": 10, + "window_bottom": 23 + }, + { + "schema": "termforge-qt-child-size-v1", + "nonce": 140, + "query_error": 0, + "buffer_columns": 11, + "buffer_rows": 24, + "window_left": 0, + "window_top": 0, + "window_right": 10, + "window_bottom": 23 + }, + { + "schema": "termforge-qt-child-size-v1", + "nonce": 141, + "query_error": 0, + "buffer_columns": 11, + "buffer_rows": 24, + "window_left": 0, + "window_top": 0, + "window_right": 10, + "window_bottom": 23 + }, + { + "schema": "termforge-qt-child-size-v1", + "nonce": 142, + "query_error": 0, + "buffer_columns": 11, + "buffer_rows": 24, + "window_left": 0, + "window_top": 0, + "window_right": 10, + "window_bottom": 23 + }, + { + "schema": "termforge-qt-child-size-v1", + "nonce": 143, + "query_error": 0, + "buffer_columns": 11, + "buffer_rows": 24, + "window_left": 0, + "window_top": 0, + "window_right": 10, + "window_bottom": 23 + }, + { + "schema": "termforge-qt-child-size-v1", + "nonce": 144, + "query_error": 0, + "buffer_columns": 11, + "buffer_rows": 24, + "window_left": 0, + "window_top": 0, + "window_right": 10, + "window_bottom": 23 + }, + { + "schema": "termforge-qt-child-size-v1", + "nonce": 145, + "query_error": 0, + "buffer_columns": 11, + "buffer_rows": 24, + "window_left": 0, + "window_top": 0, + "window_right": 10, + "window_bottom": 23 + }, + { + "schema": "termforge-qt-child-size-v1", + "nonce": 146, + "query_error": 0, + "buffer_columns": 11, + "buffer_rows": 24, + "window_left": 0, + "window_top": 0, + "window_right": 10, + "window_bottom": 23 + }, + { + "schema": "termforge-qt-child-size-v1", + "nonce": 147, + "query_error": 0, + "buffer_columns": 11, + "buffer_rows": 24, + "window_left": 0, + "window_top": 0, + "window_right": 10, + "window_bottom": 23 + }, + { + "schema": "termforge-qt-child-size-v1", + "nonce": 148, + "query_error": 0, + "buffer_columns": 11, + "buffer_rows": 24, + "window_left": 0, + "window_top": 0, + "window_right": 10, + "window_bottom": 23 + }, + { + "schema": "termforge-qt-child-size-v1", + "nonce": 149, + "query_error": 0, + "buffer_columns": 11, + "buffer_rows": 24, + "window_left": 0, + "window_top": 0, + "window_right": 10, + "window_bottom": 23 + }, + { + "schema": "termforge-qt-child-size-v1", + "nonce": 150, + "query_error": 0, + "buffer_columns": 11, + "buffer_rows": 24, + "window_left": 0, + "window_top": 0, + "window_right": 10, + "window_bottom": 23 + }, + { + "schema": "termforge-qt-child-size-v1", + "nonce": 151, + "query_error": 0, + "buffer_columns": 11, + "buffer_rows": 24, + "window_left": 0, + "window_top": 0, + "window_right": 10, + "window_bottom": 23 + }, + { + "schema": "termforge-qt-child-size-v1", + "nonce": 152, + "query_error": 0, + "buffer_columns": 11, + "buffer_rows": 24, + "window_left": 0, + "window_top": 0, + "window_right": 10, + "window_bottom": 23 + }, + { + "schema": "termforge-qt-child-size-v1", + "nonce": 153, + "query_error": 0, + "buffer_columns": 11, + "buffer_rows": 24, + "window_left": 0, + "window_top": 0, + "window_right": 10, + "window_bottom": 23 + }, + { + "schema": "termforge-qt-child-size-v1", + "nonce": 154, + "query_error": 0, + "buffer_columns": 11, + "buffer_rows": 24, + "window_left": 0, + "window_top": 0, + "window_right": 10, + "window_bottom": 23 + }, + { + "schema": "termforge-qt-child-size-v1", + "nonce": 155, + "query_error": 0, + "buffer_columns": 11, + "buffer_rows": 24, + "window_left": 0, + "window_top": 0, + "window_right": 10, + "window_bottom": 23 + }, + { + "schema": "termforge-qt-child-size-v1", + "nonce": 156, + "query_error": 0, + "buffer_columns": 11, + "buffer_rows": 24, + "window_left": 0, + "window_top": 0, + "window_right": 10, + "window_bottom": 23 + }, + { + "schema": "termforge-qt-child-size-v1", + "nonce": 157, + "query_error": 0, + "buffer_columns": 11, + "buffer_rows": 24, + "window_left": 0, + "window_top": 0, + "window_right": 10, + "window_bottom": 23 + }, + { + "schema": "termforge-qt-child-size-v1", + "nonce": 158, + "query_error": 0, + "buffer_columns": 11, + "buffer_rows": 24, + "window_left": 0, + "window_top": 0, + "window_right": 10, + "window_bottom": 23 + }, + { + "schema": "termforge-qt-child-size-v1", + "nonce": 159, + "query_error": 0, + "buffer_columns": 11, + "buffer_rows": 24, + "window_left": 0, + "window_top": 0, + "window_right": 10, + "window_bottom": 23 + }, + { + "schema": "termforge-qt-child-size-v1", + "nonce": 160, + "query_error": 0, + "buffer_columns": 11, + "buffer_rows": 24, + "window_left": 0, + "window_top": 0, + "window_right": 10, + "window_bottom": 23 + }, + { + "schema": "termforge-qt-child-size-v1", + "nonce": 161, + "query_error": 0, + "buffer_columns": 11, + "buffer_rows": 24, + "window_left": 0, + "window_top": 0, + "window_right": 10, + "window_bottom": 23 + }, + { + "schema": "termforge-qt-child-size-v1", + "nonce": 162, + "query_error": 0, + "buffer_columns": 11, + "buffer_rows": 24, + "window_left": 0, + "window_top": 0, + "window_right": 10, + "window_bottom": 23 + }, + { + "schema": "termforge-qt-child-size-v1", + "nonce": 163, + "query_error": 0, + "buffer_columns": 11, + "buffer_rows": 24, + "window_left": 0, + "window_top": 0, + "window_right": 10, + "window_bottom": 23 + }, + { + "schema": "termforge-qt-child-size-v1", + "nonce": 164, + "query_error": 0, + "buffer_columns": 11, + "buffer_rows": 24, + "window_left": 0, + "window_top": 0, + "window_right": 10, + "window_bottom": 23 + }, + { + "schema": "termforge-qt-child-size-v1", + "nonce": 165, + "query_error": 0, + "buffer_columns": 11, + "buffer_rows": 24, + "window_left": 0, + "window_top": 0, + "window_right": 10, + "window_bottom": 23 + }, + { + "schema": "termforge-qt-child-size-v1", + "nonce": 166, + "query_error": 0, + "buffer_columns": 11, + "buffer_rows": 24, + "window_left": 0, + "window_top": 0, + "window_right": 10, + "window_bottom": 23 + }, + { + "schema": "termforge-qt-child-size-v1", + "nonce": 167, + "query_error": 0, + "buffer_columns": 11, + "buffer_rows": 24, + "window_left": 0, + "window_top": 0, + "window_right": 10, + "window_bottom": 23 + }, + { + "schema": "termforge-qt-child-size-v1", + "nonce": 168, + "query_error": 0, + "buffer_columns": 11, + "buffer_rows": 24, + "window_left": 0, + "window_top": 0, + "window_right": 10, + "window_bottom": 23 + }, + { + "schema": "termforge-qt-child-size-v1", + "nonce": 169, + "query_error": 0, + "buffer_columns": 11, + "buffer_rows": 24, + "window_left": 0, + "window_top": 0, + "window_right": 10, + "window_bottom": 23 + }, + { + "schema": "termforge-qt-child-size-v1", + "nonce": 170, + "query_error": 0, + "buffer_columns": 11, + "buffer_rows": 24, + "window_left": 0, + "window_top": 0, + "window_right": 10, + "window_bottom": 23 + }, + { + "schema": "termforge-qt-child-size-v1", + "nonce": 171, + "query_error": 0, + "buffer_columns": 11, + "buffer_rows": 24, + "window_left": 0, + "window_top": 0, + "window_right": 10, + "window_bottom": 23 + }, + { + "schema": "termforge-qt-child-size-v1", + "nonce": 172, + "query_error": 0, + "buffer_columns": 11, + "buffer_rows": 24, + "window_left": 0, + "window_top": 0, + "window_right": 10, + "window_bottom": 23 + }, + { + "schema": "termforge-qt-child-size-v1", + "nonce": 173, + "query_error": 0, + "buffer_columns": 11, + "buffer_rows": 24, + "window_left": 0, + "window_top": 0, + "window_right": 10, + "window_bottom": 23 + }, + { + "schema": "termforge-qt-child-size-v1", + "nonce": 174, + "query_error": 0, + "buffer_columns": 11, + "buffer_rows": 24, + "window_left": 0, + "window_top": 0, + "window_right": 10, + "window_bottom": 23 + }, + { + "schema": "termforge-qt-child-size-v1", + "nonce": 175, + "query_error": 0, + "buffer_columns": 11, + "buffer_rows": 24, + "window_left": 0, + "window_top": 0, + "window_right": 10, + "window_bottom": 23 + }, + { + "schema": "termforge-qt-child-size-v1", + "nonce": 176, + "query_error": 0, + "buffer_columns": 11, + "buffer_rows": 24, + "window_left": 0, + "window_top": 0, + "window_right": 10, + "window_bottom": 23 + }, + { + "schema": "termforge-qt-child-size-v1", + "nonce": 177, + "query_error": 0, + "buffer_columns": 11, + "buffer_rows": 24, + "window_left": 0, + "window_top": 0, + "window_right": 10, + "window_bottom": 23 + }, + { + "schema": "termforge-qt-child-size-v1", + "nonce": 178, + "query_error": 0, + "buffer_columns": 11, + "buffer_rows": 24, + "window_left": 0, + "window_top": 0, + "window_right": 10, + "window_bottom": 23 + }, + { + "schema": "termforge-qt-child-size-v1", + "nonce": 179, + "query_error": 0, + "buffer_columns": 11, + "buffer_rows": 24, + "window_left": 0, + "window_top": 0, + "window_right": 10, + "window_bottom": 23 + }, + { + "schema": "termforge-qt-child-size-v1", + "nonce": 180, + "query_error": 0, + "buffer_columns": 11, + "buffer_rows": 24, + "window_left": 0, + "window_top": 0, + "window_right": 10, + "window_bottom": 23 + }, + { + "schema": "termforge-qt-child-size-v1", + "nonce": 181, + "query_error": 0, + "buffer_columns": 11, + "buffer_rows": 24, + "window_left": 0, + "window_top": 0, + "window_right": 10, + "window_bottom": 23 + }, + { + "schema": "termforge-qt-child-size-v1", + "nonce": 182, + "query_error": 0, + "buffer_columns": 11, + "buffer_rows": 24, + "window_left": 0, + "window_top": 0, + "window_right": 10, + "window_bottom": 23 + }, + { + "schema": "termforge-qt-child-size-v1", + "nonce": 183, + "query_error": 0, + "buffer_columns": 11, + "buffer_rows": 24, + "window_left": 0, + "window_top": 0, + "window_right": 10, + "window_bottom": 23 + }, + { + "schema": "termforge-qt-child-size-v1", + "nonce": 184, + "query_error": 0, + "buffer_columns": 11, + "buffer_rows": 24, + "window_left": 0, + "window_top": 0, + "window_right": 10, + "window_bottom": 23 + }, + { + "schema": "termforge-qt-child-size-v1", + "nonce": 185, + "query_error": 0, + "buffer_columns": 11, + "buffer_rows": 24, + "window_left": 0, + "window_top": 0, + "window_right": 10, + "window_bottom": 23 + }, + { + "schema": "termforge-qt-child-size-v1", + "nonce": 186, + "query_error": 0, + "buffer_columns": 11, + "buffer_rows": 24, + "window_left": 0, + "window_top": 0, + "window_right": 10, + "window_bottom": 23 + }, + { + "schema": "termforge-qt-child-size-v1", + "nonce": 187, + "query_error": 0, + "buffer_columns": 11, + "buffer_rows": 24, + "window_left": 0, + "window_top": 0, + "window_right": 10, + "window_bottom": 23 + }, + { + "schema": "termforge-qt-child-size-v1", + "nonce": 188, + "query_error": 0, + "buffer_columns": 11, + "buffer_rows": 24, + "window_left": 0, + "window_top": 0, + "window_right": 10, + "window_bottom": 23 + }, + { + "schema": "termforge-qt-child-size-v1", + "nonce": 189, + "query_error": 0, + "buffer_columns": 11, + "buffer_rows": 24, + "window_left": 0, + "window_top": 0, + "window_right": 10, + "window_bottom": 23 + }, + { + "schema": "termforge-qt-child-size-v1", + "nonce": 190, + "query_error": 0, + "buffer_columns": 11, + "buffer_rows": 24, + "window_left": 0, + "window_top": 0, + "window_right": 10, + "window_bottom": 23 + }, + { + "schema": "termforge-qt-child-size-v1", + "nonce": 191, + "query_error": 0, + "buffer_columns": 11, + "buffer_rows": 24, + "window_left": 0, + "window_top": 0, + "window_right": 10, + "window_bottom": 23 + }, + { + "schema": "termforge-qt-child-size-v1", + "nonce": 192, + "query_error": 0, + "buffer_columns": 11, + "buffer_rows": 24, + "window_left": 0, + "window_top": 0, + "window_right": 10, + "window_bottom": 23 + }, + { + "schema": "termforge-qt-child-size-v1", + "nonce": 193, + "query_error": 0, + "buffer_columns": 11, + "buffer_rows": 24, + "window_left": 0, + "window_top": 0, + "window_right": 10, + "window_bottom": 23 + }, + { + "schema": "termforge-qt-child-size-v1", + "nonce": 194, + "query_error": 0, + "buffer_columns": 11, + "buffer_rows": 24, + "window_left": 0, + "window_top": 0, + "window_right": 10, + "window_bottom": 23 + }, + { + "schema": "termforge-qt-child-size-v1", + "nonce": 195, + "query_error": 0, + "buffer_columns": 11, + "buffer_rows": 24, + "window_left": 0, + "window_top": 0, + "window_right": 10, + "window_bottom": 23 + }, + { + "schema": "termforge-qt-child-size-v1", + "nonce": 196, + "query_error": 0, + "buffer_columns": 11, + "buffer_rows": 24, + "window_left": 0, + "window_top": 0, + "window_right": 10, + "window_bottom": 23 + }, + { + "schema": "termforge-qt-child-size-v1", + "nonce": 197, + "query_error": 0, + "buffer_columns": 11, + "buffer_rows": 24, + "window_left": 0, + "window_top": 0, + "window_right": 10, + "window_bottom": 23 + }, + { + "schema": "termforge-qt-child-size-v1", + "nonce": 198, + "query_error": 0, + "buffer_columns": 11, + "buffer_rows": 24, + "window_left": 0, + "window_top": 0, + "window_right": 10, + "window_bottom": 23 + }, + { + "schema": "termforge-qt-child-size-v1", + "nonce": 199, + "query_error": 0, + "buffer_columns": 11, + "buffer_rows": 24, + "window_left": 0, + "window_top": 0, + "window_right": 10, + "window_bottom": 23 + }, + { + "schema": "termforge-qt-child-size-v1", + "nonce": 200, + "query_error": 0, + "buffer_columns": 11, + "buffer_rows": 24, + "window_left": 0, + "window_top": 0, + "window_right": 10, + "window_bottom": 23 + }, + { + "schema": "termforge-qt-child-size-v1", + "nonce": 201, + "query_error": 0, + "buffer_columns": 11, + "buffer_rows": 24, + "window_left": 0, + "window_top": 0, + "window_right": 10, + "window_bottom": 23 + }, + { + "schema": "termforge-qt-child-size-v1", + "nonce": 202, + "query_error": 0, + "buffer_columns": 11, + "buffer_rows": 24, + "window_left": 0, + "window_top": 0, + "window_right": 10, + "window_bottom": 23 + }, + { + "schema": "termforge-qt-child-size-v1", + "nonce": 203, + "query_error": 0, + "buffer_columns": 11, + "buffer_rows": 24, + "window_left": 0, + "window_top": 0, + "window_right": 10, + "window_bottom": 23 + }, + { + "schema": "termforge-qt-child-size-v1", + "nonce": 204, + "query_error": 0, + "buffer_columns": 11, + "buffer_rows": 24, + "window_left": 0, + "window_top": 0, + "window_right": 10, + "window_bottom": 23 + }, + { + "schema": "termforge-qt-child-size-v1", + "nonce": 205, + "query_error": 0, + "buffer_columns": 11, + "buffer_rows": 24, + "window_left": 0, + "window_top": 0, + "window_right": 10, + "window_bottom": 23 + }, + { + "schema": "termforge-qt-child-size-v1", + "nonce": 206, + "query_error": 0, + "buffer_columns": 11, + "buffer_rows": 24, + "window_left": 0, + "window_top": 0, + "window_right": 10, + "window_bottom": 23 + }, + { + "schema": "termforge-qt-child-size-v1", + "nonce": 207, + "query_error": 0, + "buffer_columns": 11, + "buffer_rows": 24, + "window_left": 0, + "window_top": 0, + "window_right": 10, + "window_bottom": 23 + }, + { + "schema": "termforge-qt-child-size-v1", + "nonce": 208, + "query_error": 0, + "buffer_columns": 11, + "buffer_rows": 24, + "window_left": 0, + "window_top": 0, + "window_right": 10, + "window_bottom": 23 + }, + { + "schema": "termforge-qt-child-size-v1", + "nonce": 209, + "query_error": 0, + "buffer_columns": 11, + "buffer_rows": 24, + "window_left": 0, + "window_top": 0, + "window_right": 10, + "window_bottom": 23 + }, + { + "schema": "termforge-qt-child-size-v1", + "nonce": 210, + "query_error": 0, + "buffer_columns": 11, + "buffer_rows": 24, + "window_left": 0, + "window_top": 0, + "window_right": 10, + "window_bottom": 23 + }, + { + "schema": "termforge-qt-child-size-v1", + "nonce": 211, + "query_error": 0, + "buffer_columns": 11, + "buffer_rows": 24, + "window_left": 0, + "window_top": 0, + "window_right": 10, + "window_bottom": 23 + }, + { + "schema": "termforge-qt-child-size-v1", + "nonce": 212, + "query_error": 0, + "buffer_columns": 11, + "buffer_rows": 24, + "window_left": 0, + "window_top": 0, + "window_right": 10, + "window_bottom": 23 + }, + { + "schema": "termforge-qt-child-size-v1", + "nonce": 213, + "query_error": 0, + "buffer_columns": 11, + "buffer_rows": 24, + "window_left": 0, + "window_top": 0, + "window_right": 10, + "window_bottom": 23 + }, + { + "schema": "termforge-qt-child-size-v1", + "nonce": 214, + "query_error": 0, + "buffer_columns": 11, + "buffer_rows": 24, + "window_left": 0, + "window_top": 0, + "window_right": 10, + "window_bottom": 23 + }, + { + "schema": "termforge-qt-child-size-v1", + "nonce": 215, + "query_error": 0, + "buffer_columns": 11, + "buffer_rows": 24, + "window_left": 0, + "window_top": 0, + "window_right": 10, + "window_bottom": 23 + }, + { + "schema": "termforge-qt-child-size-v1", + "nonce": 216, + "query_error": 0, + "buffer_columns": 11, + "buffer_rows": 24, + "window_left": 0, + "window_top": 0, + "window_right": 10, + "window_bottom": 23 + }, + { + "schema": "termforge-qt-child-size-v1", + "nonce": 217, + "query_error": 0, + "buffer_columns": 11, + "buffer_rows": 24, + "window_left": 0, + "window_top": 0, + "window_right": 10, + "window_bottom": 23 + }, + { + "schema": "termforge-qt-child-size-v1", + "nonce": 218, + "query_error": 0, + "buffer_columns": 11, + "buffer_rows": 24, + "window_left": 0, + "window_top": 0, + "window_right": 10, + "window_bottom": 23 + }, + { + "schema": "termforge-qt-child-size-v1", + "nonce": 219, + "query_error": 0, + "buffer_columns": 11, + "buffer_rows": 24, + "window_left": 0, + "window_top": 0, + "window_right": 10, + "window_bottom": 23 + }, + { + "schema": "termforge-qt-child-size-v1", + "nonce": 220, + "query_error": 0, + "buffer_columns": 11, + "buffer_rows": 24, + "window_left": 0, + "window_top": 0, + "window_right": 10, + "window_bottom": 23 + }, + { + "schema": "termforge-qt-child-size-v1", + "nonce": 221, + "query_error": 0, + "buffer_columns": 11, + "buffer_rows": 24, + "window_left": 0, + "window_top": 0, + "window_right": 10, + "window_bottom": 23 + }, + { + "schema": "termforge-qt-child-size-v1", + "nonce": 222, + "query_error": 0, + "buffer_columns": 11, + "buffer_rows": 24, + "window_left": 0, + "window_top": 0, + "window_right": 10, + "window_bottom": 23 + }, + { + "schema": "termforge-qt-child-size-v1", + "nonce": 223, + "query_error": 0, + "buffer_columns": 11, + "buffer_rows": 24, + "window_left": 0, + "window_top": 0, + "window_right": 10, + "window_bottom": 23 + }, + { + "schema": "termforge-qt-child-size-v1", + "nonce": 224, + "query_error": 0, + "buffer_columns": 11, + "buffer_rows": 24, + "window_left": 0, + "window_top": 0, + "window_right": 10, + "window_bottom": 23 + }, + { + "schema": "termforge-qt-child-size-v1", + "nonce": 225, + "query_error": 0, + "buffer_columns": 11, + "buffer_rows": 24, + "window_left": 0, + "window_top": 0, + "window_right": 10, + "window_bottom": 23 + }, + { + "schema": "termforge-qt-child-size-v1", + "nonce": 226, + "query_error": 0, + "buffer_columns": 11, + "buffer_rows": 24, + "window_left": 0, + "window_top": 0, + "window_right": 10, + "window_bottom": 23 + }, + { + "schema": "termforge-qt-child-size-v1", + "nonce": 227, + "query_error": 0, + "buffer_columns": 11, + "buffer_rows": 24, + "window_left": 0, + "window_top": 0, + "window_right": 10, + "window_bottom": 23 + }, + { + "schema": "termforge-qt-child-size-v1", + "nonce": 228, + "query_error": 0, + "buffer_columns": 11, + "buffer_rows": 24, + "window_left": 0, + "window_top": 0, + "window_right": 10, + "window_bottom": 23 + }, + { + "schema": "termforge-qt-child-size-v1", + "nonce": 229, + "query_error": 0, + "buffer_columns": 11, + "buffer_rows": 24, + "window_left": 0, + "window_top": 0, + "window_right": 10, + "window_bottom": 23 + }, + { + "schema": "termforge-qt-child-size-v1", + "nonce": 230, + "query_error": 0, + "buffer_columns": 11, + "buffer_rows": 24, + "window_left": 0, + "window_top": 0, + "window_right": 10, + "window_bottom": 23 + }, + { + "schema": "termforge-qt-child-size-v1", + "nonce": 231, + "query_error": 0, + "buffer_columns": 11, + "buffer_rows": 24, + "window_left": 0, + "window_top": 0, + "window_right": 10, + "window_bottom": 23 + }, + { + "schema": "termforge-qt-child-size-v1", + "nonce": 232, + "query_error": 0, + "buffer_columns": 11, + "buffer_rows": 24, + "window_left": 0, + "window_top": 0, + "window_right": 10, + "window_bottom": 23 + }, + { + "schema": "termforge-qt-child-size-v1", + "nonce": 233, + "query_error": 0, + "buffer_columns": 11, + "buffer_rows": 24, + "window_left": 0, + "window_top": 0, + "window_right": 10, + "window_bottom": 23 + }, + { + "schema": "termforge-qt-child-size-v1", + "nonce": 234, + "query_error": 0, + "buffer_columns": 11, + "buffer_rows": 24, + "window_left": 0, + "window_top": 0, + "window_right": 10, + "window_bottom": 23 + } + ], + "terminal_error": "real child did not acknowledge the requested window/buffer dimensions", + "child_replies": 135, + "final_11x24_replies": 128, + "interpretation": "Top-level platform adjustment is supported by the evidence; no new-source native causal closure yet", + "raw_records": [ + { + "name": "plan.json", + "bytes": 1056, + "sha256": "6336f64f7057131fc67e1a7c52d91b1c155dbfdcfadb390afc6be66568d49dc7", + "published": false + }, + { + "name": "preflight-result.json", + "bytes": 540, + "sha256": "998a7d5f3f1d3222699173ae3bab719ff9243fb369cfcb40ccc84d26105039bb", + "published": false + }, + { + "name": "native-smoke.ps1", + "bytes": 7999, + "sha256": "4c8286d62326794cf085907af133245588e6f85428dabcfed06050a6d42ce009", + "published": false + }, + { + "name": "native-query.cs", + "bytes": 1786, + "sha256": "8ce3e4eb567ba02d7e0303850e32e09abe0718f1a403d61140e414b90e993c7d", + "published": false + }, + { + "name": "native-request-result.json", + "bytes": 40202, + "sha256": "c795a9d0ae5ff87bc8c79c29be71b2e0bd9e4e2db16fd493d8871c9c649d3fe7", + "published": false + }, + { + "name": "native-observation.json", + "bytes": 30910, + "sha256": "d2e6a1c19f3e4c29f2b7ce93239b5ef82a30ac6ff86d8a574b597fdbb8a55a17", + "published": false + }, + { + "name": "native-request-exit.json", + "bytes": 75, + "sha256": "9d748127e97f224d6aa8f9cdaed18e8e855ad87cb119aa2bd7b238d0e2068e16", + "published": false + } + ], + "presented_done": null + }, + "local_old_source_native_reproduction": { + "source_commit": "678299d54454e26ac04ef6d1c46237ab6b33752b", + "qt_platform": "windows", + "owned_job": true, + "independent_window_station_desktop": false, + "isolation_gap": "Executed on the existing desktop before the additional desktop-isolation instruction arrived; not counted as isolated native verification", + "exit": { + "exit_code": 1, + "finished_utc": "2026-10-28T19:55:10.2957957Z" + }, + "observations": [ + { + "schema": "termforge-qt-child-size-v1", + "nonce": 0, + "query_error": 0, + "buffer_columns": 80, + "buffer_rows": 24, + "window_left": 0, + "window_top": 0, + "window_right": 79, + "window_bottom": 23 + }, + { + "schema": "termforge-qt-resize-state-v1", + "stage": 0, + "requested_columns": 80, + "requested_rows": 24, + "widget_width": 736, + "widget_height": 574, + "core_columns": 80, + "core_rows": 24, + "transport_columns": 80, + "transport_rows": 24, + "requested_revision": 0, + "transport_revision": 0, + "accepting": 1, + "pending": 0 + }, + { + "schema": "termforge-qt-resize-state-v1", + "stage": 1, + "requested_columns": 60, + "requested_rows": 12, + "widget_width": 556, + "widget_height": 310, + "core_columns": 60, + "core_rows": 12, + "transport_columns": 80, + "transport_rows": 24, + "requested_revision": 1, + "transport_revision": 0, + "accepting": 1, + "pending": 1 + }, + { + "schema": "termforge-qt-child-size-v1", + "nonce": 101, + "query_error": 0, + "buffer_columns": 60, + "buffer_rows": 12, + "window_left": 0, + "window_top": 0, + "window_right": 59, + "window_bottom": 11 + }, + { + "schema": "termforge-qt-resize-state-v1", + "stage": 1, + "requested_columns": 60, + "requested_rows": 12, + "widget_width": 556, + "widget_height": 310, + "core_columns": 60, + "core_rows": 12, + "transport_columns": 60, + "transport_rows": 12, + "requested_revision": 1, + "transport_revision": 1, + "accepting": 1, + "pending": 0 + }, + { + "schema": "termforge-qt-resize-state-v1", + "stage": 2, + "requested_columns": 100, + "requested_rows": 30, + "widget_width": 916, + "widget_height": 706, + "core_columns": 100, + "core_rows": 30, + "transport_columns": 60, + "transport_rows": 12, + "requested_revision": 2, + "transport_revision": 1, + "accepting": 1, + "pending": 1 + }, + { + "schema": "termforge-qt-child-size-v1", + "nonce": 102, + "query_error": 0, + "buffer_columns": 100, + "buffer_rows": 30, + "window_left": 0, + "window_top": 0, + "window_right": 99, + "window_bottom": 29 + }, + { + "schema": "termforge-qt-resize-state-v1", + "stage": 2, + "requested_columns": 100, + "requested_rows": 30, + "widget_width": 916, + "widget_height": 706, + "core_columns": 100, + "core_rows": 30, + "transport_columns": 100, + "transport_rows": 30, + "requested_revision": 2, + "transport_revision": 2, + "accepting": 1, + "pending": 0 + }, + { + "schema": "termforge-qt-resize-state-v1", + "stage": 3, + "requested_columns": 80, + "requested_rows": 24, + "widget_width": 736, + "widget_height": 574, + "core_columns": 80, + "core_rows": 24, + "transport_columns": 100, + "transport_rows": 30, + "requested_revision": 3, + "transport_revision": 2, + "accepting": 1, + "pending": 1 + }, + { + "schema": "termforge-qt-child-size-v1", + "nonce": 103, + "query_error": 0, + "buffer_columns": 80, + "buffer_rows": 24, + "window_left": 0, + "window_top": 0, + "window_right": 79, + "window_bottom": 23 + }, + { + "schema": "termforge-qt-resize-state-v1", + "stage": 3, + "requested_columns": 80, + "requested_rows": 24, + "widget_width": 736, + "widget_height": 574, + "core_columns": 80, + "core_rows": 24, + "transport_columns": 80, + "transport_rows": 24, + "requested_revision": 3, + "transport_revision": 3, + "accepting": 1, + "pending": 0 + }, + { + "schema": "termforge-qt-resize-state-v1", + "stage": 4, + "requested_columns": 1, + "requested_rows": 24, + "widget_width": 25, + "widget_height": 574, + "core_columns": 1, + "core_rows": 24, + "transport_columns": 80, + "transport_rows": 24, + "requested_revision": 4, + "transport_revision": 3, + "accepting": 1, + "pending": 1 + }, + { + "schema": "termforge-qt-child-size-v1", + "nonce": 104, + "query_error": 0, + "buffer_columns": 80, + "buffer_rows": 24, + "window_left": 0, + "window_top": 0, + "window_right": 79, + "window_bottom": 23 + }, + { + "schema": "termforge-qt-child-size-v1", + "nonce": 105, + "query_error": 0, + "buffer_columns": 11, + "buffer_rows": 24, + "window_left": 0, + "window_top": 0, + "window_right": 10, + "window_bottom": 23 + }, + { + "schema": "termforge-qt-child-size-v1", + "nonce": 106, + "query_error": 0, + "buffer_columns": 11, + "buffer_rows": 24, + "window_left": 0, + "window_top": 0, + "window_right": 10, + "window_bottom": 23 + }, + { + "schema": "termforge-qt-child-size-v1", + "nonce": 107, + "query_error": 0, + "buffer_columns": 11, + "buffer_rows": 24, + "window_left": 0, + "window_top": 0, + "window_right": 10, + "window_bottom": 23 + }, + { + "schema": "termforge-qt-child-size-v1", + "nonce": 108, + "query_error": 0, + "buffer_columns": 11, + "buffer_rows": 24, + "window_left": 0, + "window_top": 0, + "window_right": 10, + "window_bottom": 23 + }, + { + "schema": "termforge-qt-child-size-v1", + "nonce": 109, + "query_error": 0, + "buffer_columns": 11, + "buffer_rows": 24, + "window_left": 0, + "window_top": 0, + "window_right": 10, + "window_bottom": 23 + }, + { + "schema": "termforge-qt-child-size-v1", + "nonce": 110, + "query_error": 0, + "buffer_columns": 11, + "buffer_rows": 24, + "window_left": 0, + "window_top": 0, + "window_right": 10, + "window_bottom": 23 + }, + { + "schema": "termforge-qt-child-size-v1", + "nonce": 111, + "query_error": 0, + "buffer_columns": 11, + "buffer_rows": 24, + "window_left": 0, + "window_top": 0, + "window_right": 10, + "window_bottom": 23 + }, + { + "schema": "termforge-qt-child-size-v1", + "nonce": 112, + "query_error": 0, + "buffer_columns": 11, + "buffer_rows": 24, + "window_left": 0, + "window_top": 0, + "window_right": 10, + "window_bottom": 23 + }, + { + "schema": "termforge-qt-child-size-v1", + "nonce": 113, + "query_error": 0, + "buffer_columns": 11, + "buffer_rows": 24, + "window_left": 0, + "window_top": 0, + "window_right": 10, + "window_bottom": 23 + }, + { + "schema": "termforge-qt-child-size-v1", + "nonce": 114, + "query_error": 0, + "buffer_columns": 11, + "buffer_rows": 24, + "window_left": 0, + "window_top": 0, + "window_right": 10, + "window_bottom": 23 + }, + { + "schema": "termforge-qt-child-size-v1", + "nonce": 115, + "query_error": 0, + "buffer_columns": 11, + "buffer_rows": 24, + "window_left": 0, + "window_top": 0, + "window_right": 10, + "window_bottom": 23 + }, + { + "schema": "termforge-qt-child-size-v1", + "nonce": 116, + "query_error": 0, + "buffer_columns": 11, + "buffer_rows": 24, + "window_left": 0, + "window_top": 0, + "window_right": 10, + "window_bottom": 23 + }, + { + "schema": "termforge-qt-child-size-v1", + "nonce": 117, + "query_error": 0, + "buffer_columns": 11, + "buffer_rows": 24, + "window_left": 0, + "window_top": 0, + "window_right": 10, + "window_bottom": 23 + }, + { + "schema": "termforge-qt-child-size-v1", + "nonce": 118, + "query_error": 0, + "buffer_columns": 11, + "buffer_rows": 24, + "window_left": 0, + "window_top": 0, + "window_right": 10, + "window_bottom": 23 + }, + { + "schema": "termforge-qt-child-size-v1", + "nonce": 119, + "query_error": 0, + "buffer_columns": 11, + "buffer_rows": 24, + "window_left": 0, + "window_top": 0, + "window_right": 10, + "window_bottom": 23 + }, + { + "schema": "termforge-qt-child-size-v1", + "nonce": 120, + "query_error": 0, + "buffer_columns": 11, + "buffer_rows": 24, + "window_left": 0, + "window_top": 0, + "window_right": 10, + "window_bottom": 23 + }, + { + "schema": "termforge-qt-child-size-v1", + "nonce": 121, + "query_error": 0, + "buffer_columns": 11, + "buffer_rows": 24, + "window_left": 0, + "window_top": 0, + "window_right": 10, + "window_bottom": 23 + }, + { + "schema": "termforge-qt-child-size-v1", + "nonce": 122, + "query_error": 0, + "buffer_columns": 11, + "buffer_rows": 24, + "window_left": 0, + "window_top": 0, + "window_right": 10, + "window_bottom": 23 + }, + { + "schema": "termforge-qt-child-size-v1", + "nonce": 123, + "query_error": 0, + "buffer_columns": 11, + "buffer_rows": 24, + "window_left": 0, + "window_top": 0, + "window_right": 10, + "window_bottom": 23 + }, + { + "schema": "termforge-qt-child-size-v1", + "nonce": 124, + "query_error": 0, + "buffer_columns": 11, + "buffer_rows": 24, + "window_left": 0, + "window_top": 0, + "window_right": 10, + "window_bottom": 23 + }, + { + "schema": "termforge-qt-child-size-v1", + "nonce": 125, + "query_error": 0, + "buffer_columns": 11, + "buffer_rows": 24, + "window_left": 0, + "window_top": 0, + "window_right": 10, + "window_bottom": 23 + }, + { + "schema": "termforge-qt-child-size-v1", + "nonce": 126, + "query_error": 0, + "buffer_columns": 11, + "buffer_rows": 24, + "window_left": 0, + "window_top": 0, + "window_right": 10, + "window_bottom": 23 + }, + { + "schema": "termforge-qt-child-size-v1", + "nonce": 127, + "query_error": 0, + "buffer_columns": 11, + "buffer_rows": 24, + "window_left": 0, + "window_top": 0, + "window_right": 10, + "window_bottom": 23 + }, + { + "schema": "termforge-qt-child-size-v1", + "nonce": 128, + "query_error": 0, + "buffer_columns": 11, + "buffer_rows": 24, + "window_left": 0, + "window_top": 0, + "window_right": 10, + "window_bottom": 23 + }, + { + "schema": "termforge-qt-child-size-v1", + "nonce": 129, + "query_error": 0, + "buffer_columns": 11, + "buffer_rows": 24, + "window_left": 0, + "window_top": 0, + "window_right": 10, + "window_bottom": 23 + }, + { + "schema": "termforge-qt-child-size-v1", + "nonce": 130, + "query_error": 0, + "buffer_columns": 11, + "buffer_rows": 24, + "window_left": 0, + "window_top": 0, + "window_right": 10, + "window_bottom": 23 + }, + { + "schema": "termforge-qt-child-size-v1", + "nonce": 131, + "query_error": 0, + "buffer_columns": 11, + "buffer_rows": 24, + "window_left": 0, + "window_top": 0, + "window_right": 10, + "window_bottom": 23 + }, + { + "schema": "termforge-qt-child-size-v1", + "nonce": 132, + "query_error": 0, + "buffer_columns": 11, + "buffer_rows": 24, + "window_left": 0, + "window_top": 0, + "window_right": 10, + "window_bottom": 23 + }, + { + "schema": "termforge-qt-child-size-v1", + "nonce": 133, + "query_error": 0, + "buffer_columns": 11, + "buffer_rows": 24, + "window_left": 0, + "window_top": 0, + "window_right": 10, + "window_bottom": 23 + }, + { + "schema": "termforge-qt-child-size-v1", + "nonce": 134, + "query_error": 0, + "buffer_columns": 11, + "buffer_rows": 24, + "window_left": 0, + "window_top": 0, + "window_right": 10, + "window_bottom": 23 + }, + { + "schema": "termforge-qt-child-size-v1", + "nonce": 135, + "query_error": 0, + "buffer_columns": 11, + "buffer_rows": 24, + "window_left": 0, + "window_top": 0, + "window_right": 10, + "window_bottom": 23 + }, + { + "schema": "termforge-qt-child-size-v1", + "nonce": 136, + "query_error": 0, + "buffer_columns": 11, + "buffer_rows": 24, + "window_left": 0, + "window_top": 0, + "window_right": 10, + "window_bottom": 23 + }, + { + "schema": "termforge-qt-child-size-v1", + "nonce": 137, + "query_error": 0, + "buffer_columns": 11, + "buffer_rows": 24, + "window_left": 0, + "window_top": 0, + "window_right": 10, + "window_bottom": 23 + }, + { + "schema": "termforge-qt-child-size-v1", + "nonce": 138, + "query_error": 0, + "buffer_columns": 11, + "buffer_rows": 24, + "window_left": 0, + "window_top": 0, + "window_right": 10, + "window_bottom": 23 + }, + { + "schema": "termforge-qt-child-size-v1", + "nonce": 139, + "query_error": 0, + "buffer_columns": 11, + "buffer_rows": 24, + "window_left": 0, + "window_top": 0, + "window_right": 10, + "window_bottom": 23 + }, + { + "schema": "termforge-qt-child-size-v1", + "nonce": 140, + "query_error": 0, + "buffer_columns": 11, + "buffer_rows": 24, + "window_left": 0, + "window_top": 0, + "window_right": 10, + "window_bottom": 23 + }, + { + "schema": "termforge-qt-child-size-v1", + "nonce": 141, + "query_error": 0, + "buffer_columns": 11, + "buffer_rows": 24, + "window_left": 0, + "window_top": 0, + "window_right": 10, + "window_bottom": 23 + }, + { + "schema": "termforge-qt-child-size-v1", + "nonce": 142, + "query_error": 0, + "buffer_columns": 11, + "buffer_rows": 24, + "window_left": 0, + "window_top": 0, + "window_right": 10, + "window_bottom": 23 + }, + { + "schema": "termforge-qt-child-size-v1", + "nonce": 143, + "query_error": 0, + "buffer_columns": 11, + "buffer_rows": 24, + "window_left": 0, + "window_top": 0, + "window_right": 10, + "window_bottom": 23 + }, + { + "schema": "termforge-qt-child-size-v1", + "nonce": 144, + "query_error": 0, + "buffer_columns": 11, + "buffer_rows": 24, + "window_left": 0, + "window_top": 0, + "window_right": 10, + "window_bottom": 23 + }, + { + "schema": "termforge-qt-child-size-v1", + "nonce": 145, + "query_error": 0, + "buffer_columns": 11, + "buffer_rows": 24, + "window_left": 0, + "window_top": 0, + "window_right": 10, + "window_bottom": 23 + }, + { + "schema": "termforge-qt-child-size-v1", + "nonce": 146, + "query_error": 0, + "buffer_columns": 11, + "buffer_rows": 24, + "window_left": 0, + "window_top": 0, + "window_right": 10, + "window_bottom": 23 + }, + { + "schema": "termforge-qt-child-size-v1", + "nonce": 147, + "query_error": 0, + "buffer_columns": 11, + "buffer_rows": 24, + "window_left": 0, + "window_top": 0, + "window_right": 10, + "window_bottom": 23 + }, + { + "schema": "termforge-qt-child-size-v1", + "nonce": 148, + "query_error": 0, + "buffer_columns": 11, + "buffer_rows": 24, + "window_left": 0, + "window_top": 0, + "window_right": 10, + "window_bottom": 23 + }, + { + "schema": "termforge-qt-child-size-v1", + "nonce": 149, + "query_error": 0, + "buffer_columns": 11, + "buffer_rows": 24, + "window_left": 0, + "window_top": 0, + "window_right": 10, + "window_bottom": 23 + }, + { + "schema": "termforge-qt-child-size-v1", + "nonce": 150, + "query_error": 0, + "buffer_columns": 11, + "buffer_rows": 24, + "window_left": 0, + "window_top": 0, + "window_right": 10, + "window_bottom": 23 + }, + { + "schema": "termforge-qt-child-size-v1", + "nonce": 151, + "query_error": 0, + "buffer_columns": 11, + "buffer_rows": 24, + "window_left": 0, + "window_top": 0, + "window_right": 10, + "window_bottom": 23 + }, + { + "schema": "termforge-qt-child-size-v1", + "nonce": 152, + "query_error": 0, + "buffer_columns": 11, + "buffer_rows": 24, + "window_left": 0, + "window_top": 0, + "window_right": 10, + "window_bottom": 23 + }, + { + "schema": "termforge-qt-child-size-v1", + "nonce": 153, + "query_error": 0, + "buffer_columns": 11, + "buffer_rows": 24, + "window_left": 0, + "window_top": 0, + "window_right": 10, + "window_bottom": 23 + }, + { + "schema": "termforge-qt-child-size-v1", + "nonce": 154, + "query_error": 0, + "buffer_columns": 11, + "buffer_rows": 24, + "window_left": 0, + "window_top": 0, + "window_right": 10, + "window_bottom": 23 + }, + { + "schema": "termforge-qt-child-size-v1", + "nonce": 155, + "query_error": 0, + "buffer_columns": 11, + "buffer_rows": 24, + "window_left": 0, + "window_top": 0, + "window_right": 10, + "window_bottom": 23 + }, + { + "schema": "termforge-qt-child-size-v1", + "nonce": 156, + "query_error": 0, + "buffer_columns": 11, + "buffer_rows": 24, + "window_left": 0, + "window_top": 0, + "window_right": 10, + "window_bottom": 23 + }, + { + "schema": "termforge-qt-child-size-v1", + "nonce": 157, + "query_error": 0, + "buffer_columns": 11, + "buffer_rows": 24, + "window_left": 0, + "window_top": 0, + "window_right": 10, + "window_bottom": 23 + }, + { + "schema": "termforge-qt-child-size-v1", + "nonce": 158, + "query_error": 0, + "buffer_columns": 11, + "buffer_rows": 24, + "window_left": 0, + "window_top": 0, + "window_right": 10, + "window_bottom": 23 + }, + { + "schema": "termforge-qt-child-size-v1", + "nonce": 159, + "query_error": 0, + "buffer_columns": 11, + "buffer_rows": 24, + "window_left": 0, + "window_top": 0, + "window_right": 10, + "window_bottom": 23 + }, + { + "schema": "termforge-qt-child-size-v1", + "nonce": 160, + "query_error": 0, + "buffer_columns": 11, + "buffer_rows": 24, + "window_left": 0, + "window_top": 0, + "window_right": 10, + "window_bottom": 23 + }, + { + "schema": "termforge-qt-child-size-v1", + "nonce": 161, + "query_error": 0, + "buffer_columns": 11, + "buffer_rows": 24, + "window_left": 0, + "window_top": 0, + "window_right": 10, + "window_bottom": 23 + }, + { + "schema": "termforge-qt-child-size-v1", + "nonce": 162, + "query_error": 0, + "buffer_columns": 11, + "buffer_rows": 24, + "window_left": 0, + "window_top": 0, + "window_right": 10, + "window_bottom": 23 + }, + { + "schema": "termforge-qt-child-size-v1", + "nonce": 163, + "query_error": 0, + "buffer_columns": 11, + "buffer_rows": 24, + "window_left": 0, + "window_top": 0, + "window_right": 10, + "window_bottom": 23 + }, + { + "schema": "termforge-qt-child-size-v1", + "nonce": 164, + "query_error": 0, + "buffer_columns": 11, + "buffer_rows": 24, + "window_left": 0, + "window_top": 0, + "window_right": 10, + "window_bottom": 23 + }, + { + "schema": "termforge-qt-child-size-v1", + "nonce": 165, + "query_error": 0, + "buffer_columns": 11, + "buffer_rows": 24, + "window_left": 0, + "window_top": 0, + "window_right": 10, + "window_bottom": 23 + }, + { + "schema": "termforge-qt-child-size-v1", + "nonce": 166, + "query_error": 0, + "buffer_columns": 11, + "buffer_rows": 24, + "window_left": 0, + "window_top": 0, + "window_right": 10, + "window_bottom": 23 + }, + { + "schema": "termforge-qt-child-size-v1", + "nonce": 167, + "query_error": 0, + "buffer_columns": 11, + "buffer_rows": 24, + "window_left": 0, + "window_top": 0, + "window_right": 10, + "window_bottom": 23 + }, + { + "schema": "termforge-qt-child-size-v1", + "nonce": 168, + "query_error": 0, + "buffer_columns": 11, + "buffer_rows": 24, + "window_left": 0, + "window_top": 0, + "window_right": 10, + "window_bottom": 23 + }, + { + "schema": "termforge-qt-child-size-v1", + "nonce": 169, + "query_error": 0, + "buffer_columns": 11, + "buffer_rows": 24, + "window_left": 0, + "window_top": 0, + "window_right": 10, + "window_bottom": 23 + }, + { + "schema": "termforge-qt-child-size-v1", + "nonce": 170, + "query_error": 0, + "buffer_columns": 11, + "buffer_rows": 24, + "window_left": 0, + "window_top": 0, + "window_right": 10, + "window_bottom": 23 + }, + { + "schema": "termforge-qt-child-size-v1", + "nonce": 171, + "query_error": 0, + "buffer_columns": 11, + "buffer_rows": 24, + "window_left": 0, + "window_top": 0, + "window_right": 10, + "window_bottom": 23 + }, + { + "schema": "termforge-qt-child-size-v1", + "nonce": 172, + "query_error": 0, + "buffer_columns": 11, + "buffer_rows": 24, + "window_left": 0, + "window_top": 0, + "window_right": 10, + "window_bottom": 23 + }, + { + "schema": "termforge-qt-child-size-v1", + "nonce": 173, + "query_error": 0, + "buffer_columns": 11, + "buffer_rows": 24, + "window_left": 0, + "window_top": 0, + "window_right": 10, + "window_bottom": 23 + }, + { + "schema": "termforge-qt-child-size-v1", + "nonce": 174, + "query_error": 0, + "buffer_columns": 11, + "buffer_rows": 24, + "window_left": 0, + "window_top": 0, + "window_right": 10, + "window_bottom": 23 + }, + { + "schema": "termforge-qt-child-size-v1", + "nonce": 175, + "query_error": 0, + "buffer_columns": 11, + "buffer_rows": 24, + "window_left": 0, + "window_top": 0, + "window_right": 10, + "window_bottom": 23 + }, + { + "schema": "termforge-qt-child-size-v1", + "nonce": 176, + "query_error": 0, + "buffer_columns": 11, + "buffer_rows": 24, + "window_left": 0, + "window_top": 0, + "window_right": 10, + "window_bottom": 23 + }, + { + "schema": "termforge-qt-child-size-v1", + "nonce": 177, + "query_error": 0, + "buffer_columns": 11, + "buffer_rows": 24, + "window_left": 0, + "window_top": 0, + "window_right": 10, + "window_bottom": 23 + }, + { + "schema": "termforge-qt-child-size-v1", + "nonce": 178, + "query_error": 0, + "buffer_columns": 11, + "buffer_rows": 24, + "window_left": 0, + "window_top": 0, + "window_right": 10, + "window_bottom": 23 + }, + { + "schema": "termforge-qt-child-size-v1", + "nonce": 179, + "query_error": 0, + "buffer_columns": 11, + "buffer_rows": 24, + "window_left": 0, + "window_top": 0, + "window_right": 10, + "window_bottom": 23 + }, + { + "schema": "termforge-qt-child-size-v1", + "nonce": 180, + "query_error": 0, + "buffer_columns": 11, + "buffer_rows": 24, + "window_left": 0, + "window_top": 0, + "window_right": 10, + "window_bottom": 23 + }, + { + "schema": "termforge-qt-child-size-v1", + "nonce": 181, + "query_error": 0, + "buffer_columns": 11, + "buffer_rows": 24, + "window_left": 0, + "window_top": 0, + "window_right": 10, + "window_bottom": 23 + }, + { + "schema": "termforge-qt-child-size-v1", + "nonce": 182, + "query_error": 0, + "buffer_columns": 11, + "buffer_rows": 24, + "window_left": 0, + "window_top": 0, + "window_right": 10, + "window_bottom": 23 + }, + { + "schema": "termforge-qt-child-size-v1", + "nonce": 183, + "query_error": 0, + "buffer_columns": 11, + "buffer_rows": 24, + "window_left": 0, + "window_top": 0, + "window_right": 10, + "window_bottom": 23 + }, + { + "schema": "termforge-qt-child-size-v1", + "nonce": 184, + "query_error": 0, + "buffer_columns": 11, + "buffer_rows": 24, + "window_left": 0, + "window_top": 0, + "window_right": 10, + "window_bottom": 23 + }, + { + "schema": "termforge-qt-child-size-v1", + "nonce": 185, + "query_error": 0, + "buffer_columns": 11, + "buffer_rows": 24, + "window_left": 0, + "window_top": 0, + "window_right": 10, + "window_bottom": 23 + }, + { + "schema": "termforge-qt-child-size-v1", + "nonce": 186, + "query_error": 0, + "buffer_columns": 11, + "buffer_rows": 24, + "window_left": 0, + "window_top": 0, + "window_right": 10, + "window_bottom": 23 + }, + { + "schema": "termforge-qt-child-size-v1", + "nonce": 187, + "query_error": 0, + "buffer_columns": 11, + "buffer_rows": 24, + "window_left": 0, + "window_top": 0, + "window_right": 10, + "window_bottom": 23 + }, + { + "schema": "termforge-qt-child-size-v1", + "nonce": 188, + "query_error": 0, + "buffer_columns": 11, + "buffer_rows": 24, + "window_left": 0, + "window_top": 0, + "window_right": 10, + "window_bottom": 23 + }, + { + "schema": "termforge-qt-child-size-v1", + "nonce": 189, + "query_error": 0, + "buffer_columns": 11, + "buffer_rows": 24, + "window_left": 0, + "window_top": 0, + "window_right": 10, + "window_bottom": 23 + }, + { + "schema": "termforge-qt-child-size-v1", + "nonce": 190, + "query_error": 0, + "buffer_columns": 11, + "buffer_rows": 24, + "window_left": 0, + "window_top": 0, + "window_right": 10, + "window_bottom": 23 + }, + { + "schema": "termforge-qt-child-size-v1", + "nonce": 191, + "query_error": 0, + "buffer_columns": 11, + "buffer_rows": 24, + "window_left": 0, + "window_top": 0, + "window_right": 10, + "window_bottom": 23 + }, + { + "schema": "termforge-qt-child-size-v1", + "nonce": 192, + "query_error": 0, + "buffer_columns": 11, + "buffer_rows": 24, + "window_left": 0, + "window_top": 0, + "window_right": 10, + "window_bottom": 23 + }, + { + "schema": "termforge-qt-child-size-v1", + "nonce": 193, + "query_error": 0, + "buffer_columns": 11, + "buffer_rows": 24, + "window_left": 0, + "window_top": 0, + "window_right": 10, + "window_bottom": 23 + }, + { + "schema": "termforge-qt-child-size-v1", + "nonce": 194, + "query_error": 0, + "buffer_columns": 11, + "buffer_rows": 24, + "window_left": 0, + "window_top": 0, + "window_right": 10, + "window_bottom": 23 + }, + { + "schema": "termforge-qt-child-size-v1", + "nonce": 195, + "query_error": 0, + "buffer_columns": 11, + "buffer_rows": 24, + "window_left": 0, + "window_top": 0, + "window_right": 10, + "window_bottom": 23 + }, + { + "schema": "termforge-qt-child-size-v1", + "nonce": 196, + "query_error": 0, + "buffer_columns": 11, + "buffer_rows": 24, + "window_left": 0, + "window_top": 0, + "window_right": 10, + "window_bottom": 23 + }, + { + "schema": "termforge-qt-child-size-v1", + "nonce": 197, + "query_error": 0, + "buffer_columns": 11, + "buffer_rows": 24, + "window_left": 0, + "window_top": 0, + "window_right": 10, + "window_bottom": 23 + }, + { + "schema": "termforge-qt-child-size-v1", + "nonce": 198, + "query_error": 0, + "buffer_columns": 11, + "buffer_rows": 24, + "window_left": 0, + "window_top": 0, + "window_right": 10, + "window_bottom": 23 + }, + { + "schema": "termforge-qt-child-size-v1", + "nonce": 199, + "query_error": 0, + "buffer_columns": 11, + "buffer_rows": 24, + "window_left": 0, + "window_top": 0, + "window_right": 10, + "window_bottom": 23 + }, + { + "schema": "termforge-qt-child-size-v1", + "nonce": 200, + "query_error": 0, + "buffer_columns": 11, + "buffer_rows": 24, + "window_left": 0, + "window_top": 0, + "window_right": 10, + "window_bottom": 23 + }, + { + "schema": "termforge-qt-child-size-v1", + "nonce": 201, + "query_error": 0, + "buffer_columns": 11, + "buffer_rows": 24, + "window_left": 0, + "window_top": 0, + "window_right": 10, + "window_bottom": 23 + }, + { + "schema": "termforge-qt-child-size-v1", + "nonce": 202, + "query_error": 0, + "buffer_columns": 11, + "buffer_rows": 24, + "window_left": 0, + "window_top": 0, + "window_right": 10, + "window_bottom": 23 + }, + { + "schema": "termforge-qt-child-size-v1", + "nonce": 203, + "query_error": 0, + "buffer_columns": 11, + "buffer_rows": 24, + "window_left": 0, + "window_top": 0, + "window_right": 10, + "window_bottom": 23 + }, + { + "schema": "termforge-qt-child-size-v1", + "nonce": 204, + "query_error": 0, + "buffer_columns": 11, + "buffer_rows": 24, + "window_left": 0, + "window_top": 0, + "window_right": 10, + "window_bottom": 23 + }, + { + "schema": "termforge-qt-child-size-v1", + "nonce": 205, + "query_error": 0, + "buffer_columns": 11, + "buffer_rows": 24, + "window_left": 0, + "window_top": 0, + "window_right": 10, + "window_bottom": 23 + }, + { + "schema": "termforge-qt-child-size-v1", + "nonce": 206, + "query_error": 0, + "buffer_columns": 11, + "buffer_rows": 24, + "window_left": 0, + "window_top": 0, + "window_right": 10, + "window_bottom": 23 + }, + { + "schema": "termforge-qt-child-size-v1", + "nonce": 207, + "query_error": 0, + "buffer_columns": 11, + "buffer_rows": 24, + "window_left": 0, + "window_top": 0, + "window_right": 10, + "window_bottom": 23 + }, + { + "schema": "termforge-qt-child-size-v1", + "nonce": 208, + "query_error": 0, + "buffer_columns": 11, + "buffer_rows": 24, + "window_left": 0, + "window_top": 0, + "window_right": 10, + "window_bottom": 23 + }, + { + "schema": "termforge-qt-child-size-v1", + "nonce": 209, + "query_error": 0, + "buffer_columns": 11, + "buffer_rows": 24, + "window_left": 0, + "window_top": 0, + "window_right": 10, + "window_bottom": 23 + }, + { + "schema": "termforge-qt-child-size-v1", + "nonce": 210, + "query_error": 0, + "buffer_columns": 11, + "buffer_rows": 24, + "window_left": 0, + "window_top": 0, + "window_right": 10, + "window_bottom": 23 + }, + { + "schema": "termforge-qt-child-size-v1", + "nonce": 211, + "query_error": 0, + "buffer_columns": 11, + "buffer_rows": 24, + "window_left": 0, + "window_top": 0, + "window_right": 10, + "window_bottom": 23 + }, + { + "schema": "termforge-qt-child-size-v1", + "nonce": 212, + "query_error": 0, + "buffer_columns": 11, + "buffer_rows": 24, + "window_left": 0, + "window_top": 0, + "window_right": 10, + "window_bottom": 23 + }, + { + "schema": "termforge-qt-child-size-v1", + "nonce": 213, + "query_error": 0, + "buffer_columns": 11, + "buffer_rows": 24, + "window_left": 0, + "window_top": 0, + "window_right": 10, + "window_bottom": 23 + }, + { + "schema": "termforge-qt-child-size-v1", + "nonce": 214, + "query_error": 0, + "buffer_columns": 11, + "buffer_rows": 24, + "window_left": 0, + "window_top": 0, + "window_right": 10, + "window_bottom": 23 + }, + { + "schema": "termforge-qt-child-size-v1", + "nonce": 215, + "query_error": 0, + "buffer_columns": 11, + "buffer_rows": 24, + "window_left": 0, + "window_top": 0, + "window_right": 10, + "window_bottom": 23 + }, + { + "schema": "termforge-qt-child-size-v1", + "nonce": 216, + "query_error": 0, + "buffer_columns": 11, + "buffer_rows": 24, + "window_left": 0, + "window_top": 0, + "window_right": 10, + "window_bottom": 23 + }, + { + "schema": "termforge-qt-child-size-v1", + "nonce": 217, + "query_error": 0, + "buffer_columns": 11, + "buffer_rows": 24, + "window_left": 0, + "window_top": 0, + "window_right": 10, + "window_bottom": 23 + }, + { + "schema": "termforge-qt-child-size-v1", + "nonce": 218, + "query_error": 0, + "buffer_columns": 11, + "buffer_rows": 24, + "window_left": 0, + "window_top": 0, + "window_right": 10, + "window_bottom": 23 + }, + { + "schema": "termforge-qt-child-size-v1", + "nonce": 219, + "query_error": 0, + "buffer_columns": 11, + "buffer_rows": 24, + "window_left": 0, + "window_top": 0, + "window_right": 10, + "window_bottom": 23 + }, + { + "schema": "termforge-qt-child-size-v1", + "nonce": 220, + "query_error": 0, + "buffer_columns": 11, + "buffer_rows": 24, + "window_left": 0, + "window_top": 0, + "window_right": 10, + "window_bottom": 23 + }, + { + "schema": "termforge-qt-child-size-v1", + "nonce": 221, + "query_error": 0, + "buffer_columns": 11, + "buffer_rows": 24, + "window_left": 0, + "window_top": 0, + "window_right": 10, + "window_bottom": 23 + }, + { + "schema": "termforge-qt-child-size-v1", + "nonce": 222, + "query_error": 0, + "buffer_columns": 11, + "buffer_rows": 24, + "window_left": 0, + "window_top": 0, + "window_right": 10, + "window_bottom": 23 + }, + { + "schema": "termforge-qt-child-size-v1", + "nonce": 223, + "query_error": 0, + "buffer_columns": 11, + "buffer_rows": 24, + "window_left": 0, + "window_top": 0, + "window_right": 10, + "window_bottom": 23 + }, + { + "schema": "termforge-qt-child-size-v1", + "nonce": 224, + "query_error": 0, + "buffer_columns": 11, + "buffer_rows": 24, + "window_left": 0, + "window_top": 0, + "window_right": 10, + "window_bottom": 23 + }, + { + "schema": "termforge-qt-child-size-v1", + "nonce": 225, + "query_error": 0, + "buffer_columns": 11, + "buffer_rows": 24, + "window_left": 0, + "window_top": 0, + "window_right": 10, + "window_bottom": 23 + }, + { + "schema": "termforge-qt-child-size-v1", + "nonce": 226, + "query_error": 0, + "buffer_columns": 11, + "buffer_rows": 24, + "window_left": 0, + "window_top": 0, + "window_right": 10, + "window_bottom": 23 + }, + { + "schema": "termforge-qt-child-size-v1", + "nonce": 227, + "query_error": 0, + "buffer_columns": 11, + "buffer_rows": 24, + "window_left": 0, + "window_top": 0, + "window_right": 10, + "window_bottom": 23 + }, + { + "schema": "termforge-qt-child-size-v1", + "nonce": 228, + "query_error": 0, + "buffer_columns": 11, + "buffer_rows": 24, + "window_left": 0, + "window_top": 0, + "window_right": 10, + "window_bottom": 23 + }, + { + "schema": "termforge-qt-child-size-v1", + "nonce": 229, + "query_error": 0, + "buffer_columns": 11, + "buffer_rows": 24, + "window_left": 0, + "window_top": 0, + "window_right": 10, + "window_bottom": 23 + }, + { + "schema": "termforge-qt-child-size-v1", + "nonce": 230, + "query_error": 0, + "buffer_columns": 11, + "buffer_rows": 24, + "window_left": 0, + "window_top": 0, + "window_right": 10, + "window_bottom": 23 + }, + { + "schema": "termforge-qt-child-size-v1", + "nonce": 231, + "query_error": 0, + "buffer_columns": 11, + "buffer_rows": 24, + "window_left": 0, + "window_top": 0, + "window_right": 10, + "window_bottom": 23 + }, + { + "schema": "termforge-qt-cpp-supervisor-v1", + "status": "failed", + "timed_out": false, + "exit_code": 1, + "job_after": { + "active": 0, + "total": 4, + "terminated": 0 + }, + "error": "Qt smoke failed or left owned processes active" + } + ], + "raw_record": { + "name": "01-old-native-red.log", + "bytes": 25805, + "sha256": "52e74a9f28c308763adca1774929ea5f0cbfe4649c8e37c39a8c4cec4c6ee86b", + "published": false + } + }, + "source": { + "implementation_commit": "0ff783cb14f23dfa641b6b6f45894c038cca048c", + "implementation_tree": "40bb17ef5c7943119647d75e1767b8f394cf16dc", + "clean_at_freeze": true, + "changes_from_prior_report_head": [ + "src/qt/resize_smoke.cpp" + ], + "production_sources_changed": false, + "selected_file_identities": [ + { + "path": "CMakeLists.txt", + "bytes": 25519, + "sha256": "97b8c3bb607e19819ade1c726f07923023384f5165952372f09fb6845b60ba77" + }, + { + "path": ".github/workflows/qt-cpp.yml", + "bytes": 3424, + "sha256": "6001c95d6f8baaf90f104107b7051adc7fb1088aad03339539be0486d37ed14c" + }, + { + "path": "src/qt/terminal_session.hpp", + "bytes": 13989, + "sha256": "ea2139d4430da528ce1f1498640c8b4afed6559d9a66a67b3e67f1a017d85468" + }, + { + "path": "src/qt/terminal_widget.hpp", + "bytes": 8118, + "sha256": "ca81e611cefec1ead3609a8af84ad415c77f60c650c6f5a9988cc4767ab6949b" + }, + { + "path": "src/qt/session_tabs.hpp", + "bytes": 6998, + "sha256": "db6008517b7a859a6e05f25e2f783e1110fcc9b0ed35065bbabac40ecf56afcd" + }, + { + "path": "src/qt/resize_smoke.cpp", + "bytes": 30667, + "sha256": "d98b438723a88753b9f084abac941cf2683e90b4f71fd771fa01b6293166983a" + }, + { + "path": "src/qt/resize_fixture.hpp", + "bytes": 10084, + "sha256": "a855779e06b45b2c68daf413108172ee2d51bcb75fd55911263505d7dc6be300" + }, + { + "path": "src/qt/shell_smoke.cpp", + "bytes": 25287, + "sha256": "86022250a4c5d50824e112d6748c56bb549cb055c0737288f8a3c88f3733c8d0" + }, + { + "path": "src/qt/run_smoke.py", + "bytes": 4287, + "sha256": "25f4d6adec4e9bfad77698300c44d9162511ac1ebb722993d5a52cdb8a863983" + }, + { + "path": "experiments/conpty/session.hpp", + "bytes": 11072, + "sha256": "7b3934715948a05c1996bcccb02ef2eb58ea11baf26bf97c2e728a52d58becda" + }, + { + "path": "experiments/conpty/backend.hpp", + "bytes": 6815, + "sha256": "5ee3ab95dc4b9aefce23ff7900cda2ecdd9cd09d1b1044074de2f5e572c31489" + }, + { + "path": "experiments/shell/queues.hpp", + "bytes": 7224, + "sha256": "9087944a7749176789a489bce0522c55764461342b59c138611743b6947845b6" + }, + { + "path": "experiments/core/screen.hpp", + "bytes": 17242, + "sha256": "04c19f09ebc0c468efbef8dd4c9da8f4bcd44e94000a87c56239756c0df1b474" + }, + { + "path": "experiments/core/terminal.hpp", + "bytes": 12270, + "sha256": "ed3c030611a6df38df26057a8c2834f2808cd05306e73aead79927b1f76fe5ca" + }, + { + "path": "tools/prepare_qt_build.py", + "bytes": 12912, + "sha256": "1e89ff4340cfbab5edd7d45e9637fcd34ab98f0bac19061d053efa0f23ef37b3" + }, + { + "path": "tools/msvc_runtime.py", + "bytes": 8085, + "sha256": "24c78545bf0da2c6ba67c0a4e0ba266088c34a5078757ccbe851a9d8666de6d1" + }, + { + "path": "third_party/qt/manifest.json", + "bytes": 5806, + "sha256": "2796294f254f7fe0370be99d2de8f7745734c7352ac2648b1f8d9a8fab5ad2cd" + }, + { + "path": "third_party/conpty/manifest.json", + "bytes": 1467, + "sha256": "e75e522a3355c0a66c6d60cafa02413a83d8757262747f650b77c959c09ed439" + }, + { + "path": "third_party/msvc_runtime/manifest.json", + "bytes": 4123, + "sha256": "154176c8b4ae6dd57fce453e2c2002ff484344b39451fa9880b07db4794f3758" + } + ] + }, + "fixture_contract": { + "literal_child_regions": [ + [ + 80, + 24 + ], + [ + 60, + 12 + ], + [ + 100, + 30 + ], + [ + 80, + 24 + ], + [ + 1, + 24 + ], + [ + 80, + 1 + ], + [ + 1, + 1 + ], + [ + 80, + 24 + ], + [ + 80, + 24 + ] + ], + "maximum_core_and_child": [ + 500, + 200 + ], + "oversized_widget_cells": [ + 600, + 240 + ], + "large_child_clipped_by_visible_owner": true, + "top_level_case": "Original decorated one-column request retained; expected grid derives independently from actual public widget area and current font after Qt event dispatch", + "child_receives_expected_size": false, + "all_csbi_replies_retained": true, + "stage_query_budget_ms": 5000, + "max_queries_per_stage": 128, + "nonmatch_query_cadence_ms": 10, + "outer_owned_job_timeout_seconds": 25, + "ctest_timeout_seconds": 35, + "production_window_flags_or_policy_changed": false + }, + "targeted": { + "raw_record": { + "name": "03-child-region-offscreen.log", + "bytes": 21788, + "sha256": "5ae8bf703564a0f1e740c41e8e987544d70c0c485a556bf82dc2ec2d48a0843f", + "published": false + }, + "exit": { + "exit_code": 0, + "finished_utc": "2026-10-28T19:56:57.9141979Z" + }, + "qt_platform": "offscreen" + }, + "environment": { + "build": "Release x64", + "version": "10.0.26200", + "os": "Microsoft Windows 11 \u4e13\u4e1a\u7248", + "architecture": "AMD64", + "generator": "Visual Studio 17 2022", + "compiler_self_version": "19.42.34433.0", + "vc_tools_directory_version": "14.42.34433", + "windows_sdk": "10.0.26100.0", + "cmake": "3.31.0", + "python": "3.12.10", + "qt": "6.10.3", + "qt_platform": "offscreen", + "candidate_adapter": false, + "backend": "bundled fixed Microsoft ConPTY 1.25.260930003", + "app_local_crt": "14.51.36247.0" + }, + "freeze": { + "schema": "termforge-qt-resize-frozen-inputs-v1", + "source_commit": "0ff783cb14f23dfa641b6b6f45894c038cca048c", + "source_tree": "40bb17ef5c7943119647d75e1767b8f394cf16dc", + "counts": { + "source": 2786, + "qt_sdk": 4358, + "conpty_input": 2, + "crt_input": 12, + "original_archives": 4, + "product_runtime": 38, + "shell_smoke_runtime": 40, + "resize_smoke_runtime": 40, + "legacy_diagnostic_runtime": 49 + }, + "frozen_manifest": { + "bytes": 1394631, + "sha256": "f97e8b56c609843d29620b96f1556f685eebcdfb18875dec227c74285cb10806" + } + }, + "post_run": { + "schema": "termforge-qt-resize-post-run-v1", + "status": "passed", + "source_commit": "0ff783cb14f23dfa641b6b6f45894c038cca048c", + "files_checked": 7329, + "changes": [] + }, + "full_matrix": { + "source_commit": "0ff783cb14f23dfa641b6b6f45894c038cca048c", + "ctest_exit": 0, + "total": 57, + "failed": 0, + "qt_platform": "offscreen", + "qt_supervisors": [ + { + "schema": "termforge-qt-cpp-supervisor-v1", + "status": "passed", + "timed_out": false, + "exit_code": 0, + "job_after": { + "active": 0, + "total": 26, + "terminated": 0 + }, + "sample": { + "schema": "termforge-qt-cpp-smoke-v1", + "qt": "6.10.3", + "core": "cpp", + "backend": "fixed-microsoft-conpty", + "arithmetic": 750, + "child_exit": 37, + "cleanup_verified": true, + "image_changed": true, + "startup_error_visible": true, + "manual_close_reclaimed": true, + "tabs": { + "arithmetic": [ + 750, + 427 + ], + "survivor_after_close": 778, + "survivor_after_startup_failure": 147, + "natural_exit": 41, + "input_isolation": true, + "answer_ink_visible": true, + "independent_close": true, + "startup_error_visible": true, + "window_close_reclaimed": true, + "all_exited_status": 41, + "failed_only_kept_visible": true + }, + "app_exec": { + "window_close": true, + "last_tab_close": true, + "failed_only_close": true, + "completed_tab_close": true, + "cleanup_before_quit": true, + "manual_status": 0 + }, + "presented_done": null + } + }, + { + "schema": "termforge-qt-cpp-supervisor-v1", + "status": "passed", + "timed_out": false, + "exit_code": 0, + "job_after": { + "active": 0, + "total": 27, + "terminated": 0 + }, + "sample": { + "schema": "termforge-qt-resize-smoke-v1", + "grid_sequence_cases": 8, + "child_ack_replies": 12, + "qt_heartbeat_events": 8, + "output_bytes": 2097195, + "output_queue_high_water": 262144, + "same_size_cmd_output_retained": true, + "child_exit": 37, + "cleanup_verified": true, + "presented_done": null + } + } + ], + "observations": [ + { + "schema": "termforge-qt-cpp-supervisor-v1", + "status": "passed", + "timed_out": false, + "exit_code": 0, + "job_after": { + "active": 0, + "total": 26, + "terminated": 0 + }, + "sample": { + "schema": "termforge-qt-cpp-smoke-v1", + "qt": "6.10.3", + "core": "cpp", + "backend": "fixed-microsoft-conpty", + "arithmetic": 750, + "child_exit": 37, + "cleanup_verified": true, + "image_changed": true, + "startup_error_visible": true, + "manual_close_reclaimed": true, + "tabs": { + "arithmetic": [ + 750, + 427 + ], + "survivor_after_close": 778, + "survivor_after_startup_failure": 147, + "natural_exit": 41, + "input_isolation": true, + "answer_ink_visible": true, + "independent_close": true, + "startup_error_visible": true, + "window_close_reclaimed": true, + "all_exited_status": 41, + "failed_only_kept_visible": true + }, + "app_exec": { + "window_close": true, + "last_tab_close": true, + "failed_only_close": true, + "completed_tab_close": true, + "cleanup_before_quit": true, + "manual_status": 0 + }, + "presented_done": null + } + }, + { + "schema": "termforge-qt-child-size-v1", + "nonce": 0, + "query_error": 0, + "buffer_columns": 80, + "buffer_rows": 24, + "window_left": 0, + "window_top": 0, + "window_right": 79, + "window_bottom": 23 + }, + { + "schema": "termforge-qt-resize-state-v1", + "stage": 0, + "requested_columns": 80, + "requested_rows": 24, + "widget_width": 736, + "widget_height": 574, + "core_columns": 80, + "core_rows": 24, + "transport_columns": 80, + "transport_rows": 24, + "requested_revision": 0, + "transport_revision": 0, + "accepting": 1, + "pending": 0 + }, + { + "schema": "termforge-qt-resize-state-v1", + "stage": 1, + "requested_columns": 60, + "requested_rows": 12, + "widget_width": 556, + "widget_height": 310, + "core_columns": 60, + "core_rows": 12, + "transport_columns": 80, + "transport_rows": 24, + "requested_revision": 1, + "transport_revision": 0, + "accepting": 1, + "pending": 1 + }, + { + "schema": "termforge-qt-resize-area-v1", + "kind": "literal-child-region", + "stage": 1, + "requested_pixel_width": 556, + "requested_pixel_height": 310, + "actual_pixel_width": 556, + "actual_pixel_height": 310, + "expected_columns": 60, + "expected_rows": 12, + "top_level": 0, + "visible_to_window": 1, + "window_visible": 1, + "window_width": 1200, + "window_height": 900, + "visible_region_width": 556, + "visible_region_height": 310 + }, + { + "schema": "termforge-qt-child-size-v1", + "nonce": 101, + "query_error": 0, + "buffer_columns": 80, + "buffer_rows": 24, + "window_left": 0, + "window_top": 0, + "window_right": 79, + "window_bottom": 23 + }, + { + "schema": "termforge-qt-child-size-v1", + "nonce": 102, + "query_error": 0, + "buffer_columns": 60, + "buffer_rows": 12, + "window_left": 0, + "window_top": 0, + "window_right": 59, + "window_bottom": 11 + }, + { + "schema": "termforge-qt-resize-state-v1", + "stage": 1, + "requested_columns": 60, + "requested_rows": 12, + "widget_width": 556, + "widget_height": 310, + "core_columns": 60, + "core_rows": 12, + "transport_columns": 60, + "transport_rows": 12, + "requested_revision": 1, + "transport_revision": 1, + "accepting": 1, + "pending": 0 + }, + { + "schema": "termforge-qt-resize-state-v1", + "stage": 2, + "requested_columns": 100, + "requested_rows": 30, + "widget_width": 916, + "widget_height": 706, + "core_columns": 100, + "core_rows": 30, + "transport_columns": 60, + "transport_rows": 12, + "requested_revision": 2, + "transport_revision": 1, + "accepting": 1, + "pending": 1 + }, + { + "schema": "termforge-qt-resize-area-v1", + "kind": "literal-child-region", + "stage": 2, + "requested_pixel_width": 916, + "requested_pixel_height": 706, + "actual_pixel_width": 916, + "actual_pixel_height": 706, + "expected_columns": 100, + "expected_rows": 30, + "top_level": 0, + "visible_to_window": 1, + "window_visible": 1, + "window_width": 1200, + "window_height": 900, + "visible_region_width": 916, + "visible_region_height": 706 + }, + { + "schema": "termforge-qt-child-size-v1", + "nonce": 103, + "query_error": 0, + "buffer_columns": 100, + "buffer_rows": 30, + "window_left": 0, + "window_top": 0, + "window_right": 99, + "window_bottom": 29 + }, + { + "schema": "termforge-qt-resize-state-v1", + "stage": 2, + "requested_columns": 100, + "requested_rows": 30, + "widget_width": 916, + "widget_height": 706, + "core_columns": 100, + "core_rows": 30, + "transport_columns": 100, + "transport_rows": 30, + "requested_revision": 2, + "transport_revision": 2, + "accepting": 1, + "pending": 0 + }, + { + "schema": "termforge-qt-resize-state-v1", + "stage": 3, + "requested_columns": 80, + "requested_rows": 24, + "widget_width": 736, + "widget_height": 574, + "core_columns": 80, + "core_rows": 24, + "transport_columns": 100, + "transport_rows": 30, + "requested_revision": 3, + "transport_revision": 2, + "accepting": 1, + "pending": 1 + }, + { + "schema": "termforge-qt-resize-area-v1", + "kind": "literal-child-region", + "stage": 3, + "requested_pixel_width": 736, + "requested_pixel_height": 574, + "actual_pixel_width": 736, + "actual_pixel_height": 574, + "expected_columns": 80, + "expected_rows": 24, + "top_level": 0, + "visible_to_window": 1, + "window_visible": 1, + "window_width": 1200, + "window_height": 900, + "visible_region_width": 736, + "visible_region_height": 574 + }, + { + "schema": "termforge-qt-child-size-v1", + "nonce": 104, + "query_error": 0, + "buffer_columns": 100, + "buffer_rows": 30, + "window_left": 0, + "window_top": 0, + "window_right": 99, + "window_bottom": 29 + }, + { + "schema": "termforge-qt-child-size-v1", + "nonce": 105, + "query_error": 0, + "buffer_columns": 80, + "buffer_rows": 24, + "window_left": 0, + "window_top": 0, + "window_right": 79, + "window_bottom": 23 + }, + { + "schema": "termforge-qt-resize-state-v1", + "stage": 3, + "requested_columns": 80, + "requested_rows": 24, + "widget_width": 736, + "widget_height": 574, + "core_columns": 80, + "core_rows": 24, + "transport_columns": 80, + "transport_rows": 24, + "requested_revision": 3, + "transport_revision": 3, + "accepting": 1, + "pending": 0 + }, + { + "schema": "termforge-qt-resize-state-v1", + "stage": 4, + "requested_columns": 1, + "requested_rows": 24, + "widget_width": 25, + "widget_height": 574, + "core_columns": 1, + "core_rows": 24, + "transport_columns": 80, + "transport_rows": 24, + "requested_revision": 4, + "transport_revision": 3, + "accepting": 1, + "pending": 1 + }, + { + "schema": "termforge-qt-resize-area-v1", + "kind": "literal-child-region", + "stage": 4, + "requested_pixel_width": 25, + "requested_pixel_height": 574, + "actual_pixel_width": 25, + "actual_pixel_height": 574, + "expected_columns": 1, + "expected_rows": 24, + "top_level": 0, + "visible_to_window": 1, + "window_visible": 1, + "window_width": 1200, + "window_height": 900, + "visible_region_width": 25, + "visible_region_height": 574 + }, + { + "schema": "termforge-qt-child-size-v1", + "nonce": 106, + "query_error": 0, + "buffer_columns": 80, + "buffer_rows": 24, + "window_left": 0, + "window_top": 0, + "window_right": 79, + "window_bottom": 23 + }, + { + "schema": "termforge-qt-child-size-v1", + "nonce": 107, + "query_error": 0, + "buffer_columns": 1, + "buffer_rows": 24, + "window_left": 0, + "window_top": 0, + "window_right": 0, + "window_bottom": 23 + }, + { + "schema": "termforge-qt-resize-state-v1", + "stage": 4, + "requested_columns": 1, + "requested_rows": 24, + "widget_width": 25, + "widget_height": 574, + "core_columns": 1, + "core_rows": 24, + "transport_columns": 1, + "transport_rows": 24, + "requested_revision": 4, + "transport_revision": 4, + "accepting": 1, + "pending": 0 + }, + { + "schema": "termforge-qt-resize-state-v1", + "stage": 5, + "requested_columns": 80, + "requested_rows": 1, + "widget_width": 736, + "widget_height": 68, + "core_columns": 80, + "core_rows": 1, + "transport_columns": 1, + "transport_rows": 24, + "requested_revision": 5, + "transport_revision": 4, + "accepting": 1, + "pending": 1 + }, + { + "schema": "termforge-qt-resize-area-v1", + "kind": "literal-child-region", + "stage": 5, + "requested_pixel_width": 736, + "requested_pixel_height": 68, + "actual_pixel_width": 736, + "actual_pixel_height": 68, + "expected_columns": 80, + "expected_rows": 1, + "top_level": 0, + "visible_to_window": 1, + "window_visible": 1, + "window_width": 1200, + "window_height": 900, + "visible_region_width": 736, + "visible_region_height": 68 + }, + { + "schema": "termforge-qt-child-size-v1", + "nonce": 108, + "query_error": 0, + "buffer_columns": 1, + "buffer_rows": 24, + "window_left": 0, + "window_top": 0, + "window_right": 0, + "window_bottom": 23 + }, + { + "schema": "termforge-qt-child-size-v1", + "nonce": 109, + "query_error": 0, + "buffer_columns": 80, + "buffer_rows": 1, + "window_left": 0, + "window_top": 0, + "window_right": 79, + "window_bottom": 0 + }, + { + "schema": "termforge-qt-resize-state-v1", + "stage": 5, + "requested_columns": 80, + "requested_rows": 1, + "widget_width": 736, + "widget_height": 68, + "core_columns": 80, + "core_rows": 1, + "transport_columns": 80, + "transport_rows": 1, + "requested_revision": 5, + "transport_revision": 5, + "accepting": 1, + "pending": 0 + }, + { + "schema": "termforge-qt-resize-state-v1", + "stage": 6, + "requested_columns": 1, + "requested_rows": 1, + "widget_width": 1, + "widget_height": 1, + "core_columns": 1, + "core_rows": 1, + "transport_columns": 80, + "transport_rows": 1, + "requested_revision": 6, + "transport_revision": 5, + "accepting": 1, + "pending": 1 + }, + { + "schema": "termforge-qt-resize-area-v1", + "kind": "literal-child-region", + "stage": 6, + "requested_pixel_width": 1, + "requested_pixel_height": 1, + "actual_pixel_width": 1, + "actual_pixel_height": 1, + "expected_columns": 1, + "expected_rows": 1, + "top_level": 0, + "visible_to_window": 1, + "window_visible": 1, + "window_width": 1200, + "window_height": 900, + "visible_region_width": 1, + "visible_region_height": 1 + }, + { + "schema": "termforge-qt-child-size-v1", + "nonce": 110, + "query_error": 0, + "buffer_columns": 1, + "buffer_rows": 1, + "window_left": 0, + "window_top": 0, + "window_right": 0, + "window_bottom": 0 + }, + { + "schema": "termforge-qt-resize-state-v1", + "stage": 6, + "requested_columns": 1, + "requested_rows": 1, + "widget_width": 1, + "widget_height": 1, + "core_columns": 1, + "core_rows": 1, + "transport_columns": 1, + "transport_rows": 1, + "requested_revision": 6, + "transport_revision": 6, + "accepting": 1, + "pending": 0 + }, + { + "schema": "termforge-qt-resize-state-v1", + "stage": 7, + "requested_columns": 80, + "requested_rows": 24, + "widget_width": 736, + "widget_height": 574, + "core_columns": 80, + "core_rows": 24, + "transport_columns": 1, + "transport_rows": 1, + "requested_revision": 7, + "transport_revision": 6, + "accepting": 1, + "pending": 1 + }, + { + "schema": "termforge-qt-resize-area-v1", + "kind": "literal-child-region", + "stage": 7, + "requested_pixel_width": 736, + "requested_pixel_height": 574, + "actual_pixel_width": 736, + "actual_pixel_height": 574, + "expected_columns": 80, + "expected_rows": 24, + "top_level": 0, + "visible_to_window": 1, + "window_visible": 1, + "window_width": 1200, + "window_height": 900, + "visible_region_width": 736, + "visible_region_height": 574 + }, + { + "schema": "termforge-qt-child-size-v1", + "nonce": 111, + "query_error": 0, + "buffer_columns": 80, + "buffer_rows": 24, + "window_left": 0, + "window_top": 0, + "window_right": 79, + "window_bottom": 23 + }, + { + "schema": "termforge-qt-resize-state-v1", + "stage": 7, + "requested_columns": 80, + "requested_rows": 24, + "widget_width": 736, + "widget_height": 574, + "core_columns": 80, + "core_rows": 24, + "transport_columns": 80, + "transport_rows": 24, + "requested_revision": 7, + "transport_revision": 7, + "accepting": 1, + "pending": 0 + }, + { + "schema": "termforge-qt-resize-state-v1", + "stage": 8, + "requested_columns": 80, + "requested_rows": 24, + "widget_width": 736, + "widget_height": 574, + "core_columns": 80, + "core_rows": 24, + "transport_columns": 80, + "transport_rows": 24, + "requested_revision": 7, + "transport_revision": 7, + "accepting": 1, + "pending": 0 + }, + { + "schema": "termforge-qt-resize-area-v1", + "kind": "literal-child-region", + "stage": 8, + "requested_pixel_width": 736, + "requested_pixel_height": 574, + "actual_pixel_width": 736, + "actual_pixel_height": 574, + "expected_columns": 80, + "expected_rows": 24, + "top_level": 0, + "visible_to_window": 1, + "window_visible": 1, + "window_width": 1200, + "window_height": 900, + "visible_region_width": 736, + "visible_region_height": 574 + }, + { + "schema": "termforge-qt-child-size-v1", + "nonce": 112, + "query_error": 0, + "buffer_columns": 80, + "buffer_rows": 24, + "window_left": 0, + "window_top": 0, + "window_right": 79, + "window_bottom": 23 + }, + { + "schema": "termforge-qt-resize-state-v1", + "stage": 8, + "requested_columns": 80, + "requested_rows": 24, + "widget_width": 736, + "widget_height": 574, + "core_columns": 80, + "core_rows": 24, + "transport_columns": 80, + "transport_rows": 24, + "requested_revision": 7, + "transport_revision": 7, + "accepting": 1, + "pending": 0 + }, + { + "schema": "termforge-qt-child-size-v1", + "nonce": 113, + "query_error": 0, + "buffer_columns": 80, + "buffer_rows": 24, + "window_left": 0, + "window_top": 0, + "window_right": 79, + "window_bottom": 23 + }, + { + "schema": "termforge-qt-child-size-v1", + "nonce": 0, + "query_error": 0, + "buffer_columns": 80, + "buffer_rows": 24, + "window_left": 0, + "window_top": 0, + "window_right": 79, + "window_bottom": 23 + }, + { + "schema": "termforge-qt-resize-state-v1", + "stage": 1700, + "requested_columns": 1, + "requested_rows": 24, + "widget_width": 25, + "widget_height": 574, + "core_columns": 1, + "core_rows": 24, + "transport_columns": 80, + "transport_rows": 24, + "requested_revision": 1, + "transport_revision": 0, + "accepting": 1, + "pending": 1 + }, + { + "schema": "termforge-qt-resize-area-v1", + "kind": "top-level-effective", + "stage": 1700, + "requested_pixel_width": 25, + "requested_pixel_height": 574, + "actual_pixel_width": 25, + "actual_pixel_height": 574, + "expected_columns": 1, + "expected_rows": 24, + "top_level": 1, + "visible_to_window": 1, + "window_visible": 1, + "window_width": 25, + "window_height": 574, + "visible_region_width": 25, + "visible_region_height": 574 + }, + { + "schema": "termforge-qt-child-size-v1", + "nonce": 1701, + "query_error": 0, + "buffer_columns": 80, + "buffer_rows": 24, + "window_left": 0, + "window_top": 0, + "window_right": 79, + "window_bottom": 23 + }, + { + "schema": "termforge-qt-child-size-v1", + "nonce": 1702, + "query_error": 0, + "buffer_columns": 1, + "buffer_rows": 24, + "window_left": 0, + "window_top": 0, + "window_right": 0, + "window_bottom": 23 + }, + { + "schema": "termforge-qt-resize-state-v1", + "stage": 1700, + "requested_columns": 1, + "requested_rows": 24, + "widget_width": 25, + "widget_height": 574, + "core_columns": 1, + "core_rows": 24, + "transport_columns": 1, + "transport_rows": 24, + "requested_revision": 1, + "transport_revision": 1, + "accepting": 1, + "pending": 0 + }, + { + "schema": "termforge-qt-resize-area-v1", + "kind": "top-level-effective", + "stage": 1700, + "requested_pixel_width": 25, + "requested_pixel_height": 574, + "actual_pixel_width": 25, + "actual_pixel_height": 574, + "expected_columns": 1, + "expected_rows": 24, + "top_level": 1, + "visible_to_window": 1, + "window_visible": 1, + "window_width": 25, + "window_height": 574, + "visible_region_width": 25, + "visible_region_height": 574 + }, + { + "schema": "termforge-qt-child-size-v1", + "nonce": 0, + "query_error": 0, + "buffer_columns": 80, + "buffer_rows": 24, + "window_left": 0, + "window_top": 0, + "window_right": 79, + "window_bottom": 23 + }, + { + "schema": "termforge-qt-resize-state-v1", + "stage": 700, + "requested_columns": 60, + "requested_rows": 12, + "widget_width": 616, + "widget_height": 323, + "core_columns": 60, + "core_rows": 12, + "transport_columns": 80, + "transport_rows": 24, + "requested_revision": 2, + "transport_revision": 0, + "accepting": 1, + "pending": 1 + }, + { + "schema": "termforge-qt-child-size-v1", + "nonce": 701, + "query_error": 0, + "buffer_columns": 80, + "buffer_rows": 24, + "window_left": 0, + "window_top": 0, + "window_right": 79, + "window_bottom": 23 + }, + { + "schema": "termforge-qt-child-size-v1", + "nonce": 702, + "query_error": 0, + "buffer_columns": 60, + "buffer_rows": 12, + "window_left": 0, + "window_top": 0, + "window_right": 59, + "window_bottom": 11 + }, + { + "schema": "termforge-qt-child-size-v1", + "nonce": 0, + "query_error": 0, + "buffer_columns": 80, + "buffer_rows": 24, + "window_left": 0, + "window_top": 0, + "window_right": 79, + "window_bottom": 23 + }, + { + "schema": "termforge-qt-resize-error-v1", + "accepting": 0, + "pending": 0, + "error_recorded": 1 + }, + { + "schema": "termforge-qt-child-size-v1", + "nonce": 0, + "query_error": 0, + "buffer_columns": 80, + "buffer_rows": 24, + "window_left": 0, + "window_top": 0, + "window_right": 79, + "window_bottom": 23 + }, + { + "schema": "termforge-qt-child-size-v1", + "nonce": 0, + "query_error": 0, + "buffer_columns": 80, + "buffer_rows": 24, + "window_left": 0, + "window_top": 0, + "window_right": 79, + "window_bottom": 23 + }, + { + "schema": "termforge-qt-child-size-v1", + "nonce": 801, + "query_error": 0, + "buffer_columns": 80, + "buffer_rows": 24, + "window_left": 0, + "window_top": 0, + "window_right": 79, + "window_bottom": 23 + }, + { + "schema": "termforge-qt-child-size-v1", + "nonce": 802, + "query_error": 0, + "buffer_columns": 60, + "buffer_rows": 12, + "window_left": 0, + "window_top": 0, + "window_right": 59, + "window_bottom": 11 + }, + { + "schema": "termforge-qt-resize-state-v1", + "stage": 800, + "requested_columns": 60, + "requested_rows": 12, + "widget_width": 556, + "widget_height": 310, + "core_columns": 60, + "core_rows": 12, + "transport_columns": 60, + "transport_rows": 12, + "requested_revision": 1, + "transport_revision": 1, + "accepting": 1, + "pending": 0 + }, + { + "schema": "termforge-qt-child-size-v1", + "nonce": 899, + "query_error": 0, + "buffer_columns": 80, + "buffer_rows": 24, + "window_left": 0, + "window_top": 0, + "window_right": 79, + "window_bottom": 23 + }, + { + "schema": "termforge-qt-child-size-v1", + "nonce": 901, + "query_error": 0, + "buffer_columns": 80, + "buffer_rows": 24, + "window_left": 0, + "window_top": 0, + "window_right": 79, + "window_bottom": 23 + }, + { + "schema": "termforge-qt-child-size-v1", + "nonce": 902, + "query_error": 0, + "buffer_columns": 60, + "buffer_rows": 12, + "window_left": 0, + "window_top": 0, + "window_right": 59, + "window_bottom": 11 + }, + { + "schema": "termforge-qt-resize-state-v1", + "stage": 801, + "requested_columns": 60, + "requested_rows": 12, + "widget_width": 556, + "widget_height": 310, + "core_columns": 60, + "core_rows": 12, + "transport_columns": 60, + "transport_rows": 12, + "requested_revision": 1, + "transport_revision": 1, + "accepting": 1, + "pending": 0 + }, + { + "schema": "termforge-qt-child-size-v1", + "nonce": 1001, + "query_error": 0, + "buffer_columns": 60, + "buffer_rows": 12, + "window_left": 0, + "window_top": 0, + "window_right": 59, + "window_bottom": 11 + }, + { + "schema": "termforge-qt-child-size-v1", + "nonce": 1002, + "query_error": 0, + "buffer_columns": 100, + "buffer_rows": 30, + "window_left": 0, + "window_top": 0, + "window_right": 99, + "window_bottom": 29 + }, + { + "schema": "termforge-qt-resize-state-v1", + "stage": 802, + "requested_columns": 100, + "requested_rows": 30, + "widget_width": 916, + "widget_height": 706, + "core_columns": 100, + "core_rows": 30, + "transport_columns": 100, + "transport_rows": 30, + "requested_revision": 2, + "transport_revision": 2, + "accepting": 1, + "pending": 0 + }, + { + "schema": "termforge-qt-resize-state-v1", + "stage": 900, + "requested_columns": 60, + "requested_rows": 12, + "widget_width": 736, + "widget_height": 574, + "core_columns": 60, + "core_rows": 12, + "transport_columns": 80, + "transport_rows": 24, + "requested_revision": 1, + "transport_revision": 0, + "accepting": 1, + "pending": 1 + }, + { + "schema": "termforge-qt-resize-state-v1", + "stage": 900, + "requested_columns": 60, + "requested_rows": 12, + "widget_width": 736, + "widget_height": 574, + "core_columns": 60, + "core_rows": 12, + "transport_columns": 80, + "transport_rows": 24, + "requested_revision": 1, + "transport_revision": 0, + "accepting": 0, + "pending": 0 + }, + { + "schema": "termforge-qt-child-size-v1", + "nonce": 0, + "query_error": 0, + "buffer_columns": 80, + "buffer_rows": 24, + "window_left": 0, + "window_top": 0, + "window_right": 79, + "window_bottom": 23 + }, + { + "schema": "termforge-qt-resize-state-v1", + "stage": 901, + "requested_columns": 60, + "requested_rows": 12, + "widget_width": 736, + "widget_height": 574, + "core_columns": 60, + "core_rows": 12, + "transport_columns": 80, + "transport_rows": 24, + "requested_revision": 1, + "transport_revision": 0, + "accepting": 1, + "pending": 1 + }, + { + "schema": "termforge-qt-resize-state-v1", + "stage": 901, + "requested_columns": 60, + "requested_rows": 12, + "widget_width": 736, + "widget_height": 574, + "core_columns": 60, + "core_rows": 12, + "transport_columns": 80, + "transport_rows": 24, + "requested_revision": 1, + "transport_revision": 0, + "accepting": 0, + "pending": 0 + }, + { + "schema": "termforge-qt-child-size-v1", + "nonce": 0, + "query_error": 0, + "buffer_columns": 80, + "buffer_rows": 24, + "window_left": 0, + "window_top": 0, + "window_right": 79, + "window_bottom": 23 + }, + { + "schema": "termforge-qt-resize-state-v1", + "stage": 902, + "requested_columns": 60, + "requested_rows": 12, + "widget_width": 736, + "widget_height": 574, + "core_columns": 60, + "core_rows": 12, + "transport_columns": 80, + "transport_rows": 24, + "requested_revision": 1, + "transport_revision": 0, + "accepting": 1, + "pending": 1 + }, + { + "schema": "termforge-qt-child-size-v1", + "nonce": 1201, + "query_error": 0, + "buffer_columns": 80, + "buffer_rows": 24, + "window_left": 0, + "window_top": 0, + "window_right": 79, + "window_bottom": 23 + }, + { + "schema": "termforge-qt-resize-state-v1", + "stage": 902, + "requested_columns": 60, + "requested_rows": 12, + "widget_width": 736, + "widget_height": 574, + "core_columns": 60, + "core_rows": 12, + "transport_columns": 80, + "transport_rows": 24, + "requested_revision": 1, + "transport_revision": 0, + "accepting": 0, + "pending": 0 + }, + { + "schema": "termforge-qt-resize-state-v1", + "stage": 903, + "requested_columns": 80, + "requested_rows": 24, + "widget_width": 736, + "widget_height": 574, + "core_columns": 80, + "core_rows": 24, + "transport_columns": 0, + "transport_rows": 0, + "requested_revision": 0, + "transport_revision": 0, + "accepting": 0, + "pending": 0 + }, + { + "schema": "termforge-qt-child-size-v1", + "nonce": 0, + "query_error": 0, + "buffer_columns": 80, + "buffer_rows": 24, + "window_left": 0, + "window_top": 0, + "window_right": 79, + "window_bottom": 23 + }, + { + "schema": "termforge-qt-child-size-v1", + "nonce": 1301, + "query_error": 0, + "buffer_columns": 100, + "buffer_rows": 30, + "window_left": 0, + "window_top": 0, + "window_right": 99, + "window_bottom": 29 + }, + { + "schema": "termforge-qt-child-size-v1", + "nonce": 1302, + "query_error": 0, + "buffer_columns": 100, + "buffer_rows": 30, + "window_left": 0, + "window_top": 0, + "window_right": 99, + "window_bottom": 29 + }, + { + "schema": "termforge-qt-child-size-v1", + "nonce": 1401, + "query_error": 0, + "buffer_columns": 100, + "buffer_rows": 30, + "window_left": 0, + "window_top": 0, + "window_right": 99, + "window_bottom": 29 + }, + { + "schema": "termforge-qt-child-size-v1", + "nonce": 0, + "query_error": 0, + "buffer_columns": 500, + "buffer_rows": 200, + "window_left": 0, + "window_top": 0, + "window_right": 499, + "window_bottom": 199 + }, + { + "schema": "termforge-qt-resize-state-v1", + "stage": 1600, + "requested_columns": 600, + "requested_rows": 240, + "widget_width": 5416, + "widget_height": 5326, + "core_columns": 500, + "core_rows": 200, + "transport_columns": 500, + "transport_rows": 200, + "requested_revision": 1, + "transport_revision": 1, + "accepting": 1, + "pending": 0 + }, + { + "schema": "termforge-qt-resize-area-v1", + "kind": "bounded-child-region", + "stage": 1600, + "requested_pixel_width": 5416, + "requested_pixel_height": 5326, + "actual_pixel_width": 5416, + "actual_pixel_height": 5326, + "expected_columns": 500, + "expected_rows": 200, + "top_level": 0, + "visible_to_window": 1, + "window_visible": 1, + "window_width": 1200, + "window_height": 900, + "visible_region_width": 1200, + "visible_region_height": 900 + }, + { + "schema": "termforge-qt-child-size-v1", + "nonce": 1601, + "query_error": 0, + "buffer_columns": 500, + "buffer_rows": 200, + "window_left": 0, + "window_top": 0, + "window_right": 499, + "window_bottom": 199 + }, + { + "schema": "termforge-qt-cpp-supervisor-v1", + "status": "passed", + "timed_out": false, + "exit_code": 0, + "job_after": { + "active": 0, + "total": 27, + "terminated": 0 + }, + "sample": { + "schema": "termforge-qt-resize-smoke-v1", + "grid_sequence_cases": 8, + "child_ack_replies": 12, + "qt_heartbeat_events": 8, + "output_bytes": 2097195, + "output_queue_high_water": 262144, + "same_size_cmd_output_retained": true, + "child_exit": 37, + "cleanup_verified": true, + "presented_done": null + } + } + ], + "internal_skip_count": 13, + "internal_skips": [ + { + "ctest_number": 33, + "test": "setUpClass (test_candidate_compare.CandidateComparisonTests)", + "reason": "optional Alacritty binary is not built; core-candidate workflow runs these checks" + }, + { + "ctest_number": 33, + "test": "setUpClass (test_capability_matrix.CapabilityMatrixTests)", + "reason": "optional Alacritty binary is not built; core-candidate workflow runs these checks" + }, + { + "ctest_number": 33, + "test": "setUpClass (test_fuzz_matrix.FuzzMatrixTests)", + "reason": "optional Alacritty binary is not built; core-candidate workflow runs these checks" + }, + { + "ctest_number": 33, + "test": "setUpClass (test_real_app_matrix.RealApplicationMatrixTests)", + "reason": "optional real application capture dependencies are not built" + }, + { + "ctest_number": 35, + "test": "test_actual_system_copy_paste_and_shortcuts_twice (experiments.shell.test_actions.ActionWindowTest.test_actual_system_copy_paste_and_shortcuts_twice)", + "reason": "actual system Copy/Paste requires a disposable hosted VM" + }, + { + "ctest_number": 43, + "test": "test_suspended_target_is_reclaimed_if_job_assignment_fails (test_ui_r1.EvidenceBoundaryTests.test_suspended_target_is_reclaimed_if_job_assignment_fails)", + "reason": "opt-in pinned reference failure injection" + }, + { + "ctest_number": 51, + "test": "test_mouse_selection_to_real_system_clipboard (experiments.shell.test_shell.ShellTests.test_mouse_selection_to_real_system_clipboard)", + "reason": "system copy UI gate requires a disposable hosted VM" + }, + { + "ctest_number": 51, + "test": "test_system_clipboard_product_read_errors_cancel_and_close (experiments.shell.test_shell.ShellTests.test_system_clipboard_product_read_errors_cancel_and_close)", + "reason": "product clipboard read gate requires a disposable hosted VM" + }, + { + "ctest_number": 51, + "test": "test_system_clipboard_shortcut_to_window_confirmation_and_receiver (experiments.shell.test_shell.ShellTests.test_system_clipboard_shortcut_to_window_confirmation_and_receiver)", + "reason": "real system clipboard UI gate requires a disposable hosted VM" + }, + { + "ctest_number": 52, + "test": "test_owned_clipboard_contention_preserves_write_and_read_failures (experiments.shell.test_selection_bytes.SelectionBytesWindowTest.test_owned_clipboard_contention_preserves_write_and_read_failures)", + "reason": "system CF requires a disposable hosted VM" + }, + { + "ctest_number": 52, + "test": "test_real_system_copy_shortcuts_for_styled_fixture_twice (experiments.shell.test_selection_bytes.SelectionBytesWindowTest.test_real_system_copy_shortcuts_for_styled_fixture_twice)", + "reason": "system CF requires a disposable hosted VM" + }, + { + "ctest_number": 53, + "test": "test_real_system_copy_and_edit_context_twice (experiments.shell.test_selection_context.SelectionContextWindowTest.test_real_system_copy_and_edit_context_twice)", + "reason": "real CF/EDIT Copy requires a disposable hosted VM" + }, + { + "ctest_number": 55, + "test": "test_real_system_clipboard (experiments.shell.test_paste.PasteTests.test_real_system_clipboard)", + "reason": "Private window station OpenClipboard denied (5); system API gate remains unverified. Evidence: ", + "private_path_redacted": true, + "original_reason_sha256": "3f5dbe39fd08b08c3f4b1dfe7431d2128b6a5334a4d3800a7a4a13952712f228", + "diagnostic_artifact": { + "name": "private-clipboard.json", + "bytes": 677, + "sha256": "011913503203eee30289c896d4fcfece7b543416d731acda4a687944578e307c", + "published": false + } + } + ], + "raw_record": { + "name": "06-final-ctest.log", + "bytes": 166507, + "sha256": "fa53e3889cd36c8e6bc1efd02060ad46f2eae8e19523055d387367cf3a0573d3", + "published": false + }, + "not_combined_with_prior_source_matrix": true + }, + "native_followup_package": { + "schema": "termforge-qt-resize-private-guest-input-v1", + "source_commit": "0ff783cb14f23dfa641b6b6f45894c038cca048c", + "entry": "qt_cpp_resize_smoke.exe", + "files": { + "assets/fonts/OFL.txt": { + "bytes": 4395, + "sha256": "50ab8dd54680d3473f649c9db86fece88434d097c7834475c1c72d2f8c429215" + }, + "assets/fonts/README.md": { + "bytes": 3091, + "sha256": "760a714ad011733e0b93f3c25298190ff5fa493a9e40ad38d347922a355d538f" + }, + "assets/fonts/RobotoMono-Regular.ttf": { + "bytes": 125748, + "sha256": "af0bff7599c3df3831755c16e39b3c496df74b8c8d8a1161b14dc8461be17cb4" + }, + "concrt140.dll": { + "bytes": 374200, + "sha256": "54716f0738af891f283d213b5c8d11b25896bb8ee3097d301eae718560cf974e" + }, + "conpty-backend/conpty.dll": { + "bytes": 119608, + "sha256": "feeef341d891643c62d30b6b07800bc70f0bc148f44cb8c3bee84aa557ae805a" + }, + "conpty-backend/LICENSE": { + "bytes": 1095, + "sha256": "ad0cf28f3381ca9bb0bf101d127402d44c17bfa0991e1a00bff7ae6679e9dada" + }, + "conpty-backend/manifest.json": { + "bytes": 1467, + "sha256": "e75e522a3355c0a66c6d60cafa02413a83d8757262747f650b77c959c09ed439" + }, + "conpty-backend/OpenConsole.exe": { + "bytes": 1089376, + "sha256": "3d66b23d0a71bb8eed2b77edc8b9df9bf54ce6c8fb74c863a30e760997f80586" + }, + "D3Dcompiler_47.dll": { + "bytes": 4669440, + "sha256": "0f89c19165fd83a05e39bea601a06007e6a8814d55e2adf913902926231f843e" + }, + "dxcompiler.dll": { + "bytes": 14019128, + "sha256": "2bc16dc5ec85315f89e2f10a482d46dde94a65d6b2d7077f4c49c77e10222acc" + }, + "dxil.dll": { + "bytes": 1502760, + "sha256": "0e90c12c1c6aa1e09d025322a815f9dd80da7d1e331f1df585c7fcbbf44b40d3" + }, + "generic/qtuiotouchplugin.dll": { + "bytes": 102712, + "sha256": "69498d05870aa583c31159f9350e3d8a598b895f6525de7b6fa382395ad27b9d" + }, + "icuuc.dll": { + "bytes": 36864, + "sha256": "59d134ddc15ae0594f0a328979f8201662fc82634ddb7c537b156e7cf871f5eb" + }, + "imageformats/qgif.dll": { + "bytes": 47928, + "sha256": "ded464ef782f41862f391bc5b21c54d58f6aee670fc9f10a2d909ae5b0ba09a7" + }, + "imageformats/qico.dll": { + "bytes": 45880, + "sha256": "0c2abdf95d778bfed9863b8be817dc6cffe2dacdd1a85b2117b4b4ccb1a08e66" + }, + "imageformats/qjpeg.dll": { + "bytes": 577848, + "sha256": "cd965015cce4638361d7bc01193d92a041a227d46d0759ec25d2a1a8608a6b40" + }, + "LICENSE-MICROSOFT-VC-REDIST.docx": { + "bytes": 39553, + "sha256": "08651651a7602fc7c0e2763de0fde1ff9f868df2780597cd1775ee9d6441c783" + }, + "msvcp140.dll": { + "bytes": 643512, + "sha256": "7c26614e1d733892c2deac7e245ce115504b1d80592dd0a01b08e3e5a55f89ca" + }, + "msvcp140_1.dll": { + "bytes": 35768, + "sha256": "206c931bf90fdad8816de3b5e2ef80b2bcaa9406c89ecc05fe6fddffe251e982" + }, + "msvcp140_2.dll": { + "bytes": 274872, + "sha256": "d50d7883f20d1dc6191768d3746f52dd9cac89c346ffaed5be1f110c2f34a838" + }, + "msvcp140_atomic_wait.dll": { + "bytes": 57792, + "sha256": "3d0cbfaa1bf3eecf5a3f4491d2960ee803cb994f30292c6adc4a07c498f60e2b" + }, + "msvcp140_codecvt_ids.dll": { + "bytes": 31160, + "sha256": "8a65c7596ef2e6938731f5a1058e7e40145b6d97967cc649231a076b9a608d78" + }, + "networkinformation/qnetworklistmanager.dll": { + "bytes": 70968, + "sha256": "4bc26d5b613c507634fd10f07fe031fcbd4f02157d23b9eb1407de4dd6da8278" + }, + "NOTICE.txt": { + "bytes": 563, + "sha256": "510781c94971ea19adae55d2c42207d942b0646deee29d5c401f189cc25d415f" + }, + "platforms/qoffscreen.dll": { + "bytes": 113976, + "sha256": "a35f87f597b91121cfc0ef39dcb0a5e7ad2876850fbfaf6377edf80eaa067bfd" + }, + "platforms/qwindows.dll": { + "bytes": 997688, + "sha256": "cafd5bfdef3d89d176ee26725c8d4759fd6cb007645b645a4cbf6386364a3f36" + }, + "Qt6Core.dll": { + "bytes": 10250040, + "sha256": "b712b4754588e89f855dc0aa087d6304b2fd21b0e0639d1cdeb9cb969bd5fb72" + }, + "Qt6Gui.dll": { + "bytes": 9514296, + "sha256": "03ba47a2025036a04f5548bce242788ac21edf551e78d5b42e1b87beb799904f" + }, + "Qt6Network.dll": { + "bytes": 1773880, + "sha256": "203f8ddf83c015ce56752ebe7a1986472be7dbb95c20e13ac8e1d741d9ac93d1" + }, + "Qt6Test.dll": { + "bytes": 380216, + "sha256": "9d0473552b332aa378c60da05af97d741fcce06b0fc4dd68e36d885015eb5187" + }, + "Qt6Widgets.dll": { + "bytes": 6577464, + "sha256": "61ddd0316a731b8dbabaf2924cd0d47b756461e37329b4f535902cf450416127" + }, + "qt_cpp_resize_smoke.exe": { + "bytes": 216064, + "sha256": "2a7450c79d5181137d65d11cd4737bdedfb4d83205252c405bcac380e4799e33" + }, + "runtime-manifest.json": { + "bytes": 5859, + "sha256": "76c689435fff1ca74ae82f4cfc1ee683fe8ef2760589877c9adc1b0e4540dcdf" + }, + "styles/qmodernwindowsstyle.dll": { + "bytes": 221496, + "sha256": "c279e7a97b21fcd7acdfde88cacb8baa119f563282e09c241acb3edee2bc9bbf" + }, + "tls/qcertonlybackend.dll": { + "bytes": 103224, + "sha256": "99d00b37bb2835c539366e4018a58e0ddad21e1c648a3f44f56335a0c1d34765" + }, + "tls/qschannelbackend.dll": { + "bytes": 262968, + "sha256": "b7035c3689b93f55b48112c3e85cf4b8550fefde3f7a044df2784c29330e6940" + }, + "vccorlib140.dll": { + "bytes": 350648, + "sha256": "09f93d5ff96ae09767f3e1af3cdd43a5a58f2598654fc63089429bb6f9f4737f" + }, + "vcruntime140.dll": { + "bytes": 178616, + "sha256": "d1f4225df2cd877dbf130d5668a021dce3f94118455ff5ec952061c30afc9ce7" + }, + "vcruntime140_1.dll": { + "bytes": 50112, + "sha256": "a7146c08f89fe5b04541ab507cdb59ff7b44534d4ba3c668a426c6450a03434e" + }, + "vcruntime140_threads.dll": { + "bytes": 38840, + "sha256": "40f39e8cee5f5a531b4010e18b807e8fe265b908dc58f959ecb7ebc6ea6cb11a" + } + }, + "runtime_files": 40, + "includes_runtime_manifest": true, + "zip_bytes": 23837280, + "zip_sha256": "1b1ac682efbc32f3a48b57eef927f95ab293c2533b9444ea6b69d99273f93bde", + "startup_gate": "stdin exactly three bytes hex 474f0a, inherited owned Job before QApplication", + "stdin_gate_bytes_hex": "474f0a", + "wait_for_job_cli_flag": false, + "platform": "Set QT_QPA_PLATFORM=windows for native follow-up; run_smoke.py itself forces offscreen", + "scope": "Private frozen test runtime only, not a product release or native acceptance result" + }, + "new_source_guest_execution_in_this_record": false, + "private_raw_records": [ + { + "name": "01-old-native-red-exit.json", + "bytes": 75, + "sha256": "7b88f964d572a1de4ec826edf34e35537cc6066e9210e7db5a5f42fd745b4b0f", + "published": false + }, + { + "name": "01-old-native-red.log", + "bytes": 25805, + "sha256": "52e74a9f28c308763adca1774929ea5f0cbfe4649c8e37c39a8c4cec4c6ee86b", + "published": false + }, + { + "name": "02-child-region-build.log", + "bytes": 3324, + "sha256": "c5e53343f0c6ecf8b56395c16db4168ea940e70e9d3dad2ca5fc4446ffaf0e53", + "published": false + }, + { + "name": "03-child-region-offscreen-exit.json", + "bytes": 75, + "sha256": "50ce43f994684059716f2a7be806d176d621e11ae4c4391e580b24b8cebf919a", + "published": false + }, + { + "name": "03-child-region-offscreen.log", + "bytes": 21788, + "sha256": "5ae8bf703564a0f1e740c41e8e987544d70c0c485a556bf82dc2ec2d48a0843f", + "published": false + }, + { + "name": "04-final-build-all.log", + "bytes": 14906, + "sha256": "9d9df20d8a14578840dc14fdaf38671a326d088da3bd17cf1739ddd71890eb87", + "published": false + }, + { + "name": "05-freeze-summary.json", + "bytes": 587, + "sha256": "f5f5189b54f46519dbb6c7604537cb50329061083a3558a5fc4749562e31557a", + "published": false + }, + { + "name": "05a-product-manifest.json", + "bytes": 253, + "sha256": "0b964586d716707cce2961420a7c8928a18ea5b8d50d949d1a101c17049bbb95", + "published": false + }, + { + "name": "05b-shell-manifest.json", + "bytes": 253, + "sha256": "18816cea651354ee48c89d095b3c0e4049b4185ee96429b4171e948a850c76dd", + "published": false + }, + { + "name": "05c-resize-manifest.json", + "bytes": 253, + "sha256": "1441247fb434fa558bb4671086f2283f400015c718f70e3e6b6d65ac46abda8a", + "published": false + }, + { + "name": "06-final-ctest-exit.json", + "bytes": 145, + "sha256": "e879f392d92fcc60a1b91e841efe8f3cda478522a5292e17046cc30c78566077", + "published": false + }, + { + "name": "06-final-ctest.log", + "bytes": 166507, + "sha256": "fa53e3889cd36c8e6bc1efd02060ad46f2eae8e19523055d387367cf3a0573d3", + "published": false + }, + { + "name": "07-post-run.json", + "bytes": 184, + "sha256": "47617063b9de250a5f63b8c252192ca714e52370468a124ea1205e0477f67bfa", + "published": false + }, + { + "name": "08-resize-runtime-package.json", + "bytes": 6611, + "sha256": "44b040dea3912d7a37325f9b696767f338a8f58eb1e544b0db9e0ff3a5fe2edc", + "published": false + } + ], + "limitations": [ + "New source windows-plugin verification remains pending; offscreen does not resolve the original native failure", + "Clipped large child tests widget grid resource bounds, not complete physical presentation", + "Existing unknown target resize/reflow/history and #29/#31/R2 limits remain unchanged", + "No original behavior, physical presentation, cross-DPI or performance acceptance" + ] +} diff --git a/experiments/shell/results/2026-10-29-qt-resize/product-runtime.json b/experiments/shell/results/2026-10-29-qt-resize/product-runtime.json new file mode 100644 index 00000000..d32440c8 --- /dev/null +++ b/experiments/shell/results/2026-10-29-qt-resize/product-runtime.json @@ -0,0 +1,157 @@ +{ + "schema": "termforge-windows-runtime-v1", + "executable": "termforge_qt_shell.exe", + "architecture": "windows-x64", + "msvc_runtime_version": "14.51.36247.0", + "msvc_runtime_manifest_sha256": "154176c8b4ae6dd57fce453e2c2002ff484344b39451fa9880b07db4794f3758", + "files": { + "D3Dcompiler_47.dll": { + "bytes": 4669440, + "sha256": "0f89c19165fd83a05e39bea601a06007e6a8814d55e2adf913902926231f843e" + }, + "LICENSE-MICROSOFT-VC-REDIST.docx": { + "bytes": 39553, + "sha256": "08651651a7602fc7c0e2763de0fde1ff9f868df2780597cd1775ee9d6441c783" + }, + "NOTICE.txt": { + "bytes": 563, + "sha256": "510781c94971ea19adae55d2c42207d942b0646deee29d5c401f189cc25d415f" + }, + "Qt6Core.dll": { + "bytes": 10250040, + "sha256": "b712b4754588e89f855dc0aa087d6304b2fd21b0e0639d1cdeb9cb969bd5fb72" + }, + "Qt6Gui.dll": { + "bytes": 9514296, + "sha256": "03ba47a2025036a04f5548bce242788ac21edf551e78d5b42e1b87beb799904f" + }, + "Qt6Network.dll": { + "bytes": 1773880, + "sha256": "203f8ddf83c015ce56752ebe7a1986472be7dbb95c20e13ac8e1d741d9ac93d1" + }, + "Qt6Widgets.dll": { + "bytes": 6577464, + "sha256": "61ddd0316a731b8dbabaf2924cd0d47b756461e37329b4f535902cf450416127" + }, + "assets/fonts/OFL.txt": { + "bytes": 4395, + "sha256": "50ab8dd54680d3473f649c9db86fece88434d097c7834475c1c72d2f8c429215" + }, + "assets/fonts/README.md": { + "bytes": 3091, + "sha256": "760a714ad011733e0b93f3c25298190ff5fa493a9e40ad38d347922a355d538f" + }, + "assets/fonts/RobotoMono-Regular.ttf": { + "bytes": 125748, + "sha256": "af0bff7599c3df3831755c16e39b3c496df74b8c8d8a1161b14dc8461be17cb4" + }, + "concrt140.dll": { + "bytes": 374200, + "sha256": "54716f0738af891f283d213b5c8d11b25896bb8ee3097d301eae718560cf974e" + }, + "conpty-backend/LICENSE": { + "bytes": 1095, + "sha256": "ad0cf28f3381ca9bb0bf101d127402d44c17bfa0991e1a00bff7ae6679e9dada" + }, + "conpty-backend/OpenConsole.exe": { + "bytes": 1089376, + "sha256": "3d66b23d0a71bb8eed2b77edc8b9df9bf54ce6c8fb74c863a30e760997f80586" + }, + "conpty-backend/conpty.dll": { + "bytes": 119608, + "sha256": "feeef341d891643c62d30b6b07800bc70f0bc148f44cb8c3bee84aa557ae805a" + }, + "conpty-backend/manifest.json": { + "bytes": 1467, + "sha256": "e75e522a3355c0a66c6d60cafa02413a83d8757262747f650b77c959c09ed439" + }, + "dxcompiler.dll": { + "bytes": 14019128, + "sha256": "2bc16dc5ec85315f89e2f10a482d46dde94a65d6b2d7077f4c49c77e10222acc" + }, + "dxil.dll": { + "bytes": 1502760, + "sha256": "0e90c12c1c6aa1e09d025322a815f9dd80da7d1e331f1df585c7fcbbf44b40d3" + }, + "generic/qtuiotouchplugin.dll": { + "bytes": 102712, + "sha256": "69498d05870aa583c31159f9350e3d8a598b895f6525de7b6fa382395ad27b9d" + }, + "icuuc.dll": { + "bytes": 36864, + "sha256": "59d134ddc15ae0594f0a328979f8201662fc82634ddb7c537b156e7cf871f5eb" + }, + "imageformats/qgif.dll": { + "bytes": 47928, + "sha256": "ded464ef782f41862f391bc5b21c54d58f6aee670fc9f10a2d909ae5b0ba09a7" + }, + "imageformats/qico.dll": { + "bytes": 45880, + "sha256": "0c2abdf95d778bfed9863b8be817dc6cffe2dacdd1a85b2117b4b4ccb1a08e66" + }, + "imageformats/qjpeg.dll": { + "bytes": 577848, + "sha256": "cd965015cce4638361d7bc01193d92a041a227d46d0759ec25d2a1a8608a6b40" + }, + "msvcp140.dll": { + "bytes": 643512, + "sha256": "7c26614e1d733892c2deac7e245ce115504b1d80592dd0a01b08e3e5a55f89ca" + }, + "msvcp140_1.dll": { + "bytes": 35768, + "sha256": "206c931bf90fdad8816de3b5e2ef80b2bcaa9406c89ecc05fe6fddffe251e982" + }, + "msvcp140_2.dll": { + "bytes": 274872, + "sha256": "d50d7883f20d1dc6191768d3746f52dd9cac89c346ffaed5be1f110c2f34a838" + }, + "msvcp140_atomic_wait.dll": { + "bytes": 57792, + "sha256": "3d0cbfaa1bf3eecf5a3f4491d2960ee803cb994f30292c6adc4a07c498f60e2b" + }, + "msvcp140_codecvt_ids.dll": { + "bytes": 31160, + "sha256": "8a65c7596ef2e6938731f5a1058e7e40145b6d97967cc649231a076b9a608d78" + }, + "networkinformation/qnetworklistmanager.dll": { + "bytes": 70968, + "sha256": "4bc26d5b613c507634fd10f07fe031fcbd4f02157d23b9eb1407de4dd6da8278" + }, + "platforms/qwindows.dll": { + "bytes": 997688, + "sha256": "cafd5bfdef3d89d176ee26725c8d4759fd6cb007645b645a4cbf6386364a3f36" + }, + "styles/qmodernwindowsstyle.dll": { + "bytes": 221496, + "sha256": "c279e7a97b21fcd7acdfde88cacb8baa119f563282e09c241acb3edee2bc9bbf" + }, + "termforge_qt_shell.exe": { + "bytes": 158720, + "sha256": "725cc65c22f92b048c3d7630399a302d046b0d8260cfdbb2c4e2ad47b040b3a2" + }, + "tls/qcertonlybackend.dll": { + "bytes": 103224, + "sha256": "99d00b37bb2835c539366e4018a58e0ddad21e1c648a3f44f56335a0c1d34765" + }, + "tls/qschannelbackend.dll": { + "bytes": 262968, + "sha256": "b7035c3689b93f55b48112c3e85cf4b8550fefde3f7a044df2784c29330e6940" + }, + "vccorlib140.dll": { + "bytes": 350648, + "sha256": "09f93d5ff96ae09767f3e1af3cdd43a5a58f2598654fc63089429bb6f9f4737f" + }, + "vcruntime140.dll": { + "bytes": 178616, + "sha256": "d1f4225df2cd877dbf130d5668a021dce3f94118455ff5ec952061c30afc9ce7" + }, + "vcruntime140_1.dll": { + "bytes": 50112, + "sha256": "a7146c08f89fe5b04541ab507cdb59ff7b44534d4ba3c668a426c6450a03434e" + }, + "vcruntime140_threads.dll": { + "bytes": 38840, + "sha256": "40f39e8cee5f5a531b4010e18b807e8fe265b908dc58f959ecb7ebc6ea6cb11a" + } + } +} diff --git a/experiments/shell/results/2026-10-29-qt-resize/resize-child-region-runtime.json b/experiments/shell/results/2026-10-29-qt-resize/resize-child-region-runtime.json new file mode 100644 index 00000000..eadf1125 --- /dev/null +++ b/experiments/shell/results/2026-10-29-qt-resize/resize-child-region-runtime.json @@ -0,0 +1,165 @@ +{ + "schema": "termforge-windows-runtime-v1", + "executable": "qt_cpp_resize_smoke.exe", + "architecture": "windows-x64", + "msvc_runtime_version": "14.51.36247.0", + "msvc_runtime_manifest_sha256": "154176c8b4ae6dd57fce453e2c2002ff484344b39451fa9880b07db4794f3758", + "files": { + "D3Dcompiler_47.dll": { + "bytes": 4669440, + "sha256": "0f89c19165fd83a05e39bea601a06007e6a8814d55e2adf913902926231f843e" + }, + "LICENSE-MICROSOFT-VC-REDIST.docx": { + "bytes": 39553, + "sha256": "08651651a7602fc7c0e2763de0fde1ff9f868df2780597cd1775ee9d6441c783" + }, + "NOTICE.txt": { + "bytes": 563, + "sha256": "510781c94971ea19adae55d2c42207d942b0646deee29d5c401f189cc25d415f" + }, + "Qt6Core.dll": { + "bytes": 10250040, + "sha256": "b712b4754588e89f855dc0aa087d6304b2fd21b0e0639d1cdeb9cb969bd5fb72" + }, + "Qt6Gui.dll": { + "bytes": 9514296, + "sha256": "03ba47a2025036a04f5548bce242788ac21edf551e78d5b42e1b87beb799904f" + }, + "Qt6Network.dll": { + "bytes": 1773880, + "sha256": "203f8ddf83c015ce56752ebe7a1986472be7dbb95c20e13ac8e1d741d9ac93d1" + }, + "Qt6Test.dll": { + "bytes": 380216, + "sha256": "9d0473552b332aa378c60da05af97d741fcce06b0fc4dd68e36d885015eb5187" + }, + "Qt6Widgets.dll": { + "bytes": 6577464, + "sha256": "61ddd0316a731b8dbabaf2924cd0d47b756461e37329b4f535902cf450416127" + }, + "assets/fonts/OFL.txt": { + "bytes": 4395, + "sha256": "50ab8dd54680d3473f649c9db86fece88434d097c7834475c1c72d2f8c429215" + }, + "assets/fonts/README.md": { + "bytes": 3091, + "sha256": "760a714ad011733e0b93f3c25298190ff5fa493a9e40ad38d347922a355d538f" + }, + "assets/fonts/RobotoMono-Regular.ttf": { + "bytes": 125748, + "sha256": "af0bff7599c3df3831755c16e39b3c496df74b8c8d8a1161b14dc8461be17cb4" + }, + "concrt140.dll": { + "bytes": 374200, + "sha256": "54716f0738af891f283d213b5c8d11b25896bb8ee3097d301eae718560cf974e" + }, + "conpty-backend/LICENSE": { + "bytes": 1095, + "sha256": "ad0cf28f3381ca9bb0bf101d127402d44c17bfa0991e1a00bff7ae6679e9dada" + }, + "conpty-backend/OpenConsole.exe": { + "bytes": 1089376, + "sha256": "3d66b23d0a71bb8eed2b77edc8b9df9bf54ce6c8fb74c863a30e760997f80586" + }, + "conpty-backend/conpty.dll": { + "bytes": 119608, + "sha256": "feeef341d891643c62d30b6b07800bc70f0bc148f44cb8c3bee84aa557ae805a" + }, + "conpty-backend/manifest.json": { + "bytes": 1467, + "sha256": "e75e522a3355c0a66c6d60cafa02413a83d8757262747f650b77c959c09ed439" + }, + "dxcompiler.dll": { + "bytes": 14019128, + "sha256": "2bc16dc5ec85315f89e2f10a482d46dde94a65d6b2d7077f4c49c77e10222acc" + }, + "dxil.dll": { + "bytes": 1502760, + "sha256": "0e90c12c1c6aa1e09d025322a815f9dd80da7d1e331f1df585c7fcbbf44b40d3" + }, + "generic/qtuiotouchplugin.dll": { + "bytes": 102712, + "sha256": "69498d05870aa583c31159f9350e3d8a598b895f6525de7b6fa382395ad27b9d" + }, + "icuuc.dll": { + "bytes": 36864, + "sha256": "59d134ddc15ae0594f0a328979f8201662fc82634ddb7c537b156e7cf871f5eb" + }, + "imageformats/qgif.dll": { + "bytes": 47928, + "sha256": "ded464ef782f41862f391bc5b21c54d58f6aee670fc9f10a2d909ae5b0ba09a7" + }, + "imageformats/qico.dll": { + "bytes": 45880, + "sha256": "0c2abdf95d778bfed9863b8be817dc6cffe2dacdd1a85b2117b4b4ccb1a08e66" + }, + "imageformats/qjpeg.dll": { + "bytes": 577848, + "sha256": "cd965015cce4638361d7bc01193d92a041a227d46d0759ec25d2a1a8608a6b40" + }, + "msvcp140.dll": { + "bytes": 643512, + "sha256": "7c26614e1d733892c2deac7e245ce115504b1d80592dd0a01b08e3e5a55f89ca" + }, + "msvcp140_1.dll": { + "bytes": 35768, + "sha256": "206c931bf90fdad8816de3b5e2ef80b2bcaa9406c89ecc05fe6fddffe251e982" + }, + "msvcp140_2.dll": { + "bytes": 274872, + "sha256": "d50d7883f20d1dc6191768d3746f52dd9cac89c346ffaed5be1f110c2f34a838" + }, + "msvcp140_atomic_wait.dll": { + "bytes": 57792, + "sha256": "3d0cbfaa1bf3eecf5a3f4491d2960ee803cb994f30292c6adc4a07c498f60e2b" + }, + "msvcp140_codecvt_ids.dll": { + "bytes": 31160, + "sha256": "8a65c7596ef2e6938731f5a1058e7e40145b6d97967cc649231a076b9a608d78" + }, + "networkinformation/qnetworklistmanager.dll": { + "bytes": 70968, + "sha256": "4bc26d5b613c507634fd10f07fe031fcbd4f02157d23b9eb1407de4dd6da8278" + }, + "platforms/qoffscreen.dll": { + "bytes": 113976, + "sha256": "a35f87f597b91121cfc0ef39dcb0a5e7ad2876850fbfaf6377edf80eaa067bfd" + }, + "platforms/qwindows.dll": { + "bytes": 997688, + "sha256": "cafd5bfdef3d89d176ee26725c8d4759fd6cb007645b645a4cbf6386364a3f36" + }, + "qt_cpp_resize_smoke.exe": { + "bytes": 216064, + "sha256": "2a7450c79d5181137d65d11cd4737bdedfb4d83205252c405bcac380e4799e33" + }, + "styles/qmodernwindowsstyle.dll": { + "bytes": 221496, + "sha256": "c279e7a97b21fcd7acdfde88cacb8baa119f563282e09c241acb3edee2bc9bbf" + }, + "tls/qcertonlybackend.dll": { + "bytes": 103224, + "sha256": "99d00b37bb2835c539366e4018a58e0ddad21e1c648a3f44f56335a0c1d34765" + }, + "tls/qschannelbackend.dll": { + "bytes": 262968, + "sha256": "b7035c3689b93f55b48112c3e85cf4b8550fefde3f7a044df2784c29330e6940" + }, + "vccorlib140.dll": { + "bytes": 350648, + "sha256": "09f93d5ff96ae09767f3e1af3cdd43a5a58f2598654fc63089429bb6f9f4737f" + }, + "vcruntime140.dll": { + "bytes": 178616, + "sha256": "d1f4225df2cd877dbf130d5668a021dce3f94118455ff5ec952061c30afc9ce7" + }, + "vcruntime140_1.dll": { + "bytes": 50112, + "sha256": "a7146c08f89fe5b04541ab507cdb59ff7b44534d4ba3c668a426c6450a03434e" + }, + "vcruntime140_threads.dll": { + "bytes": 38840, + "sha256": "40f39e8cee5f5a531b4010e18b807e8fe265b908dc58f959ecb7ebc6ea6cb11a" + } + } +} diff --git a/experiments/shell/results/2026-10-29-qt-resize/resize-smoke-runtime.json b/experiments/shell/results/2026-10-29-qt-resize/resize-smoke-runtime.json new file mode 100644 index 00000000..41b62b60 --- /dev/null +++ b/experiments/shell/results/2026-10-29-qt-resize/resize-smoke-runtime.json @@ -0,0 +1,165 @@ +{ + "schema": "termforge-windows-runtime-v1", + "executable": "qt_cpp_resize_smoke.exe", + "architecture": "windows-x64", + "msvc_runtime_version": "14.51.36247.0", + "msvc_runtime_manifest_sha256": "154176c8b4ae6dd57fce453e2c2002ff484344b39451fa9880b07db4794f3758", + "files": { + "D3Dcompiler_47.dll": { + "bytes": 4669440, + "sha256": "0f89c19165fd83a05e39bea601a06007e6a8814d55e2adf913902926231f843e" + }, + "LICENSE-MICROSOFT-VC-REDIST.docx": { + "bytes": 39553, + "sha256": "08651651a7602fc7c0e2763de0fde1ff9f868df2780597cd1775ee9d6441c783" + }, + "NOTICE.txt": { + "bytes": 563, + "sha256": "510781c94971ea19adae55d2c42207d942b0646deee29d5c401f189cc25d415f" + }, + "Qt6Core.dll": { + "bytes": 10250040, + "sha256": "b712b4754588e89f855dc0aa087d6304b2fd21b0e0639d1cdeb9cb969bd5fb72" + }, + "Qt6Gui.dll": { + "bytes": 9514296, + "sha256": "03ba47a2025036a04f5548bce242788ac21edf551e78d5b42e1b87beb799904f" + }, + "Qt6Network.dll": { + "bytes": 1773880, + "sha256": "203f8ddf83c015ce56752ebe7a1986472be7dbb95c20e13ac8e1d741d9ac93d1" + }, + "Qt6Test.dll": { + "bytes": 380216, + "sha256": "9d0473552b332aa378c60da05af97d741fcce06b0fc4dd68e36d885015eb5187" + }, + "Qt6Widgets.dll": { + "bytes": 6577464, + "sha256": "61ddd0316a731b8dbabaf2924cd0d47b756461e37329b4f535902cf450416127" + }, + "assets/fonts/OFL.txt": { + "bytes": 4395, + "sha256": "50ab8dd54680d3473f649c9db86fece88434d097c7834475c1c72d2f8c429215" + }, + "assets/fonts/README.md": { + "bytes": 3091, + "sha256": "760a714ad011733e0b93f3c25298190ff5fa493a9e40ad38d347922a355d538f" + }, + "assets/fonts/RobotoMono-Regular.ttf": { + "bytes": 125748, + "sha256": "af0bff7599c3df3831755c16e39b3c496df74b8c8d8a1161b14dc8461be17cb4" + }, + "concrt140.dll": { + "bytes": 374200, + "sha256": "54716f0738af891f283d213b5c8d11b25896bb8ee3097d301eae718560cf974e" + }, + "conpty-backend/LICENSE": { + "bytes": 1095, + "sha256": "ad0cf28f3381ca9bb0bf101d127402d44c17bfa0991e1a00bff7ae6679e9dada" + }, + "conpty-backend/OpenConsole.exe": { + "bytes": 1089376, + "sha256": "3d66b23d0a71bb8eed2b77edc8b9df9bf54ce6c8fb74c863a30e760997f80586" + }, + "conpty-backend/conpty.dll": { + "bytes": 119608, + "sha256": "feeef341d891643c62d30b6b07800bc70f0bc148f44cb8c3bee84aa557ae805a" + }, + "conpty-backend/manifest.json": { + "bytes": 1467, + "sha256": "e75e522a3355c0a66c6d60cafa02413a83d8757262747f650b77c959c09ed439" + }, + "dxcompiler.dll": { + "bytes": 14019128, + "sha256": "2bc16dc5ec85315f89e2f10a482d46dde94a65d6b2d7077f4c49c77e10222acc" + }, + "dxil.dll": { + "bytes": 1502760, + "sha256": "0e90c12c1c6aa1e09d025322a815f9dd80da7d1e331f1df585c7fcbbf44b40d3" + }, + "generic/qtuiotouchplugin.dll": { + "bytes": 102712, + "sha256": "69498d05870aa583c31159f9350e3d8a598b895f6525de7b6fa382395ad27b9d" + }, + "icuuc.dll": { + "bytes": 36864, + "sha256": "59d134ddc15ae0594f0a328979f8201662fc82634ddb7c537b156e7cf871f5eb" + }, + "imageformats/qgif.dll": { + "bytes": 47928, + "sha256": "ded464ef782f41862f391bc5b21c54d58f6aee670fc9f10a2d909ae5b0ba09a7" + }, + "imageformats/qico.dll": { + "bytes": 45880, + "sha256": "0c2abdf95d778bfed9863b8be817dc6cffe2dacdd1a85b2117b4b4ccb1a08e66" + }, + "imageformats/qjpeg.dll": { + "bytes": 577848, + "sha256": "cd965015cce4638361d7bc01193d92a041a227d46d0759ec25d2a1a8608a6b40" + }, + "msvcp140.dll": { + "bytes": 643512, + "sha256": "7c26614e1d733892c2deac7e245ce115504b1d80592dd0a01b08e3e5a55f89ca" + }, + "msvcp140_1.dll": { + "bytes": 35768, + "sha256": "206c931bf90fdad8816de3b5e2ef80b2bcaa9406c89ecc05fe6fddffe251e982" + }, + "msvcp140_2.dll": { + "bytes": 274872, + "sha256": "d50d7883f20d1dc6191768d3746f52dd9cac89c346ffaed5be1f110c2f34a838" + }, + "msvcp140_atomic_wait.dll": { + "bytes": 57792, + "sha256": "3d0cbfaa1bf3eecf5a3f4491d2960ee803cb994f30292c6adc4a07c498f60e2b" + }, + "msvcp140_codecvt_ids.dll": { + "bytes": 31160, + "sha256": "8a65c7596ef2e6938731f5a1058e7e40145b6d97967cc649231a076b9a608d78" + }, + "networkinformation/qnetworklistmanager.dll": { + "bytes": 70968, + "sha256": "4bc26d5b613c507634fd10f07fe031fcbd4f02157d23b9eb1407de4dd6da8278" + }, + "platforms/qoffscreen.dll": { + "bytes": 113976, + "sha256": "a35f87f597b91121cfc0ef39dcb0a5e7ad2876850fbfaf6377edf80eaa067bfd" + }, + "platforms/qwindows.dll": { + "bytes": 997688, + "sha256": "cafd5bfdef3d89d176ee26725c8d4759fd6cb007645b645a4cbf6386364a3f36" + }, + "qt_cpp_resize_smoke.exe": { + "bytes": 210944, + "sha256": "61e958535fb89724cadeeeb5df4538a8f31e91a442a2ba920e47fd85ee7f624a" + }, + "styles/qmodernwindowsstyle.dll": { + "bytes": 221496, + "sha256": "c279e7a97b21fcd7acdfde88cacb8baa119f563282e09c241acb3edee2bc9bbf" + }, + "tls/qcertonlybackend.dll": { + "bytes": 103224, + "sha256": "99d00b37bb2835c539366e4018a58e0ddad21e1c648a3f44f56335a0c1d34765" + }, + "tls/qschannelbackend.dll": { + "bytes": 262968, + "sha256": "b7035c3689b93f55b48112c3e85cf4b8550fefde3f7a044df2784c29330e6940" + }, + "vccorlib140.dll": { + "bytes": 350648, + "sha256": "09f93d5ff96ae09767f3e1af3cdd43a5a58f2598654fc63089429bb6f9f4737f" + }, + "vcruntime140.dll": { + "bytes": 178616, + "sha256": "d1f4225df2cd877dbf130d5668a021dce3f94118455ff5ec952061c30afc9ce7" + }, + "vcruntime140_1.dll": { + "bytes": 50112, + "sha256": "a7146c08f89fe5b04541ab507cdb59ff7b44534d4ba3c668a426c6450a03434e" + }, + "vcruntime140_threads.dll": { + "bytes": 38840, + "sha256": "40f39e8cee5f5a531b4010e18b807e8fe265b908dc58f959ecb7ebc6ea6cb11a" + } + } +} diff --git a/experiments/shell/results/2026-10-29-qt-resize/shell-smoke-runtime.json b/experiments/shell/results/2026-10-29-qt-resize/shell-smoke-runtime.json new file mode 100644 index 00000000..abeafaa5 --- /dev/null +++ b/experiments/shell/results/2026-10-29-qt-resize/shell-smoke-runtime.json @@ -0,0 +1,165 @@ +{ + "schema": "termforge-windows-runtime-v1", + "executable": "qt_cpp_shell_smoke.exe", + "architecture": "windows-x64", + "msvc_runtime_version": "14.51.36247.0", + "msvc_runtime_manifest_sha256": "154176c8b4ae6dd57fce453e2c2002ff484344b39451fa9880b07db4794f3758", + "files": { + "D3Dcompiler_47.dll": { + "bytes": 4669440, + "sha256": "0f89c19165fd83a05e39bea601a06007e6a8814d55e2adf913902926231f843e" + }, + "LICENSE-MICROSOFT-VC-REDIST.docx": { + "bytes": 39553, + "sha256": "08651651a7602fc7c0e2763de0fde1ff9f868df2780597cd1775ee9d6441c783" + }, + "NOTICE.txt": { + "bytes": 563, + "sha256": "510781c94971ea19adae55d2c42207d942b0646deee29d5c401f189cc25d415f" + }, + "Qt6Core.dll": { + "bytes": 10250040, + "sha256": "b712b4754588e89f855dc0aa087d6304b2fd21b0e0639d1cdeb9cb969bd5fb72" + }, + "Qt6Gui.dll": { + "bytes": 9514296, + "sha256": "03ba47a2025036a04f5548bce242788ac21edf551e78d5b42e1b87beb799904f" + }, + "Qt6Network.dll": { + "bytes": 1773880, + "sha256": "203f8ddf83c015ce56752ebe7a1986472be7dbb95c20e13ac8e1d741d9ac93d1" + }, + "Qt6Test.dll": { + "bytes": 380216, + "sha256": "9d0473552b332aa378c60da05af97d741fcce06b0fc4dd68e36d885015eb5187" + }, + "Qt6Widgets.dll": { + "bytes": 6577464, + "sha256": "61ddd0316a731b8dbabaf2924cd0d47b756461e37329b4f535902cf450416127" + }, + "assets/fonts/OFL.txt": { + "bytes": 4395, + "sha256": "50ab8dd54680d3473f649c9db86fece88434d097c7834475c1c72d2f8c429215" + }, + "assets/fonts/README.md": { + "bytes": 3091, + "sha256": "760a714ad011733e0b93f3c25298190ff5fa493a9e40ad38d347922a355d538f" + }, + "assets/fonts/RobotoMono-Regular.ttf": { + "bytes": 125748, + "sha256": "af0bff7599c3df3831755c16e39b3c496df74b8c8d8a1161b14dc8461be17cb4" + }, + "concrt140.dll": { + "bytes": 374200, + "sha256": "54716f0738af891f283d213b5c8d11b25896bb8ee3097d301eae718560cf974e" + }, + "conpty-backend/LICENSE": { + "bytes": 1095, + "sha256": "ad0cf28f3381ca9bb0bf101d127402d44c17bfa0991e1a00bff7ae6679e9dada" + }, + "conpty-backend/OpenConsole.exe": { + "bytes": 1089376, + "sha256": "3d66b23d0a71bb8eed2b77edc8b9df9bf54ce6c8fb74c863a30e760997f80586" + }, + "conpty-backend/conpty.dll": { + "bytes": 119608, + "sha256": "feeef341d891643c62d30b6b07800bc70f0bc148f44cb8c3bee84aa557ae805a" + }, + "conpty-backend/manifest.json": { + "bytes": 1467, + "sha256": "e75e522a3355c0a66c6d60cafa02413a83d8757262747f650b77c959c09ed439" + }, + "dxcompiler.dll": { + "bytes": 14019128, + "sha256": "2bc16dc5ec85315f89e2f10a482d46dde94a65d6b2d7077f4c49c77e10222acc" + }, + "dxil.dll": { + "bytes": 1502760, + "sha256": "0e90c12c1c6aa1e09d025322a815f9dd80da7d1e331f1df585c7fcbbf44b40d3" + }, + "generic/qtuiotouchplugin.dll": { + "bytes": 102712, + "sha256": "69498d05870aa583c31159f9350e3d8a598b895f6525de7b6fa382395ad27b9d" + }, + "icuuc.dll": { + "bytes": 36864, + "sha256": "59d134ddc15ae0594f0a328979f8201662fc82634ddb7c537b156e7cf871f5eb" + }, + "imageformats/qgif.dll": { + "bytes": 47928, + "sha256": "ded464ef782f41862f391bc5b21c54d58f6aee670fc9f10a2d909ae5b0ba09a7" + }, + "imageformats/qico.dll": { + "bytes": 45880, + "sha256": "0c2abdf95d778bfed9863b8be817dc6cffe2dacdd1a85b2117b4b4ccb1a08e66" + }, + "imageformats/qjpeg.dll": { + "bytes": 577848, + "sha256": "cd965015cce4638361d7bc01193d92a041a227d46d0759ec25d2a1a8608a6b40" + }, + "msvcp140.dll": { + "bytes": 643512, + "sha256": "7c26614e1d733892c2deac7e245ce115504b1d80592dd0a01b08e3e5a55f89ca" + }, + "msvcp140_1.dll": { + "bytes": 35768, + "sha256": "206c931bf90fdad8816de3b5e2ef80b2bcaa9406c89ecc05fe6fddffe251e982" + }, + "msvcp140_2.dll": { + "bytes": 274872, + "sha256": "d50d7883f20d1dc6191768d3746f52dd9cac89c346ffaed5be1f110c2f34a838" + }, + "msvcp140_atomic_wait.dll": { + "bytes": 57792, + "sha256": "3d0cbfaa1bf3eecf5a3f4491d2960ee803cb994f30292c6adc4a07c498f60e2b" + }, + "msvcp140_codecvt_ids.dll": { + "bytes": 31160, + "sha256": "8a65c7596ef2e6938731f5a1058e7e40145b6d97967cc649231a076b9a608d78" + }, + "networkinformation/qnetworklistmanager.dll": { + "bytes": 70968, + "sha256": "4bc26d5b613c507634fd10f07fe031fcbd4f02157d23b9eb1407de4dd6da8278" + }, + "platforms/qoffscreen.dll": { + "bytes": 113976, + "sha256": "a35f87f597b91121cfc0ef39dcb0a5e7ad2876850fbfaf6377edf80eaa067bfd" + }, + "platforms/qwindows.dll": { + "bytes": 997688, + "sha256": "cafd5bfdef3d89d176ee26725c8d4759fd6cb007645b645a4cbf6386364a3f36" + }, + "qt_cpp_shell_smoke.exe": { + "bytes": 214528, + "sha256": "9f29e1d743aabc34edd34fb397d93771b33c3581449ba863262367d3fa70919c" + }, + "styles/qmodernwindowsstyle.dll": { + "bytes": 221496, + "sha256": "c279e7a97b21fcd7acdfde88cacb8baa119f563282e09c241acb3edee2bc9bbf" + }, + "tls/qcertonlybackend.dll": { + "bytes": 103224, + "sha256": "99d00b37bb2835c539366e4018a58e0ddad21e1c648a3f44f56335a0c1d34765" + }, + "tls/qschannelbackend.dll": { + "bytes": 262968, + "sha256": "b7035c3689b93f55b48112c3e85cf4b8550fefde3f7a044df2784c29330e6940" + }, + "vccorlib140.dll": { + "bytes": 350648, + "sha256": "09f93d5ff96ae09767f3e1af3cdd43a5a58f2598654fc63089429bb6f9f4737f" + }, + "vcruntime140.dll": { + "bytes": 178616, + "sha256": "d1f4225df2cd877dbf130d5668a021dce3f94118455ff5ec952061c30afc9ce7" + }, + "vcruntime140_1.dll": { + "bytes": 50112, + "sha256": "a7146c08f89fe5b04541ab507cdb59ff7b44534d4ba3c668a426c6450a03434e" + }, + "vcruntime140_threads.dll": { + "bytes": 38840, + "sha256": "40f39e8cee5f5a531b4010e18b807e8fe265b908dc58f959ecb7ebc6ea6cb11a" + } + } +} diff --git a/experiments/shell/results/2026-10-29-qt-resize/validation.json b/experiments/shell/results/2026-10-29-qt-resize/validation.json new file mode 100644 index 00000000..236bdc1a --- /dev/null +++ b/experiments/shell/results/2026-10-29-qt-resize/validation.json @@ -0,0 +1,4149 @@ +{ + "schema": "termforge-qt-resize-validation-v1", + "issue": 143, + "parent_issue": 29, + "status": "limited_dynamic_grid_and_real_child_size_verified_full_R2_incomplete", + "source": { + "implementation_commit": "678299d54454e26ac04ef6d1c46237ab6b33752b", + "implementation_tree": "fed25085f02ac7455072601a3e8bfbfd1cc00f7e", + "initial_base": "730404de3d6d59dd139fb8d669ad194ee6ccb218", + "merged_main": "4d7bd8a7c822135b1fdee5935262af3205ee565f", + "clean_at_freeze": true, + "selected_file_identities": [ + { + "path": "CMakeLists.txt", + "bytes": 25519, + "sha256": "97b8c3bb607e19819ade1c726f07923023384f5165952372f09fb6845b60ba77" + }, + { + "path": ".github/workflows/qt-cpp.yml", + "bytes": 3424, + "sha256": "6001c95d6f8baaf90f104107b7051adc7fb1088aad03339539be0486d37ed14c" + }, + { + "path": "src/qt/terminal_session.hpp", + "bytes": 13989, + "sha256": "ea2139d4430da528ce1f1498640c8b4afed6559d9a66a67b3e67f1a017d85468" + }, + { + "path": "src/qt/terminal_widget.hpp", + "bytes": 8118, + "sha256": "ca81e611cefec1ead3609a8af84ad415c77f60c650c6f5a9988cc4767ab6949b" + }, + { + "path": "src/qt/session_tabs.hpp", + "bytes": 6998, + "sha256": "db6008517b7a859a6e05f25e2f783e1110fcc9b0ed35065bbabac40ecf56afcd" + }, + { + "path": "src/qt/resize_smoke.cpp", + "bytes": 26052, + "sha256": "b50435e9f03b4ffb6537642e165a53478244e676137cf060925a5fef5c9a492f" + }, + { + "path": "src/qt/resize_fixture.hpp", + "bytes": 10084, + "sha256": "a855779e06b45b2c68daf413108172ee2d51bcb75fd55911263505d7dc6be300" + }, + { + "path": "src/qt/shell_smoke.cpp", + "bytes": 25287, + "sha256": "86022250a4c5d50824e112d6748c56bb549cb055c0737288f8a3c88f3733c8d0" + }, + { + "path": "src/qt/run_smoke.py", + "bytes": 4287, + "sha256": "25f4d6adec4e9bfad77698300c44d9162511ac1ebb722993d5a52cdb8a863983" + }, + { + "path": "experiments/conpty/session.hpp", + "bytes": 11072, + "sha256": "7b3934715948a05c1996bcccb02ef2eb58ea11baf26bf97c2e728a52d58becda" + }, + { + "path": "experiments/conpty/backend.hpp", + "bytes": 6815, + "sha256": "5ee3ab95dc4b9aefce23ff7900cda2ecdd9cd09d1b1044074de2f5e572c31489" + }, + { + "path": "experiments/shell/queues.hpp", + "bytes": 7224, + "sha256": "9087944a7749176789a489bce0522c55764461342b59c138611743b6947845b6" + }, + { + "path": "experiments/core/screen.hpp", + "bytes": 17242, + "sha256": "04c19f09ebc0c468efbef8dd4c9da8f4bcd44e94000a87c56239756c0df1b474" + }, + { + "path": "experiments/core/terminal.hpp", + "bytes": 12270, + "sha256": "ed3c030611a6df38df26057a8c2834f2808cd05306e73aead79927b1f76fe5ca" + }, + { + "path": "tools/prepare_qt_build.py", + "bytes": 12912, + "sha256": "1e89ff4340cfbab5edd7d45e9637fcd34ab98f0bac19061d053efa0f23ef37b3" + }, + { + "path": "tools/msvc_runtime.py", + "bytes": 8085, + "sha256": "24c78545bf0da2c6ba67c0a4e0ba266088c34a5078757ccbe851a9d8666de6d1" + }, + { + "path": "third_party/qt/manifest.json", + "bytes": 5806, + "sha256": "2796294f254f7fe0370be99d2de8f7745734c7352ac2648b1f8d9a8fab5ad2cd" + }, + { + "path": "third_party/conpty/manifest.json", + "bytes": 1467, + "sha256": "e75e522a3355c0a66c6d60cafa02413a83d8757262747f650b77c959c09ed439" + }, + { + "path": "third_party/msvc_runtime/manifest.json", + "bytes": 4123, + "sha256": "154176c8b4ae6dd57fce453e2c2002ff484344b39451fa9880b07db4794f3758" + } + ] + }, + "environment": { + "build": "Release x64", + "version": "10.0.26200", + "os": "Microsoft Windows 11 \u4e13\u4e1a\u7248", + "architecture": "AMD64", + "generator": "Visual Studio 17 2022", + "compiler_self_version": "19.42.34433.0", + "vc_tools_directory_version": "14.42.34433", + "windows_sdk": "10.0.26100.0", + "cmake": "3.31.0", + "python": "3.12.10", + "qt": "6.10.3", + "qt_platform": "offscreen", + "candidate_adapter": false, + "backend": "bundled fixed Microsoft ConPTY 1.25.260930003", + "app_local_crt": "14.51.36247.0" + }, + "preparation": { + "schema": "termforge-qt-build-preparation-v1", + "status": "passed", + "qt_version": "6.10.3", + "qt_architecture": "win64_msvc2022_64", + "qt_archive_sha256": "4db84dee7fe3c558f242bef0a88852613af76580dc6d2b24596479f47004dad7", + "input_manifests": { + "qt": "2796294f254f7fe0370be99d2de8f7745734c7352ac2648b1f8d9a8fab5ad2cd", + "conpty": "e75e522a3355c0a66c6d60cafa02413a83d8757262747f650b77c959c09ed439", + "msvc_runtime": "154176c8b4ae6dd57fce453e2c2002ff484344b39451fa9880b07db4794f3758" + }, + "preparation_script_sha256": "1e89ff4340cfbab5edd7d45e9637fcd34ab98f0bac19061d053efa0f23ef37b3", + "sdk_transformation": "bin/qt.conf contains [Paths] and Prefix=..; no binary or .prl patch", + "sdk": { + "files": 4358, + "tree_sha256": "a35ab6fe76b62e4d9bd6d3c6b0d476c63583070cea5c9118ef5bb02042ffe266" + }, + "conpty_version": "1.25.260930003", + "conpty_package_sha256": "6d6f8b008c655d814c498d8205d4012dcd4d0b6dfc1096461d0a185d1e3caf03", + "conpty_files": { + "conpty.dll": "feeef341d891643c62d30b6b07800bc70f0bc148f44cb8c3bee84aa557ae805a", + "OpenConsole.exe": "3d66b23d0a71bb8eed2b77edc8b9df9bf54ce6c8fb74c863a30e760997f80586" + }, + "msvc_runtime": { + "version": "14.51.36247.0", + "architecture": "windows-x64", + "package_sha256": "843068991daaa1f73ad9f6239bce4d0f6a07a51f18c37ea2a867e9beca71295c", + "files": { + "concrt140.dll": "54716f0738af891f283d213b5c8d11b25896bb8ee3097d301eae718560cf974e", + "msvcp140_1.dll": "206c931bf90fdad8816de3b5e2ef80b2bcaa9406c89ecc05fe6fddffe251e982", + "msvcp140_2.dll": "d50d7883f20d1dc6191768d3746f52dd9cac89c346ffaed5be1f110c2f34a838", + "msvcp140_atomic_wait.dll": "3d0cbfaa1bf3eecf5a3f4491d2960ee803cb994f30292c6adc4a07c498f60e2b", + "msvcp140_codecvt_ids.dll": "8a65c7596ef2e6938731f5a1058e7e40145b6d97967cc649231a076b9a608d78", + "msvcp140.dll": "7c26614e1d733892c2deac7e245ce115504b1d80592dd0a01b08e3e5a55f89ca", + "vccorlib140.dll": "09f93d5ff96ae09767f3e1af3cdd43a5a58f2598654fc63089429bb6f9f4737f", + "vcruntime140_1.dll": "a7146c08f89fe5b04541ab507cdb59ff7b44534d4ba3c668a426c6450a03434e", + "vcruntime140_threads.dll": "40f39e8cee5f5a531b4010e18b807e8fe265b908dc58f959ecb7ebc6ea6cb11a", + "vcruntime140.dll": "d1f4225df2cd877dbf130d5668a021dce3f94118455ff5ec952061c30afc9ce7" + }, + "license_sha256": "08651651a7602fc7c0e2763de0fde1ff9f868df2780597cd1775ee9d6441c783", + "notice_sha256": "510781c94971ea19adae55d2c42207d942b0646deee29d5c401f189cc25d415f" + }, + "scope": "Windows local/CI build inputs only; no product package or platform acceptance" + }, + "freeze": { + "schema": "termforge-qt-resize-frozen-inputs-v1", + "source_commit": "678299d54454e26ac04ef6d1c46237ab6b33752b", + "source_tree": "fed25085f02ac7455072601a3e8bfbfd1cc00f7e", + "counts": { + "source": 2781, + "qt_sdk": 4358, + "conpty_input": 2, + "crt_input": 12, + "original_archives": 4, + "product_runtime": 38, + "shell_smoke_runtime": 40, + "resize_smoke_runtime": 40, + "legacy_diagnostic_runtime": 49 + }, + "frozen_manifest": { + "bytes": 1393636, + "sha256": "067aba6db36f5780f5e48fe1053fa030d02efacd1145fd084dcb3d45461a8c8d" + } + }, + "post_run": { + "schema": "termforge-qt-resize-post-run-v1", + "status": "passed", + "source_commit": "678299d54454e26ac04ef6d1c46237ab6b33752b", + "files_checked": 7324, + "changes": [] + }, + "tdd": { + "gui_core_grid": { + "red": { + "source_commit": "cd1b0b048b734e33455562f751935d1db6c27a8b", + "raw_record": { + "name": "03-grid-red.log", + "bytes": 2054, + "sha256": "0c58aefcaf89c6e5aa058cd8ed356aa09259a1f0351b212fa96bc1b7a64cc62a", + "published": false + }, + "binary": null, + "binary_identity_gap": "Not frozen before overwrite; not reconstructed", + "observations": [ + { + "schema": "termforge-qt-resize-grid-v1", + "requested_columns": 60, + "requested_rows": 12, + "core_columns": 80, + "core_rows": 24, + "widget_width": 736, + "widget_height": 574 + }, + { + "schema": "termforge-qt-cpp-supervisor-v1", + "status": "failed", + "timed_out": false, + "exit_code": 1, + "job_after": { + "active": 0, + "total": 4, + "terminated": 0 + }, + "error": "Qt smoke failed or left owned processes active" + } + ] + }, + "green": { + "source_commit": "542d98888dd4840d933557bdedf960821825f156", + "raw_record": { + "name": "05-grid-green.log", + "bytes": 1829, + "sha256": "97854054dc3c10aaf35c0566a181231396a9feeda321ff1aadc31224cb9bd854", + "published": false + }, + "binary": null, + "binary_identity_gap": "Not frozen before overwrite; not reconstructed", + "observations": [ + { + "schema": "termforge-qt-resize-grid-v1", + "requested_columns": 60, + "requested_rows": 12, + "core_columns": 60, + "core_rows": 12, + "widget_width": 556, + "widget_height": 310 + }, + { + "schema": "termforge-qt-cpp-supervisor-v1", + "status": "passed", + "timed_out": false, + "exit_code": 0, + "job_after": { + "active": 0, + "total": 4, + "terminated": 0 + }, + "sample": { + "schema": "termforge-qt-resize-smoke-v1", + "core_columns": 60, + "core_rows": 12, + "cleanup_verified": true, + "presented_done": null + } + } + ] + }, + "scope": "Public QWidget resize and Core grid only; no native child acknowledgement in this first slice" + }, + "real_child_size": { + "red": { + "source_commit": "be1d393134fe3d364d06f038f82f7b23b4ca59cc", + "raw_record": { + "name": "07-child-red.log", + "bytes": 25014, + "sha256": "b54762600952822bc175b4b0c6ed3347c0b0eb066da64209115447ff43efaef6", + "published": false + }, + "binary": { + "name": "qt_cpp_resize_smoke.exe", + "bytes": 155136, + "sha256": "9ec56e9d20ad4817126e24039e0824fecc839fa0e94a99a1f036690b259d0093", + "published": false + }, + "binary_identity_gap": null, + "observations": [ + { + "schema": "termforge-qt-child-size-v1", + "nonce": 0, + "query_error": 0, + "buffer_columns": 80, + "buffer_rows": 24, + "window_left": 0, + "window_top": 0, + "window_right": 79, + "window_bottom": 23 + }, + { + "schema": "termforge-qt-resize-grid-v1", + "requested_columns": 60, + "requested_rows": 12, + "core_columns": 60, + "core_rows": 12, + "widget_width": 556, + "widget_height": 310 + }, + { + "schema": "termforge-qt-child-size-v1", + "nonce": 101, + "query_error": 0, + "buffer_columns": 80, + "buffer_rows": 24, + "window_left": 0, + "window_top": 0, + "window_right": 79, + "window_bottom": 23 + }, + { + "schema": "termforge-qt-child-size-v1", + "nonce": 102, + "query_error": 0, + "buffer_columns": 80, + "buffer_rows": 24, + "window_left": 0, + "window_top": 0, + "window_right": 79, + "window_bottom": 23 + }, + { + "schema": "termforge-qt-child-size-v1", + "nonce": 103, + "query_error": 0, + "buffer_columns": 80, + "buffer_rows": 24, + "window_left": 0, + "window_top": 0, + "window_right": 79, + "window_bottom": 23 + }, + { + "schema": "termforge-qt-child-size-v1", + "nonce": 104, + "query_error": 0, + "buffer_columns": 80, + "buffer_rows": 24, + "window_left": 0, + "window_top": 0, + "window_right": 79, + "window_bottom": 23 + }, + { + "schema": "termforge-qt-child-size-v1", + "nonce": 105, + "query_error": 0, + "buffer_columns": 80, + "buffer_rows": 24, + "window_left": 0, + "window_top": 0, + "window_right": 79, + "window_bottom": 23 + }, + { + "schema": "termforge-qt-child-size-v1", + "nonce": 106, + "query_error": 0, + "buffer_columns": 80, + "buffer_rows": 24, + "window_left": 0, + "window_top": 0, + "window_right": 79, + "window_bottom": 23 + }, + { + "schema": "termforge-qt-child-size-v1", + "nonce": 107, + "query_error": 0, + "buffer_columns": 80, + "buffer_rows": 24, + "window_left": 0, + "window_top": 0, + "window_right": 79, + "window_bottom": 23 + }, + { + "schema": "termforge-qt-child-size-v1", + "nonce": 108, + "query_error": 0, + "buffer_columns": 80, + "buffer_rows": 24, + "window_left": 0, + "window_top": 0, + "window_right": 79, + "window_bottom": 23 + }, + { + "schema": "termforge-qt-child-size-v1", + "nonce": 109, + "query_error": 0, + "buffer_columns": 80, + "buffer_rows": 24, + "window_left": 0, + "window_top": 0, + "window_right": 79, + "window_bottom": 23 + }, + { + "schema": "termforge-qt-child-size-v1", + "nonce": 110, + "query_error": 0, + "buffer_columns": 80, + "buffer_rows": 24, + "window_left": 0, + "window_top": 0, + "window_right": 79, + "window_bottom": 23 + }, + { + "schema": "termforge-qt-child-size-v1", + "nonce": 111, + "query_error": 0, + "buffer_columns": 80, + "buffer_rows": 24, + "window_left": 0, + "window_top": 0, + "window_right": 79, + "window_bottom": 23 + }, + { + "schema": "termforge-qt-child-size-v1", + "nonce": 112, + "query_error": 0, + "buffer_columns": 80, + "buffer_rows": 24, + "window_left": 0, + "window_top": 0, + "window_right": 79, + "window_bottom": 23 + }, + { + "schema": "termforge-qt-child-size-v1", + "nonce": 113, + "query_error": 0, + "buffer_columns": 80, + "buffer_rows": 24, + "window_left": 0, + "window_top": 0, + "window_right": 79, + "window_bottom": 23 + }, + { + "schema": "termforge-qt-child-size-v1", + "nonce": 114, + "query_error": 0, + "buffer_columns": 80, + "buffer_rows": 24, + "window_left": 0, + "window_top": 0, + "window_right": 79, + "window_bottom": 23 + }, + { + "schema": "termforge-qt-child-size-v1", + "nonce": 115, + "query_error": 0, + "buffer_columns": 80, + "buffer_rows": 24, + "window_left": 0, + "window_top": 0, + "window_right": 79, + "window_bottom": 23 + }, + { + "schema": "termforge-qt-child-size-v1", + "nonce": 116, + "query_error": 0, + "buffer_columns": 80, + "buffer_rows": 24, + "window_left": 0, + "window_top": 0, + "window_right": 79, + "window_bottom": 23 + }, + { + "schema": "termforge-qt-child-size-v1", + "nonce": 117, + "query_error": 0, + "buffer_columns": 80, + "buffer_rows": 24, + "window_left": 0, + "window_top": 0, + "window_right": 79, + "window_bottom": 23 + }, + { + "schema": "termforge-qt-child-size-v1", + "nonce": 118, + "query_error": 0, + "buffer_columns": 80, + "buffer_rows": 24, + "window_left": 0, + "window_top": 0, + "window_right": 79, + "window_bottom": 23 + }, + { + "schema": "termforge-qt-child-size-v1", + "nonce": 119, + "query_error": 0, + "buffer_columns": 80, + "buffer_rows": 24, + "window_left": 0, + "window_top": 0, + "window_right": 79, + "window_bottom": 23 + }, + { + "schema": "termforge-qt-child-size-v1", + "nonce": 120, + "query_error": 0, + "buffer_columns": 80, + "buffer_rows": 24, + "window_left": 0, + "window_top": 0, + "window_right": 79, + "window_bottom": 23 + }, + { + "schema": "termforge-qt-child-size-v1", + "nonce": 121, + "query_error": 0, + "buffer_columns": 80, + "buffer_rows": 24, + "window_left": 0, + "window_top": 0, + "window_right": 79, + "window_bottom": 23 + }, + { + "schema": "termforge-qt-child-size-v1", + "nonce": 122, + "query_error": 0, + "buffer_columns": 80, + "buffer_rows": 24, + "window_left": 0, + "window_top": 0, + "window_right": 79, + "window_bottom": 23 + }, + { + "schema": "termforge-qt-child-size-v1", + "nonce": 123, + "query_error": 0, + "buffer_columns": 80, + "buffer_rows": 24, + "window_left": 0, + "window_top": 0, + "window_right": 79, + "window_bottom": 23 + }, + { + "schema": "termforge-qt-child-size-v1", + "nonce": 124, + "query_error": 0, + "buffer_columns": 80, + "buffer_rows": 24, + "window_left": 0, + "window_top": 0, + "window_right": 79, + "window_bottom": 23 + }, + { + "schema": "termforge-qt-child-size-v1", + "nonce": 125, + "query_error": 0, + "buffer_columns": 80, + "buffer_rows": 24, + "window_left": 0, + "window_top": 0, + "window_right": 79, + "window_bottom": 23 + }, + { + "schema": "termforge-qt-child-size-v1", + "nonce": 126, + "query_error": 0, + "buffer_columns": 80, + "buffer_rows": 24, + "window_left": 0, + "window_top": 0, + "window_right": 79, + "window_bottom": 23 + }, + { + "schema": "termforge-qt-child-size-v1", + "nonce": 127, + "query_error": 0, + "buffer_columns": 80, + "buffer_rows": 24, + "window_left": 0, + "window_top": 0, + "window_right": 79, + "window_bottom": 23 + }, + { + "schema": "termforge-qt-child-size-v1", + "nonce": 128, + "query_error": 0, + "buffer_columns": 80, + "buffer_rows": 24, + "window_left": 0, + "window_top": 0, + "window_right": 79, + "window_bottom": 23 + }, + { + "schema": "termforge-qt-child-size-v1", + "nonce": 129, + "query_error": 0, + "buffer_columns": 80, + "buffer_rows": 24, + "window_left": 0, + "window_top": 0, + "window_right": 79, + "window_bottom": 23 + }, + { + "schema": "termforge-qt-child-size-v1", + "nonce": 130, + "query_error": 0, + "buffer_columns": 80, + "buffer_rows": 24, + "window_left": 0, + "window_top": 0, + "window_right": 79, + "window_bottom": 23 + }, + { + "schema": "termforge-qt-child-size-v1", + "nonce": 131, + "query_error": 0, + "buffer_columns": 80, + "buffer_rows": 24, + "window_left": 0, + "window_top": 0, + "window_right": 79, + "window_bottom": 23 + }, + { + "schema": "termforge-qt-child-size-v1", + "nonce": 132, + "query_error": 0, + "buffer_columns": 80, + "buffer_rows": 24, + "window_left": 0, + "window_top": 0, + "window_right": 79, + "window_bottom": 23 + }, + { + "schema": "termforge-qt-child-size-v1", + "nonce": 133, + "query_error": 0, + "buffer_columns": 80, + "buffer_rows": 24, + "window_left": 0, + "window_top": 0, + "window_right": 79, + "window_bottom": 23 + }, + { + "schema": "termforge-qt-child-size-v1", + "nonce": 134, + "query_error": 0, + "buffer_columns": 80, + "buffer_rows": 24, + "window_left": 0, + "window_top": 0, + "window_right": 79, + "window_bottom": 23 + }, + { + "schema": "termforge-qt-child-size-v1", + "nonce": 135, + "query_error": 0, + "buffer_columns": 80, + "buffer_rows": 24, + "window_left": 0, + "window_top": 0, + "window_right": 79, + "window_bottom": 23 + }, + { + "schema": "termforge-qt-child-size-v1", + "nonce": 136, + "query_error": 0, + "buffer_columns": 80, + "buffer_rows": 24, + "window_left": 0, + "window_top": 0, + "window_right": 79, + "window_bottom": 23 + }, + { + "schema": "termforge-qt-child-size-v1", + "nonce": 137, + "query_error": 0, + "buffer_columns": 80, + "buffer_rows": 24, + "window_left": 0, + "window_top": 0, + "window_right": 79, + "window_bottom": 23 + }, + { + "schema": "termforge-qt-child-size-v1", + "nonce": 138, + "query_error": 0, + "buffer_columns": 80, + "buffer_rows": 24, + "window_left": 0, + "window_top": 0, + "window_right": 79, + "window_bottom": 23 + }, + { + "schema": "termforge-qt-child-size-v1", + "nonce": 139, + "query_error": 0, + "buffer_columns": 80, + "buffer_rows": 24, + "window_left": 0, + "window_top": 0, + "window_right": 79, + "window_bottom": 23 + }, + { + "schema": "termforge-qt-child-size-v1", + "nonce": 140, + "query_error": 0, + "buffer_columns": 80, + "buffer_rows": 24, + "window_left": 0, + "window_top": 0, + "window_right": 79, + "window_bottom": 23 + }, + { + "schema": "termforge-qt-child-size-v1", + "nonce": 141, + "query_error": 0, + "buffer_columns": 80, + "buffer_rows": 24, + "window_left": 0, + "window_top": 0, + "window_right": 79, + "window_bottom": 23 + }, + { + "schema": "termforge-qt-child-size-v1", + "nonce": 142, + "query_error": 0, + "buffer_columns": 80, + "buffer_rows": 24, + "window_left": 0, + "window_top": 0, + "window_right": 79, + "window_bottom": 23 + }, + { + "schema": "termforge-qt-child-size-v1", + "nonce": 143, + "query_error": 0, + "buffer_columns": 80, + "buffer_rows": 24, + "window_left": 0, + "window_top": 0, + "window_right": 79, + "window_bottom": 23 + }, + { + "schema": "termforge-qt-child-size-v1", + "nonce": 144, + "query_error": 0, + "buffer_columns": 80, + "buffer_rows": 24, + "window_left": 0, + "window_top": 0, + "window_right": 79, + "window_bottom": 23 + }, + { + "schema": "termforge-qt-child-size-v1", + "nonce": 145, + "query_error": 0, + "buffer_columns": 80, + "buffer_rows": 24, + "window_left": 0, + "window_top": 0, + "window_right": 79, + "window_bottom": 23 + }, + { + "schema": "termforge-qt-child-size-v1", + "nonce": 146, + "query_error": 0, + "buffer_columns": 80, + "buffer_rows": 24, + "window_left": 0, + "window_top": 0, + "window_right": 79, + "window_bottom": 23 + }, + { + "schema": "termforge-qt-child-size-v1", + "nonce": 147, + "query_error": 0, + "buffer_columns": 80, + "buffer_rows": 24, + "window_left": 0, + "window_top": 0, + "window_right": 79, + "window_bottom": 23 + }, + { + "schema": "termforge-qt-child-size-v1", + "nonce": 148, + "query_error": 0, + "buffer_columns": 80, + "buffer_rows": 24, + "window_left": 0, + "window_top": 0, + "window_right": 79, + "window_bottom": 23 + }, + { + "schema": "termforge-qt-child-size-v1", + "nonce": 149, + "query_error": 0, + "buffer_columns": 80, + "buffer_rows": 24, + "window_left": 0, + "window_top": 0, + "window_right": 79, + "window_bottom": 23 + }, + { + "schema": "termforge-qt-child-size-v1", + "nonce": 150, + "query_error": 0, + "buffer_columns": 80, + "buffer_rows": 24, + "window_left": 0, + "window_top": 0, + "window_right": 79, + "window_bottom": 23 + }, + { + "schema": "termforge-qt-child-size-v1", + "nonce": 151, + "query_error": 0, + "buffer_columns": 80, + "buffer_rows": 24, + "window_left": 0, + "window_top": 0, + "window_right": 79, + "window_bottom": 23 + }, + { + "schema": "termforge-qt-child-size-v1", + "nonce": 152, + "query_error": 0, + "buffer_columns": 80, + "buffer_rows": 24, + "window_left": 0, + "window_top": 0, + "window_right": 79, + "window_bottom": 23 + }, + { + "schema": "termforge-qt-child-size-v1", + "nonce": 153, + "query_error": 0, + "buffer_columns": 80, + "buffer_rows": 24, + "window_left": 0, + "window_top": 0, + "window_right": 79, + "window_bottom": 23 + }, + { + "schema": "termforge-qt-child-size-v1", + "nonce": 154, + "query_error": 0, + "buffer_columns": 80, + "buffer_rows": 24, + "window_left": 0, + "window_top": 0, + "window_right": 79, + "window_bottom": 23 + }, + { + "schema": "termforge-qt-child-size-v1", + "nonce": 155, + "query_error": 0, + "buffer_columns": 80, + "buffer_rows": 24, + "window_left": 0, + "window_top": 0, + "window_right": 79, + "window_bottom": 23 + }, + { + "schema": "termforge-qt-child-size-v1", + "nonce": 156, + "query_error": 0, + "buffer_columns": 80, + "buffer_rows": 24, + "window_left": 0, + "window_top": 0, + "window_right": 79, + "window_bottom": 23 + }, + { + "schema": "termforge-qt-child-size-v1", + "nonce": 157, + "query_error": 0, + "buffer_columns": 80, + "buffer_rows": 24, + "window_left": 0, + "window_top": 0, + "window_right": 79, + "window_bottom": 23 + }, + { + "schema": "termforge-qt-child-size-v1", + "nonce": 158, + "query_error": 0, + "buffer_columns": 80, + "buffer_rows": 24, + "window_left": 0, + "window_top": 0, + "window_right": 79, + "window_bottom": 23 + }, + { + "schema": "termforge-qt-child-size-v1", + "nonce": 159, + "query_error": 0, + "buffer_columns": 80, + "buffer_rows": 24, + "window_left": 0, + "window_top": 0, + "window_right": 79, + "window_bottom": 23 + }, + { + "schema": "termforge-qt-child-size-v1", + "nonce": 160, + "query_error": 0, + "buffer_columns": 80, + "buffer_rows": 24, + "window_left": 0, + "window_top": 0, + "window_right": 79, + "window_bottom": 23 + }, + { + "schema": "termforge-qt-child-size-v1", + "nonce": 161, + "query_error": 0, + "buffer_columns": 80, + "buffer_rows": 24, + "window_left": 0, + "window_top": 0, + "window_right": 79, + "window_bottom": 23 + }, + { + "schema": "termforge-qt-child-size-v1", + "nonce": 162, + "query_error": 0, + "buffer_columns": 80, + "buffer_rows": 24, + "window_left": 0, + "window_top": 0, + "window_right": 79, + "window_bottom": 23 + }, + { + "schema": "termforge-qt-child-size-v1", + "nonce": 163, + "query_error": 0, + "buffer_columns": 80, + "buffer_rows": 24, + "window_left": 0, + "window_top": 0, + "window_right": 79, + "window_bottom": 23 + }, + { + "schema": "termforge-qt-child-size-v1", + "nonce": 164, + "query_error": 0, + "buffer_columns": 80, + "buffer_rows": 24, + "window_left": 0, + "window_top": 0, + "window_right": 79, + "window_bottom": 23 + }, + { + "schema": "termforge-qt-child-size-v1", + "nonce": 165, + "query_error": 0, + "buffer_columns": 80, + "buffer_rows": 24, + "window_left": 0, + "window_top": 0, + "window_right": 79, + "window_bottom": 23 + }, + { + "schema": "termforge-qt-child-size-v1", + "nonce": 166, + "query_error": 0, + "buffer_columns": 80, + "buffer_rows": 24, + "window_left": 0, + "window_top": 0, + "window_right": 79, + "window_bottom": 23 + }, + { + "schema": "termforge-qt-child-size-v1", + "nonce": 167, + "query_error": 0, + "buffer_columns": 80, + "buffer_rows": 24, + "window_left": 0, + "window_top": 0, + "window_right": 79, + "window_bottom": 23 + }, + { + "schema": "termforge-qt-child-size-v1", + "nonce": 168, + "query_error": 0, + "buffer_columns": 80, + "buffer_rows": 24, + "window_left": 0, + "window_top": 0, + "window_right": 79, + "window_bottom": 23 + }, + { + "schema": "termforge-qt-child-size-v1", + "nonce": 169, + "query_error": 0, + "buffer_columns": 80, + "buffer_rows": 24, + "window_left": 0, + "window_top": 0, + "window_right": 79, + "window_bottom": 23 + }, + { + "schema": "termforge-qt-child-size-v1", + "nonce": 170, + "query_error": 0, + "buffer_columns": 80, + "buffer_rows": 24, + "window_left": 0, + "window_top": 0, + "window_right": 79, + "window_bottom": 23 + }, + { + "schema": "termforge-qt-child-size-v1", + "nonce": 171, + "query_error": 0, + "buffer_columns": 80, + "buffer_rows": 24, + "window_left": 0, + "window_top": 0, + "window_right": 79, + "window_bottom": 23 + }, + { + "schema": "termforge-qt-child-size-v1", + "nonce": 172, + "query_error": 0, + "buffer_columns": 80, + "buffer_rows": 24, + "window_left": 0, + "window_top": 0, + "window_right": 79, + "window_bottom": 23 + }, + { + "schema": "termforge-qt-child-size-v1", + "nonce": 173, + "query_error": 0, + "buffer_columns": 80, + "buffer_rows": 24, + "window_left": 0, + "window_top": 0, + "window_right": 79, + "window_bottom": 23 + }, + { + "schema": "termforge-qt-child-size-v1", + "nonce": 174, + "query_error": 0, + "buffer_columns": 80, + "buffer_rows": 24, + "window_left": 0, + "window_top": 0, + "window_right": 79, + "window_bottom": 23 + }, + { + "schema": "termforge-qt-child-size-v1", + "nonce": 175, + "query_error": 0, + "buffer_columns": 80, + "buffer_rows": 24, + "window_left": 0, + "window_top": 0, + "window_right": 79, + "window_bottom": 23 + }, + { + "schema": "termforge-qt-child-size-v1", + "nonce": 176, + "query_error": 0, + "buffer_columns": 80, + "buffer_rows": 24, + "window_left": 0, + "window_top": 0, + "window_right": 79, + "window_bottom": 23 + }, + { + "schema": "termforge-qt-child-size-v1", + "nonce": 177, + "query_error": 0, + "buffer_columns": 80, + "buffer_rows": 24, + "window_left": 0, + "window_top": 0, + "window_right": 79, + "window_bottom": 23 + }, + { + "schema": "termforge-qt-child-size-v1", + "nonce": 178, + "query_error": 0, + "buffer_columns": 80, + "buffer_rows": 24, + "window_left": 0, + "window_top": 0, + "window_right": 79, + "window_bottom": 23 + }, + { + "schema": "termforge-qt-child-size-v1", + "nonce": 179, + "query_error": 0, + "buffer_columns": 80, + "buffer_rows": 24, + "window_left": 0, + "window_top": 0, + "window_right": 79, + "window_bottom": 23 + }, + { + "schema": "termforge-qt-child-size-v1", + "nonce": 180, + "query_error": 0, + "buffer_columns": 80, + "buffer_rows": 24, + "window_left": 0, + "window_top": 0, + "window_right": 79, + "window_bottom": 23 + }, + { + "schema": "termforge-qt-child-size-v1", + "nonce": 181, + "query_error": 0, + "buffer_columns": 80, + "buffer_rows": 24, + "window_left": 0, + "window_top": 0, + "window_right": 79, + "window_bottom": 23 + }, + { + "schema": "termforge-qt-child-size-v1", + "nonce": 182, + "query_error": 0, + "buffer_columns": 80, + "buffer_rows": 24, + "window_left": 0, + "window_top": 0, + "window_right": 79, + "window_bottom": 23 + }, + { + "schema": "termforge-qt-child-size-v1", + "nonce": 183, + "query_error": 0, + "buffer_columns": 80, + "buffer_rows": 24, + "window_left": 0, + "window_top": 0, + "window_right": 79, + "window_bottom": 23 + }, + { + "schema": "termforge-qt-child-size-v1", + "nonce": 184, + "query_error": 0, + "buffer_columns": 80, + "buffer_rows": 24, + "window_left": 0, + "window_top": 0, + "window_right": 79, + "window_bottom": 23 + }, + { + "schema": "termforge-qt-child-size-v1", + "nonce": 185, + "query_error": 0, + "buffer_columns": 80, + "buffer_rows": 24, + "window_left": 0, + "window_top": 0, + "window_right": 79, + "window_bottom": 23 + }, + { + "schema": "termforge-qt-child-size-v1", + "nonce": 186, + "query_error": 0, + "buffer_columns": 80, + "buffer_rows": 24, + "window_left": 0, + "window_top": 0, + "window_right": 79, + "window_bottom": 23 + }, + { + "schema": "termforge-qt-child-size-v1", + "nonce": 187, + "query_error": 0, + "buffer_columns": 80, + "buffer_rows": 24, + "window_left": 0, + "window_top": 0, + "window_right": 79, + "window_bottom": 23 + }, + { + "schema": "termforge-qt-child-size-v1", + "nonce": 188, + "query_error": 0, + "buffer_columns": 80, + "buffer_rows": 24, + "window_left": 0, + "window_top": 0, + "window_right": 79, + "window_bottom": 23 + }, + { + "schema": "termforge-qt-child-size-v1", + "nonce": 189, + "query_error": 0, + "buffer_columns": 80, + "buffer_rows": 24, + "window_left": 0, + "window_top": 0, + "window_right": 79, + "window_bottom": 23 + }, + { + "schema": "termforge-qt-child-size-v1", + "nonce": 190, + "query_error": 0, + "buffer_columns": 80, + "buffer_rows": 24, + "window_left": 0, + "window_top": 0, + "window_right": 79, + "window_bottom": 23 + }, + { + "schema": "termforge-qt-child-size-v1", + "nonce": 191, + "query_error": 0, + "buffer_columns": 80, + "buffer_rows": 24, + "window_left": 0, + "window_top": 0, + "window_right": 79, + "window_bottom": 23 + }, + { + "schema": "termforge-qt-child-size-v1", + "nonce": 192, + "query_error": 0, + "buffer_columns": 80, + "buffer_rows": 24, + "window_left": 0, + "window_top": 0, + "window_right": 79, + "window_bottom": 23 + }, + { + "schema": "termforge-qt-child-size-v1", + "nonce": 193, + "query_error": 0, + "buffer_columns": 80, + "buffer_rows": 24, + "window_left": 0, + "window_top": 0, + "window_right": 79, + "window_bottom": 23 + }, + { + "schema": "termforge-qt-child-size-v1", + "nonce": 194, + "query_error": 0, + "buffer_columns": 80, + "buffer_rows": 24, + "window_left": 0, + "window_top": 0, + "window_right": 79, + "window_bottom": 23 + }, + { + "schema": "termforge-qt-child-size-v1", + "nonce": 195, + "query_error": 0, + "buffer_columns": 80, + "buffer_rows": 24, + "window_left": 0, + "window_top": 0, + "window_right": 79, + "window_bottom": 23 + }, + { + "schema": "termforge-qt-child-size-v1", + "nonce": 196, + "query_error": 0, + "buffer_columns": 80, + "buffer_rows": 24, + "window_left": 0, + "window_top": 0, + "window_right": 79, + "window_bottom": 23 + }, + { + "schema": "termforge-qt-child-size-v1", + "nonce": 197, + "query_error": 0, + "buffer_columns": 80, + "buffer_rows": 24, + "window_left": 0, + "window_top": 0, + "window_right": 79, + "window_bottom": 23 + }, + { + "schema": "termforge-qt-child-size-v1", + "nonce": 198, + "query_error": 0, + "buffer_columns": 80, + "buffer_rows": 24, + "window_left": 0, + "window_top": 0, + "window_right": 79, + "window_bottom": 23 + }, + { + "schema": "termforge-qt-child-size-v1", + "nonce": 199, + "query_error": 0, + "buffer_columns": 80, + "buffer_rows": 24, + "window_left": 0, + "window_top": 0, + "window_right": 79, + "window_bottom": 23 + }, + { + "schema": "termforge-qt-child-size-v1", + "nonce": 200, + "query_error": 0, + "buffer_columns": 80, + "buffer_rows": 24, + "window_left": 0, + "window_top": 0, + "window_right": 79, + "window_bottom": 23 + }, + { + "schema": "termforge-qt-child-size-v1", + "nonce": 201, + "query_error": 0, + "buffer_columns": 80, + "buffer_rows": 24, + "window_left": 0, + "window_top": 0, + "window_right": 79, + "window_bottom": 23 + }, + { + "schema": "termforge-qt-child-size-v1", + "nonce": 202, + "query_error": 0, + "buffer_columns": 80, + "buffer_rows": 24, + "window_left": 0, + "window_top": 0, + "window_right": 79, + "window_bottom": 23 + }, + { + "schema": "termforge-qt-child-size-v1", + "nonce": 203, + "query_error": 0, + "buffer_columns": 80, + "buffer_rows": 24, + "window_left": 0, + "window_top": 0, + "window_right": 79, + "window_bottom": 23 + }, + { + "schema": "termforge-qt-child-size-v1", + "nonce": 204, + "query_error": 0, + "buffer_columns": 80, + "buffer_rows": 24, + "window_left": 0, + "window_top": 0, + "window_right": 79, + "window_bottom": 23 + }, + { + "schema": "termforge-qt-child-size-v1", + "nonce": 205, + "query_error": 0, + "buffer_columns": 80, + "buffer_rows": 24, + "window_left": 0, + "window_top": 0, + "window_right": 79, + "window_bottom": 23 + }, + { + "schema": "termforge-qt-child-size-v1", + "nonce": 206, + "query_error": 0, + "buffer_columns": 80, + "buffer_rows": 24, + "window_left": 0, + "window_top": 0, + "window_right": 79, + "window_bottom": 23 + }, + { + "schema": "termforge-qt-child-size-v1", + "nonce": 207, + "query_error": 0, + "buffer_columns": 80, + "buffer_rows": 24, + "window_left": 0, + "window_top": 0, + "window_right": 79, + "window_bottom": 23 + }, + { + "schema": "termforge-qt-child-size-v1", + "nonce": 208, + "query_error": 0, + "buffer_columns": 80, + "buffer_rows": 24, + "window_left": 0, + "window_top": 0, + "window_right": 79, + "window_bottom": 23 + }, + { + "schema": "termforge-qt-child-size-v1", + "nonce": 209, + "query_error": 0, + "buffer_columns": 80, + "buffer_rows": 24, + "window_left": 0, + "window_top": 0, + "window_right": 79, + "window_bottom": 23 + }, + { + "schema": "termforge-qt-child-size-v1", + "nonce": 210, + "query_error": 0, + "buffer_columns": 80, + "buffer_rows": 24, + "window_left": 0, + "window_top": 0, + "window_right": 79, + "window_bottom": 23 + }, + { + "schema": "termforge-qt-child-size-v1", + "nonce": 211, + "query_error": 0, + "buffer_columns": 80, + "buffer_rows": 24, + "window_left": 0, + "window_top": 0, + "window_right": 79, + "window_bottom": 23 + }, + { + "schema": "termforge-qt-child-size-v1", + "nonce": 212, + "query_error": 0, + "buffer_columns": 80, + "buffer_rows": 24, + "window_left": 0, + "window_top": 0, + "window_right": 79, + "window_bottom": 23 + }, + { + "schema": "termforge-qt-child-size-v1", + "nonce": 213, + "query_error": 0, + "buffer_columns": 80, + "buffer_rows": 24, + "window_left": 0, + "window_top": 0, + "window_right": 79, + "window_bottom": 23 + }, + { + "schema": "termforge-qt-child-size-v1", + "nonce": 214, + "query_error": 0, + "buffer_columns": 80, + "buffer_rows": 24, + "window_left": 0, + "window_top": 0, + "window_right": 79, + "window_bottom": 23 + }, + { + "schema": "termforge-qt-child-size-v1", + "nonce": 215, + "query_error": 0, + "buffer_columns": 80, + "buffer_rows": 24, + "window_left": 0, + "window_top": 0, + "window_right": 79, + "window_bottom": 23 + }, + { + "schema": "termforge-qt-child-size-v1", + "nonce": 216, + "query_error": 0, + "buffer_columns": 80, + "buffer_rows": 24, + "window_left": 0, + "window_top": 0, + "window_right": 79, + "window_bottom": 23 + }, + { + "schema": "termforge-qt-child-size-v1", + "nonce": 217, + "query_error": 0, + "buffer_columns": 80, + "buffer_rows": 24, + "window_left": 0, + "window_top": 0, + "window_right": 79, + "window_bottom": 23 + }, + { + "schema": "termforge-qt-child-size-v1", + "nonce": 218, + "query_error": 0, + "buffer_columns": 80, + "buffer_rows": 24, + "window_left": 0, + "window_top": 0, + "window_right": 79, + "window_bottom": 23 + }, + { + "schema": "termforge-qt-child-size-v1", + "nonce": 219, + "query_error": 0, + "buffer_columns": 80, + "buffer_rows": 24, + "window_left": 0, + "window_top": 0, + "window_right": 79, + "window_bottom": 23 + }, + { + "schema": "termforge-qt-child-size-v1", + "nonce": 220, + "query_error": 0, + "buffer_columns": 80, + "buffer_rows": 24, + "window_left": 0, + "window_top": 0, + "window_right": 79, + "window_bottom": 23 + }, + { + "schema": "termforge-qt-child-size-v1", + "nonce": 221, + "query_error": 0, + "buffer_columns": 80, + "buffer_rows": 24, + "window_left": 0, + "window_top": 0, + "window_right": 79, + "window_bottom": 23 + }, + { + "schema": "termforge-qt-child-size-v1", + "nonce": 222, + "query_error": 0, + "buffer_columns": 80, + "buffer_rows": 24, + "window_left": 0, + "window_top": 0, + "window_right": 79, + "window_bottom": 23 + }, + { + "schema": "termforge-qt-child-size-v1", + "nonce": 223, + "query_error": 0, + "buffer_columns": 80, + "buffer_rows": 24, + "window_left": 0, + "window_top": 0, + "window_right": 79, + "window_bottom": 23 + }, + { + "schema": "termforge-qt-child-size-v1", + "nonce": 224, + "query_error": 0, + "buffer_columns": 80, + "buffer_rows": 24, + "window_left": 0, + "window_top": 0, + "window_right": 79, + "window_bottom": 23 + }, + { + "schema": "termforge-qt-child-size-v1", + "nonce": 225, + "query_error": 0, + "buffer_columns": 80, + "buffer_rows": 24, + "window_left": 0, + "window_top": 0, + "window_right": 79, + "window_bottom": 23 + }, + { + "schema": "termforge-qt-child-size-v1", + "nonce": 226, + "query_error": 0, + "buffer_columns": 80, + "buffer_rows": 24, + "window_left": 0, + "window_top": 0, + "window_right": 79, + "window_bottom": 23 + }, + { + "schema": "termforge-qt-child-size-v1", + "nonce": 227, + "query_error": 0, + "buffer_columns": 80, + "buffer_rows": 24, + "window_left": 0, + "window_top": 0, + "window_right": 79, + "window_bottom": 23 + }, + { + "schema": "termforge-qt-child-size-v1", + "nonce": 228, + "query_error": 0, + "buffer_columns": 80, + "buffer_rows": 24, + "window_left": 0, + "window_top": 0, + "window_right": 79, + "window_bottom": 23 + }, + { + "schema": "termforge-qt-cpp-supervisor-v1", + "status": "failed", + "timed_out": false, + "exit_code": 1, + "job_after": { + "active": 0, + "total": 4, + "terminated": 0 + }, + "error": "Qt smoke failed or left owned processes active" + } + ] + }, + "green": { + "source_commit": "e3abef5a7f52b8f8bd352b3a6aaff1f9cd2ba98b", + "raw_record": { + "name": "09-child-green.log", + "bytes": 2385, + "sha256": "ddd421fcdfb90baceee94cafdbd50a477e2c75493df6c6ea9966334fc196edc7", + "published": false + }, + "binary": { + "name": "qt_cpp_resize_smoke.exe", + "bytes": 156160, + "sha256": "7415888138c9898efb4e0cc52d9a705048e26052950871212e6b57cc4bf195a0", + "published": false + }, + "binary_identity_gap": null, + "observations": [ + { + "schema": "termforge-qt-child-size-v1", + "nonce": 0, + "query_error": 0, + "buffer_columns": 80, + "buffer_rows": 24, + "window_left": 0, + "window_top": 0, + "window_right": 79, + "window_bottom": 23 + }, + { + "schema": "termforge-qt-resize-grid-v1", + "requested_columns": 60, + "requested_rows": 12, + "core_columns": 60, + "core_rows": 12, + "widget_width": 556, + "widget_height": 310 + }, + { + "schema": "termforge-qt-child-size-v1", + "nonce": 101, + "query_error": 0, + "buffer_columns": 80, + "buffer_rows": 24, + "window_left": 0, + "window_top": 0, + "window_right": 79, + "window_bottom": 23 + }, + { + "schema": "termforge-qt-child-size-v1", + "nonce": 102, + "query_error": 0, + "buffer_columns": 60, + "buffer_rows": 12, + "window_left": 0, + "window_top": 0, + "window_right": 59, + "window_bottom": 11 + }, + { + "schema": "termforge-qt-cpp-supervisor-v1", + "status": "passed", + "timed_out": false, + "exit_code": 0, + "job_after": { + "active": 0, + "total": 4, + "terminated": 0 + }, + "sample": { + "schema": "termforge-qt-resize-smoke-v1", + "core_columns": 60, + "core_rows": 12, + "child_ack_replies": 2, + "cleanup_verified": true, + "presented_done": null + } + } + ] + }, + "scope": "All 128 old 80x24 observations retained in red; old/new replies retained in green; same pre-CRT-merge local configuration" + }, + "invalid_geometry_error": { + "red": { + "source_commit": "038ff288b4d10c95d0cde0a3c07834fcd4305854", + "raw_record": { + "name": "11-error-red.log", + "bytes": 2836, + "sha256": "c4360b7e99627cdde824dbd2a18215037410dab09a1b29ed4a155f21e4adbc3d", + "published": false + }, + "binary": { + "name": "qt_cpp_resize_smoke.exe", + "bytes": 158208, + "sha256": "fe549df0c351a423ebef73aa3050065f29b85c1d1a539306898ab79260f3a040", + "published": false + }, + "binary_identity_gap": null, + "observations": [ + { + "schema": "termforge-qt-child-size-v1", + "nonce": 0, + "query_error": 0, + "buffer_columns": 80, + "buffer_rows": 24, + "window_left": 0, + "window_top": 0, + "window_right": 79, + "window_bottom": 23 + }, + { + "schema": "termforge-qt-resize-grid-v1", + "requested_columns": 60, + "requested_rows": 12, + "core_columns": 60, + "core_rows": 12, + "widget_width": 556, + "widget_height": 310 + }, + { + "schema": "termforge-qt-child-size-v1", + "nonce": 101, + "query_error": 0, + "buffer_columns": 80, + "buffer_rows": 24, + "window_left": 0, + "window_top": 0, + "window_right": 79, + "window_bottom": 23 + }, + { + "schema": "termforge-qt-child-size-v1", + "nonce": 102, + "query_error": 0, + "buffer_columns": 60, + "buffer_rows": 12, + "window_left": 0, + "window_top": 0, + "window_right": 59, + "window_bottom": 11 + }, + { + "schema": "termforge-qt-child-size-v1", + "nonce": 0, + "query_error": 0, + "buffer_columns": 80, + "buffer_rows": 24, + "window_left": 0, + "window_top": 0, + "window_right": 79, + "window_bottom": 23 + }, + { + "schema": "termforge-qt-resize-error-v1", + "accepting": 1, + "pending": 1, + "error_visible": 1 + }, + { + "schema": "termforge-qt-cpp-supervisor-v1", + "status": "failed", + "timed_out": false, + "exit_code": 1, + "job_after": { + "active": 0, + "total": 6, + "terminated": 0 + }, + "error": "Qt smoke failed or left owned processes active" + } + ] + }, + "green": { + "source_commit": "1c4deaabfbb08a2753877d04719a4d4bd31003b0", + "raw_record": { + "name": "13-error-green.log", + "bytes": 2652, + "sha256": "4f1dc15418ed598398eb8283727b0a2def1f261ad7968f06dc4f5adea058c7c5", + "published": false + }, + "binary": { + "name": "qt_cpp_resize_smoke.exe", + "bytes": 158208, + "sha256": "3b60d72f7905a57905a6969e853af80ccb94ca8300d90d76253ecac3801e4a81", + "published": false + }, + "binary_identity_gap": null, + "observations": [ + { + "schema": "termforge-qt-child-size-v1", + "nonce": 0, + "query_error": 0, + "buffer_columns": 80, + "buffer_rows": 24, + "window_left": 0, + "window_top": 0, + "window_right": 79, + "window_bottom": 23 + }, + { + "schema": "termforge-qt-resize-grid-v1", + "requested_columns": 60, + "requested_rows": 12, + "core_columns": 60, + "core_rows": 12, + "widget_width": 556, + "widget_height": 310 + }, + { + "schema": "termforge-qt-child-size-v1", + "nonce": 101, + "query_error": 0, + "buffer_columns": 80, + "buffer_rows": 24, + "window_left": 0, + "window_top": 0, + "window_right": 79, + "window_bottom": 23 + }, + { + "schema": "termforge-qt-child-size-v1", + "nonce": 102, + "query_error": 0, + "buffer_columns": 60, + "buffer_rows": 12, + "window_left": 0, + "window_top": 0, + "window_right": 59, + "window_bottom": 11 + }, + { + "schema": "termforge-qt-child-size-v1", + "nonce": 0, + "query_error": 0, + "buffer_columns": 80, + "buffer_rows": 24, + "window_left": 0, + "window_top": 0, + "window_right": 79, + "window_bottom": 23 + }, + { + "schema": "termforge-qt-resize-error-v1", + "accepting": 0, + "pending": 0, + "error_visible": 1 + }, + { + "schema": "termforge-qt-cpp-supervisor-v1", + "status": "passed", + "timed_out": false, + "exit_code": 0, + "job_after": { + "active": 0, + "total": 6, + "terminated": 0 + }, + "sample": { + "schema": "termforge-qt-resize-smoke-v1", + "core_columns": 60, + "core_rows": 12, + "child_ack_replies": 2, + "cleanup_verified": true, + "presented_done": null + } + } + ] + }, + "scope": "Invalid public grid request must stop pending control and finish owned cleanup; old error_visible field meant nonempty model error, not presentation" + }, + "current_font_metrics": { + "red": { + "source_commit": "b803319ced15b0d863a2badc0608421f34621aa9", + "raw_record": { + "name": "19-font-red.log", + "bytes": 7848, + "sha256": "bb1fbee24fbbb8731fe17abe6d8e48fc841ac3023f7324308d37dafa8fb8c558", + "published": false + }, + "binary": { + "name": "qt_cpp_resize_smoke.exe", + "bytes": 167424, + "sha256": "8cb5779ddb42a37436016439af40d0a6e1a2a0271b4533a4f77544c56efc1c5c", + "published": false + }, + "binary_identity_gap": null, + "observations": [ + { + "schema": "termforge-qt-child-size-v1", + "nonce": 0, + "query_error": 0, + "buffer_columns": 80, + "buffer_rows": 24, + "window_left": 0, + "window_top": 0, + "window_right": 79, + "window_bottom": 23 + }, + { + "schema": "termforge-qt-resize-state-v1", + "stage": 0, + "requested_columns": 80, + "requested_rows": 24, + "widget_width": 736, + "widget_height": 574, + "core_columns": 80, + "core_rows": 24, + "transport_columns": 80, + "transport_rows": 24, + "requested_revision": 0, + "transport_revision": 0, + "accepting": 1, + "pending": 0 + }, + { + "schema": "termforge-qt-resize-state-v1", + "stage": 1, + "requested_columns": 60, + "requested_rows": 12, + "widget_width": 556, + "widget_height": 310, + "core_columns": 60, + "core_rows": 12, + "transport_columns": 80, + "transport_rows": 24, + "requested_revision": 1, + "transport_revision": 0, + "accepting": 1, + "pending": 1 + }, + { + "schema": "termforge-qt-child-size-v1", + "nonce": 101, + "query_error": 0, + "buffer_columns": 80, + "buffer_rows": 24, + "window_left": 0, + "window_top": 0, + "window_right": 79, + "window_bottom": 23 + }, + { + "schema": "termforge-qt-child-size-v1", + "nonce": 102, + "query_error": 0, + "buffer_columns": 60, + "buffer_rows": 12, + "window_left": 0, + "window_top": 0, + "window_right": 59, + "window_bottom": 11 + }, + { + "schema": "termforge-qt-resize-state-v1", + "stage": 1, + "requested_columns": 60, + "requested_rows": 12, + "widget_width": 556, + "widget_height": 310, + "core_columns": 60, + "core_rows": 12, + "transport_columns": 60, + "transport_rows": 12, + "requested_revision": 1, + "transport_revision": 1, + "accepting": 1, + "pending": 0 + }, + { + "schema": "termforge-qt-resize-state-v1", + "stage": 2, + "requested_columns": 100, + "requested_rows": 30, + "widget_width": 916, + "widget_height": 706, + "core_columns": 100, + "core_rows": 30, + "transport_columns": 60, + "transport_rows": 12, + "requested_revision": 2, + "transport_revision": 1, + "accepting": 1, + "pending": 1 + }, + { + "schema": "termforge-qt-child-size-v1", + "nonce": 103, + "query_error": 0, + "buffer_columns": 100, + "buffer_rows": 30, + "window_left": 0, + "window_top": 0, + "window_right": 99, + "window_bottom": 29 + }, + { + "schema": "termforge-qt-resize-state-v1", + "stage": 2, + "requested_columns": 100, + "requested_rows": 30, + "widget_width": 916, + "widget_height": 706, + "core_columns": 100, + "core_rows": 30, + "transport_columns": 100, + "transport_rows": 30, + "requested_revision": 2, + "transport_revision": 2, + "accepting": 1, + "pending": 0 + }, + { + "schema": "termforge-qt-resize-state-v1", + "stage": 3, + "requested_columns": 80, + "requested_rows": 24, + "widget_width": 736, + "widget_height": 574, + "core_columns": 80, + "core_rows": 24, + "transport_columns": 100, + "transport_rows": 30, + "requested_revision": 3, + "transport_revision": 2, + "accepting": 1, + "pending": 1 + }, + { + "schema": "termforge-qt-child-size-v1", + "nonce": 104, + "query_error": 0, + "buffer_columns": 80, + "buffer_rows": 24, + "window_left": 0, + "window_top": 0, + "window_right": 79, + "window_bottom": 23 + }, + { + "schema": "termforge-qt-resize-state-v1", + "stage": 3, + "requested_columns": 80, + "requested_rows": 24, + "widget_width": 736, + "widget_height": 574, + "core_columns": 80, + "core_rows": 24, + "transport_columns": 80, + "transport_rows": 24, + "requested_revision": 3, + "transport_revision": 3, + "accepting": 1, + "pending": 0 + }, + { + "schema": "termforge-qt-resize-state-v1", + "stage": 4, + "requested_columns": 1, + "requested_rows": 1, + "widget_width": 1, + "widget_height": 1, + "core_columns": 1, + "core_rows": 1, + "transport_columns": 80, + "transport_rows": 24, + "requested_revision": 4, + "transport_revision": 3, + "accepting": 1, + "pending": 1 + }, + { + "schema": "termforge-qt-child-size-v1", + "nonce": 105, + "query_error": 0, + "buffer_columns": 80, + "buffer_rows": 24, + "window_left": 0, + "window_top": 0, + "window_right": 79, + "window_bottom": 23 + }, + { + "schema": "termforge-qt-child-size-v1", + "nonce": 106, + "query_error": 0, + "buffer_columns": 1, + "buffer_rows": 1, + "window_left": 0, + "window_top": 0, + "window_right": 0, + "window_bottom": 0 + }, + { + "schema": "termforge-qt-resize-state-v1", + "stage": 4, + "requested_columns": 1, + "requested_rows": 1, + "widget_width": 1, + "widget_height": 1, + "core_columns": 1, + "core_rows": 1, + "transport_columns": 1, + "transport_rows": 1, + "requested_revision": 4, + "transport_revision": 4, + "accepting": 1, + "pending": 0 + }, + { + "schema": "termforge-qt-resize-state-v1", + "stage": 5, + "requested_columns": 80, + "requested_rows": 24, + "widget_width": 736, + "widget_height": 574, + "core_columns": 80, + "core_rows": 24, + "transport_columns": 1, + "transport_rows": 1, + "requested_revision": 5, + "transport_revision": 4, + "accepting": 1, + "pending": 1 + }, + { + "schema": "termforge-qt-child-size-v1", + "nonce": 107, + "query_error": 0, + "buffer_columns": 80, + "buffer_rows": 24, + "window_left": 0, + "window_top": 0, + "window_right": 79, + "window_bottom": 23 + }, + { + "schema": "termforge-qt-resize-state-v1", + "stage": 5, + "requested_columns": 80, + "requested_rows": 24, + "widget_width": 736, + "widget_height": 574, + "core_columns": 80, + "core_rows": 24, + "transport_columns": 80, + "transport_rows": 24, + "requested_revision": 5, + "transport_revision": 5, + "accepting": 1, + "pending": 0 + }, + { + "schema": "termforge-qt-resize-state-v1", + "stage": 6, + "requested_columns": 80, + "requested_rows": 24, + "widget_width": 736, + "widget_height": 574, + "core_columns": 80, + "core_rows": 24, + "transport_columns": 80, + "transport_rows": 24, + "requested_revision": 5, + "transport_revision": 5, + "accepting": 1, + "pending": 0 + }, + { + "schema": "termforge-qt-child-size-v1", + "nonce": 108, + "query_error": 0, + "buffer_columns": 80, + "buffer_rows": 24, + "window_left": 0, + "window_top": 0, + "window_right": 79, + "window_bottom": 23 + }, + { + "schema": "termforge-qt-resize-state-v1", + "stage": 6, + "requested_columns": 80, + "requested_rows": 24, + "widget_width": 736, + "widget_height": 574, + "core_columns": 80, + "core_rows": 24, + "transport_columns": 80, + "transport_rows": 24, + "requested_revision": 5, + "transport_revision": 5, + "accepting": 1, + "pending": 0 + }, + { + "schema": "termforge-qt-child-size-v1", + "nonce": 109, + "query_error": 0, + "buffer_columns": 80, + "buffer_rows": 24, + "window_left": 0, + "window_top": 0, + "window_right": 79, + "window_bottom": 23 + }, + { + "schema": "termforge-qt-child-size-v1", + "nonce": 0, + "query_error": 0, + "buffer_columns": 80, + "buffer_rows": 24, + "window_left": 0, + "window_top": 0, + "window_right": 79, + "window_bottom": 23 + }, + { + "schema": "termforge-qt-resize-state-v1", + "stage": 700, + "requested_columns": 60, + "requested_rows": 12, + "widget_width": 616, + "widget_height": 323, + "core_columns": 66, + "core_rows": 12, + "transport_columns": 66, + "transport_rows": 12, + "requested_revision": 1, + "transport_revision": 1, + "accepting": 1, + "pending": 0 + }, + { + "schema": "termforge-qt-cpp-supervisor-v1", + "status": "failed", + "timed_out": false, + "exit_code": 1, + "job_after": { + "active": 0, + "total": 6, + "terminated": 0 + }, + "error": "Qt smoke failed or left owned processes active" + } + ] + }, + "green": { + "source_commit": "82d97d144fcd6dd4aa775b613505c4e7dcdbbd03", + "raw_record": { + "name": "21-font-green.log", + "bytes": 8305, + "sha256": "32d5f5803ec0e2dba172f8c1d8210a4cd8766d39a8aa5017bb3372abb539c80c", + "published": false + }, + "binary": { + "name": "qt_cpp_resize_smoke.exe", + "bytes": 167424, + "sha256": "2eaedd479e6e9dec7293246081bf3c67dbacaabd12a01001128e0741cf0e51d1", + "published": false + }, + "binary_identity_gap": null, + "observations": [ + { + "schema": "termforge-qt-child-size-v1", + "nonce": 0, + "query_error": 0, + "buffer_columns": 80, + "buffer_rows": 24, + "window_left": 0, + "window_top": 0, + "window_right": 79, + "window_bottom": 23 + }, + { + "schema": "termforge-qt-resize-state-v1", + "stage": 0, + "requested_columns": 80, + "requested_rows": 24, + "widget_width": 736, + "widget_height": 574, + "core_columns": 80, + "core_rows": 24, + "transport_columns": 80, + "transport_rows": 24, + "requested_revision": 0, + "transport_revision": 0, + "accepting": 1, + "pending": 0 + }, + { + "schema": "termforge-qt-resize-state-v1", + "stage": 1, + "requested_columns": 60, + "requested_rows": 12, + "widget_width": 556, + "widget_height": 310, + "core_columns": 60, + "core_rows": 12, + "transport_columns": 80, + "transport_rows": 24, + "requested_revision": 1, + "transport_revision": 0, + "accepting": 1, + "pending": 1 + }, + { + "schema": "termforge-qt-child-size-v1", + "nonce": 101, + "query_error": 0, + "buffer_columns": 80, + "buffer_rows": 24, + "window_left": 0, + "window_top": 0, + "window_right": 79, + "window_bottom": 23 + }, + { + "schema": "termforge-qt-child-size-v1", + "nonce": 102, + "query_error": 0, + "buffer_columns": 60, + "buffer_rows": 12, + "window_left": 0, + "window_top": 0, + "window_right": 59, + "window_bottom": 11 + }, + { + "schema": "termforge-qt-resize-state-v1", + "stage": 1, + "requested_columns": 60, + "requested_rows": 12, + "widget_width": 556, + "widget_height": 310, + "core_columns": 60, + "core_rows": 12, + "transport_columns": 60, + "transport_rows": 12, + "requested_revision": 1, + "transport_revision": 1, + "accepting": 1, + "pending": 0 + }, + { + "schema": "termforge-qt-resize-state-v1", + "stage": 2, + "requested_columns": 100, + "requested_rows": 30, + "widget_width": 916, + "widget_height": 706, + "core_columns": 100, + "core_rows": 30, + "transport_columns": 60, + "transport_rows": 12, + "requested_revision": 2, + "transport_revision": 1, + "accepting": 1, + "pending": 1 + }, + { + "schema": "termforge-qt-child-size-v1", + "nonce": 103, + "query_error": 0, + "buffer_columns": 100, + "buffer_rows": 30, + "window_left": 0, + "window_top": 0, + "window_right": 99, + "window_bottom": 29 + }, + { + "schema": "termforge-qt-resize-state-v1", + "stage": 2, + "requested_columns": 100, + "requested_rows": 30, + "widget_width": 916, + "widget_height": 706, + "core_columns": 100, + "core_rows": 30, + "transport_columns": 100, + "transport_rows": 30, + "requested_revision": 2, + "transport_revision": 2, + "accepting": 1, + "pending": 0 + }, + { + "schema": "termforge-qt-resize-state-v1", + "stage": 3, + "requested_columns": 80, + "requested_rows": 24, + "widget_width": 736, + "widget_height": 574, + "core_columns": 80, + "core_rows": 24, + "transport_columns": 100, + "transport_rows": 30, + "requested_revision": 3, + "transport_revision": 2, + "accepting": 1, + "pending": 1 + }, + { + "schema": "termforge-qt-child-size-v1", + "nonce": 104, + "query_error": 0, + "buffer_columns": 80, + "buffer_rows": 24, + "window_left": 0, + "window_top": 0, + "window_right": 79, + "window_bottom": 23 + }, + { + "schema": "termforge-qt-resize-state-v1", + "stage": 3, + "requested_columns": 80, + "requested_rows": 24, + "widget_width": 736, + "widget_height": 574, + "core_columns": 80, + "core_rows": 24, + "transport_columns": 80, + "transport_rows": 24, + "requested_revision": 3, + "transport_revision": 3, + "accepting": 1, + "pending": 0 + }, + { + "schema": "termforge-qt-resize-state-v1", + "stage": 4, + "requested_columns": 1, + "requested_rows": 1, + "widget_width": 1, + "widget_height": 1, + "core_columns": 1, + "core_rows": 1, + "transport_columns": 80, + "transport_rows": 24, + "requested_revision": 4, + "transport_revision": 3, + "accepting": 1, + "pending": 1 + }, + { + "schema": "termforge-qt-child-size-v1", + "nonce": 105, + "query_error": 0, + "buffer_columns": 80, + "buffer_rows": 24, + "window_left": 0, + "window_top": 0, + "window_right": 79, + "window_bottom": 23 + }, + { + "schema": "termforge-qt-child-size-v1", + "nonce": 106, + "query_error": 0, + "buffer_columns": 1, + "buffer_rows": 1, + "window_left": 0, + "window_top": 0, + "window_right": 0, + "window_bottom": 0 + }, + { + "schema": "termforge-qt-resize-state-v1", + "stage": 4, + "requested_columns": 1, + "requested_rows": 1, + "widget_width": 1, + "widget_height": 1, + "core_columns": 1, + "core_rows": 1, + "transport_columns": 1, + "transport_rows": 1, + "requested_revision": 4, + "transport_revision": 4, + "accepting": 1, + "pending": 0 + }, + { + "schema": "termforge-qt-resize-state-v1", + "stage": 5, + "requested_columns": 80, + "requested_rows": 24, + "widget_width": 736, + "widget_height": 574, + "core_columns": 80, + "core_rows": 24, + "transport_columns": 1, + "transport_rows": 1, + "requested_revision": 5, + "transport_revision": 4, + "accepting": 1, + "pending": 1 + }, + { + "schema": "termforge-qt-child-size-v1", + "nonce": 107, + "query_error": 0, + "buffer_columns": 80, + "buffer_rows": 24, + "window_left": 0, + "window_top": 0, + "window_right": 79, + "window_bottom": 23 + }, + { + "schema": "termforge-qt-resize-state-v1", + "stage": 5, + "requested_columns": 80, + "requested_rows": 24, + "widget_width": 736, + "widget_height": 574, + "core_columns": 80, + "core_rows": 24, + "transport_columns": 80, + "transport_rows": 24, + "requested_revision": 5, + "transport_revision": 5, + "accepting": 1, + "pending": 0 + }, + { + "schema": "termforge-qt-resize-state-v1", + "stage": 6, + "requested_columns": 80, + "requested_rows": 24, + "widget_width": 736, + "widget_height": 574, + "core_columns": 80, + "core_rows": 24, + "transport_columns": 80, + "transport_rows": 24, + "requested_revision": 5, + "transport_revision": 5, + "accepting": 1, + "pending": 0 + }, + { + "schema": "termforge-qt-child-size-v1", + "nonce": 108, + "query_error": 0, + "buffer_columns": 80, + "buffer_rows": 24, + "window_left": 0, + "window_top": 0, + "window_right": 79, + "window_bottom": 23 + }, + { + "schema": "termforge-qt-resize-state-v1", + "stage": 6, + "requested_columns": 80, + "requested_rows": 24, + "widget_width": 736, + "widget_height": 574, + "core_columns": 80, + "core_rows": 24, + "transport_columns": 80, + "transport_rows": 24, + "requested_revision": 5, + "transport_revision": 5, + "accepting": 1, + "pending": 0 + }, + { + "schema": "termforge-qt-child-size-v1", + "nonce": 109, + "query_error": 0, + "buffer_columns": 80, + "buffer_rows": 24, + "window_left": 0, + "window_top": 0, + "window_right": 79, + "window_bottom": 23 + }, + { + "schema": "termforge-qt-child-size-v1", + "nonce": 0, + "query_error": 0, + "buffer_columns": 80, + "buffer_rows": 24, + "window_left": 0, + "window_top": 0, + "window_right": 79, + "window_bottom": 23 + }, + { + "schema": "termforge-qt-resize-state-v1", + "stage": 700, + "requested_columns": 60, + "requested_rows": 12, + "widget_width": 616, + "widget_height": 323, + "core_columns": 60, + "core_rows": 12, + "transport_columns": 80, + "transport_rows": 24, + "requested_revision": 2, + "transport_revision": 0, + "accepting": 1, + "pending": 1 + }, + { + "schema": "termforge-qt-child-size-v1", + "nonce": 701, + "query_error": 0, + "buffer_columns": 80, + "buffer_rows": 24, + "window_left": 0, + "window_top": 0, + "window_right": 79, + "window_bottom": 23 + }, + { + "schema": "termforge-qt-child-size-v1", + "nonce": 702, + "query_error": 0, + "buffer_columns": 60, + "buffer_rows": 12, + "window_left": 0, + "window_top": 0, + "window_right": 59, + "window_bottom": 11 + }, + { + "schema": "termforge-qt-child-size-v1", + "nonce": 0, + "query_error": 0, + "buffer_columns": 80, + "buffer_rows": 24, + "window_left": 0, + "window_top": 0, + "window_right": 79, + "window_bottom": 23 + }, + { + "schema": "termforge-qt-resize-error-v1", + "accepting": 0, + "pending": 0, + "error_visible": 1 + }, + { + "schema": "termforge-qt-cpp-supervisor-v1", + "status": "passed", + "timed_out": false, + "exit_code": 0, + "job_after": { + "active": 0, + "total": 8, + "terminated": 0 + }, + "sample": { + "schema": "termforge-qt-resize-smoke-v1", + "grid_sequence_cases": 6, + "child_ack_replies": 8, + "qt_heartbeat_events": 6, + "child_exit": 37, + "cleanup_verified": true, + "presented_done": null + } + } + ] + }, + "scope": "Current public font changed from 11pt to 12pt: old implementation computed 66 instead of 60 columns; fixed without new font dependency" + } + }, + "full_matrix": { + "ctest_exit": 0, + "total": 57, + "passed": 57, + "failed": 0, + "qt_tests": 2, + "other_independent_or_legacy_diagnostics": 55, + "ctest_total_seconds": 301.08, + "internal_skips": [ + { + "ctest_number": 33, + "test": "setUpClass (test_candidate_compare.CandidateComparisonTests)", + "reason": "optional Alacritty binary is not built; core-candidate workflow runs these checks" + }, + { + "ctest_number": 33, + "test": "setUpClass (test_capability_matrix.CapabilityMatrixTests)", + "reason": "optional Alacritty binary is not built; core-candidate workflow runs these checks" + }, + { + "ctest_number": 33, + "test": "setUpClass (test_fuzz_matrix.FuzzMatrixTests)", + "reason": "optional Alacritty binary is not built; core-candidate workflow runs these checks" + }, + { + "ctest_number": 33, + "test": "setUpClass (test_real_app_matrix.RealApplicationMatrixTests)", + "reason": "optional real application capture dependencies are not built" + }, + { + "ctest_number": 35, + "test": "test_actual_system_copy_paste_and_shortcuts_twice (experiments.shell.test_actions.ActionWindowTest.test_actual_system_copy_paste_and_shortcuts_twice)", + "reason": "actual system Copy/Paste requires a disposable hosted VM" + }, + { + "ctest_number": 43, + "test": "test_suspended_target_is_reclaimed_if_job_assignment_fails (test_ui_r1.EvidenceBoundaryTests.test_suspended_target_is_reclaimed_if_job_assignment_fails)", + "reason": "opt-in pinned reference failure injection" + }, + { + "ctest_number": 51, + "test": "test_mouse_selection_to_real_system_clipboard (experiments.shell.test_shell.ShellTests.test_mouse_selection_to_real_system_clipboard)", + "reason": "system copy UI gate requires a disposable hosted VM" + }, + { + "ctest_number": 51, + "test": "test_system_clipboard_product_read_errors_cancel_and_close (experiments.shell.test_shell.ShellTests.test_system_clipboard_product_read_errors_cancel_and_close)", + "reason": "product clipboard read gate requires a disposable hosted VM" + }, + { + "ctest_number": 51, + "test": "test_system_clipboard_shortcut_to_window_confirmation_and_receiver (experiments.shell.test_shell.ShellTests.test_system_clipboard_shortcut_to_window_confirmation_and_receiver)", + "reason": "real system clipboard UI gate requires a disposable hosted VM" + }, + { + "ctest_number": 52, + "test": "test_owned_clipboard_contention_preserves_write_and_read_failures (experiments.shell.test_selection_bytes.SelectionBytesWindowTest.test_owned_clipboard_contention_preserves_write_and_read_failures)", + "reason": "system CF requires a disposable hosted VM" + }, + { + "ctest_number": 52, + "test": "test_real_system_copy_shortcuts_for_styled_fixture_twice (experiments.shell.test_selection_bytes.SelectionBytesWindowTest.test_real_system_copy_shortcuts_for_styled_fixture_twice)", + "reason": "system CF requires a disposable hosted VM" + }, + { + "ctest_number": 53, + "test": "test_real_system_copy_and_edit_context_twice (experiments.shell.test_selection_context.SelectionContextWindowTest.test_real_system_copy_and_edit_context_twice)", + "reason": "real CF/EDIT Copy requires a disposable hosted VM" + }, + { + "ctest_number": 55, + "test": "test_real_system_clipboard (experiments.shell.test_paste.PasteTests.test_real_system_clipboard)", + "reason": "Private window station OpenClipboard denied (5); system API gate remains unverified. Evidence: ", + "private_path_redacted": true, + "original_reason_sha256": "adb03c2a8ce73ad7c73da4807fda62369dbab90094dbb3b1ba3256f315fe6b1d", + "diagnostic_artifact": { + "name": "private-clipboard.json", + "bytes": 677, + "sha256": "011913503203eee30289c896d4fcfece7b543416d731acda4a687944578e307c", + "published": false + } + } + ], + "internal_skip_count": 13, + "qt_original": { + "schema": "termforge-qt-cpp-supervisor-v1", + "status": "passed", + "timed_out": false, + "exit_code": 0, + "job_after": { + "active": 0, + "total": 26, + "terminated": 0 + }, + "sample": { + "schema": "termforge-qt-cpp-smoke-v1", + "qt": "6.10.3", + "core": "cpp", + "backend": "fixed-microsoft-conpty", + "arithmetic": 750, + "child_exit": 37, + "cleanup_verified": true, + "image_changed": true, + "startup_error_visible": true, + "manual_close_reclaimed": true, + "tabs": { + "arithmetic": [ + 750, + 427 + ], + "survivor_after_close": 778, + "survivor_after_startup_failure": 147, + "natural_exit": 41, + "input_isolation": true, + "answer_ink_visible": true, + "independent_close": true, + "startup_error_visible": true, + "window_close_reclaimed": true, + "all_exited_status": 41, + "failed_only_kept_visible": true + }, + "app_exec": { + "window_close": true, + "last_tab_close": true, + "failed_only_close": true, + "completed_tab_close": true, + "cleanup_before_quit": true, + "manual_status": 0 + }, + "presented_done": null + } + }, + "qt_resize": { + "schema": "termforge-qt-cpp-supervisor-v1", + "status": "passed", + "timed_out": false, + "exit_code": 0, + "job_after": { + "active": 0, + "total": 25, + "terminated": 0 + }, + "sample": { + "schema": "termforge-qt-resize-smoke-v1", + "grid_sequence_cases": 8, + "child_ack_replies": 14, + "qt_heartbeat_events": 8, + "output_bytes": 2097195, + "output_queue_high_water": 262144, + "same_size_cmd_output_retained": true, + "child_exit": 37, + "cleanup_verified": true, + "presented_done": null + } + }, + "all_resize_observations_in_order": [ + { + "schema": "termforge-qt-child-size-v1", + "nonce": 0, + "query_error": 0, + "buffer_columns": 80, + "buffer_rows": 24, + "window_left": 0, + "window_top": 0, + "window_right": 79, + "window_bottom": 23 + }, + { + "schema": "termforge-qt-resize-state-v1", + "stage": 0, + "requested_columns": 80, + "requested_rows": 24, + "widget_width": 736, + "widget_height": 574, + "core_columns": 80, + "core_rows": 24, + "transport_columns": 80, + "transport_rows": 24, + "requested_revision": 0, + "transport_revision": 0, + "accepting": 1, + "pending": 0 + }, + { + "schema": "termforge-qt-resize-state-v1", + "stage": 1, + "requested_columns": 60, + "requested_rows": 12, + "widget_width": 556, + "widget_height": 310, + "core_columns": 60, + "core_rows": 12, + "transport_columns": 80, + "transport_rows": 24, + "requested_revision": 1, + "transport_revision": 0, + "accepting": 1, + "pending": 1 + }, + { + "schema": "termforge-qt-child-size-v1", + "nonce": 101, + "query_error": 0, + "buffer_columns": 80, + "buffer_rows": 24, + "window_left": 0, + "window_top": 0, + "window_right": 79, + "window_bottom": 23 + }, + { + "schema": "termforge-qt-child-size-v1", + "nonce": 102, + "query_error": 0, + "buffer_columns": 60, + "buffer_rows": 12, + "window_left": 0, + "window_top": 0, + "window_right": 59, + "window_bottom": 11 + }, + { + "schema": "termforge-qt-resize-state-v1", + "stage": 1, + "requested_columns": 60, + "requested_rows": 12, + "widget_width": 556, + "widget_height": 310, + "core_columns": 60, + "core_rows": 12, + "transport_columns": 60, + "transport_rows": 12, + "requested_revision": 1, + "transport_revision": 1, + "accepting": 1, + "pending": 0 + }, + { + "schema": "termforge-qt-resize-state-v1", + "stage": 2, + "requested_columns": 100, + "requested_rows": 30, + "widget_width": 916, + "widget_height": 706, + "core_columns": 100, + "core_rows": 30, + "transport_columns": 60, + "transport_rows": 12, + "requested_revision": 2, + "transport_revision": 1, + "accepting": 1, + "pending": 1 + }, + { + "schema": "termforge-qt-child-size-v1", + "nonce": 103, + "query_error": 0, + "buffer_columns": 100, + "buffer_rows": 30, + "window_left": 0, + "window_top": 0, + "window_right": 99, + "window_bottom": 29 + }, + { + "schema": "termforge-qt-resize-state-v1", + "stage": 2, + "requested_columns": 100, + "requested_rows": 30, + "widget_width": 916, + "widget_height": 706, + "core_columns": 100, + "core_rows": 30, + "transport_columns": 100, + "transport_rows": 30, + "requested_revision": 2, + "transport_revision": 2, + "accepting": 1, + "pending": 0 + }, + { + "schema": "termforge-qt-resize-state-v1", + "stage": 3, + "requested_columns": 80, + "requested_rows": 24, + "widget_width": 736, + "widget_height": 574, + "core_columns": 80, + "core_rows": 24, + "transport_columns": 100, + "transport_rows": 30, + "requested_revision": 3, + "transport_revision": 2, + "accepting": 1, + "pending": 1 + }, + { + "schema": "termforge-qt-child-size-v1", + "nonce": 104, + "query_error": 0, + "buffer_columns": 100, + "buffer_rows": 30, + "window_left": 0, + "window_top": 0, + "window_right": 99, + "window_bottom": 29 + }, + { + "schema": "termforge-qt-child-size-v1", + "nonce": 105, + "query_error": 0, + "buffer_columns": 80, + "buffer_rows": 24, + "window_left": 0, + "window_top": 0, + "window_right": 79, + "window_bottom": 23 + }, + { + "schema": "termforge-qt-resize-state-v1", + "stage": 3, + "requested_columns": 80, + "requested_rows": 24, + "widget_width": 736, + "widget_height": 574, + "core_columns": 80, + "core_rows": 24, + "transport_columns": 80, + "transport_rows": 24, + "requested_revision": 3, + "transport_revision": 3, + "accepting": 1, + "pending": 0 + }, + { + "schema": "termforge-qt-resize-state-v1", + "stage": 4, + "requested_columns": 1, + "requested_rows": 24, + "widget_width": 25, + "widget_height": 574, + "core_columns": 1, + "core_rows": 24, + "transport_columns": 80, + "transport_rows": 24, + "requested_revision": 4, + "transport_revision": 3, + "accepting": 1, + "pending": 1 + }, + { + "schema": "termforge-qt-child-size-v1", + "nonce": 106, + "query_error": 0, + "buffer_columns": 80, + "buffer_rows": 24, + "window_left": 0, + "window_top": 0, + "window_right": 79, + "window_bottom": 23 + }, + { + "schema": "termforge-qt-child-size-v1", + "nonce": 107, + "query_error": 0, + "buffer_columns": 1, + "buffer_rows": 24, + "window_left": 0, + "window_top": 0, + "window_right": 0, + "window_bottom": 23 + }, + { + "schema": "termforge-qt-resize-state-v1", + "stage": 4, + "requested_columns": 1, + "requested_rows": 24, + "widget_width": 25, + "widget_height": 574, + "core_columns": 1, + "core_rows": 24, + "transport_columns": 1, + "transport_rows": 24, + "requested_revision": 4, + "transport_revision": 4, + "accepting": 1, + "pending": 0 + }, + { + "schema": "termforge-qt-resize-state-v1", + "stage": 5, + "requested_columns": 80, + "requested_rows": 1, + "widget_width": 736, + "widget_height": 68, + "core_columns": 80, + "core_rows": 1, + "transport_columns": 1, + "transport_rows": 24, + "requested_revision": 5, + "transport_revision": 4, + "accepting": 1, + "pending": 1 + }, + { + "schema": "termforge-qt-child-size-v1", + "nonce": 108, + "query_error": 0, + "buffer_columns": 1, + "buffer_rows": 24, + "window_left": 0, + "window_top": 0, + "window_right": 0, + "window_bottom": 23 + }, + { + "schema": "termforge-qt-child-size-v1", + "nonce": 109, + "query_error": 0, + "buffer_columns": 1, + "buffer_rows": 24, + "window_left": 0, + "window_top": 0, + "window_right": 0, + "window_bottom": 23 + }, + { + "schema": "termforge-qt-child-size-v1", + "nonce": 110, + "query_error": 0, + "buffer_columns": 80, + "buffer_rows": 1, + "window_left": 0, + "window_top": 0, + "window_right": 79, + "window_bottom": 0 + }, + { + "schema": "termforge-qt-resize-state-v1", + "stage": 5, + "requested_columns": 80, + "requested_rows": 1, + "widget_width": 736, + "widget_height": 68, + "core_columns": 80, + "core_rows": 1, + "transport_columns": 80, + "transport_rows": 1, + "requested_revision": 5, + "transport_revision": 5, + "accepting": 1, + "pending": 0 + }, + { + "schema": "termforge-qt-resize-state-v1", + "stage": 6, + "requested_columns": 1, + "requested_rows": 1, + "widget_width": 1, + "widget_height": 1, + "core_columns": 1, + "core_rows": 1, + "transport_columns": 80, + "transport_rows": 1, + "requested_revision": 6, + "transport_revision": 5, + "accepting": 1, + "pending": 1 + }, + { + "schema": "termforge-qt-child-size-v1", + "nonce": 111, + "query_error": 0, + "buffer_columns": 80, + "buffer_rows": 1, + "window_left": 0, + "window_top": 0, + "window_right": 79, + "window_bottom": 0 + }, + { + "schema": "termforge-qt-child-size-v1", + "nonce": 112, + "query_error": 0, + "buffer_columns": 1, + "buffer_rows": 1, + "window_left": 0, + "window_top": 0, + "window_right": 0, + "window_bottom": 0 + }, + { + "schema": "termforge-qt-resize-state-v1", + "stage": 6, + "requested_columns": 1, + "requested_rows": 1, + "widget_width": 1, + "widget_height": 1, + "core_columns": 1, + "core_rows": 1, + "transport_columns": 1, + "transport_rows": 1, + "requested_revision": 6, + "transport_revision": 6, + "accepting": 1, + "pending": 0 + }, + { + "schema": "termforge-qt-resize-state-v1", + "stage": 7, + "requested_columns": 80, + "requested_rows": 24, + "widget_width": 736, + "widget_height": 574, + "core_columns": 80, + "core_rows": 24, + "transport_columns": 1, + "transport_rows": 1, + "requested_revision": 7, + "transport_revision": 6, + "accepting": 1, + "pending": 1 + }, + { + "schema": "termforge-qt-child-size-v1", + "nonce": 113, + "query_error": 0, + "buffer_columns": 80, + "buffer_rows": 24, + "window_left": 0, + "window_top": 0, + "window_right": 79, + "window_bottom": 23 + }, + { + "schema": "termforge-qt-resize-state-v1", + "stage": 7, + "requested_columns": 80, + "requested_rows": 24, + "widget_width": 736, + "widget_height": 574, + "core_columns": 80, + "core_rows": 24, + "transport_columns": 80, + "transport_rows": 24, + "requested_revision": 7, + "transport_revision": 7, + "accepting": 1, + "pending": 0 + }, + { + "schema": "termforge-qt-resize-state-v1", + "stage": 8, + "requested_columns": 80, + "requested_rows": 24, + "widget_width": 736, + "widget_height": 574, + "core_columns": 80, + "core_rows": 24, + "transport_columns": 80, + "transport_rows": 24, + "requested_revision": 7, + "transport_revision": 7, + "accepting": 1, + "pending": 0 + }, + { + "schema": "termforge-qt-child-size-v1", + "nonce": 114, + "query_error": 0, + "buffer_columns": 80, + "buffer_rows": 24, + "window_left": 0, + "window_top": 0, + "window_right": 79, + "window_bottom": 23 + }, + { + "schema": "termforge-qt-resize-state-v1", + "stage": 8, + "requested_columns": 80, + "requested_rows": 24, + "widget_width": 736, + "widget_height": 574, + "core_columns": 80, + "core_rows": 24, + "transport_columns": 80, + "transport_rows": 24, + "requested_revision": 7, + "transport_revision": 7, + "accepting": 1, + "pending": 0 + }, + { + "schema": "termforge-qt-child-size-v1", + "nonce": 115, + "query_error": 0, + "buffer_columns": 80, + "buffer_rows": 24, + "window_left": 0, + "window_top": 0, + "window_right": 79, + "window_bottom": 23 + }, + { + "schema": "termforge-qt-child-size-v1", + "nonce": 0, + "query_error": 0, + "buffer_columns": 80, + "buffer_rows": 24, + "window_left": 0, + "window_top": 0, + "window_right": 79, + "window_bottom": 23 + }, + { + "schema": "termforge-qt-resize-state-v1", + "stage": 700, + "requested_columns": 60, + "requested_rows": 12, + "widget_width": 616, + "widget_height": 323, + "core_columns": 60, + "core_rows": 12, + "transport_columns": 80, + "transport_rows": 24, + "requested_revision": 2, + "transport_revision": 0, + "accepting": 1, + "pending": 1 + }, + { + "schema": "termforge-qt-child-size-v1", + "nonce": 701, + "query_error": 0, + "buffer_columns": 80, + "buffer_rows": 24, + "window_left": 0, + "window_top": 0, + "window_right": 79, + "window_bottom": 23 + }, + { + "schema": "termforge-qt-child-size-v1", + "nonce": 702, + "query_error": 0, + "buffer_columns": 60, + "buffer_rows": 12, + "window_left": 0, + "window_top": 0, + "window_right": 59, + "window_bottom": 11 + }, + { + "schema": "termforge-qt-child-size-v1", + "nonce": 0, + "query_error": 0, + "buffer_columns": 80, + "buffer_rows": 24, + "window_left": 0, + "window_top": 0, + "window_right": 79, + "window_bottom": 23 + }, + { + "schema": "termforge-qt-resize-error-v1", + "accepting": 0, + "pending": 0, + "error_recorded": 1 + }, + { + "schema": "termforge-qt-child-size-v1", + "nonce": 0, + "query_error": 0, + "buffer_columns": 80, + "buffer_rows": 24, + "window_left": 0, + "window_top": 0, + "window_right": 79, + "window_bottom": 23 + }, + { + "schema": "termforge-qt-child-size-v1", + "nonce": 0, + "query_error": 0, + "buffer_columns": 80, + "buffer_rows": 24, + "window_left": 0, + "window_top": 0, + "window_right": 79, + "window_bottom": 23 + }, + { + "schema": "termforge-qt-child-size-v1", + "nonce": 801, + "query_error": 0, + "buffer_columns": 80, + "buffer_rows": 24, + "window_left": 0, + "window_top": 0, + "window_right": 79, + "window_bottom": 23 + }, + { + "schema": "termforge-qt-child-size-v1", + "nonce": 802, + "query_error": 0, + "buffer_columns": 60, + "buffer_rows": 12, + "window_left": 0, + "window_top": 0, + "window_right": 59, + "window_bottom": 11 + }, + { + "schema": "termforge-qt-resize-state-v1", + "stage": 800, + "requested_columns": 60, + "requested_rows": 12, + "widget_width": 556, + "widget_height": 310, + "core_columns": 60, + "core_rows": 12, + "transport_columns": 60, + "transport_rows": 12, + "requested_revision": 1, + "transport_revision": 1, + "accepting": 1, + "pending": 0 + }, + { + "schema": "termforge-qt-child-size-v1", + "nonce": 899, + "query_error": 0, + "buffer_columns": 80, + "buffer_rows": 24, + "window_left": 0, + "window_top": 0, + "window_right": 79, + "window_bottom": 23 + }, + { + "schema": "termforge-qt-child-size-v1", + "nonce": 901, + "query_error": 0, + "buffer_columns": 80, + "buffer_rows": 24, + "window_left": 0, + "window_top": 0, + "window_right": 79, + "window_bottom": 23 + }, + { + "schema": "termforge-qt-child-size-v1", + "nonce": 902, + "query_error": 0, + "buffer_columns": 60, + "buffer_rows": 12, + "window_left": 0, + "window_top": 0, + "window_right": 59, + "window_bottom": 11 + }, + { + "schema": "termforge-qt-resize-state-v1", + "stage": 801, + "requested_columns": 60, + "requested_rows": 12, + "widget_width": 556, + "widget_height": 310, + "core_columns": 60, + "core_rows": 12, + "transport_columns": 60, + "transport_rows": 12, + "requested_revision": 1, + "transport_revision": 1, + "accepting": 1, + "pending": 0 + }, + { + "schema": "termforge-qt-child-size-v1", + "nonce": 1001, + "query_error": 0, + "buffer_columns": 60, + "buffer_rows": 12, + "window_left": 0, + "window_top": 0, + "window_right": 59, + "window_bottom": 11 + }, + { + "schema": "termforge-qt-child-size-v1", + "nonce": 1002, + "query_error": 0, + "buffer_columns": 100, + "buffer_rows": 30, + "window_left": 0, + "window_top": 0, + "window_right": 99, + "window_bottom": 29 + }, + { + "schema": "termforge-qt-resize-state-v1", + "stage": 802, + "requested_columns": 100, + "requested_rows": 30, + "widget_width": 916, + "widget_height": 706, + "core_columns": 100, + "core_rows": 30, + "transport_columns": 100, + "transport_rows": 30, + "requested_revision": 2, + "transport_revision": 2, + "accepting": 1, + "pending": 0 + }, + { + "schema": "termforge-qt-resize-state-v1", + "stage": 900, + "requested_columns": 60, + "requested_rows": 12, + "widget_width": 736, + "widget_height": 574, + "core_columns": 60, + "core_rows": 12, + "transport_columns": 80, + "transport_rows": 24, + "requested_revision": 1, + "transport_revision": 0, + "accepting": 1, + "pending": 1 + }, + { + "schema": "termforge-qt-resize-state-v1", + "stage": 900, + "requested_columns": 60, + "requested_rows": 12, + "widget_width": 736, + "widget_height": 574, + "core_columns": 60, + "core_rows": 12, + "transport_columns": 80, + "transport_rows": 24, + "requested_revision": 1, + "transport_revision": 0, + "accepting": 0, + "pending": 0 + }, + { + "schema": "termforge-qt-child-size-v1", + "nonce": 0, + "query_error": 0, + "buffer_columns": 80, + "buffer_rows": 24, + "window_left": 0, + "window_top": 0, + "window_right": 79, + "window_bottom": 23 + }, + { + "schema": "termforge-qt-resize-state-v1", + "stage": 901, + "requested_columns": 60, + "requested_rows": 12, + "widget_width": 736, + "widget_height": 574, + "core_columns": 60, + "core_rows": 12, + "transport_columns": 80, + "transport_rows": 24, + "requested_revision": 1, + "transport_revision": 0, + "accepting": 1, + "pending": 1 + }, + { + "schema": "termforge-qt-resize-state-v1", + "stage": 901, + "requested_columns": 60, + "requested_rows": 12, + "widget_width": 736, + "widget_height": 574, + "core_columns": 60, + "core_rows": 12, + "transport_columns": 80, + "transport_rows": 24, + "requested_revision": 1, + "transport_revision": 0, + "accepting": 0, + "pending": 0 + }, + { + "schema": "termforge-qt-child-size-v1", + "nonce": 0, + "query_error": 0, + "buffer_columns": 80, + "buffer_rows": 24, + "window_left": 0, + "window_top": 0, + "window_right": 79, + "window_bottom": 23 + }, + { + "schema": "termforge-qt-resize-state-v1", + "stage": 902, + "requested_columns": 60, + "requested_rows": 12, + "widget_width": 736, + "widget_height": 574, + "core_columns": 60, + "core_rows": 12, + "transport_columns": 80, + "transport_rows": 24, + "requested_revision": 1, + "transport_revision": 0, + "accepting": 1, + "pending": 1 + }, + { + "schema": "termforge-qt-child-size-v1", + "nonce": 1201, + "query_error": 0, + "buffer_columns": 80, + "buffer_rows": 24, + "window_left": 0, + "window_top": 0, + "window_right": 79, + "window_bottom": 23 + }, + { + "schema": "termforge-qt-resize-state-v1", + "stage": 902, + "requested_columns": 60, + "requested_rows": 12, + "widget_width": 736, + "widget_height": 574, + "core_columns": 60, + "core_rows": 12, + "transport_columns": 80, + "transport_rows": 24, + "requested_revision": 1, + "transport_revision": 0, + "accepting": 0, + "pending": 0 + }, + { + "schema": "termforge-qt-resize-state-v1", + "stage": 903, + "requested_columns": 80, + "requested_rows": 24, + "widget_width": 736, + "widget_height": 574, + "core_columns": 80, + "core_rows": 24, + "transport_columns": 0, + "transport_rows": 0, + "requested_revision": 0, + "transport_revision": 0, + "accepting": 0, + "pending": 0 + }, + { + "schema": "termforge-qt-child-size-v1", + "nonce": 0, + "query_error": 0, + "buffer_columns": 80, + "buffer_rows": 24, + "window_left": 0, + "window_top": 0, + "window_right": 79, + "window_bottom": 23 + }, + { + "schema": "termforge-qt-child-size-v1", + "nonce": 1301, + "query_error": 0, + "buffer_columns": 100, + "buffer_rows": 30, + "window_left": 0, + "window_top": 0, + "window_right": 99, + "window_bottom": 29 + }, + { + "schema": "termforge-qt-child-size-v1", + "nonce": 1302, + "query_error": 0, + "buffer_columns": 100, + "buffer_rows": 30, + "window_left": 0, + "window_top": 0, + "window_right": 99, + "window_bottom": 29 + }, + { + "schema": "termforge-qt-child-size-v1", + "nonce": 1401, + "query_error": 0, + "buffer_columns": 100, + "buffer_rows": 30, + "window_left": 0, + "window_top": 0, + "window_right": 99, + "window_bottom": 29 + }, + { + "schema": "termforge-qt-child-size-v1", + "nonce": 0, + "query_error": 0, + "buffer_columns": 500, + "buffer_rows": 200, + "window_left": 0, + "window_top": 0, + "window_right": 499, + "window_bottom": 199 + }, + { + "schema": "termforge-qt-resize-state-v1", + "stage": 1600, + "requested_columns": 600, + "requested_rows": 240, + "widget_width": 5416, + "widget_height": 5326, + "core_columns": 500, + "core_rows": 200, + "transport_columns": 500, + "transport_rows": 200, + "requested_revision": 1, + "transport_revision": 1, + "accepting": 1, + "pending": 0 + }, + { + "schema": "termforge-qt-child-size-v1", + "nonce": 1601, + "query_error": 0, + "buffer_columns": 500, + "buffer_rows": 200, + "window_left": 0, + "window_top": 0, + "window_right": 499, + "window_bottom": 199 + } + ] + }, + "test_protocol": { + "confirmed_seams": [ + "Session control and diagnostic state", + "public Qt application geometry/input", + "independent real-child CSBI replies" + ], + "outer_owned_job_seconds": 25, + "ctest_timeout_seconds": 35, + "stage_wait_milliseconds": 5000, + "size_query_maximum_replies_per_stage": 128, + "nonmatching_reply_cadence_milliseconds": 10, + "pending_close_maximum_attempts": 64, + "all_child_replies_retained": true, + "child_receives_expected_dimensions": false, + "real_child_identity": "Named pipe server/client PID+session binding, Session PID match and owned Job containment", + "tiny_grid_response_channel": "Test-only bounded nonblocking named-pipe messages, independent of screen capacity", + "fixed_screen_bounds": { + "columns": [ + 1, + 500 + ], + "rows": [ + 1, + 200 + ] + }, + "requested_core_transport_and_child_ack_are_separate": true + }, + "private_raw_records": [ + { + "name": "01-configure.log", + "bytes": 1228, + "sha256": "359bab2c3604eabd1d83da4539387b03c48f181fffd6cc9ac7715895d72144cf", + "published": false + }, + { + "name": "02-red-build.log", + "bytes": 3162, + "sha256": "6a803131e06af78252b36d88e02c490e1444f75ecc5484e48842c89aeb8c7636", + "published": false + }, + { + "name": "03-grid-red.log", + "bytes": 2054, + "sha256": "0c58aefcaf89c6e5aa058cd8ed356aa09259a1f0351b212fa96bc1b7a64cc62a", + "published": false + }, + { + "name": "04-grid-green-build.log", + "bytes": 2502, + "sha256": "c0436402d052a9179ebbe1aa434f2a5a7076304a4db4139ec9935710e0869ffe", + "published": false + }, + { + "name": "05-grid-green.log", + "bytes": 1829, + "sha256": "97854054dc3c10aaf35c0566a181231396a9feeda321ff1aadc31224cb9bd854", + "published": false + }, + { + "name": "06-child-red-build.log", + "bytes": 2502, + "sha256": "c0436402d052a9179ebbe1aa434f2a5a7076304a4db4139ec9935710e0869ffe", + "published": false + }, + { + "name": "07-child-red.log", + "bytes": 25014, + "sha256": "b54762600952822bc175b4b0c6ed3347c0b0eb066da64209115447ff43efaef6", + "published": false + }, + { + "name": "08-child-green-build.log", + "bytes": 2502, + "sha256": "c0436402d052a9179ebbe1aa434f2a5a7076304a4db4139ec9935710e0869ffe", + "published": false + }, + { + "name": "09-child-green.log", + "bytes": 2385, + "sha256": "ddd421fcdfb90baceee94cafdbd50a477e2c75493df6c6ea9966334fc196edc7", + "published": false + }, + { + "name": "10-error-red-build.log", + "bytes": 2502, + "sha256": "c0436402d052a9179ebbe1aa434f2a5a7076304a4db4139ec9935710e0869ffe", + "published": false + }, + { + "name": "11-error-red.log", + "bytes": 2836, + "sha256": "c4360b7e99627cdde824dbd2a18215037410dab09a1b29ed4a155f21e4adbc3d", + "published": false + }, + { + "name": "12-error-green-build.log", + "bytes": 2502, + "sha256": "c0436402d052a9179ebbe1aa434f2a5a7076304a4db4139ec9935710e0869ffe", + "published": false + }, + { + "name": "13-error-green.log", + "bytes": 2652, + "sha256": "4f1dc15418ed598398eb8283727b0a2def1f261ad7968f06dc4f5adea058c7c5", + "published": false + }, + { + "name": "14-sequence-build.log", + "bytes": 2502, + "sha256": "c0436402d052a9179ebbe1aa434f2a5a7076304a4db4139ec9935710e0869ffe", + "published": false + }, + { + "name": "15-sequence.log", + "bytes": 7663, + "sha256": "b3a1b9368fc1cefd21504f936d2e648e4015a6477bc095d2ce01d52af51d4092", + "published": false + }, + { + "name": "16-preparation.json", + "bytes": 2584, + "sha256": "187428835c2d200a8b5a94ee341b6a0476bae19a13f8442caad3347cf1a12215", + "published": false + }, + { + "name": "16-preparation.log", + "bytes": 2628, + "sha256": "6b0085f58fbb5cb7e63b0b616b4c7cd6226d5b9015799fad58c52bc11cb7c1f0", + "published": false + }, + { + "name": "17-integrated-configure.log", + "bytes": 285, + "sha256": "8e3472d30f896b3205e1e2fdd3ad95fef285ad0b448361f58f7b6390d129c5ca", + "published": false + }, + { + "name": "18-font-red-build.log", + "bytes": 3569, + "sha256": "22cf5bb6e83abd6bd210dabcd1d9c11b86f6fcfad3f7da1e4c05306ce4e3dac6", + "published": false + }, + { + "name": "19-font-red.log", + "bytes": 7848, + "sha256": "bb1fbee24fbbb8731fe17abe6d8e48fc841ac3023f7324308d37dafa8fb8c558", + "published": false + }, + { + "name": "20-font-green-build.log", + "bytes": 3262, + "sha256": "29b9830d62b585135a8a6c377e448bda820b3cc8118a294218f2b5654b924c58", + "published": false + }, + { + "name": "21-font-green.log", + "bytes": 8305, + "sha256": "32d5f5803ec0e2dba172f8c1d8210a4cd8766d39a8aa5017bb3372abb539c80c", + "published": false + }, + { + "name": "22-tabs-build.log", + "bytes": 963, + "sha256": "5be9d03c4a5beccdea18a855884f95ce7d84ed9f5b42df01876b94bfcb616c28", + "published": false + }, + { + "name": "24-tabs-build.log", + "bytes": 7645, + "sha256": "0d56dff010dd6f65423e49923ba32b2a8ec9030e79a032a267f3d8832806a877", + "published": false + }, + { + "name": "25-tabs-and-existing.log", + "bytes": 12863, + "sha256": "8b52211109dd3917a1f2d6cb74c41223c3d8b603335e5876e43494f0c7d99ac4", + "published": false + }, + { + "name": "26-lifecycle-build.log", + "bytes": 3324, + "sha256": "c5e53343f0c6ecf8b56395c16db4168ea940e70e9d3dad2ca5fc4446ffaf0e53", + "published": false + }, + { + "name": "27-lifecycle.log", + "bytes": 13507, + "sha256": "7fab535f9f1f88de607f7333a3d1a8cfdce599c07b1f393a71f9943c7c1c8c3a", + "published": false + }, + { + "name": "28-output-build.log", + "bytes": 3324, + "sha256": "c5e53343f0c6ecf8b56395c16db4168ea940e70e9d3dad2ca5fc4446ffaf0e53", + "published": false + }, + { + "name": "29-output.log", + "bytes": 14323, + "sha256": "96418d01c264ca4baa318e0988fffe863578df82ef387b66420d19f257bc7028", + "published": false + }, + { + "name": "30-bounds-build.log", + "bytes": 3324, + "sha256": "c5e53343f0c6ecf8b56395c16db4168ea940e70e9d3dad2ca5fc4446ffaf0e53", + "published": false + }, + { + "name": "31-bounds.log", + "bytes": 16820, + "sha256": "b115c741f18c571bc0f6cf351b46364108f3bddf06cb0ec64d3f917df5936d04", + "published": false + }, + { + "name": "32-final-build-all.log", + "bytes": 20523, + "sha256": "060abd47fe4366374e40e465e50d93a84263415e1e770258a5f9e141eeb6e518", + "published": false + }, + { + "name": "33-environment.json", + "bytes": 125, + "sha256": "3c8b1c36eb89f539dcb866f35faf6409d97e166aab8ac67e65b02b51456a7779", + "published": false + }, + { + "name": "33-freeze-summary.json", + "bytes": 587, + "sha256": "a791fa478d1a5383d99380ae42ffdcdabc107b282c72d63e79f03cc095ae0ffa", + "published": false + }, + { + "name": "33a-product-manifest-result.json", + "bytes": 253, + "sha256": "0b964586d716707cce2961420a7c8928a18ea5b8d50d949d1a101c17049bbb95", + "published": false + }, + { + "name": "33b-shell-manifest-result.json", + "bytes": 253, + "sha256": "18816cea651354ee48c89d095b3c0e4049b4185ee96429b4171e948a850c76dd", + "published": false + }, + { + "name": "33c-resize-manifest-result.json", + "bytes": 253, + "sha256": "a356f5825b568bf873d753c1a52af92afbe6dfa87691811e7a92902a33cbd316", + "published": false + }, + { + "name": "34-final-ctest-exit.json", + "bytes": 145, + "sha256": "1eacdaaa7dea13f2eaa3789301fa61b5b40af6a474a2460c33ac651b55dcc0f3", + "published": false + }, + { + "name": "34-final-ctest.log", + "bytes": 161525, + "sha256": "60adf1883e33cc7826a3fca28c8717a8cca8aab972ede8001e2ff916ef885674", + "published": false + }, + { + "name": "35-post-run.json", + "bytes": 184, + "sha256": "23b1d07a6d3724c17fac7f837c3152f0374929d29b5bea420eb03f4562ea451d", + "published": false + }, + { + "name": "36-resize-runtime-package.json", + "bytes": 6615, + "sha256": "dbef452ec1109ce843b0adf08028798f5fa8d13bb655fffbed564d0076204056", + "published": false + } + ], + "native_followup_package": { + "source_commit": "678299d54454e26ac04ef6d1c46237ab6b33752b", + "runtime_files": 40, + "includes_own_manifest": true, + "entry": "qt_cpp_resize_smoke.exe", + "zip_bytes": 23835207, + "zip_sha256": "874b7aaf68f963f771c73e5bf20f9faa7fcf9e4d87c3c613df751f12e2a88abc", + "stdin_gate_bytes_hex": "474f0a", + "wait_for_job_cli_flag": false, + "executed_in_guest_in_this_record": false + }, + "limitations": [ + "No WindTerm resize/reflow/content-restoration or full history equivalence claim", + "No actual cross-DPI, physical keyboard, IME/Find/selection/rename or presentation acceptance; presented_done remains null", + "Natural exit racing a pending request may retain the old child/transport size; this is a lifecycle check, not a size-sync pass", + "The 25-second outer guard and original Qt arithmetic/exit assertions were not weakened", + "Existing 256KiB queue capacity is a diagnostic resource guard, not an approved performance tolerance", + "First GUI-only red/green EXE identities were not frozen; no binary identities have been reconstructed", + "Incremental pre-CRT-merge samples and final merged pinned-CRT product configuration are distinct", + "Existing hosted system-backend failures #80/#144/#145 remain separate and are not fixed by this work", + "No product release, complete #29/#31/R2, Qt/third-party redistribution or performance-equivalence acceptance" + ] +} diff --git a/src/qt/README.md b/src/qt/README.md index b7f860d1..ec46a43e 100644 --- a/src/qt/README.md +++ b/src/qt/README.md @@ -1,8 +1,10 @@ # C++ / Qt 本地会话迁移入口 -按 [ADR-0008](../../docs/adr/0008-cpp-core-qt-widgets.md)采用自主 C++ 核心和 Qt Widgets,Windows 进程由[固定微软 ConPTY](../../third_party/conpty/README.md)承载。当前入口提供固定 80×24 的本地 cmd 标签、基本 ASCII 按键、16 色绘制、启动错误与关闭回收;不是完整 R2 或 WindTerm 界面。 +按 [ADR-0008](../../docs/adr/0008-cpp-core-qt-widgets.md)采用自主 C++ 核心和 Qt Widgets,Windows 进程由[固定微软 ConPTY](../../third_party/conpty/README.md)承载。当前入口提供默认 80×24、随窗口可用区域变化的本地 cmd 标签、基本 ASCII 按键、16 色绘制、启动错误与关闭回收;不是完整 R2 或 WindTerm 界面。 -现有 C++ 核心的[能力限制](../../experiments/core/README.md)继续有效。Qt 尚未迁移原 Win32 的完整工作区、分屏、历史浏览、选择/复制、Find、完整键盘/IME、动态 resize 或会话恢复,也不能继承 Alacritty 分支的通过结果。 +现有 C++ 核心的[能力限制](../../experiments/core/README.md)继续有效。Qt 尚未迁移原 Win32 的完整工作区、分屏、历史浏览、选择/复制、Find、完整键盘/IME 或会话恢复;完整 resize/reflow 仍需按目标调查和实现,也不能继承 Alacritty 分支的通过结果。 + +网格沿当前 Roboto Mono 字体度量和终端可用区域计算,保留八像素边距与一行状态区,并沿现有 Screen 资源上限限制为 1..500 列、1..200 行。字体变化重新计算度量;隐藏标签在显示/布局后同步。GUI 线程负责物理 Screen resize,现有生命周期 worker 用单个最新请求串行执行 ConPTY resize、wait、cancel 和 close;GUI 不等待 native resize。重复同尺寸不重新初始化屏幕或发起新尺寸操作;关闭、错误与退出停止接受并清除待处理请求,已选取的 native 操作由同一 worker 收尾,不重新激活会话。原物理裁剪不回填历史或恢复被裁掉的正文,目标 reflow 和 WindTerm 内容恢复策略未验收。 标签栏的 `+` 创建同类型 cmd,点击标签选择输入目标,关闭按钮只取消对应会话;关闭父窗口取消所有会话。后台标签继续独立排空输出,已关闭标签完成自有进程回收后释放。成功启动的最后会话结束时沿用原最小入口的应用退出路径;有失败启动页时保留该页错误供关闭。当前标签外观、默认动作和多会话退出汇总仅为这批迁移入口的工程合同,未作 WindTerm 完整标签行为对比。 @@ -19,9 +21,9 @@ cmake -S . -B build/qt-cpp -G "Visual Studio 17 2022" -A x64 ` -DQt6_DIR="/lib/cmake/Qt6" ` -DTERMFORGE_CONPTY_BACKEND_DIR="" ` -DTERMFORGE_MSVC_RUNTIME_DIR="" -cmake --build build/qt-cpp --config Release --target termforge_qt_shell qt_cpp_shell_smoke +cmake --build build/qt-cpp --config Release --target termforge_qt_shell qt_cpp_shell_smoke qt_cpp_resize_smoke build/qt-cpp/qt-bin/Release/termforge_qt_shell.exe -ctest --test-dir build/qt-cpp -C Release -R '^qt_cpp_shell$' --output-on-failure +ctest --test-dir build/qt-cpp -C Release -R '^qt_cpp_(shell|resize)$' --output-on-failure ``` 固定 ConPTY/CRT 输入缺失或篡改时构建明确失败;实际工具集更新到固定 CRT 之外时须重新审查依赖。产品中的 shell 启动失败保留可关闭的错误窗口。随目录保留 Qt 动态运行库、平台插件、`conpty-backend/`、`assets/fonts/`、十个固定 CRT DLL 及其原许可/NOTICE;每次构建重新校验并部署 CRT,不运行安装器、不修改 System32。最终目录用 `tools/msvc_runtime.py manifest` 记录全部文件。当前只是本地构建输出,Qt/第三方的完整分发审计及产品打包尚未完成。 @@ -34,6 +36,10 @@ Parser/Screen 仅在 Qt 线程修改;ConPTY reader 向有界输出队列写入 退出路径另在真实 `app.exec()` 中覆盖双会话父窗口关闭、最后活动标签关闭、单个失败启动页关闭,以及已自然结束标签关闭。在统一完成回调、`aboutToQuit` 和 `exec` 返回时分别核对模型已结束、回收可验证和各自 Job active=0;已移除页的记录在其销毁前取得,不用析构后的外层 active=0 代替退出前证明。 +独立的 `qt_cpp_resize` 在同一 25 秒 OwnedJob 监督合同内验证 80×24→60×12→100×30→80×24、极窄/极短/1×1、重复、资源上限、字体变化、隐藏页、关闭隔离及尺寸请求与退出交叉。测试 child 用各次 nonce 通过独立命名管道返回真实 `GetConsoleScreenBufferInfo` 的 buffer/window 值,避免极小屏幕容不下回复;保留每条旧值与新值。`resize_state()` 的 requested/core 与 transport 完成不是 child ACK;正常退出可丢弃尚未应用的请求。有限 2 MiB ASCII 输出同时经过有界队列,核对 GUI 事件、实际读取、排空及回收。[固定结果与原失败](../../experiments/shell/results/2026-10-29-qt-resize/README.md)不外推为原版 reflow、真实不同 DPI、物理呈现或性能验收。 + +字面网格测试使用可见父窗口内的终端子区域;独立顶层测试保留一列请求并根据原生事件处理后的实际可用区域核对 core 和 child,记录平台调整差异。大 child 的资源上限验证保留 owner 裁剪范围。旧 678 离屏通过后的原生极窄失败、新夹具离屏验证及[0ff 冻结包的一次隔离原生成功](../../experiments/shell/results/2026-10-29-qt-resize/native-validation.json)分别保留;后者只观察到 DPI 96,不代替不同 DPI 或完整产品验收。 + 该测试使用 Qt offscreen 平台和本项目独立取得的 OFL Roboto Mono 字体;没有物理键盘、实际不同 DPI、Windows 原生窗口上屏或用户呈现时间验收,`presented_done=null`。两会话隔离不代表八会话、IME 或完整工作区验收,测试耗时不是终端性能指标。 构建开关默认关闭只是从旧原型向新入口迁移的状态;正式路线已确认,旧构建保留为回归对照。Qt 文字与图形资源均独立取得,不使用 WindTerm 的专有字体、图标或主题。 diff --git a/src/qt/resize_fixture.hpp b/src/qt/resize_fixture.hpp new file mode 100644 index 00000000..53061900 --- /dev/null +++ b/src/qt/resize_fixture.hpp @@ -0,0 +1,187 @@ +// Test-only real-child CSBI replies, independent of the terminal's tiny grid. +#pragma once +#include "../../experiments/conpty/session.hpp" +#include +#include +#include +#include + +namespace termforge::qt::test { + +struct SizeReply { + uint32_t magic = 0x54514653; + uint32_t version = 1; + uint64_t nonce = 0; + uint32_t child_pid = 0; + uint32_t query_error = ERROR_SUCCESS; + int32_t buffer_columns = 0, buffer_rows = 0; + int32_t window_left = 0, window_top = 0, window_right = 0, window_bottom = 0; + int window_columns() const { return window_right - window_left + 1; } + int window_rows() const { return window_bottom - window_top + 1; } +}; +static_assert(sizeof(SizeReply) == 48, "fixed local size-reply protocol"); + +// One caller/thread owns this polling endpoint. PIPE_NOWAIT is used for tiny +// test-control messages, not background transport: no operation or OVERLAPPED +// storage is left pending when a poll returns or the endpoint is destroyed. +class SizeFixture final { + tf_conpty::Handle pipe_; + std::wstring name_; + bool connected_ = false; + DWORD client_pid_ = 0; +public: + SizeFixture() { + static std::atomic sequence{0}; + name_ = L"\\\\.\\pipe\\TermForgeQtResize-v1-" + std::to_wstring(GetCurrentProcessId()) + L"-" + + std::to_wstring(GetTickCount64()) + L"-" + std::to_wstring(++sequence); + pipe_.reset(CreateNamedPipeW(name_.c_str(), PIPE_ACCESS_INBOUND | FILE_FLAG_FIRST_PIPE_INSTANCE, + PIPE_TYPE_MESSAGE | PIPE_READMODE_MESSAGE | PIPE_NOWAIT | PIPE_REJECT_REMOTE_CLIENTS, + 1, 4096, 4096, 0, nullptr)); + if (pipe_.get() == INVALID_HANDLE_VALUE) tf_conpty::fail("CreateNamedPipe(size fixture)"); + // The first NOWAIT connect makes this one instance available. It does + // not prove a client is connected; later ERROR_PIPE_CONNECTED does. + if (!ConnectNamedPipe(pipe_.get(), nullptr)) { + const DWORD error = GetLastError(); + if (error != ERROR_PIPE_LISTENING && error != ERROR_PIPE_CONNECTED) + tf_conpty::fail("ConnectNamedPipe(size fixture)", error); + } + } + SizeFixture(const SizeFixture&) = delete; + SizeFixture& operator=(const SizeFixture&) = delete; + const std::wstring& pipe_name() const { return name_; } + DWORD client_pid() const { return client_pid_; } + + std::optional take_reply() { + if (!connected_) { + if (ConnectNamedPipe(pipe_.get(), nullptr)) return std::nullopt; + const DWORD error = GetLastError(); + if (error == ERROR_PIPE_LISTENING) return std::nullopt; + if (error != ERROR_PIPE_CONNECTED) tf_conpty::fail("ConnectNamedPipe(size reply)", error); + ULONG client = 0, session = 0; DWORD owner_session = 0; + if (!GetNamedPipeClientProcessId(pipe_.get(), &client) || + !GetNamedPipeClientSessionId(pipe_.get(), &session) || + !ProcessIdToSessionId(GetCurrentProcessId(), &owner_session)) + tf_conpty::fail("GetNamedPipeClientIdentity(size fixture)"); + if (!client || session != owner_session) + throw std::runtime_error("Size fixture client identity mismatch"); + client_pid_ = client; + connected_ = true; + } + DWORD available = 0, message = 0; + if (!PeekNamedPipe(pipe_.get(), nullptr, 0, nullptr, &available, &message)) + tf_conpty::fail("PeekNamedPipe(size reply)"); + if (!available) return std::nullopt; + if (message != sizeof(SizeReply) || available < sizeof(SizeReply)) + throw std::runtime_error("Size fixture reply length mismatch"); + SizeReply reply; DWORD count = 0; + if (!ReadFile(pipe_.get(), &reply, sizeof(reply), &count, nullptr)) + tf_conpty::fail("ReadFile(size reply)"); + if (count != sizeof(reply) || reply.magic != 0x54514653 || reply.version != 1 || + reply.child_pid != client_pid_) + throw std::runtime_error("Size fixture reply identity mismatch"); + return reply; + } +}; + +inline uint64_t size_nonce(std::string_view text) { + if (text.empty() || text.size() > 20) throw std::runtime_error("Size fixture nonce length invalid"); + uint64_t value = 0; + for (const char c : text) { + if (c < '0' || c > '9' || value > ((std::numeric_limits::max)() - (c - '0')) / 10) + throw std::runtime_error("Size fixture nonce invalid"); + value = value * 10 + static_cast(c - '0'); + } + if (!value) throw std::runtime_error("Size fixture query nonce must be nonzero"); + return value; +} + +// Entry before QApplication/GO parsing. The containing Session owns this child +// and its blocking console read; the outer test Job keeps the fixed 25s bound. +// Commands Q CR and X CR arrive through public Session input. +// F writes a fixed finite ASCII burst before one independent reply. +// Replies contain only independently queried child state, never requested size. +inline int size_child(const std::wstring& pipe_name) { + const std::wstring prefix = L"\\\\.\\pipe\\TermForgeQtResize-v1-"; + if (pipe_name.rfind(prefix, 0) != 0 || pipe_name.size() > 180) + throw std::runtime_error("Size fixture pipe name invalid"); + const auto separator = pipe_name.find(L'-', prefix.size()); + if (separator == std::wstring::npos) throw std::runtime_error("Size fixture owner missing"); + const auto owner_text = pipe_name.substr(prefix.size(), separator - prefix.size()); + std::string owner_digits; + for (const wchar_t c : owner_text) { + if (c < L'0' || c > L'9') throw std::runtime_error("Size fixture owner invalid"); + owner_digits += static_cast(c); + } + const uint64_t owner = size_nonce(owner_digits); + if (owner > MAXDWORD) throw std::runtime_error("Size fixture owner overflow"); + BOOL owned = FALSE; + if (!IsProcessInJob(GetCurrentProcess(), nullptr, &owned) || !owned) + throw std::runtime_error("Size child requires its owned Session Job"); + tf_conpty::Handle pipe(CreateFileW(pipe_name.c_str(), GENERIC_WRITE | FILE_WRITE_ATTRIBUTES, + 0, nullptr, OPEN_EXISTING, 0, nullptr)); + if (pipe.get() == INVALID_HANDLE_VALUE) tf_conpty::fail("CreateFile(size child pipe)"); + ULONG server = 0, server_session = 0; DWORD child_session = 0; + if (!GetNamedPipeServerProcessId(pipe.get(), &server) || + !GetNamedPipeServerSessionId(pipe.get(), &server_session) || + !ProcessIdToSessionId(GetCurrentProcessId(), &child_session)) + tf_conpty::fail("GetNamedPipeServerIdentity(size child)"); + if (server != owner || server_session != child_session) + throw std::runtime_error("Size fixture server identity mismatch"); + // Nonblocking writes fail visibly if the caller stops draining; they never + // wait on a full diagnostic pipe while the GUI is trying to close a child. + DWORD pipe_mode = PIPE_NOWAIT; + if (!SetNamedPipeHandleState(pipe.get(), &pipe_mode, nullptr, nullptr)) + tf_conpty::fail("SetNamedPipeHandleState(size child)"); + tf_conpty::Handle input(CreateFileW(L"CONIN$", GENERIC_READ | GENERIC_WRITE, + FILE_SHARE_READ | FILE_SHARE_WRITE, nullptr, OPEN_EXISTING, 0, nullptr)); + tf_conpty::Handle output(CreateFileW(L"CONOUT$", GENERIC_READ | GENERIC_WRITE, + FILE_SHARE_READ | FILE_SHARE_WRITE, nullptr, OPEN_EXISTING, 0, nullptr)); + if (input.get() == INVALID_HANDLE_VALUE || output.get() == INVALID_HANDLE_VALUE) + tf_conpty::fail("CreateFile(size child console)"); + if (!SetConsoleMode(input.get(), ENABLE_VIRTUAL_TERMINAL_INPUT)) + tf_conpty::fail("SetConsoleMode(size child input)"); + const auto reply = [&](uint64_t nonce) { + SizeReply value; value.nonce = nonce; value.child_pid = GetCurrentProcessId(); + CONSOLE_SCREEN_BUFFER_INFO state{}; + if (!GetConsoleScreenBufferInfo(output.get(), &state)) value.query_error = GetLastError(); + else { + value.buffer_columns = state.dwSize.X; value.buffer_rows = state.dwSize.Y; + value.window_left = state.srWindow.Left; value.window_top = state.srWindow.Top; + value.window_right = state.srWindow.Right; value.window_bottom = state.srWindow.Bottom; + } + DWORD count = 0; + if (!WriteFile(pipe.get(), &value, sizeof(value), &count, nullptr)) tf_conpty::fail("WriteFile(size child reply)"); + if (count != sizeof(value)) throw std::runtime_error("Size child reply pipe is full"); + }; + reply(0); + std::string command; + for (;;) { + char character = 0; DWORD count = 0; + if (!ReadFile(input.get(), &character, 1, &count, nullptr)) tf_conpty::fail("ReadFile(size child input)"); + if (count != 1) throw std::runtime_error("Size child input ended"); + if (character == '\n' && command.empty()) continue; + if (character != '\r') { + if (character < 0x20 || character > 0x7e || command.size() >= 23) + throw std::runtime_error("Size child input command invalid"); + command += character; + continue; + } + if (command.size() < 3 || (command[0] != 'Q' && command[0] != 'X' && command[0] != 'F') || command[1] != ' ') + throw std::runtime_error("Size child input command malformed"); + const auto nonce = size_nonce(std::string_view(command).substr(2)); + const bool exit = command[0] == 'X'; + if (command[0] == 'F') { + const std::string block(4096, 's'); + for (int chunk = 0; chunk < 512; ++chunk) { + DWORD written = 0; + if (!WriteFile(output.get(), block.data(), static_cast(block.size()), &written, nullptr) || + written != block.size()) tf_conpty::fail("WriteFile(size child finite output)"); + } + } + reply(nonce); + if (exit) return 37; + command.clear(); + } +} + +} // namespace termforge::qt::test diff --git a/src/qt/resize_smoke.cpp b/src/qt/resize_smoke.cpp new file mode 100644 index 00000000..37770b22 --- /dev/null +++ b/src/qt/resize_smoke.cpp @@ -0,0 +1,481 @@ +// Public Qt geometry, GUI-owned Screen and owned fixed-ConPTY lifecycle. +#include "terminal_widget.hpp" +#include "resize_fixture.hpp" +#include "session_tabs.hpp" +#include +#include +#include +#include +#include +#include +#include +#include + +static void require(bool condition, const char* message) { + if (!condition) throw std::runtime_error(message); +} +using termforge::qt::test::SizeFixture; +using termforge::qt::test::SizeReply; +static void record_reply(const SizeReply& reply) { + std::cerr << "{\"schema\":\"termforge-qt-child-size-v1\",\"nonce\":" << reply.nonce + << ",\"query_error\":" << reply.query_error << ",\"buffer_columns\":" << reply.buffer_columns + << ",\"buffer_rows\":" << reply.buffer_rows << ",\"window_left\":" << reply.window_left + << ",\"window_top\":" << reply.window_top << ",\"window_right\":" << reply.window_right + << ",\"window_bottom\":" << reply.window_bottom << "}\n"; +} +static void record_state(int stage, int columns, int rows, const termforge::qt::TerminalWidget& terminal, + const termforge::qt::SessionModel& model) { + const auto state = model.resize_state(); + std::cerr << "{\"schema\":\"termforge-qt-resize-state-v1\",\"stage\":" << stage + << ",\"requested_columns\":" << columns << ",\"requested_rows\":" << rows + << ",\"widget_width\":" << terminal.width() << ",\"widget_height\":" << terminal.height() + << ",\"core_columns\":" << state.requested_columns << ",\"core_rows\":" << state.requested_rows + << ",\"transport_columns\":" << state.transport_columns << ",\"transport_rows\":" << state.transport_rows + << ",\"requested_revision\":" << state.requested_revision + << ",\"transport_revision\":" << state.transport_revision + << ",\"accepting\":" << state.accepting << ",\"pending\":" << state.pending << "}\n"; +} +static void record_area(const char* kind, int stage, const QSize& requested_pixels, const QSize& expected_grid, + const termforge::qt::TerminalWidget& terminal) { + const auto* window = terminal.window(); + const auto visible = terminal.visibleRegion().boundingRect(); + std::cerr << "{\"schema\":\"termforge-qt-resize-area-v1\",\"kind\":\"" << kind << "\",\"stage\":" << stage + << ",\"requested_pixel_width\":" << requested_pixels.width() + << ",\"requested_pixel_height\":" << requested_pixels.height() + << ",\"actual_pixel_width\":" << terminal.width() << ",\"actual_pixel_height\":" << terminal.height() + << ",\"expected_columns\":" << expected_grid.width() << ",\"expected_rows\":" << expected_grid.height() + << ",\"top_level\":" << terminal.isWindow() << ",\"visible_to_window\":" << terminal.isVisibleTo(window) + << ",\"window_visible\":" << window->isVisible() << ",\"window_width\":" << window->width() + << ",\"window_height\":" << window->height() << ",\"visible_region_width\":" << visible.width() + << ",\"visible_region_height\":" << visible.height() << "}\n"; +} +static SizeReply wait_reply(SizeFixture& fixture, unsigned long long nonce) { + QElapsedTimer timer; timer.start(); + while (timer.elapsed() < 5000) { + if (const auto reply = fixture.take_reply()) { + record_reply(*reply); + require(reply->nonce == nonce, "size fixture returned an unexpected nonce"); + require(reply->query_error == 0, "child GetConsoleScreenBufferInfo failed"); + return *reply; + } + QTest::qWait(5); + } + throw std::runtime_error("real child size reply did not arrive within the fixed deadline"); +} +static std::vector await_child_size(SizeFixture& fixture, termforge::qt::SessionModel& model, + int columns, int rows, unsigned long long& nonce) { + QElapsedTimer timer; timer.start(); + std::vector replies; + // Every old and new child observation is retained. Neither the fixture nor + // the child receives these expected dimensions or waits internally for them. + while (timer.elapsed() < 5000 && replies.size() < 128) { + ++nonce; + require(model.send("Q " + std::to_string(nonce) + "\r"), "size query input rejected"); + bool received = false; + while (!received && timer.elapsed() < 5000) { + if (const auto reply = fixture.take_reply()) { + record_reply(*reply); replies.push_back(*reply); received = true; + require(reply->nonce == nonce && reply->query_error == 0, "independent size reply identity/query failed"); + require(reply->child_pid == model.resize_state().child_pid, "reply is not from the Session child"); + if (reply->buffer_columns == columns && reply->buffer_rows == rows && + reply->window_columns() == columns && reply->window_rows() == rows) return replies; + } else QTest::qWait(5); + } + QTest::qWait(10); + } + throw std::runtime_error("real child did not acknowledge the requested window/buffer dimensions"); +} +static void invalid_size_stops_pending_resize(const std::wstring& executable, const std::wstring& directory) { + SizeFixture fixture; + termforge::qt::SessionModel model; + termforge::qt::TerminalWidget terminal(model); + terminal.show(); + require(model.start(executable, L"--size-child \"" + fixture.pipe_name() + L"\"", directory), + "invalid-size case child did not start"); + wait_reply(fixture, 0); + require(model.resize(60, 12), "valid pending resize was rejected"); + require(!model.resize(0, 12), "invalid terminal geometry was accepted"); + const auto state = model.resize_state(); + std::cerr << "{\"schema\":\"termforge-qt-resize-error-v1\",\"accepting\":" << state.accepting + << ",\"pending\":" << state.pending << ",\"error_recorded\":" << !model.error().isEmpty() << "}\n"; + require(!model.error().isEmpty() && !state.accepting && !state.pending, + "a terminal resize error left control requests active"); + QElapsedTimer timer; timer.start(); + while (!model.finished() && timer.elapsed() < 5000) QTest::qWait(5); + require(model.finished() && model.cleanup_verified() && !model.resize(100, 30), + "resize error did not finish cleanup or accepted later resize"); +} +static void current_font_controls_grid(const std::wstring& executable, const std::wstring& directory) { + SizeFixture fixture; + termforge::qt::SessionModel model; + termforge::qt::TerminalWidget terminal(model); + terminal.show(); + require(model.start(executable, L"--size-child \"" + fixture.pipe_name() + L"\"", directory), + "font-grid child did not start"); + wait_reply(fixture, 0); + auto font = terminal.font(); font.setPointSize(12); terminal.setFont(font); + const QFontMetricsF metrics(terminal.font()); + const int width = qCeil(metrics.horizontalAdvance(QLatin1Char('M'))); + const int height = qCeil(metrics.height()) + 2; + terminal.resize(16 + 60 * width, 24 + 13 * height); + QElapsedTimer timer; timer.start(); + while ((model.screen().width() != 60 || model.screen().height() != 12) && timer.elapsed() < 5000) QTest::qWait(5); + record_state(700, 60, 12, terminal, model); + require(model.screen().width() == 60 && model.screen().height() == 12, + "grid still uses stale font metrics after the public Qt font changes"); + unsigned long long nonce = 700; + await_child_size(fixture, model, 60, 12, nonce); + terminal.close(); + QElapsedTimer closing; closing.start(); + while (!model.finished() && closing.elapsed() < 5000) QTest::qWait(5); + require(model.finished() && model.cleanup_verified(), "font-grid child cleanup failed"); +} +template +static void await(Predicate predicate, const termforge::qt::SessionModel& model, const char* message) { + QElapsedTimer timer; timer.start(); + while (!predicate() && timer.elapsed() < 5000) { + QTest::qWait(5); + if (!model.error().isEmpty()) throw std::runtime_error(model.error().toStdString()); + } + require(predicate(), message); +} +static void top_level_follows_effective_area(const std::wstring& executable, const std::wstring& directory) { + SizeFixture fixture; + termforge::qt::SessionModel model; + termforge::qt::TerminalWidget terminal(model); + terminal.show(); + require(model.start(executable, L"--size-child \"" + fixture.pipe_name() + L"\"", directory), + "top-level size child did not start"); + wait_reply(fixture, 0); + const QFontMetricsF metrics(terminal.font()); + const int cell_width = qCeil(metrics.horizontalAdvance(QLatin1Char('M'))); + const int cell_height = qCeil(metrics.height()) + 2; + const QSize requested_pixels(16 + cell_width, 24 + 25 * cell_height); + terminal.resize(requested_pixels); + record_state(1700, 1, 24, terminal, model); + // A decorated top-level may be resized again by the platform. The public + // widget area after event dispatch is the input to the grid contract; the + // requested one-column size is retained separately, never changed to 11. + QTest::qWait(1); + const QSize actual_pixels = terminal.size(); + const QSize effective_grid(std::clamp((actual_pixels.width() - 16) / cell_width, 1, 500), + std::clamp((actual_pixels.height() - 24 - cell_height) / cell_height, 1, 200)); + record_area("top-level-effective", 1700, requested_pixels, effective_grid, terminal); + await([&] { return model.screen().width() == effective_grid.width() && + model.screen().height() == effective_grid.height(); }, model, + "top-level core did not follow the effective public widget area"); + unsigned long long nonce = 1700; + await_child_size(fixture, model, effective_grid.width(), effective_grid.height(), nonce); + await([&] { const auto state = model.resize_state(); + return !state.pending && state.transport_columns == effective_grid.width() && + state.transport_rows == effective_grid.height(); }, model, + "top-level transport did not follow the effective public widget area"); + require(terminal.size() == actual_pixels, "top-level area changed during its fixed-size verification"); + record_state(1700, 1, 24, terminal, model); + record_area("top-level-effective", 1700, requested_pixels, effective_grid, terminal); + terminal.close(); + await([&] { return model.finished(); }, model, "top-level size child cleanup did not finish"); + require(model.cleanup_verified(), "top-level size child cleanup failed"); +} +static void hidden_tab_layout_and_close(const std::wstring& executable, const std::wstring& directory) { + SizeFixture first_fixture, second_fixture; + termforge::qt::SessionTabs window(executable, L"--size-child \"" + first_fixture.pipe_name() + L"\"", directory); + std::optional completed; + window.on_all_exited = [&](int status) { completed = status; }; + window.show(); + auto* first = window.current_session(); + require(first != nullptr, "initial resize tab missing"); + const auto first_ready = wait_reply(first_fixture, 0); + require(first_ready.child_pid == first->model().resize_state().child_pid, "initial tab peer identity differs"); + auto* second = window.new_session(executable, L"--size-child \"" + second_fixture.pipe_name() + L"\"", directory); + require(second && second != first && window.current_session() == second, "new resize tab did not select its own Session"); + const auto second_ready = wait_reply(second_fixture, 0); + require(second_ready.child_pid == second->model().resize_state().child_pid && second_ready.child_pid != first_ready.child_pid, + "resize tabs did not have independent child peers"); + const QFontMetricsF metrics(second->terminal().font()); + const int cell_width = qCeil(metrics.horizontalAdvance(QLatin1Char('M'))); + const int cell_height = qCeil(metrics.height()) + 2; + const int chrome_width = window.width() - second->terminal().width(); + const int chrome_height = window.height() - second->terminal().height(); + window.resize(chrome_width + 16 + 60 * cell_width, chrome_height + 24 + 13 * cell_height); + await([&] { return second->model().screen().width() == 60 && second->model().screen().height() == 12; }, + second->model(), "selected tab did not follow the resized public window"); + unsigned long long nonce = 800; + await_child_size(second_fixture, second->model(), 60, 12, nonce); + record_state(800, 60, 12, second->terminal(), second->model()); + // A hidden page may retain its previous layout. Record that actual child + // value before showing; only its post-layout acknowledgement must match. + require(!first->terminal().isVisibleTo(&window) && first->model().running(), "first tab did not remain alive while hidden"); + require(first->model().send(std::string("Q 899\r")), "hidden tab input was unavailable"); + const auto hidden = wait_reply(first_fixture, 899); + require(hidden.child_pid == first_ready.child_pid, "hidden query crossed Session ownership"); + auto* bar = window.findChild(); + require(bar && bar->count() == 2, "resize tab bar unavailable"); + QTest::mouseClick(bar, Qt::LeftButton, Qt::NoModifier, bar->tabRect(0).center()); + await([&] { return window.current_session() == first && first->model().screen().width() == 60 && + first->model().screen().height() == 12; }, first->model(), "shown tab did not apply its current layout"); + nonce = 900; + await_child_size(first_fixture, first->model(), 60, 12, nonce); + record_state(801, 60, 12, first->terminal(), first->model()); + bool first_finished = false, first_cleanup = false; + const auto previous = first->on_changed; + first->on_changed = [&, previous] { + if (first->model().finished()) { + first_finished = true; first_cleanup = first->model().cleanup_verified(); + } + if (previous) previous(); + }; + auto* close = qobject_cast(bar->tabButton(0, QTabBar::RightSide)); + if (!close) close = qobject_cast(bar->tabButton(0, QTabBar::LeftSide)); + require(close != nullptr, "resize tab close button unavailable"); + QTest::mouseClick(close, Qt::LeftButton); + await([&] { return first_finished; }, second->model(), "closed resize tab did not finish its own cleanup"); + require(first_cleanup && window.current_session() == second && second->model().running(), + "closing one resize tab stopped or retargeted the survivor"); + window.resize(chrome_width + 16 + 100 * cell_width, chrome_height + 24 + 31 * cell_height); + await([&] { return second->model().screen().width() == 100 && second->model().screen().height() == 30; }, + second->model(), "survivor tab did not follow the next resize"); + nonce = 1000; + await_child_size(second_fixture, second->model(), 100, 30, nonce); + record_state(802, 100, 30, second->terminal(), second->model()); + window.close(); + await([&] { return completed.has_value(); }, second->model(), "resized tab window did not complete close"); + require(*completed == 0 && second->model().finished() && second->model().cleanup_verified(), + "resized tab window closed before verified cleanup"); +} +static void resize_lifecycle_boundaries(const std::wstring& executable, const std::wstring& directory) { + for (int mode = 0; mode < 3; ++mode) { + SizeFixture fixture; + termforge::qt::SessionModel model; + termforge::qt::TerminalWidget terminal(model); + terminal.show(); + require(model.start(executable, L"--size-child \"" + fixture.pipe_name() + L"\"", directory), + "lifecycle size child did not start"); + if (mode != 0) { + const auto ready = wait_reply(fixture, 0); + require(ready.child_pid == model.resize_state().child_pid, "lifecycle child identity differs"); + } + bool observed_pending = false; + for (int attempt = 0; attempt < 64; ++attempt) { + const int columns = 60 + attempt % 2; + require(model.resize(columns, 12), "lifecycle resize was rejected before close"); + record_state(900 + mode, columns, 12, terminal, model); + if (model.resize_state().pending) { observed_pending = true; break; } + } + require(observed_pending, "bounded lifecycle case never observed a pending resize"); + if (mode == 2) { + require(model.send(std::string("X 1201\r")), "exit-with-pending input rejected"); + const auto final = wait_reply(fixture, 1201); + require(final.child_pid == model.resize_state().child_pid, "exit reply came from another Session"); + } else { + // Mode zero closes immediately after start, before test event + // pumping. Mode one closes an already-ready child's pending resize. + terminal.close(); + const auto closing = model.resize_state(); + require(!closing.accepting && !closing.pending && !model.resize(100, 30), + "close left pending resize requests active"); + } + await([&] { return model.finished(); }, model, "resize lifecycle cleanup did not finish"); + const auto finished = model.resize_state(); + require(model.cleanup_verified() && !finished.accepting && !finished.pending && !model.resize(80, 24), + "finished Session accepted or reactivated resize"); + require(mode == 2 ? model.natural_exit() && model.exit_code() == 37 : !model.natural_exit(), + "resize lifecycle reported the wrong natural/cancelled exit kind"); + record_state(900 + mode, finished.requested_columns, finished.requested_rows, terminal, model); + } + termforge::qt::SessionModel failed; + termforge::qt::TerminalWidget error_view(failed); + error_view.show(); + require(!failed.start(directory + L"\\missing-resize-child.exe", L""), "missing resize child was accepted"); + require(!failed.resize(60, 12), "startup failure accepted a later resize"); + QElapsedTimer timer; timer.start(); + while (!failed.finished() && timer.elapsed() < 5000) QTest::qWait(5); + const auto state = failed.resize_state(); + require(failed.finished() && failed.cleanup_verified() && !failed.error().isEmpty() && !state.accepting && !state.pending, + "startup failure left resize state or cleanup unresolved"); + record_state(903, state.requested_columns, state.requested_rows, error_view, failed); +} +static std::pair output_continues_during_resize(const std::wstring& executable, + const std::wstring& directory) { + SizeFixture fixture; + termforge::qt::SessionModel model; + termforge::qt::TerminalWidget terminal(model); + terminal.show(); + require(model.start(executable, L"--size-child \"" + fixture.pipe_name() + L"\"", directory), + "finite-output child did not start"); + wait_reply(fixture, 0); + require(model.send(std::string("F 1301\r")), "finite-output command rejected"); + bool gui_event = false; + QTimer::singleShot(0, &terminal, [&] { gui_event = true; }); + require(model.resize(100, 30), "finite-output resize rejected"); + const auto burst_reply = wait_reply(fixture, 1301); + require(burst_reply.child_pid == model.resize_state().child_pid, "finite-output peer changed"); + unsigned long long nonce = 1301; + await_child_size(fixture, model, 100, 30, nonce); + require(gui_event, "Qt did not dispatch its event during the output/resize case"); + require(model.send(std::string("X 1401\r")), "finite-output exit command rejected"); + wait_reply(fixture, 1401); + await([&] { return model.finished(); }, model, "finite-output child did not finish draining"); + const auto output = model.output_state(); + require(model.natural_exit() && model.exit_code() == 37 && model.cleanup_verified() && model.output_eof() && + model.received_bytes() > 0 && output.high_water_bytes > 0 && output.high_water_bytes <= 256 * 1024 && + output.queued_bytes == 0, "output queue/drain or resize lifecycle did not remain bounded and complete"); + return {model.received_bytes(), output.high_water_bytes}; +} +static bool has_line(const termforge::Screen& screen, std::string_view expected) { + for (const auto& row : screen.lines) { + std::string text; + for (const auto& cell : row) if (cell.width) text += cell.text; + while (!text.empty() && text.back() == ' ') text.pop_back(); + if (text == expected) return true; + } + return false; +} +static void repeated_size_retains_cmd_output(const std::wstring& directory) { + wchar_t system[MAX_PATH]{}; + require(GetSystemDirectoryW(system, MAX_PATH) > 0, "repeat-case system shell unavailable"); + termforge::qt::SessionModel model; + termforge::qt::TerminalWidget terminal(model); + terminal.show(); + require(model.start(std::wstring(system) + L"\\cmd.exe", L"/D /Q /K \"prompt TF_REPEAT$G\"", directory), + "repeat-case cmd did not start"); + await([&] { return has_line(model.screen(), "TF_REPEAT>"); }, model, "repeat-case prompt missing"); + require(model.send(std::string("set /a 901+17\r")), "repeat-case arithmetic input rejected"); + await([&] { return has_line(model.screen(), "918"); }, model, "independent repeat-case answer missing"); + const auto before = model.resize_state(); + terminal.resize(terminal.size()); + require(model.resize(80, 24), "same-size repeat was rejected"); + QTest::qWait(5); + const auto after = model.resize_state(); + require(has_line(model.screen(), "918") && before.requested_revision == after.requested_revision && + before.transport_revision == after.transport_revision, "same-size repeat cleared actual cmd output or restarted resize"); + terminal.close(); + await([&] { return model.finished(); }, model, "repeat-case cmd cleanup did not finish"); + require(model.cleanup_verified(), "repeat-case cmd cleanup failed"); +} +static void oversized_area_uses_existing_bounds(const std::wstring& executable, const std::wstring& directory) { + SizeFixture fixture; + termforge::qt::SessionModel model; + QWidget window; + window.resize(1200, 900); + termforge::qt::TerminalWidget terminal(model, &window); + const QFontMetricsF metrics(terminal.font()); + const int width = qCeil(metrics.horizontalAdvance(QLatin1Char('M'))); + const int height = qCeil(metrics.height()) + 2; + terminal.resize(16 + 600 * width, 24 + 241 * height); + window.show(); + QTest::qWait(1); + require(!terminal.isWindow() && terminal.isVisibleTo(&window) && window.isVisible(), + "bounded grid was not a visible owned child region"); + require(model.screen().width() == 500 && model.screen().height() == 200, + "oversized public area exceeded the existing Screen resource bounds"); + require(model.start(executable, L"--size-child \"" + fixture.pipe_name() + L"\"", directory), + "bounded initial-size child did not start"); + const auto initial = wait_reply(fixture, 0); + require(initial.child_pid == model.resize_state().child_pid && initial.buffer_columns == 500 && initial.buffer_rows == 200 && + initial.window_columns() == 500 && initial.window_rows() == 200, "initial ConPTY size ignored the bounded GUI grid"); + record_state(1600, 600, 240, terminal, model); + // The large child is clipped by its visible owner. This checks the widget + // grid/resource bound, not that every cell is physically presented. + record_area("bounded-child-region", 1600, terminal.size(), QSize(500, 200), terminal); + require(model.send(std::string("X 1601\r")), "bounded-size exit input rejected"); + wait_reply(fixture, 1601); + await([&] { return model.finished(); }, model, "bounded-size Session did not finish"); + require(model.natural_exit() && model.exit_code() == 37 && model.cleanup_verified(), "bounded-size Session cleanup failed"); +} +int main(int argc, char** argv) { + SetErrorMode(SEM_FAILCRITICALERRORS | SEM_NOGPFAULTERRORBOX); + if (argc == 3 && std::string_view(argv[1]) == "--size-child") { + try { return termforge::qt::test::size_child(QString::fromLocal8Bit(argv[2]).toStdWString()); } + catch (const std::exception& error) { std::cerr << error.what() << '\n'; return 3; } + } + char gate[3]{}; DWORD count = 0; BOOL owned = FALSE; + if (!ReadFile(GetStdHandle(STD_INPUT_HANDLE), gate, sizeof(gate), &count, nullptr) || + count != sizeof(gate) || std::string_view(gate, count) != "GO\n" || + !IsProcessInJob(GetCurrentProcess(), nullptr, &owned) || !owned) return 2; + QApplication app(argc, argv); + QApplication::setQuitOnLastWindowClosed(false); + try { + QTemporaryDir workspace; + require(workspace.isValid(), "resize workspace unavailable"); + wchar_t executable[32768]{}; + const DWORD length = GetModuleFileNameW(nullptr, executable, 32768); + require(length && length < 32768, "resize fixture executable unavailable"); + SizeFixture fixture; + termforge::qt::SessionModel model; + QWidget window; + window.resize(1200, 900); + termforge::qt::TerminalWidget terminal(model, &window); + window.show(); + require(model.start(executable, L"--size-child \"" + fixture.pipe_name() + L"\"", workspace.path().toStdWString()), + "resize shell did not start"); + const auto initial = wait_reply(fixture, 0); + require(initial.buffer_columns == 80 && initial.buffer_rows == 24 && + initial.window_columns() == 80 && initial.window_rows() == 24, "initial real child size is not 80x24"); + const QFontMetricsF metrics(terminal.font()); + const int width = qCeil(metrics.horizontalAdvance(QLatin1Char('M'))); + const int height = qCeil(metrics.height()) + 2; + // Existing view contract: two horizontal margins, one status row and + // three vertical margins. Expected cell counts are independent literals. + record_state(0, 80, 24, terminal, model); + unsigned long long nonce = 100; + size_t reply_count = 0; + unsigned heartbeat_events = 0; + const std::vector sizes{{60, 12}, {100, 30}, {80, 24}, {1, 24}, {80, 1}, {1, 1}, {80, 24}, {80, 24}}; + int stage = 0; + for (const auto size : sizes) { + ++stage; + const auto before = model.resize_state(); + const auto first_line_id = model.screen().lines.front().id; + bool event_responded = false; + QTimer::singleShot(0, &terminal, [&] { event_responded = true; ++heartbeat_events; }); + const QSize requested_pixels = size == QSize(1, 1) ? QSize(1, 1) : + QSize(16 + size.width() * width, 24 + (size.height() + 1) * height); + terminal.resize(requested_pixels); + await([&] { return model.screen().width() == size.width() && model.screen().height() == size.height(); }, + model, "public terminal area and core dimensions differ"); + record_state(stage, size.width(), size.height(), terminal, model); + QTest::qWait(1); + require(!terminal.isWindow() && terminal.isVisibleTo(&window) && window.isVisible() && + terminal.size() == requested_pixels, "literal grid did not use its visible owned child region"); + record_area("literal-child-region", stage, requested_pixels, size, terminal); + const auto replies = await_child_size(fixture, model, size.width(), size.height(), nonce); + for (const auto& reply : replies) + require(reply.child_pid == model.resize_state().child_pid, "size reply did not come from this Session child"); + reply_count += replies.size(); + await([&] { return !model.resize_state().pending; }, model, "native resize completion did not publish"); + require(event_responded, "Qt did not dispatch the queued event during resize verification"); + if (static_cast(stage) == sizes.size()) { + const auto after = model.resize_state(); + require(after.requested_revision == before.requested_revision && + after.transport_revision == before.transport_revision && + model.screen().lines.front().id == first_line_id, + "same-size repeat changed the core frame or native resize revision"); + } + record_state(stage, size.width(), size.height(), terminal, model); + } + ++nonce; + require(model.send("X " + std::to_string(nonce) + "\r"), "natural-exit command rejected"); + wait_reply(fixture, nonce); + await([&] { return model.finished(); }, model, "resize child did not exit naturally"); + require(model.natural_exit() && model.exit_code() == 37 && model.cleanup_verified(), + "resize child natural exit or cleanup failed"); + top_level_follows_effective_area(executable, workspace.path().toStdWString()); + current_font_controls_grid(executable, workspace.path().toStdWString()); + invalid_size_stops_pending_resize(executable, workspace.path().toStdWString()); + hidden_tab_layout_and_close(executable, workspace.path().toStdWString()); + resize_lifecycle_boundaries(executable, workspace.path().toStdWString()); + const auto output = output_continues_during_resize(executable, workspace.path().toStdWString()); + repeated_size_retains_cmd_output(workspace.path().toStdWString()); + oversized_area_uses_existing_bounds(executable, workspace.path().toStdWString()); + std::cout << "{\"schema\":\"termforge-qt-resize-smoke-v1\",\"grid_sequence_cases\":" << sizes.size() << ",\"child_ack_replies\":" + << reply_count << ",\"qt_heartbeat_events\":" << heartbeat_events + << ",\"output_bytes\":" << output.first << ",\"output_queue_high_water\":" << output.second + << ",\"same_size_cmd_output_retained\":true" + << ",\"child_exit\":37,\"cleanup_verified\":true,\"presented_done\":null}\n"; + return 0; + } catch (const std::exception& error) { + std::cerr << error.what() << '\n'; + return 1; + } +} diff --git a/src/qt/session_tabs.hpp b/src/qt/session_tabs.hpp index 4a87d1b4..bfe94762 100644 --- a/src/qt/session_tabs.hpp +++ b/src/qt/session_tabs.hpp @@ -135,7 +135,7 @@ class SessionTabs final : public QWidget { else complete_if_finished(); }); new_session(executable_, arguments_, working_directory_); - setFixedSize(sizeHint()); + resize(sizeHint()); } ~SessionTabs() override { destroying_ = true; } SessionPage* new_session(const std::wstring& executable, const std::wstring& arguments, diff --git a/src/qt/terminal_session.hpp b/src/qt/terminal_session.hpp index 0f5e089f..7e8cc259 100644 --- a/src/qt/terminal_session.hpp +++ b/src/qt/terminal_session.hpp @@ -10,22 +10,30 @@ #include #include #include +#include #include #include #include namespace termforge::qt { -// One model owns one fixed-size session. Only its Qt thread reads or modifies +// One model owns one session. Only its Qt thread reads or modifies // Parser/Screen; the reader publishes bounded byte chunks, never screen state. class SessionModel final : public QObject { public: - static constexpr int fixed_rows = 24; - static constexpr int fixed_columns = 80; + static constexpr int initial_rows = 24; + static constexpr int initial_columns = 80; + struct ResizeState { + int requested_columns, requested_rows; + int transport_columns, transport_rows; + unsigned long long requested_revision, transport_revision; + bool accepting, pending; + DWORD child_pid; + }; std::function on_changed; private: - Parser parser_{fixed_rows, fixed_columns, 100, ParseMode::recovery}; + Parser parser_{initial_rows, initial_columns, 100, ParseMode::recovery}; OutputQueue output_; std::unique_ptr session_; std::unique_ptr input_; @@ -33,6 +41,12 @@ class SessionModel final : public QObject { std::thread lifecycle_; std::atomic close_requested_{false}; std::atomic cleanup_done_{false}; + struct ResizeRequest { short columns, rows; unsigned long long revision; }; + mutable std::mutex control_mutex_; + std::optional pending_resize_; + unsigned long long requested_revision_ = 0, transport_revision_ = 0; + COORD transport_size_{}; + bool accepting_resize_ = false; struct Completion { DWORD exit_code = STILL_ACTIVE; DWORD active_processes = MAXDWORD; @@ -54,7 +68,8 @@ class SessionModel final : public QObject { void remember_error(const QString& error) { if (error_.isEmpty()) error_ = error; } - // Only this worker calls wait/cancel/close once startup has completed. + // Only this worker calls resize/wait/cancel/close after startup. The latest + // bounded request is taken without holding a lock over a native API call. // During natural close the Qt timer keeps draining the queue, allowing the // ConPTY reader to make progress while ClosePseudoConsole waits for EOF. void supervise(bool startup_succeeded) noexcept { @@ -63,14 +78,39 @@ class SessionModel final : public QObject { if (startup_succeeded) { while (!close_requested_.load(std::memory_order_acquire)) { if (session_->wait_exit(20)) { child_exited = true; break; } + std::optional request; + bool native_resize_needed = false; + { + std::lock_guard lock(control_mutex_); + if (accepting_resize_ && !close_requested_.load(std::memory_order_acquire)) { + request = std::exchange(pending_resize_, std::nullopt); + native_resize_needed = request && (request->columns != transport_size_.X || request->rows != transport_size_.Y); + } + } + if (request) { + // A successful call is transport progress, never proof + // that the child has observed its new console geometry. + if (native_resize_needed) session_->resize(request->columns, request->rows); + std::lock_guard lock(control_mutex_); + transport_size_ = {request->columns, request->rows}; + transport_revision_ = request->revision; + } } } } catch (const std::exception& error) { + close_requested_.store(true, std::memory_order_release); completion_.error = error.what(); } catch (...) { + close_requested_.store(true, std::memory_order_release); completion_.error = "Unknown session supervision failure"; } + { + std::lock_guard lock(control_mutex_); + accepting_resize_ = false; + pending_resize_.reset(); + } + const bool cancelled = close_requested_.load(std::memory_order_acquire) || !child_exited; if (cancelled) { output_.stop(); // Release a reader waiting for room before closing. @@ -170,8 +210,16 @@ class SessionModel final : public QObject { throw std::runtime_error("The Qt product entry requires the fixed bundled ConPTY backend"); input_ = std::make_unique(*session_); session_->start(executable, arguments, [this](std::string_view bytes) { output_.push(bytes); }, - working_directory, {fixed_columns, fixed_rows}); + working_directory, {static_cast(parser_.screen.width()), + static_cast(parser_.screen.height())}); input_->start(); + { + std::lock_guard lock(control_mutex_); + transport_size_ = {static_cast(parser_.screen.width()), + static_cast(parser_.screen.height())}; + transport_revision_ = requested_revision_; + accepting_resize_ = true; + } succeeded = true; } catch (const std::exception& error) { remember_error(QString::fromUtf8(error.what())); @@ -197,8 +245,42 @@ class SessionModel final : public QObject { bool send(const QByteArray& bytes) { return send(std::string(bytes.constData(), static_cast(bytes.size()))); } + bool resize(int columns, int rows) { + if (finished_ || close_requested_.load(std::memory_order_acquire)) return false; + if (columns < 1 || columns > 500 || rows < 1 || rows > 200) { + remember_error(QStringLiteral("Terminal grid must be within 1..500 columns and 1..200 rows")); + close(); notify(); return false; + } + try { + std::lock_guard lock(control_mutex_); + if (started_ && !accepting_resize_) return false; + if (columns == parser_.screen.width() && rows == parser_.screen.height()) return true; + parser_.screen.resize(rows, columns); + ++requested_revision_; + if (started_) + pending_resize_ = ResizeRequest{static_cast(columns), static_cast(rows), requested_revision_}; + } + catch (const std::exception& error) { + remember_error(QString::fromUtf8(error.what())); + close(); notify(); return false; + } + notify(); return true; + } void close() noexcept { close_requested_.store(true, std::memory_order_release); + std::lock_guard lock(control_mutex_); + accepting_resize_ = false; + pending_resize_.reset(); + } + // This diagnostic separates the GUI request/core from native call completion. + // Real child acknowledgement must come from the child, outside this state. + ResizeState resize_state() const { + std::lock_guard lock(control_mutex_); + const bool accepting = !finished_ && !close_requested_.load(std::memory_order_acquire) && + (!started_ || accepting_resize_); + return {parser_.screen.width(), parser_.screen.height(), transport_size_.X, transport_size_.Y, + requested_revision_, transport_revision_, accepting, + started_ && accepting && requested_revision_ != transport_revision_, session_ ? session_->pid : 0}; } const Screen& screen() const { return parser_.screen; } bool running() const { return started_ && !finished_ && !close_requested_.load(std::memory_order_acquire); } @@ -209,11 +291,12 @@ class SessionModel final : public QObject { DWORD active_processes_after() const { return finished_ ? completion_.active_processes : MAXDWORD; } unsigned long long received_bytes() const { return finished_ ? completion_.output_bytes : 0; } bool output_eof() const { return finished_ && completion_.output_eof; } + OutputQueue::Snapshot output_state() const { return output_.snapshot(); } const QString& error() const { return error_; } QString configuration_identity() const { return QStringLiteral("cpp-core / qt-widgets / ") + QString::fromLatin1(session_ ? session_->backend_identity() : "bundled-conpty-not-loaded") + - QStringLiteral(" / 80x24"); + QStringLiteral(" / %1x%2").arg(parser_.screen.width()).arg(parser_.screen.height()); } }; diff --git a/src/qt/terminal_widget.hpp b/src/qt/terminal_widget.hpp index fd3a209c..65b0dfec 100644 --- a/src/qt/terminal_widget.hpp +++ b/src/qt/terminal_widget.hpp @@ -1,4 +1,4 @@ -// Fixed-grid Qt entry point; terminal semantics stay in the owned C++ model. +// Qt terminal geometry follows the current font; semantics stay in the model. #pragma once #include "terminal_session.hpp" @@ -8,6 +8,8 @@ #include #include #include +#include +#include #include #include #include @@ -20,6 +22,32 @@ class TerminalWidget final : public QWidget { static constexpr int margin = 8; int cell_width_ = 9; int cell_height_ = 19; + bool grid_ready_ = false; + void refresh_metrics() { + const QFontMetricsF metrics(font()); + cell_width_ = (std::max)(1, qCeil(metrics.horizontalAdvance(QLatin1Char('M')))); + cell_height_ = (std::max)(1, qCeil(metrics.height()) + 2); + } + void synchronize_grid() { + const int columns = std::clamp((width() - margin * 2) / cell_width_, 1, 500); + const int rows = std::clamp((height() - margin * 3 - cell_height_) / cell_height_, 1, 200); + model_.resize(columns, rows); + } + void resizeEvent(QResizeEvent* event) override { + QWidget::resizeEvent(event); + synchronize_grid(); + } + void showEvent(QShowEvent* event) override { + QWidget::showEvent(event); + synchronize_grid(); + } + void changeEvent(QEvent* event) override { + QWidget::changeEvent(event); + if (grid_ready_ && (event->type() == QEvent::FontChange || event->type() == QEvent::ApplicationFontChange)) { + refresh_metrics(); + synchronize_grid(); + } + } static QColor colour(int index, bool foreground) { static const std::array palette{ QColor(20, 24, 28), QColor(205, 73, 74), QColor(145, 185, 89), QColor(221, 190, 90), @@ -38,7 +66,12 @@ class TerminalWidget final : public QWidget { if (event->type() == QEvent::KeyPress && static_cast(event)->key() == Qt::Key_Tab) { keyPressEvent(static_cast(event)); return event->isAccepted(); } - return QWidget::event(event); + const bool handled = QWidget::event(event); + if (grid_ready_ && event->type() == QEvent::DevicePixelRatioChange) { + refresh_metrics(); + synchronize_grid(); + } + return handled; } void keyPressEvent(QKeyEvent* event) override { QByteArray bytes; @@ -99,8 +132,9 @@ class TerminalWidget final : public QWidget { painter.setFont(base_font); painter.setPen(model_.error().isEmpty() ? colour(8, true) : colour(9, true)); const QString status = !model_.error().isEmpty() ? model_.error() : model_.finished() ? - QStringLiteral("Session exited: %1").arg(model_.exit_code()) : QStringLiteral("Fixed 80 x 24 terminal"); - painter.drawText(QRect(margin, margin + SessionModel::fixed_rows * cell_height_, + QStringLiteral("Session exited: %1").arg(model_.exit_code()) : + QStringLiteral("Terminal %1 x %2").arg(screen.width()).arg(screen.height()); + painter.drawText(QRect(margin, height() - margin * 2 - cell_height_, width() - margin * 2, cell_height_ + margin), Qt::AlignLeft | Qt::AlignVCenter | Qt::TextSingleLine, status); } @@ -115,18 +149,18 @@ class TerminalWidget final : public QWidget { if (families.isEmpty()) throw std::runtime_error("The bundled font exposes no font family"); QFont fixed(families.first()); fixed.setStyleHint(QFont::TypeWriter); fixed.setPointSize(11); setFont(fixed); - const QFontMetricsF metrics(fixed); - cell_width_ = qCeil(metrics.horizontalAdvance(QLatin1Char('M'))); - cell_height_ = qCeil(metrics.height()) + 2; + refresh_metrics(); setFocusPolicy(Qt::StrongFocus); setAttribute(Qt::WA_InputMethodEnabled, false); - setFixedSize(sizeHint()); + setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding); + resize(sizeHint()); + grid_ready_ = true; model_.on_changed = [this] { update(); }; } ~TerminalWidget() override { model_.on_changed = {}; } QSize sizeHint() const override { - return {margin * 2 + SessionModel::fixed_columns * cell_width_, - margin * 3 + (SessionModel::fixed_rows + 1) * cell_height_}; + return {margin * 2 + SessionModel::initial_columns * cell_width_, + margin * 3 + (SessionModel::initial_rows + 1) * cell_height_}; } }; diff --git a/third_party/msvc_runtime/README.md b/third_party/msvc_runtime/README.md index e99418ff..5fa756f8 100644 --- a/third_party/msvc_runtime/README.md +++ b/third_party/msvc_runtime/README.md @@ -26,11 +26,12 @@ Qt 入口要求绝对路径 `-DTERMFORGE_MSVC_RUNTIME_DIR=/crt`。配 [微软的兼容合同](https://learn.microsoft.com/en-us/cpp/windows/latest-supported-vc-redist?view=msvc-170)要求 runtime 至少与构建工具同新。CMake 使用实际选中的 VC Tools 目录版本(例如本机 `14.42.34433`、已观察的 hosted `14.51.36231`)与固定上限 `14.51.36247` 比较;无法识别或工具集更新时失败。编译器自己的 `19.x` 版本不能转换推测成 `14.x`。Qt 另保持已固定的官方 MSVC 2022 x64 二进制来源,其兼容性由独立构建和运行证据验证。 -构建成功后,为两个入口各生成完整运行时清单: +构建成功后,为产品及两个独立 smoke 入口各生成完整运行时清单: ```powershell python tools/msvc_runtime.py manifest --directory build/qt-cpp/qt-bin/Release --executable termforge_qt_shell.exe python tools/msvc_runtime.py manifest --directory build/qt-cpp/qt-smoke-bin/Release --executable qt_cpp_shell_smoke.exe +python tools/msvc_runtime.py manifest --directory build/qt-cpp/qt-resize-bin/Release --executable qt_cpp_resize_smoke.exe ``` `runtime-manifest.json` 记录目录内全部文件的相对路径、大小和 SHA-256,以及固定 CRT manifest 身份;不包含本地绝对路径或凭据。清单排除自身,必须在最终构建/部署完成后生成,后续改动须重新生成;它不替代对 EXE 源码、构建配置或其他第三方许可的记录。单文件部署使用原子替换,整目录不承诺事务性;未成功完成部署的目录不得作为包使用。 diff --git a/third_party/qt/README.md b/third_party/qt/README.md index afe73074..d43b2cc7 100644 --- a/third_party/qt/README.md +++ b/third_party/qt/README.md @@ -32,15 +32,16 @@ cmake -S . -B build/qt-cpp -G "Visual Studio 17 2022" -A x64 ` -DQt6_DIR="$PWD/local/qt-build-deps/qt/lib/cmake/Qt6" ` -DTERMFORGE_CONPTY_BACKEND_DIR="$PWD/local/qt-build-deps/conpty" ` -DTERMFORGE_MSVC_RUNTIME_DIR="$PWD/local/qt-build-deps/crt" -cmake --build build/qt-cpp --config Release --target termforge_qt_shell qt_cpp_shell_smoke +cmake --build build/qt-cpp --config Release --target termforge_qt_shell qt_cpp_shell_smoke qt_cpp_resize_smoke python tools/msvc_runtime.py manifest --directory build/qt-cpp/qt-bin/Release --executable termforge_qt_shell.exe python tools/msvc_runtime.py manifest --directory build/qt-cpp/qt-smoke-bin/Release --executable qt_cpp_shell_smoke.exe -ctest --test-dir build/qt-cpp -C Release -R '^qt_cpp_shell$' --no-tests=error --verbose +python tools/msvc_runtime.py manifest --directory build/qt-cpp/qt-resize-bin/Release --executable qt_cpp_resize_smoke.exe +ctest --test-dir build/qt-cpp -C Release -R '^qt_cpp_(shell|resize)$' --no-tests=error --verbose ``` `Qt6_DIR` 应包含该版本的 `Qt6Config.cmake`;正式入口缺少或不匹配固定 ConPTY/CRT 时明确失败,不回退系统版本。CRT 按实际 VC Tools 目录版本检查兼容上限。最小 SDK 未安装翻译,当前构建使用 `windeployqt --no-translations --no-compiler-runtime` 部署 Qt,另显式复制固定 app-local CRT;Qt 默认 compiler-runtime 部署会携带待执行的安装包,不能代替这批便携目录的 DLL。完整运行时清单绑定最终目录,不代表所有许可和产品打包已验收。 -专用 [Qt C++ CI](../../.github/workflows/qt-cpp.yml) 在 `windows-2025` 中执行同一准备、两个显式 Qt target 构建,以及 `qt_cpp_shell` 的 offscreen / OwnedJob smoke。它不继承默认/系统后端或 Alacritty 作业的通过结果;runner 验证不扩大 Windows 11 x64 或其他平台的产品支持声明。自动产物仅保留路径无关的准备摘要和两份完整运行时清单,不上传 SDK、部署目录或原始日志;runner 的 offscreen 成功不替代隔离 Windows 的原生加载与交互验证。 +专用 [Qt C++ CI](../../.github/workflows/qt-cpp.yml) 在 `windows-2025` 中执行同一准备、产品及两个显式 Qt smoke target 构建,以及 `qt_cpp_shell` / `qt_cpp_resize` 的 offscreen / OwnedJob 检查。它不继承默认/系统后端或 Alacritty 作业的通过结果;runner 验证不扩大 Windows 11 x64 或其他平台的产品支持声明。自动产物仅保留路径无关的准备摘要和三份完整运行时清单,不上传 SDK、部署目录或原始日志;runner 的 offscreen 成功不替代隔离 Windows 的原生加载与交互验证。 CI 的 `windows-2025` 已实际解析到 `windows-2025-vs2026`,该映像没有 VS 2022 实例;因此工作流显式使用 [CMake 的 VS 2026 generator](https://cmake.org/cmake/help/latest/generator/Visual%20Studio%2018%202026.html),要求 CMake 4.2 或更新。Qt SDK 仍是固定的 MSVC 2022 x64 包,不把 SDK 名称改称 VS 2026。[微软的二进制兼容说明](https://learn.microsoft.com/en-us/cpp/porting/binary-compat-2015-2017?view=msvc-170)允许较新链接器消费较早工具链构建的动态库,但实际兼容性仍由这次独立构建和会话检查证明;本地 VS 2022 验证与 hosted VS 2026 验证分别记录。