Skip to content

[R2][Backend] 整合已确认的随包固定微软 ConPTY 正式路线 #47

Closed as not planned
8 of 8 issues completed
Closed as not planned

Description

@JavaZeroo

当前处置(2026-11-01)

本项已按用户选择47A以正式路线已整合收口;main的Qt入口已接固定包。产品默认/最终包重建复验由#35承担。旧PR50已关闭、实验GUI Vim #52不再作为并行产品路线扩展;原生CHAR_INFO差异仍按ADR-0007保留。下方历史实验合同不等于尚待整合或整体验收通过。


方向与合同

2026-10-28 用户已确认:Windows 本地 Shell 正式采用随包固定微软 ConPTY。 ADR-0007记录选择与边界。本项接续已有固定包接入及限定修复,集中整合这一条产品路线;系统版本和 WinPTY 可作诊断对照,不继续作为并行产品路线扩展。

本次确认不等于将现有实验构建直接验收为产品,核心/GUI 已另经用户确认采用自主 C++ 与 Qt Widgets,具体最小整合见 #115。切换产品默认前仍需在声明配置重建和复验;#34/#41/#56 的重要原版差异、原失败、系统输入/真实 DPI 和性能门槛继续保留。

Draft PR #50 提供 Backend 共同持有 create/resize/close 族与模块生命期、同包双 SHA/完整 MIT、安全绝对路径加载;缺文件、篡改、缺导出明确失败,无隐式下载或回退。实验合同。这是 #41 的实现聚合,不是产品默认或 R2 验收。

正式路线已合入 main 的限定结果(2026-10-29)

#115 / PR #116、#117 / PR #120、#124 / PR #128已交付自主 C++ / Qt / 固定微软 ConPTY 的最小入口、固定依赖 CI 与多 cmd 标签,可从 main 337812bc27b10a8f4dee5e4e35ded21c90f4a151到达。实际固定包双文件哈希、安全拒绝和有界传输沿各自证据保留。

多标签结果只验证固定 80×24、基础 ASCII/16 色、cmd 会话输入/错误/关闭隔离和事件循环退出前回收。本地完整 50/50 中 Qt 1 项与既有/独立诊断 49 项分列,12 条内部跳过不豁免。其他 shell、动态 resize、原 margin、完整 TUI、真实 CF/IME 与同次工作流仍需在新组合逐项复验;不将下方旧实验成果转记为本配置通过。

历史配置已交付的限定切片

仍须完成

当前证据边界

当前实验头 3adec0b49947257c3f02207b743d6de9f1ab168f 已合入 PR #95 的固定 WindTerm 2.7.0 四份有限对照:原版观察与限制。原 Vim 精确输入/resize/写盘可观测,但方法止于 stage56;独立原生 buffer60×3000/viewport60×12;CPR 原入口失败与显式模式变体通过分别保留,只有变体观察到 shell 自然37。四样本不组成一次完整验收,未改产品或采用运行库/后端。

PR95 两路独立审查无发现;HEAD fa74143、实际 checkout c435d1a 的 Build CI 首次 Windows default/system52/52(282.46s)、Linux33/33(10.56s)及 replay 通过。外部候选 workflow 因路径过滤未触发;原 official56/57 未重跑,#52/#28/#56 继续开放。

此前实验头 b60cd65b9fa6af724279780faa8d78847eb5cef0 已包含 PR #94 的隔离 MSYS 修补实验:同一原 Vim/产品 EXE/输入/断言/25s/40s下,原DLL一绿一stage59、未修重建DLL首轮stage59,修补DLL两批共四轮通过;实验DLL未进入产品,原固定运行库完整官方56/57与#52保留。证据及限制。

PR94同HEAD27bea78/checkoutd416d6a的首次Windows CI在WSL准备startup原20s期限失败,产品CTest未运行;预先限定一次失败job复查默认/system52/52、270.40s。Linux默认33/33、12.52s为原执行,候选CI两平台独立通过。首次失败由#81继续跟踪,不据复查关闭,也不构成official验收。

此前实验头 ed55a8758423b3273fbd98f07e0bfd77d88e46ac 已包含PR93。其同HEAD/checkout5cd12da首次默认/system CI51/52、294.89s的ui-copy-system超时保存在#73;预先限定一次失败job复查52/52、269.94s,候选CI独立通过。复查不关闭#73,不合并为官方配置验收。

