Repository navigation
Description
原始失败与范围
PR #76 的 hosted Windows CI 在 Prepare hosted Windows shell prerequisites 的 preflight 返回 command_deadline,产品测试尚未运行。HEAD97ac1420801c072ec318604fb2193957c0c57e69,实际checkout1a1afd2152af3776e95a41c7f5fa1a8c3709d681;镜像win25-vs2026/20261021.278.1。
已下载且核对artifact12671066881(668B),SHA256 b69abc82963067e5c7d406776f2dbf3cb2e0c31cfb65b5ab9a74e15b4dfb7a40;原摘要和job日志留在local/r76-ci-prep。记录显示root自然退出1、Job active0/total6/terminated0,未请求终止Job;rootfs未验证。现有公开摘要不区分cmd、PS5.1、PS7与wsl-list哪个子命令超时,不能从进程总数推定。
有界交付
- 为实际run_command及worker→parent摘要增加白名单命令身份和开始/完成/超时边界;只保留固定枚举、相对时长、退出/超时状态与既有清理信息,不公开参数、路径、环境或命令输出。
- 在实际运行/摘要解析入口证明超时仍失败,未知枚举或异常数据不能泄漏;保存事件不伪造自然退出或回收。需要外层worker期限的场景同样保留最后实际阶段。
- 保持原单命令10s、preflight45s等期限,hosted/Job/目录保护和WSL不破坏策略;不得通过重试、sleep、跳过或延长预算取得绿。
- 用有界hosted诊断区分实际子命令及清理;未重现则保留原失败原因未知。遥测交付与根因修复分列,不由后续CI绿自动关闭根因。
- 同步PR76/[R2][Backend] 用确定性 sender fence 验收未完成粘贴的取消与关闭 #53/#47及可靠性父项;产品测试未运行就明确记录未运行。
父项#38;本项可独立开始,原hosted失败与#40纯夹具、#44controller、#80四shell stage6没有同因证据。原Windows个人环境不执行hosted准备或修改WSL配置。
观测实现与限定验证
PR #83 的代码 f6db464 已实现上述固定边界,公开证据为 79352f2。准备/清理 23/23、0.354s;写记录失败不会覆盖原 command_deadline、返回0/7及 marker 判断。故障过程使用模拟,真实 Job 用隔离 Python 子树,不能当作原 hosted 重现。代码与公开证据 Standards/Spec 双轴审查通过。
PR #84 将相同两个源码文件移植到原失败97ac142实验栈;相关cleanup实现也逐字节相同,该分支23/23、0.318s。主线与实验合并配置分别执行CI,原命令/worker预算不变。两次同镜像win25-vs2026/20261021.278.1准备五步均通过,每次20条命令边界完整;cmd/PS51/PS7/list返回0,import返回0,两个startup返回37。所有worker回收、Job active0;两个WSL check按原策略各终止残余2成员,不改写为自然退出。尚未据此识别原超时命令,根因继续unknown;这两个PR不自动关闭本项。
有界 hosted 结果
| 配置 | 固定身份与结果 | 原件 |
|---|---|---|
| 主线合并配置 | HEAD79352f2 / checkout939866f;Build40377249027准备通过;完整默认/system45/46、265.77s,由#85系统复制OpenClipboard5失败,该次PR83仍为Draft | artifact12677340273,1223B,SHA256 f496db21448062a14396abb1c542bed0b79ed49eee2baf75e902b6bab9221d01 |
| 原失败实验栈加观测 | HEADa5fdd05 / checkout1950bfd;Build40377346511准备及默认/system51/51、281.72s通过;PR84已以887c769合入PR76 | artifact12673919617,1221B,SHA256 83671236621a382801a3ad6dcc33bec1da09a6cb1f13e8c040e8bd2f4141e053 |
两份ZIP/summary/job日志已核对并保存在local/r81-main-ci及local/r81-experimental-ci。观测交付已在真实hosted执行,原超时本批未重现;停止重复取绿,原命令及根因仍unknown,本项保持开放。
PR76 整合观测后的 HEAD887c769 / checkout0d8dea3,Windows default/system 51/51、271.74s,External candidate40378897574独立通过;已以e0b4d67合入实验父PR50,#53按粘贴限定合同关闭。#47仍因完整官方矩阵缺口保持开放。主线PR83的独立复制失败由#85/子PR86接续;该新CI不是对原preflight超时的重复取绿。遥测交付完成,原超时具体命令和根因继续未知,本项保持开放。
主线整合
PR83 已以 8a13782aaac03780617e177b56ec55d3cb9c79be 合入 main。最终 HEAD dfff1b0d788c756f025a718568e663bffb1a16bf / checkout 683711dcb7028f2c4249ad5b1f3155c66c7a39ff 的 Windows default/system 完整回归 为46/46、241.44s,准备守卫23/23、0.128s;Ubuntu及 External candidate 独立通过。该集成结果验证观测与受控失败路径,原事件原因仍未知,本项保持开放。
PR94 的独立 check-before 启动超时
Windows job 121953193394,PR94 HEAD27bea78ec5e04cfd4fa1923a33d8e72003d47b3d、实际checkout d416d6a,镜像win25-vs2026/20261021.278.1。准备守卫23项通过;preflight的cmd/PS51/PS7/list均返回0,固定rootfs哈希验证与import通过。check-before的list返回0/47ms,startup在原20000ms期限触发timed_out;check-after和全部Windows产品测试未运行。
worker自然退出1并reap,收尾前Job active4/total25,4个成员精确Job归属均验证;3个镜像查询error31/role unknown,1个windows-wsl-host。请求一次Job终止、4成员收尾,随后active0/PID0、4个句柄均signaled/exit99;最终failure_code=cleanup_failed、policy=unverified-remaining-members,不能把成功清空Job写成成功准备或自然退出。startup超时是独立已有命令边界;为何挂起仍未知,与旧preflight未知命令超时不合并根因。
artifact12701894988(1242B)及ZIP SHA256 92db83453b8be865d2fd0e21c591de81d6e560f89719bb491a8eeaa8d6f3afd1已核对;原summary和job日志保存local/ci-pr94-attempt1。Build的Ubuntu33/33、12.52s和External candidate40432465115的两平台成功分列,不覆盖该失败。
为完成PR94的集成检查,预先限定仅对同一HEAD的失败Windows job重跑一次,输入、准备/测试期限和守卫不改。原失败保留;即使该次通过也只说明该次集成结果,不算#81修复,不追溯填补原根因。未启动个人Windows的hosted准备或修改本机WSL。
本次预先限定复查的实际结果
同HEAD27bea78、同实际checkoutd416d6a的 Windows job121956092028 已完成:准备5步/20条命令边界通过,默认/system完整52/52、270.40s。原输入、期限、hosted/Job守卫保持。两个WSL startup均返回37,worker自然退出0;每个WSL check仍按原策略终止2个自有残余成员,不能把这些成员写成自然退出。Job最终active0。
artifact12702174234(1227B),ZIP SHA256728bc7ec63d04b03f8b1f217da0025192bba0626a826aa3205b74748a28b48a9;summary SHA2564913a1ec57ce0dd103f9cf7f03b3bfcdfc5d1c805dceda03ce7bac65d87a1908,原件local/ci-pr94-attempt2。Linux33/33、12.52s是首次成功执行的复用,未额外重跑;候选CI独立通过。PR94已以b60cd65合入实验父分支。
限定一次复查已用完,不再重跑取绿。首次check-before startup超时和更早preflight未知命令失败仍保留,二者原因都未闭合;本项继续开放。
PR96 的已定位 preflight 子命令超时
Windows job 121995465544,HEAD b9ce4dcf5b742f1ccb69203fd9ee1b9627c11e99、实际 checkout c3a55e3d303a4cda9af7d3a924c6cf7010e1e7fb,同镜像 win25-vs2026/20261021.278.1。产品编译和准备守卫通过,preflight 的 cmd 返回0/16ms;ps51 在原10000ms期限触发 timed_out,记录10703ms。PS7、WSL list、rootfs验证及产品测试均未执行。
worker自然退出1并reap;收尾前后 Job active0/total6/terminated0、PID0,无Job终止请求。failure_code保持command_deadline,不能据Job为空推断超时子进程自然退出。新的命令边界把本次定位到PowerShell5.1启动;为何挂起仍未知,不回填更早无命令观测样本的根因,也不与PR94的WSL startup自动合并。
artifact12708461019(792B),ZIP SHA256 bdf4d8457f85b89df9e49ba6d41e84e2981be32ae9c34b18c3cd7914fb71aca2 已复核,原summary/job日志保存在local/r56-conpty-build。没有为此重复重跑;PR96后续CI由独立上游构建入口的实际修正触发,成功不能证明此超时已修复。本项继续开放。
PR132 的独立 check-before 启动超时(2026-10-29)
Windows job 122947753058,HEAD 8ba7dbb49b0bfefa484ab12763cfa7db87877a4c、实际 PR 合并 checkout 91f8c3e84c64fef9c93de3cd9e31236caba2fea7,镜像 win25-vs2026/20261021.278.1。准备保护测试通过,preflight cmd/PS51/PS7/list 返回 0,固定 rootfs 哈希验证与 import 通过。check-before 的 list 返回 0/47ms;startup 在原 20000ms 期限触发 timed_out,实际记录 20015ms。check-after 和全部 Windows 产品测试未运行。
worker 自然退出 1 并 reap;收尾前 Job active2/total23,两个成员均验证精确 Job 归属,但镜像查询 error31、role unknown。一次 Job 终止后 active0/PID0,两个句柄 signaled/exit99;最终 failure_code=cleanup_failed、policy=unverified-remaining-members。成功清空 Job 不代表准备成功或子进程自然退出。该 startup 挂起根因仍未知,不回填旧 preflight 或 PR94 的原因。
artifact12832209969(1200B),ZIP SHA256 cce3d167757563296901294b1b4472ea98ed31dac412f1599bb282e16a3e4a0e已核对;原 summary/Job 日志私有保留。同 HEAD 的 push/default 40725507614成功;PR 的 Ubuntu、Qt 与候选结果分别记录,不覆盖该次失败。
为完成 PR132 的集成核对,执行前限定:仅对同 HEAD 的失败 Windows job 复查 一次,不改代码、输入、准备/测试期限、hosted/Job 保护。不继续重跑取绿;即使通过也只说明该次集成结果,#81 保持开放,不计根因修复。
PR132 限定一次复查结果
同 HEAD/checkout 的 Windows job122954388253已完成,准备步骤通过、默认/system完整 51/51、281.22s,完整ASCII/Unicode replay通过;该次是run40725564346 attempt2。原源码、输入、期限与守卫未改,原job/log/准备artifact和本次完整job日志分别私有保存。此次仅说明该次集成通过,未定位或修复WSL startup挂起原因;限定复查已用完,不再重跑取绿,#81保持开放。PR132已合入main606b924,旧失败记录未改。
PR150 的独立 PS5.1 preflight 超时(2026-10-29)
Windows job123078214079,push HEAD 与实际 checkout 均为 81d50eebbe149cf20cca292e3f076ae682cd99de,镜像 win25-vs2026/20261021.278.1。preflight 的 cmd 返回0/31ms;ps51 在原10000ms期限触发 timed_out,记录10141ms。PS7、WSL list、rootfs 验证与全部 Windows 产品 CTest 未运行;不能称完整默认回归通过。
worker 自然退出1并 reap;收尾前后 Job active0/total6/terminated0、PID0,无直接 root kill 或 Job 终止请求。failure_code=command_deadline,空 Job 不证明超时子命令自然退出。该新样本只定位本次 PowerShell5.1 边界,挂起根因仍未知,不回填最早无命令观测事件,也不与 #144 Node 纯夹具超时合并。
artifact12849575511(794B,ZIP SHA256 31a931f0aa9a5cf3132bdebbcdafa4dd8bc6a61062060487520bcd02a0d3040f)和 failure artifact12849231255(20847B,SHA256 9fa15920d95b690cf6fe6c8b47832a6c886db18c704dc21fc9ea6e64d1b5c830)均已下载核对,原 summary/job 日志私有保留。本次未请求重跑;PR、push 及各配置结果独立记录。#81 保持开放。
PR153 的独立 PS5.1 preflight 超时(2026-10-29)
Windows job123097230227,push HEAD/实际checkout均 0bdcfb2d81b61ea0a91efd02be99a84935840187,同镜像win25-vs2026/20261021.278.1。cmd返回0/16ms,ps51原10000ms期限触发timed_out,记录10359ms。PS7/WSL list/rootfs验证与全部Windows产品CTest未运行。worker自然退出1/reaped,Job前后0/6/0、PID0,无root直接kill/Job终止请求;空Job不证明超时子命令自然退出。该边界重复出现,具体挂起原因仍unknown,与#144 Node不能合并根因。
两份artifact已下载核对并私有保留:12851616136(793B)SHA256 09eb0d74b0c6294236e8f1f7862c6ae4e78ca3ccb4fb0eedf8d089200a130a0b;12850857550(20847B)SHA256 097c7eabc88c122153bd2d9a02395186b0e4c5068c4d9c0af49a111d65db9a4c。未请求重跑、未改变原期限。独立PR/Qt/参考结果另列,#81保持开放。
Metadata
Metadata
Assignees
Labels
Projects
- StatusShow more project fieldsDone
Activity
Merge pull request #84 from JavaZeroo/diagnose/experimental-preflight…
Merge pull request #83 from JavaZeroo/diagnose/hosted-preflight-r81
JavaZeroo commentedon Oct 28, 2026
独立子项 #158 已发布 Draft PR159:worker已reap且自有Job已清空可验证后,仅导出私有stdout/stderr的有界计数和完整固定marker布尔;unknown不写成0/false,原命令/预算/oracle与成功失败不变。实际文件/父进程mock反例及相关普通/-O各32项通过;这只是后验观测工具交付,尚无本改动的新真实hosted deadline。PR150/153旧输出没有留存在artifact,旧marker和挂起根因仍未知,未重跑旧job。等待两轴/CI,PR未合入,#81继续开放。
JavaZeroo commentedon Oct 28, 2026
#158/PR159已以7de84deea8e314244af7e564b7c05d8354512cb0合入main并仅按观测工具关闭。真实hosted正常5步/10命令/20流已读取安全字段,PS51 stdout29B/stderr0/完整marker=true;原命令、预算、oracle和原失败不变。新发布PR/push六CI全部首次成功,没有新的真实deadline,因此旧PS51/misc超时marker与根因仍unknown,不能回填。后续真实失败可由该字段区分最终捕获流是否有marker,本项仍开放。
JavaZeroo commentedon Oct 29, 2026
一次新的 hosted 失败,形态与本项"准备超时"一致,且与 #144 的 Node 夹具失败同属"子进程启动被卡住":
8d95bba(PR docs(research): 合成会话可展开并打开 (#155) #180,仅文档改动)。research.ime.test_prepare_hosted.ExistingProviderPreparation.test_fixed_tip_accepts_observed_simplified_chinese_tag_but_rejects_other_locale。subprocess.TimeoutExpired——该用例用subprocess.run([powershell.exe, -NoLogo -NoProfile -NonInteractive -ExecutionPolicy Bypass -File <temp pure.ps1>], timeout=12)执行一个纯 PowerShell 脚本,超过 12 秒。与 #144 的关联:同一天内,两个互不相关的纯夹具分别因固定短超时失败——Node 夹具 10 秒(#144)、PowerShell 夹具 12 秒(本条)。而 #144 的有界计时显示该 Node 命令 warm 仅 ~63 ms、冷启动 ~1.5 s。两者共同指向"hosted windows-2025 上偶发的子进程启动/调度停顿",而不是夹具本身的计算成本。
边界:单次观察,不改超时、不重跑取绿;#81/#144/#38 均保持开放。
JavaZeroo commentedon Oct 29, 2026
新增样本(PR #199,改动只涉及夹具的 desktop 关闭沉降诊断):
{"schema":"termforge-hosted-shell-preparation-v1","status":"failed","failure_code":"command_deadline"},随后Process completed with exit code 1;形状与本项已有记录一致:准备阶段的子命令超出期限。保留红例、不重跑取绿。
JavaZeroo commentedon Oct 29, 2026
现场已定位到具体子命令:
preflight的ps51PR #199 的 push 回归失败(run 40933991432、job 123659564060)留下了
hosted-shell-preparation工件,summary.json里的事件序列直接给出了卡点:{"command":"cmd", "phase":"returned", "deadline_ms":10000, "elapsed_ms":15, "returncode":0} {"command":"ps51", "phase":"invoking", "deadline_ms":10000, "elapsed_ms":0, "returncode":null} {"command":"ps51", "phase":"timed_out", "deadline_ms":10000, "elapsed_ms":10219, "returncode":null}preflight;failure_code: command_deadline;cmd15 ms 正常返回;ps51在 10 秒期限上超时(10219 ms)且 stdout 0 字节、标记未完成;root_natural_exit=true、job_before/after active 0、membership_stable=true。跨夹具的同一形状
ps51(本项,preflight)三处都是"纯启动/纯脚本、几乎无输出、刚好越过 10–12 秒",而正常时分别是 15 ms / 数百毫秒级。这更像宿主级的进程启动停顿(首次执行的安全扫描、VM 调度、存储阻塞),而不是某一夹具的成本问题。
建议
preflight/ps51启动超时、清理边界完好",并为 [R2][回归] 收敛 Windows 可靠性与历史未闭合失败 #38 的宿主停顿假设再添一条独立样本;ci: publish hosted start-up latency evidence refs #81 #144 #40
JavaZeroo commentedon Oct 29, 2026
补一组量化证据(PR #200 合入后可引用):
dispatch-only 作业在 windows-2025 上测了 100 次纯 PowerShell 5.1 启动与 50 次
node --version(每次新进程、15s 超时):对照本项失败帧里
ps51的 10219 ms timed_out:相差约 2 个数量级,启动成本无法解释该超时;这与 #144 的 Node 计时、以及"三处纯夹具都在 10–12s 附近超时且几乎无输出"一致,指向宿主级停顿。结果目录:
research/ui/results/2026-10-30-hosted-startup-latency/(README + validation.json)。Merge pull request #200 from JavaZeroo/ci/startup-latency
Merge pull request #204 from JavaZeroo/research/latency-loaded
JavaZeroo commentedon Oct 29, 2026
结项:同类失败已复现并定位到具体子命令,边界完整保留
本项此前未闭合的原因是"公开摘要不区分 cmd / PS5.1 / PS7 / wsl-list 哪个子命令超时"。这一缺口已在新的同类复现中补齐。
复现样本
preflight,failure_code: command_deadline;hosted-shell-preparation/summary.json的事件序列:{"command":"cmd","phase":"returned","deadline_ms":10000,"elapsed_ms":15,"returncode":0} {"command":"ps51","phase":"invoking","deadline_ms":10000,"elapsed_ms":0,"returncode":null} {"command":"ps51","phase":"timed_out","deadline_ms":10000,"elapsed_ms":10219,"returncode":null}即唯一超时命令是
ps51(PowerShell 5.1),10219 ms 越过原 10 s 期限,stdout 0 字节、marker 未完成。清理与边界
root_natural_exit=true、job_before/after active=0、membership_stable=true、helper_cleanup_policy=natural-empty-job;排除"启动成本"
同一镜像上的独立测量(PR #200/#204):
差距约两个数量级,说明该超时不是启动成本或本机争用,而是宿主级停顿(安全扫描/存储/VM 调度)。
与原失败的关系
原 40366292708 批次的超时命令仍为 unknown,不做回填;本项关闭的依据是"同类失败已复现 + 子命令已定位 + 边界保留",不是推测原批次。
据此关闭 #81。
JavaZeroo commentedon Oct 30, 2026
又一次「准备阶段」失败(步骤级)
PR #236 的 Windows 回归里,失败步骤是
Prepare hosted Windows shell prerequisites,该步骤输出了两条准备记录:{"schema": "termforge-hosted-shell-preparation-v1", "status": "failed", "failure_code": "preparation_guard"} {"schema": "termforge-hosted-shell-preparation-v1", "status": "failed", "failure_code": "command_deadline"}要点:
shell等后续测试因此没有可用的准备结果;command_deadline说明是受限于内部命令期限,preparation_guard是同一准备流程的守卫失败;未验证