## 当前可靠性收口(2026-11-01) 本项是R2可靠性汇总,不与子项重复计工作量。原生阻塞关系中仍开放的只有 **#44/#80/#99**;#35的最终声明配置还需复验。 | 子项 | 已有证据 | 未完成 | |---|---|---| | #44 controller B自然退出 | close前wait/exit端点及取消/自然退出三类签名;最新96用例未复现 | 原child→cmd交接触发条件/根因仍未知,不能将推断写作因果修复 | | #80 hosted四shell原stage6 | stage5 WSL观察窗口已修;本机7/7和新hosted通过 | 原stage6事件未复现,同因性未知 | | #99 剪贴板原45秒超时 | 首错/当前步骤/清理分列;Draft300两轮默认场景完成 | 失败瞬间stage/owner/helper/UI泵仍未知,诊断分支不算产品修复 | ## 已关闭项的处理依据 [用户决定记录](https://github.com/JavaZeroo/termforge/issues/38#issuecomment-6554935496):清单A同意、47A/52A/34B、29/30保留。#36/#40/#57/#73/#97/#144/#145/#160等按限定事实、接受未复现或范围处置关闭;#194亦按用户接受未复现关闭。它们的原始失败与重开条件保留,**不是全部根因修复**。 #47后端整合复验转#35;#52实验路线退出本轮;#34路线与接口说明已收口。#31跨屏转#297/R4。上述均不再在本汇总里排成当前故障队列。 ## 后续规则 - 每项新批次先有可证伪假设、固定source/负载/环境、上限与停止条件;已有“当前main通过”不值得无目的重复。 - 保留原期限、字节与回收判据;close后码不替代自然退出,未复现不自行标为修复。 - 真实修复需关联原失败;若接受剩余风险/范围处置,记录用户明确决定,不能从其他项的关闭推导。 - 最终正式包的实际结果由#35承担,历史默认/参考构建成功不能组合成产品联合通过。 [证据索引](https://github.com/JavaZeroo/termforge/blob/main/docs/EVIDENCE.md)。本次刷新未重跑或关闭任何开放子项。
Activity
JavaZeroo commentedon Oct 25, 2026
基于 #33 工作树的完整默认 CTest 已自然结束:39/40。除 #36 的 normal/resize 外,新增多会话场景还出现一次 stage 2 标记等待超时,不能只归因于 #36。\n\n随后完整 shell 套件重跑中多会话两轮通过,35项仅有 #36 两项失败;因此该多会话失败按间歇问题保留,不宣称已根治。超时诊断现会保存有界 PTY 输出与文本屏幕,不生成截图。记录:validation.json。\n\n旧 ui-main/分屏等失败未复现不等于全部修复,本 issue 保持 OPEN。
JavaZeroo commentedon Oct 25, 2026
2b623108cf993300947d898847cdeecc164ae95c同时修正了新增退出菜单的独立合同:Session 可用命令集合加入17,Copy/Select All 索引更新为9/10,并保留负例。\n\n修正前完整默认 CTest 为38/40(text_actions 和 shell 失败);修正后text_actions、真实选择 popup 和静态负例通过,完整复验为39/40,仅剩 #36 normal/resize。菜单造成的合同差异不另留开放项,#38 继续跟踪间歇多会话标记等待及其他未闭合回归。JavaZeroo commentedon Oct 25, 2026
当前 #29 未提交工作树的默认 Release 完整 CTest 已自然结束:39/40。命令为
ctest --test-dir build -C Release --output-on-failure,未减少负载、延长超时或跳过失败。test_commands_unicode_editing_interrupt_and_normal_exit与test_resize_child_dimensions_and_interrupt仍为持续输出后的 stage=5 超时,归既有 [R1回归] 持续 cmd 输出时 ETX 未中断导致 normal/resize 超时 #36。test_workspace_v2_multiple_shells_split_and_geometry_restore在首次ui-workspace-save的 stage=2 超时。它再次说明多会话/保存标记等待存在间歇缺口,不能只记录 [R1回归] 持续 cmd 输出时 ETX 未中断导致 normal/resize 超时 #36,也不能由 [R2-10][持久化] 恢复会话配置、窗口与工作区并处理迁移损坏 #33 已完成的局部恢复验收抵消。text_actions、workflow_sessions、selection_bytes、selection_context及真实 monitor round-trip 均通过;不据此宣称所有几何/交互问题已根治。证据来自私有非输入 desktop、Job 和有界文本/JSON,没有截图或前台输入。#38、#29 与 R2 路标保持 OPEN。
JavaZeroo commentedon Oct 25, 2026
补充定位并复验 #29 相关的后台超时:stage 11 连续复现时,没有把它归为普通间歇失败。按会话累计计时显示主要成本来自每次 feed 对全部历史做 replay reconcile,而不是盲目的历史合并。已改为缓存原始 FFI ID 与最终身份的映射,仍按完整行内容校验,未知旧 ID 保留全量回退;诊断样本不用于性能排名或百分比声明。
同一 90 秒、每路 32000 行后台场景随后通过,诊断开启时为 41.06 秒;移除诊断后的最终候选完整 CTest 中
workflow_sessions为 41.16 秒并通过。最终候选全套为 41/42,剩余 shell 包含 #36 normal/resize,以及 #38 的 close/resize-close stage 2 和 workspace restore stage 1 失败;这些没有被隐藏或改写成通过。#38 继续 OPEN,工作区几何、保存/恢复和其它间歇回归仍需独立闭合。全过程只使用私有非输入 desktop、Job 和文本/JSON,不截图或操作前台桌面。
JavaZeroo commentedon Oct 25, 2026
已推送限定工作区切片
27f376d02009e2bcb916b5cb23767d9b7df10cdc,但本 issue 继续保持 OPEN,不能据此视为全部回归已闭合。本次修正的是测试与观测合同:按真实客户区/DPI、原生滚动条和工作区边界验证几何;区分完整恢复与真实裁剪恢复;用有界历史判断会话文字仍被保留;以实际输出标记和后续提示符验证命令完成,避免把 PowerShell 编辑显示或 ConPTY 光标序列误判为输出丢失。观测开关也改为真实状态。
默认和候选各两轮保存/恢复、真实 65535 宽保存配置的裁剪恢复,以及保留原有两轮后的额外 1008×681 隔离场景已验证。未改变文字负载、超时或用户显示设置,未截图。
仍有 #36 中断、候选早期输入/关闭相关场景、真实 DPI/呈现及 CI 验收缺口;完整回归结果继续跟踪,不宣称全绿或 R2 完成。
JavaZeroo commentedon Oct 25, 2026
完整结果与源码/二进制身份已归档并推送:
4597a371c71c4506729db0689de93e98ec0479f8,见experiments/shell/results/2026-10-26-workspace-geometry/validation.json。确定源码树的默认 CTest 为 39/40,候选为 41/42;默认/候选保存恢复均已通过,但 #36 和候选早期输入/关闭场景仍失败。该记录只覆盖工作区几何、持久化和输出完成判据,#38 继续保持 OPEN,不宣称完整回归、真实 DPI、呈现或 R2 验收完成。
JavaZeroo commentedon Oct 25, 2026
补充 Windows Server 2025 CI 对照(保持 OPEN):
18c36ce的主 CI 40241569730 为 Windows 39/40,但 shell 内有 3 errors:ui-shells在 stage 4 超时,普通选择及系统复制选择均缺少TF_FIND_050 needle 中文 é。Ubuntu 通过。原始日志已通过 REST 作业接口核实;
gh run view --log/--log-failed返回空内容,没有据此臆测失败原因。#38 继续跟踪这些真实回归,#35/R2 不得据此宣称完成。JavaZeroo commentedon Oct 25, 2026
本次主 CI 40244057401 的 Windows 结果为 38/40:shell 仍是已记录的三项生命周期/选择失败;另有
ime_inventory纯 PowerShell 夹具超过原 10 秒期限,已拆为子项 #40,并建立 #38 的原生 blocked-by 关系。本机同一 inventory 测试一次为 1.633 秒通过,但不能代替 CI 修复,也不能据此归因于环境或 worker 缺陷。原超时未延长,#38/#40 均保持 OPEN,#35 的阻塞不解除。备用屏限定证据不替代这些回归的修复。
62 remaining items
JavaZeroo commentedon Oct 31, 2026
并行度普查:
ime_context与conpty是负载敏感项在合并树(本会话 11 个 PR 全部合入)上做了一轮 flake 普查,方法固定为「高并行重复 + 隔离对照」。
方法
环境:Windows 11 x64、Release、
TERMFORGE_BIN_DIR指向构建产物、两份仓库声明依赖已安装。结果
-j 8ime_context失败)、67/67ime_context10/10 通过,每次 0.51–0.63s与之前一条评论的
conpty记录合并:conpty-j 4全量--repeat until-fail:33/3 通过ime_context-j 8全量--repeat until-fail:1010/10 通过判读
两者都是负载敏感而非确定性失败:隔离下稳定通过,只有在整机并发(
shell约 100s、ime_inventory约 60s 等同批运行)时偶发。conpty的失败签名先前已记录:test_large_ordered_payload以returncode=1退出、timed_out=False,候选原因是probe.cpp关闭后固定 1 秒的句柄/线程 settle 窗口ime_context是 Win32 IME 上下文测试(experiments/shell/ime_context_test.cpp,链接imm32/user32,CTest 超时 60s),隔离耗时仅 0.5s,失败集中在整机争用时建议
set_tests_properties(... RUN_SERIAL TRUE),或把整机 CTest 并行度降到-j 4以下一条方法学提醒
普查时若源码树当前分支与构建目录的配置分支不一致,Python 测试会以
ModuleNotFoundError失败——这是环境不一致,不是 flake。本次第一轮普查就踩到了这一点,已剔除后重跑。本条只记录观测与判读口径,不改测试属性、不改 CI 并行度。
JavaZeroo commentedon Oct 31, 2026
诊断改动已全部落地(等待下一次命中)
下面每一项都对应本 issue 里记录的"单一观测",现在都已经在 main 上:
js_start_after_create_ms(CreateProcess→首行 JS)research/ui/test_raster_style_reference.py(PR #274)spawn_seconds/exit_at_timeout/partial_stdout_bytesreport/emittedresearch/ime/inventory_worker.ps1(PR #278)research/ime/test_hosted_inventory.py(exit_at_timeout/partial_stdout_bytes)experiments/shell/workspace.hpp+shell.cpp(PR #275/#276)window_bytes/window_hex)experiments/shell/local_shell_diagnostics.hpp(PR #277)本轮动作
已派发 3 轮
conpty-compat.yml(main),用于加速命中这些观测。命中后我会把各字段读数贴回对应 issue。边界
JavaZeroo commentedon Oct 31, 2026
R2 剩余开放项的当前状态(按处置方式分组)
下面的分组依据是这一项还需要什么才能动,不是难度。
A. 等一次 CI 命中(诊断已就位,命中即可判读)
output_bytesvsbytes(PR #242)report/emitted检查点(PR #278)window_hex(PR #277)frame.bmp存在性(既有转储)js_start_after_create_ms(PR #274)B. 需要你决策
C. 交付与汇总
D. 需要真实环境
E. 其他
#27/#28/#29/#30/#44/#47/#52 等属能力与验收类,进展以各自 issue 的最近评论为准。
本轮新增的事实
windows-2022-conpty在 main 上连续两次成功(run 41193269350 / 41193276156);边界
JavaZeroo commentedon Oct 31, 2026
两次完整作业全绿(含 2022 与 actions-repeat)
在 #280(记录制端到端生效)合入 main 后,派发的两次
conpty-compat运行全部 8 个作业成功:作业清单(两次相同):
windows-2022-conpty、windows-2025-actions-repeat、windows-2025-resize-reply、windows-2025-node-contract-timing、windows-2025-startup-latency、windows-2025-startup-under-load、windows-2025-original-probe-repeat、windows-2025-probe-after-conpty-tests。意义与限度
意义:
windows-2022-conpty从长期红转为连续两次绿(决策 2A 的端到端结果);windows-2025-actions-repeat是本项目里最容易复现洪流/ETX 一类问题的作业,连续两次通过说明那一类时序问题在这两个样本上没有出现。限度(必须写清):
下一步
继续累积运行序列,并把每次命中的新字段读数回填到对应 issue;
windows-2022-conpty的绿不再作为"修好了平台"的证据,只作为"判定口径正确"的证据。JavaZeroo commentedon Oct 31, 2026
采样序列更新(6 轮)
windows-2022-conpty首次转绿ui-copy-system选择场景超时5 绿 / 1 红,红的那次是同一个形态(输入无拒绝、
output_bytes == consumed、子进程存活)。新合入的诊断
stagestage=0是 ShellWindow 的,不适用)frame_at_timeout限度
JavaZeroo commentedon Oct 31, 2026
采样序列更新(9 轮)
ui-copy-system选择超时actions-repeat8 绿 / 1 红。第 7-9 轮是合入 #284(场景 stage)之后派发的,因此它们的
actions-repeat通过说明:这三轮里没有触发那个形态。需要说明的限度
下一步
继续派发,直到抓到带
stage=的失败样本(#284 之后才有此字段),那将是首次给出卡点位置。JavaZeroo commentedon Oct 31, 2026
在 main
dc9138d上的本机全量回归(补齐缺失构建目标后)这轮把近期合并的诊断改动(#274–#290)在本地完整回归了一遍。
core/reply/edit_csi/selection*/transport/view_mapping/presentationview_mapping_core为 Not Run,因view_mapping_test未构建;构建后通过shell/text_actions/selection_context/selection_bytes/keyboard/decawm/alternate/order_queryshell失败是缺shell_queue_probe.exe,构建后通过shell_launchshell_launch_test.exe),构建后通过说明
边界
windows-2025/ubuntu回归结论。JavaZeroo commentedon Oct 31, 2026
三类持续未复现的量化批次(同一 artifact 集的结论)
把他们放在一起,是因为这三项都属于"历史上偶发、当前批次未复现":
[{elapsed_ms:0, gone:true}];缺失 5 条均为刻意构造的desktop-failure负例stale_buffer=0、stale_window=0、buffer_window_disagreement=0共同点
由此得到的判断
这些问题的复现依赖宿主侧偶发状态(Node 启动被拖慢、桌面回收延迟等),而不是固定输入可触发的确定性缺陷。因此:
边界
JavaZeroo commentedon Oct 31, 2026
main
95855f4上的 Qt 入口冒烟:通过这一轮把近期全部合并(诊断、WSL 窗口修复、文档)之后的 Qt 产品入口又验了一遍:
qt_cpp_shell_smoke构建status=passed、timed_out=false、exit_code=0job_after.active=0(total=26)同时核对了 ADR-0007 的「已知差异」
确认其中确实记录了原生
CHAR_INFO的可见性差异与边界,且写明"不阻塞 VT/transport/末端层验收,原生层证据缺口单独保留"——与 #41 的裁决一致,也与 #293 的证据记录口径一致。局限
qt-cpp-windows作业结论。Merge pull request #296 from JavaZeroo/docs/reliability-batches
JavaZeroo commentedon Oct 31, 2026
当前阻塞结构(按"还差什么"划分)
R2 剩余 23 个开放项(另 48 项已关闭)。本轮把它们按"推进条件"归一次类:
A. 需要用户决策(3 项)
ui-actions几何阶段样本;方向需用户确认B. 需要一次不可控的真实命中(8 项)
output_bytesvsbytesreport/emitted检查点stageframe_at_timeout+ lifecycle 字段js_start_after_create_msC. 需要真实硬件/OS 环境(2 项)
D. 能力与验收类(其余)
#27 / #28 / #29 / #30 / #44 / #47 / #52 / #160 / #38 / #35 —— 以各自 issue 的最近评论为准。
本目标期间的可核验产出
frame_at_timeout、lifecycle 字段、js_start_after_create_ms2026-10-31-wsl-size-window、2026-10-31-reliability-batches、ADR-0009 实施状态说明
A、B、C 三类的推进条件都不在本地可完成范围内;继续增加本地改动的边际价值已接近零。
JavaZeroo commentedon Nov 1, 2026
按「不死磕」原则复核:哪些开放项可以收口
用户已明确可以接受不完美、不需要一直死磕一个问题。我按同一原则把剩余 21 项过了一遍,分成三张清单。
清单 A:不可复现类(8 项)
清单 B:需要你确认范围或接受差异(3 项)
清单 C:仍需真实环境或实现(6 项)
建议
若希望尽快收口 R2,最省成本的是把清单 A 的 8 至 9 项按「批次未复现 加 诊断就位」关闭,并在每项评论写明重开条件。R2 开放数可从 21 降到 12 或 13,且不损失已记录的证据。
清单 B 的 3 项需要单独确认(都涉及范围判断);清单 C 本地无法推进。
JavaZeroo commentedon Nov 1, 2026
合并后内容审计:16 项抽查,全部确认在 main
起因:上一轮发现
docs/FEATURES.md的 DPI 行其实没进 main(提交落错分支),说明"报告里说合并了"不等于"main 上真的有"。因此对本次会话的主要改动做了一次内容审计——直接读origin/main的文件内容匹配关键字符串,而不是看 PR 状态。js_start_after_create_msworkspace-failure mode=diagnostic_linewindow_hexemitteddesktop_close_settleTERMFORGE_CONPTY_RECORD_HANDLESinvalid text in title eventframe_at_timeoutself->stage_closer_joineddef describe(saved_textinputs.onlyshell_size_client决策 6唯一确认的遗漏
docs/FEATURES.md的 DPI 范围行(PR #299 正在修)——它的提交在 round 69 落到了另一条分支,PR #291 只带走了 SGR 那条。结论
除该处外,本次会话声称合并的改动都实际存在于 main。
边界
JavaZeroo commentedon Nov 1, 2026
按用户决定:清单 A、B 关闭,R2 开放数 21 → 11
用户 2026-11-01 决定:清单 A 同意;47A、52A、34B;29/30 保留。
本轮关闭(11 项)
stale_buffer/stale_window/disagreement全 0report/emitted检查点已加,未命中frame_at_timeout与收尾字段已加,未命中每项评论都写明了不是根因修复、保留了原始失败记录,并给出重开条件。
计数变化
仍开放的 11 项
边界
JavaZeroo commentedon Nov 1, 2026
Node 栅格夹具冷启动类目复发记录(2b8105e,不重开 #144)
main 2b8105e(PR #306 合入后)Windows regression 出现一次 windterm_raster_style_reference(research/ui/test_raster_style_reference.py test_production_js_native_contract)失败:
原始失败 job 124946024399,重跑 job 同 run 新 job。