此前实验头 dd533878538490c2464673218ea0000c6467a495 已合入 PR #92 的 #52 诊断:捕获红例的 Ctrl-O 在 MSYS 控制台输入转换中被取走,固定源码解释与调用点记录吻合;PR92当时尚无修补红绿,后续隔离实验见PR94;原固定运行库的正式兼容方案未完成,#52继续开放。白名单记录与临时探针、既有产品完整回归分列。PR92两条CI成功,实际checkout dc24943;Windows default/system52/52、273.96秒,Linux默认33/33,候选core+checkpoint两平台各2/2,不构成official验收。

最新产品源码 c662011 / .5 / 官方flags24完整 CTest 56/57、402.66秒、8项内部skip,唯一失败为 #52 Vim stage59;两轮原八会话data-only通过且Job0/desktopgone。该批未单独归因#63;随后PR93按上述范围闭合,更早缺运输样本仍未知。PR91 head 3a0561c 的 Build 与 External candidate 均成功,实际checkout 3fdd147。Windows default/system 52/52、278.50秒;Linux默认33/33;候选core+checkpoint在Windows/Linux各2/2。各配置独立记录,不能拼成official全通过。

此前验证源码 c93db58 / .5 / 官方 flags24 完整 CTest 55/56、398.08 秒、8 项内部 skip,唯一 CTest 失败为 #52 Vim stage59;完整 shell 37通过/3skip,六次保存/恢复/钳制通过。#63/#87 旧因未闭合。PR90 head f2ea8d2 的 Build 与 External candidate 独立成功;Windows 默认/system 51/51、274.50 秒,实际 checkout 3b11552,不合并为 official 全通过。

此前产品源 92eac12 / .5 / 官方flags24完整 CTest 54/56、411.59s、12项内部skip,失败为#52 stage59及#88 restore stage1。原resize/Unicode和本轮workflow_sessions通过;此前#87半行、#63旧工作区失败的原因仍独立未闭合。PR89 head259e036的两条CI均成功,Windows默认/system 51/51、271.66s,实际checkout ccce9e2;Build、Candidate不能代替官方配置整体验收。

固定 4daf992 candidate/official 完整 CTest 54/56、449.38s,shell174.65s 完成,但 Vim59、resize/resize-close43、main7/ui52 五个方法失败,12 个内部 skip;完整记录。旧 eae4 shell180s 超时继续保留。

PR76 HEAD887c769、实际 checkout0d8dea3 的 Windows CI 是 default/system 51/51、271.74s;External candidate 独立通过,不能拼成 official 完整通过。#81 观测已随 PR84 整合,旧 preflight command_deadline 的具体子命令仍未知;主线 #72/#73/#80/#85 等由 #38 分列。

父项 #41;开放硬前置 #52。#51/#53/#55/#62/#63/#87/#88 的已完成关系作为历史保留,整体继续 blocked,Draft #50 不合入 main。最终产品核心/后端归 #34,开发包与完整 R2 归 #35/#7。

