Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .gitattributes
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,6 @@ tools/owned_vm_request.cs text eol=lf
tools/run_vm_request_queue.ps1 text eol=lf
tools/fixtures/vm_request_*.ps1 text eol=lf
third_party/conpty/LICENSE text eol=lf
third_party/qt/LICENSES/LGPL-3.0-only.txt text eol=lf
third_party/qt/LICENSES/*.txt text eol=lf
third_party/msvc_runtime/NOTICE.txt text eol=lf
experiments/core/fixtures/*.bin binary
11 changes: 10 additions & 1 deletion .github/workflows/qt-cpp.yml
Original file line number Diff line number Diff line change
Expand Up @@ -20,9 +20,16 @@ jobs:
with:
python-version: '3.12'
- name: Verify preparation failure contracts
run: python -m unittest tools.test_prepare_qt_build tools.test_prepare_msvc_runtime tools.test_msvc_runtime tools.test_stage_qt_product -v
run: python -m unittest tools.test_prepare_qt_build tools.test_prepare_msvc_runtime tools.test_msvc_runtime tools.test_stage_qt_product tools.test_build_qt_component_inventory -v
- name: Prepare manifest-pinned Qt qtbase, Microsoft ConPTY and CRT
run: python -m tools.prepare_qt_build
- name: Verify deployed Qt component inventory against the pinned archive and SBOM
run: |
python -m tools.build_qt_component_inventory check `
--cache local/qt-downloads `
--sbom local/qt-build-deps/qt/sbom/qtbase-6.10.3.spdx.json `
--sdk-dir local/qt-build-deps/qt
if ($LASTEXITCODE -ne 0) { exit $LASTEXITCODE }
- name: Preserve path-free dependency preparation identity
if: always()
uses: actions/upload-artifact@cf430e030ddbb5b0abf93d22962f4752f3646cd9 # v7.0.2
Expand Down Expand Up @@ -64,6 +71,8 @@ jobs:
path: |
local/qt-product-staging.json
local/qt-product-staging/product-manifest.json
local/qt-product-staging/licenses/qt/components.json
local/qt-product-staging/QT-THIRD-PARTY-NOTICES.txt
local/qt-product-staging/THIRD-PARTY-NOTICES.txt
- name: Record complete path-free runtime manifests
run: |
Expand Down
4 changes: 2 additions & 2 deletions docs/FEATURES.md
Original file line number Diff line number Diff line change
Expand Up @@ -41,7 +41,7 @@

`DA1` 当前只在 strict/replay 路径回复 `ESC[?6c`;recovery 产品路径保持静默。`?1004`/`?9001` 与单参数 `CSI 1t/2t/3t` 接受后忽略,不代表焦点上报、Win32 输入模式或窗口操作已实现。`?2004`、鼠标模式、DA2 和 OSC 10/11 仍缺;详见 [#28](https://github.com/JavaZeroo/termforge/issues/28)。

Qt 构建显式准备并部署[固定微软 CRT 14.51.36247.0](../third_party/msvc_runtime/README.md),不安装到 System32。隔离 Windows 的[限定加载与 cmd 验证](../experiments/shell/results/2026-10-29-qt-crt-deploy/README.md)保留原包失败、原 52 文件不变且仅追加 CRT/原许可后的成功,以及新源码包的独立验证;它不解除完整产品打包、Qt/第三方分发审计、实际 DPI/IME 或物理呈现的验收缺口。正式入口现有 [`packaging/qt-product/manifest.json`](../packaging/qt-product/manifest.json) 冻结的工程 staging:只接收固定依赖准备摘要和逐文件字节都匹配的构建目录,输出路径无关的逐文件 SHA-256 与许可索引,并拒绝测试夹具或未固定来源;它仍不是 R2 包,干净 Windows 运行、96/144 DPI、完整 Qt 第三方许可清单与最终验收未完成。
Qt 构建显式准备并部署[固定微软 CRT 14.51.36247.0](../third_party/msvc_runtime/README.md),不安装到 System32。隔离 Windows 的[限定加载与 cmd 验证](../experiments/shell/results/2026-10-29-qt-crt-deploy/README.md)保留原包失败、原 52 文件不变且仅追加 CRT/原许可后的成功,以及新源码包的独立验证;它不解除完整产品打包、实际 DPI/IME 或物理呈现的验收缺口。正式入口现有 [`packaging/qt-product/manifest.json`](../packaging/qt-product/manifest.json) 冻结的工程 staging:只接收固定依赖准备摘要和逐文件字节都匹配的构建目录,输出路径无关的逐文件 SHA-256 与许可索引,并拒绝测试夹具或未固定来源。Qt 部署组件来源/许可材料已按固定 SBOM 与源码归档整理为 [`components.json`](../third_party/qt/components.json)(42 个组件、22 份规范文本,明确区分未部署声明与内部构建声明),但仍标为 `materials_prepared_user_review_pending`;对应源码/替换条件、干净 Windows 运行、96/144 DPI 与最终验收未完成,staging 也不是 R2 包。

官方参考的基础文字行为已按 [R1-01 合同](research/windterm-r1-text-contract.md)完成两组各两轮的自动取证;这为独立实现提供行为依据,产品能力仍按下表分别验收。

Expand Down Expand Up @@ -92,7 +92,7 @@ Qt 构建显式准备并部署[固定微软 CRT 14.51.36247.0](../third_party/ms
| 八会话文字工作流 | **限定验收**:[R1 固定源码整体验收](../experiments/shell/results/2026-10-24-r1-system-workflow/validation.json)覆盖同次 8 会话/拒绝第 9 个、后台有限洪流、历史/Find/实际选择与 CF 复制/确认粘贴/真实拼音、切换缩放、淘汰、取消关闭和重复回收;实际字节、目标隔离、动作与 Job/desktop 回收有独立审计 | 限定 Windows 固定拼音、本地 cmd 与有界负载;这是固定 R1 配置的组合验收,不能替代 R2 候选/新后端组合。实际呈现、常用 TUI、长期稳定及 UI/性能等价仍未验收 | R1 |
| 活体资源与滚动端点 | **限定测量**:普通启动默认关闭;[R1 组合审计](../experiments/shell/results/2026-10-24-r1-system-workflow/validation.json)绑定实际接收、state 与同 revision 的 WM_PAINT/BitBlt/GdiFlush 提交,保留跨时钟校准与阶段资源,可离线重算 | launcher-tree 不等于 UI 归因;观察进程成本不等于增量采样成本,短命进程及退出 CPU 可能漏采。短驻留不证明长期无泄漏,`presented_done=null`,不构成性能通过 | R1;扩展 R4 / R5 |
| 自动正确性与构建 | **限定验收**:Windows shell/ConPTY/呈现及 Windows/Linux 核心 CI、差分/恢复/队列/生命周期场景 | 产品打包、干净机器使用、依赖升级、长期回归和更广平台矩阵;#40 的 CI 纯夹具超时、窄窗口选择 #73、四 shell 原事件 #80、hosted 准备 #81 和[复制夹具 OpenClipboard 5 #85](https://github.com/JavaZeroo/termforge/issues/85) 等原失败已按各责任项记录修正或用户接受的未复现收口;当前开放的是 #44/#80/#99,由 #38 汇总;#72 保存判据与 #80 同步条件的限定修正不代替其他配置或未知根因验收 | R2 / R4 |
| Windows 产品交付 | **实现中,未验收**:首个 [v0.1.0-alpha.1 预发布](releases/v0.1.0-alpha.1.md)提供 Windows x64、静态 MSVC 运行库、附资源许可和构建身份的免安装 ZIP;正式 Qt 路线已有可复现的工程 staging/清单入口(见上),但没有正式 Qt 产品包。两者均未签名,已验环境限 Windows 11 本机与 Server 2025 CI,布局仍写入 LOCALAPPDATA | 旧 Win32 体验包不是正式 Qt 路线的 R2 基础开发包;staging 也不等于产品包或验收。干净机器与更广平台矩阵、Qt 第三方分发审计、签名/安装、配置升级及持续运行仍待完成。Windows 10 未验收,Server 2022 句柄基线已按 ADR-0009 改记录制,不代表产品在该平台验收 | R2 / R3 |
| Windows 产品交付 | **实现中,未验收**:首个 [v0.1.0-alpha.1 预发布](releases/v0.1.0-alpha.1.md)提供 Windows x64、静态 MSVC 运行库、附资源许可和构建身份的免安装 ZIP;正式 Qt 路线已有可复现的工程 staging/清单入口与部署组件来源/许可材料(见上),但没有正式 Qt 产品包。两者均未签名,已验环境限 Windows 11 本机与 Server 2025 CI,布局仍写入 LOCALAPPDATA | 旧 Win32 体验包不是正式 Qt 路线的 R2 基础开发包;staging 与组件清单也不等于产品包、对应源码交付或验收。干净机器与更广平台矩阵、Qt 对应源码/替换条件审查、签名/安装、配置升级及持续运行仍待完成。Windows 10 未验收,Server 2022 句柄基线已按 ADR-0009 改记录制,不代表产品在该平台验收 | R2 / R3 |
| Linux/macOS 与其他架构 | **未实现**客户端;Linux 核心 CI 已有。[官方平台范围台账](../research/windterm-2.7.0-platform-scope.md)已固定 2.7.0 的 Windows x86/x64、macOS x64、Linux x64 资产及声明下限;这不是 TermForge 支持或实测结论 | 最终需真实 Linux/macOS 客户端;平台调查可提前进行,整合及完整验收排在 Windows 11 x64 完整版本之后。其他系统版本、最低版本和架构由用户后续明确;旧系统及 ARM 等保持调查记录,不自动承诺或排除,也不能由核心 CI 推断产品支持 | 持续调查;R5 全平台出口 |
| 吞吐、响应、内存与稳定性 | **实现中,未验收**:已有机制实验、连续 CPU 区间校准与合成回归;候选字素改动的受限诊断中 project/interactive 吞吐中位数约下降 16%/9%,由 [#54](https://github.com/JavaZeroo/termforge/issues/54) 跟踪。[冻结批次执行器](../experiments/measure/R54-COST.md#冻结批次执行器windows)核对构建来源、原始输出、停止规则与逐轮配对统计;[独立 hosted 构建与实测](../experiments/measure/results/2026-10-27-r54-hosted/README.md)已验证来源和失败保留,但首批因环境护栏停止,尚无完整成本批次;[共享宿主CPU诊断](../experiments/measure/results/2026-10-27-r54-cpu-boundary/README.md)及[新hosted六位置](../experiments/measure/results/2026-10-27-r54-cpu-hosted/README.md)分别记录完整子进程/执行器分量;后者仍有3.333%–5.263%未归属余额,不改原护栏或判成本通过 | 旧诊断的共享宿主、allocator 包装与缺少真实呈现/输入时延端点使其不构成正式预算;新的不完整批次也不作吞吐结论。仍需同负载/同正确性、无插桩对照、观测开销和长期/多会话公平性;可靠原版基线后提出逐项预算及允许波动范围,**由用户明确确认**。与 WindTerm 的实际差距**待取证** | 当前优先;贯穿 R1–R5 |
| 大历史与动态内存压缩 | **未实现**产品能力;WindTerm 压缩属于官方性能声明,内部机制尚未证实 | 1/10/100 万行等明确规模下的内存/滚动/搜索/淘汰实验;根据瓶颈决定独立存储/压缩实现 | R4 |
Expand Down
9 changes: 4 additions & 5 deletions packaging/qt-product/manifest.json
Original file line number Diff line number Diff line change
Expand Up @@ -71,10 +71,9 @@
},
"qt": {
"license_manifest": "third_party/qt/manifest.json",
"bundled_texts": [
"licenses/LGPL-3.0-only.txt"
],
"status": "third_party_component_inventory_pending"
"component_inventory": "third_party/qt/components.json",
"third_party_notices": "QT-THIRD-PARTY-NOTICES.txt",
"status": "component_inventory_prepared_user_review_pending"
},
"conpty": {
"license_manifest": "third_party/conpty/manifest.json",
Expand Down Expand Up @@ -108,7 +107,7 @@
"r2_acceptance": false,
"clean_machine_run": "not_performed",
"single_screen_96_144_dpi": "not_verified_in_this_slice",
"full_third_party_license_inventory": "pending",
"full_third_party_license_inventory": "materials_prepared_user_review_pending",
"performance_equivalence": false
}
}
4 changes: 2 additions & 2 deletions src/qt/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -42,11 +42,11 @@ python -m tools.stage_qt_product stage `
python -m tools.stage_qt_product verify --staging local/qt-product-staging
```

staging 只接收 [`packaging/qt-product/manifest.json`](../../packaging/qt-product/manifest.json) 冻结的文件集合,并要求依赖准备摘要、固定 Qt SDK 树哈希、ConPTY/CRT/字体许可标识和每个实际文件字节都匹配;缺文件、测试夹具、额外文件、来源不符或摘要与当前仓库清单不一致都会明确失败。输出 `product-manifest.json` 记录 source commit/tree、构建参数、入口、逐文件 SHA-256、许可文件与仍未闭合的分发项,不含本机绝对路径;同目录由 `tools/msvc_runtime.py manifest` 生成的 `runtime-manifest.json` 视为派生证据,不进入 staging。本地产物只写入忽略的 `local/`。
staging 只接收 [`packaging/qt-product/manifest.json`](../../packaging/qt-product/manifest.json) 冻结的文件集合,并要求依赖准备摘要、固定 Qt SDK 树哈希、ConPTY/CRT/字体许可标识和每个实际文件字节都匹配;缺文件、测试夹具、额外文件、来源不符或摘要与当前仓库清单不一致都会明确失败。Qt 部署组件清单 [`components.json`](../../third_party/qt/components.json) 会对照固定 SDK 的 SBOM 重新推导并核验,随后连同 22 份规范许可文本、`QT-THIRD-PARTY-NOTICES.txt` 和机器可读清单副本一起进入 staging。输出 `product-manifest.json` 记录 source commit/tree、构建参数、入口、逐文件 SHA-256、部署组件证据、许可文件与仍未闭合的分发项,不含本机绝对路径;同目录由 `tools/msvc_runtime.py manifest` 生成的 `runtime-manifest.json` 视为派生证据,不进入 staging。本地产物只写入忽略的 `local/`。

当前主线注册的 Qt CTest 包括上述六项与 `qt_terminal_modes_retained`(只缩宽的保留/投影契约)、`qt_unicode_render`(固定 Unicode 样本的独立接收 + 离屏绘制/fallback 记录)、`qt_eight_session`(八会话目标隔离与生命周期);IME 合成事件检查在 `qt_cpp_shell` 内。历史冻结包的 `qt_ime_input_test.exe` 不属于当前主线构建目标,不用于替代这组验证。旧六阶段 `--resize` 仍以显式诊断运行并保留失败,不注册进默认 CI。

固定 ConPTY/CRT 输入缺失或篡改时构建明确失败;实际工具集更新到固定 CRT 之外时须重新审查依赖。产品中的 shell 启动失败保留可关闭的错误窗口。随目录保留 Qt 动态运行库、平台插件、`conpty-backend/`、`assets/fonts/`、十个固定 CRT DLL 及其原许可/NOTICE;每次构建重新校验并部署 CRT,不运行安装器、不修改 System32。windeployqt 显式跳过系统 D3D/DXC 重分发文件;`icuuc.dll` 由 Windows 11 提供,构建目录中由 windeployqt 从 System32 复制的副本在 staging 核对一致后被排除,不随包分发。`tools/msvc_runtime.py manifest` 仍可记录构建目录的全部运行时文件。当前产物是工程候选 staging,不是 R2 包:干净 Windows 运行、单屏 96/144 DPI、完整 IME/TUI/reliability、Qt 第三方分发审计及最终包验收仍未完成。
固定 ConPTY/CRT 输入缺失或篡改时构建明确失败;实际工具集更新到固定 CRT 之外时须重新审查依赖。产品中的 shell 启动失败保留可关闭的错误窗口。随目录保留 Qt 动态运行库、平台插件、`conpty-backend/`、`assets/fonts/`、十个固定 CRT DLL 及其原许可/NOTICE;每次构建重新校验并部署 CRT,不运行安装器、不修改 System32。windeployqt 显式跳过系统 D3D/DXC 重分发文件;`icuuc.dll` 由 Windows 11 提供,构建目录中由 windeployqt 从 System32 复制的副本在 staging 核对一致后被排除,不随包分发。`tools/msvc_runtime.py manifest` 仍可记录构建目录的全部运行时文件。当前产物是工程候选 staging,不是 R2 包:Qt 部署组件来源/许可材料已整理(42 个组件、22 份许可文本,`materials_prepared_user_review_pending`),但对应源码/替换条件审查、干净 Windows 运行、单屏 96/144 DPI、完整 IME/TUI/reliability 及最终包验收仍未完成。

## 独立验证面

Expand Down
Loading