评审基线:StreamFrame 2.6.0,提交 `4b892d9eaa11cf003b5d10793e735b0604bc17ed`(2026-09-08 仓库评审)。 ## 已确认问题 Soak workflow 只按 OS 分矩阵,但 dotnet test 未指定 -f,因此 Ubuntu 同时尝试 net8.0、net10.0、net48。最新运行已明确因 net48 找不到 mono host 而中止该目标。 位置:[.github/workflows/soak.yml:23](https://github.com/CSJ608/StreamFrame/blob/4b892d9eaa11cf003b5d10793e735b0604bc17ed/.github/workflows/soak.yml#L23)、[.github/workflows/soak.yml:48](https://github.com/CSJ608/StreamFrame/blob/4b892d9eaa11cf003b5d10793e735b0604bc17ed/.github/workflows/soak.yml#L48)。 参照常规 ci.yml / release.yml 的 Ubuntu net8/net10、Windows net48 策略,或显式展开适合长测的 OS×TFM 矩阵。 ## 运行证据 [2026-09-07 UTC 触发的 Soak,提交与评审基线一致](https://github.com/CSJ608/StreamFrame/actions/runs/34164848126) [Ubuntu job](https://github.com/CSJ608/StreamFrame/actions/runs/34164848126/job/101873747668) ```text Test run .../net48/StreamFrame.Tests.dll (.NETFramework,Version=v4.8) System.IO.FileNotFoundException: Could not find 'mono' host. Test Run Aborted. ``` 最近三次夜间运行均 failure,但不能把所有失败归因于矩阵:最新运行还包含 net8/net10 消息数量断言失败,另有调查项跟进。修正矩阵并不等同于长测稳定性已经通过。 ## 验收 - [ ] 每个 job 明确 OS 和 TFM;Ubuntu 不尝试启动 net48。 - [ ] 保留 Windows 上真实 .NET Framework 运行验证;按长测成本决定现代 .NET 是否也保留 Windows 分支。 - [ ] 日志、job 名和产物能定位到具体 TFM。 - [ ] 手动短时演练与完整夜间长测均确认目标选择正确。 - [ ] 构建/测试步骤的实际业务断言失败继续使 CI 失败。 - [ ] 如果影响必需检查名,按 AGENTS.md 同步核查保护规则;不要无意改掉普通 ci.yml 检查名。 实施按 AGENTS.md:从最新 main 建分支、同步 CHANGELOG Unreleased、通过 Release build/test、走 PR;本 Issue 仅登记工作,不代表已实施修复。 关联调查:#67(消息计数失败与 net48 长测未收敛);修正本矩阵后仍需分别处理该项。
Activity
CSJ608 commentedon Sep 8, 2026
开始 #66 的独立实施,分支
codex/ci-66-soak-tfm-matrix基于最新 main4b892d9。已重新核对正文、评论、现有 PR 与代码。将 Soak 展开为 Ubuntu net8.0/net10.0、Windows net8.0/net10.0/net48 五项矩阵;显式
-f,job 名及 TRX 产物标记 OS/TFM,保留断言失败退出。普通 ci.yml、业务测试、版本与 Dependabot 升级不在本 PR 修改范围。正在执行本地 Release build/test,随后开 PR 并手动短时演练。完整验收将跟踪合并后的首次夜间 600 秒运行;在该证据确认前保持 Issue 开放,并单列 #67 已知业务失败。
CSJ608 commentedon Sep 8, 2026
#66 的矩阵修复已通过 PR #72 rebase 合并(
1f647e5),实施分支已删除。普通 ci.yml 未改,PR 的两个 build-test、AOT、CodeQL 均通过;本地 Release build 与原样全量 test 复核通过(三目标各 101 项),首轮 net10 重连回归偶发失败已保留记录,未改断言。seconds=10 手动演练 的 Ubuntu net8/net10、Windows net8/net10 已通过;四份 TRX 均为三个测试实际各运行约 10 秒并通过。日志确认 Ubuntu 只启动指定现代 .NET 目标,无 net48/mono 错误。
Windows net48 独立 job 已构建并进入 Soak tests (net48),目前仍未结束,没有把它记作通过。继续保存其终局证据,若不收敛则与 #67 分开记录,矩阵修复不代表长测业务稳定。
验收继续,Issue 保持开放。 已安排自动跟踪短时运行结果及合并后的首次完整 scheduled 600 秒夜间运行(预计北京时间 9 月 9 日 03:00,04:15 回查)。完整目标选择证据到齐前不关闭 #66。
CSJ608 commentedon Sep 8, 2026
短时演练终局已核验:run 34192673271 最终
cancelled。四个现代 .NET 组合成功;Windows net48 job 的 GitHub annotation 明确为超过 60 分钟执行上限。目标选择证据:命令包含
-f net48,环境为STREAMFRAME_SOAK_SECONDS=10,实际测试程序集是.NETFramework,Version=v4.8,xUnit 运行在 64-bit .NET Framework 4.8.9337.0。Soak_Chaos_RandomFaults_NoHangAndIntegrity与Soak_ReconnectRacing_LongRun各约 10 秒通过;Soak_LongRun_MessageIntegrity没有完成记录,日志不足以确定具体阻塞点。always()上传步骤已执行,但报告TestResults/windows-latest/net48/无文件,没有生成 net48 TRX;四个现代 .NET 的 TRX 已保存。超时取消没有被掩盖成成功,也不能当作“业务断言非零退出”的运行样本。不收敛现象留给 #67 调查,本任务不修改业务断言或扩大超时。合并后的 main CI 全部通过。#66 继续保持开放,等待首次 scheduled 600 秒夜间目标选择验收;回查已调整至北京时间 9 月 9 日 04:15,不额外重跑短时测试。
CSJ608 commentedon Sep 9, 2026
#66 矩阵验收完成。修复 PR #72 已合并;首次完整夜间 34281733408 为
schedule,提交9111919,实际于北京时间 9 月 9 日 05:38 创建,五项全部 success。-f测试目标,Ubuntu 无 net48/mono 启动错误。.NETFramework,Version=v4.8。STREAMFRAME_SOAK_SECONDS=600,每目标三个测试实际各约 600 秒,合计 15/15 通过。continue-on-error;always()仅作用于独立上传步骤。本次全绿,无业务断言失败样本,不声称运行过失败注入。此前真实超时保持 cancelled,未伪装成功。归因边界:原短时 net48 超时和无 TRX 证据保留。本次夜间包含后续 PR #77 的业务协议与 net48 收尾修复;不能把长测转绿全部归因于 #66。#67 要求连续至少三次完整稳定性验收,由原任务继续跟踪,本次只关闭 #66 的矩阵问题。
五份日志、五份 TRX、运行与产物元数据及逐项核验已保存至试运行结果目录,详见 issue-66-result.md 与 issue-66-night-verification.md。本任务停止自动验收跟踪,不额外触发长测。
CSJ608 commentedon Sep 9, 2026
完整夜间矩阵验收完成(2026-09-09)
scheduled run 34281733408,提交9111919a3fd52fb743041d14c3d150f3a57f4edb,实际北京时间05:38创建,06:11全部结束。
-f、实际运行时与STREAMFRAME_SOAK_SECONDS=600;Ubuntu只启动对应现代.NET,Windows net48真实运行于.NET Framework 4.8.9337.0。结合此前短时验证,#66的目标矩阵和完整夜间目标选择验收已完成,可以关闭。#67仍独立跟踪连续三次完整稳定性,目前只计1/3,不能据此关闭#67。