Activity

  1. added
    enhancementNew feature or request
    ready-for-agent范围明确且真实阻塞已解除,可开始实施
    compatibility平台、协议或行为兼容问题
    on Oct 26, 2026
  2. removed
    ready-for-agent范围明确且真实阻塞已解除,可开始实施
    on Oct 26, 2026
  3. 3 remaining items

  4. changed the title [-][R2][Backend] 整合可显式选择的固定官方 ConPTY 后端[/-] [+][R2][Backend] 整合已确认的随包固定微软 ConPTY 正式路线[/+] on Oct 28, 2026
  5. JavaZeroo commented on Oct 31, 2026

    @JavaZeroo
    OwnerAuthor

    现状核对:正式入口已接入固定 ConPTY 与固定 CRT

    在 main(e9d8e6a)上核对,正式 Qt 入口的构建函数已经接上这两条路线:

    # CMakeLists.txt:417-423
    function(termforge_qt_entry target)
      target_link_libraries(${target} PRIVATE termforge_core Qt6::Widgets user32)
      ...
      termforge_use_bundled_conpty(${target})     # 随包固定微软 ConPTY
      termforge_use_msvc_runtime(${target})       # 固定 MSVC 运行库(#138)
    endfunction()

    cmake/ConptyBackend.cmake 的实际行为:

    • 非 Windows x64 直接 FATAL_ERROR
    • 要求 TERMFORGE_CONPTY_BACKEND_DIR 是绝对路径
    • termforge_validate_conpty_pair() 校验 conpty.dll / OpenConsole.exe 双文件、manifest.json 与 LICENSE 身份
    • 通过 add_custom_target(..._conpty_bundle) 每次构建前把双文件、manifest、LICENSE 复制到目标目录的 conpty-backend/
    • 缺包或身份错误直接失败,不退回系统 ConPTY

    配置说明见 third_party/conpty/README.md:11。

    对本项的影响

    本项原定的「整合已确认的随包固定微软 ConPTY 正式路线」在代码层面已经落地:正式驱动器就是 termforge_qt_entry,产品构建无法静默退回系统版本。

    仍开放的候选残余(按本项原文)是验证而非接入:

    建议

    把本项按限定关闭或范围收窄处理:接入已完成,剩余的是矩阵验收,可移交 #28/#52 与 #35 的出口核对。若保留本项,建议更新其「剩余交付」为仅矩阵部分,避免与已落地的 CMake 接入重复跟踪。

  6. JavaZeroo commented on Oct 31, 2026

    @JavaZeroo
    OwnerAuthor

    状态:正式路线已在产品入口落地,但本项按自身验收仍不能关闭

    已落地的部分(可核对)

    项 证据
    固定包身份 third_party/conpty/manifest.json:Microsoft.Windows.Console.ConPTY 1.25.260930003,包 SHA-256 6d6f8b00…,双文件摘要固定
    部署与校验 cmake/ConptyBackend.cmake:5-34:校验 manifest/许可证、复制到 conpty-backend/、缺文件或篡改即失败
    产品入口 CMakeLists.txt:417:termforge_qt_entry 调用 termforge_use_bundled_conpty(即 TERMFORGE_CONPTY_SIDEBYSIDE=1)
    行为差异 官方 side-by-side 保留 2;3r/4;5r,系统后端丢失(experiments/conpty/results/2026-10-26-margin-backends/validation.json)
    决策 决策 1A:采用该固定包作为 R2 产品后端(docs/adr/0009-r2-scope-decisions.md)

    为什么仍不关闭

    本项正文写明:

    当前状态与之对照:

    要求 现状
    声明配置重建与复验 Qt 入口有 CI(qt-cpp-windows)但只覆盖固定 80×24 基础场景
    #41 原版差异 原生 CHAR_INFO 侧的 margin 缺口仍未闭合(native_api_margin_gap_closed=false)
    系统输入/真实 DPI/性能门槛 分别挂在 #30/#31/#54(#54 已按决策 3C 关闭,#31 已按 4C 移出 R2 跨屏)

    边界

    • 本条只更新状态,不宣称产品验收;
    • 若你希望把"路线整合完成"与"产品验收"分开,可以另立一个只跟踪整合的 issue,本项继续保留验收职责。
  7. JavaZeroo commented on Nov 1, 2026

    @JavaZeroo
    OwnerAuthor

    按用户决定:按「已整合」收口(选项 A)

    用户明确选择 A:本项按路线已整合收口,产品默认切换后的重建复验交由 #35 承担。

    已整合的证据(均在 main)

    项 证据
    固定包身份 third_party/conpty/manifest.json:1.25.260930003,双文件摘要固定
    部署与校验 cmake/ConptyBackend.cmake:校验 manifest/许可证并复制,缺文件或篡改即失败
    产品入口接线 CMakeLists.txt 的 termforge_qt_entry 调用 termforge_use_bundled_conpty
    历史限定切片 #115/PR #116、#117/PR #120、#124/PR #128
    行为差异对照 experiments/conpty/results/2026-10-26-margin-backends/validation.json

    关闭时明确不包含的内容

    项 归属
    切换产品默认后的重建与复验 #35
    原生 CHAR_INFO 的 margin 可见性差异 ADR-0007「已知差异」,不视为修复
    动态 resize、完整 TUI、真实 DPI 等 各自 issue

    边界

    • 本项关闭不代表产品组合已验收;
    • 系统 ConPTY 与 WinPTY 仍只作诊断对照。
  8. removed
    blocked有明确未完成前置;见原生 blocked-by
    on Nov 1, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    compatibility平台、协议或行为兼容问题enhancementNew feature or request

    Projects

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions