Repository navigation
test(workspace): preserve fixture failures and observe paged history - #7494
Conversation
Signed-off-by: LoopX Agent <337587101+loopx-agent@users.noreply.github.com>
loopx-agent
left a comment
There was a problem hiding this comment.
Reviewer: model_agent | gpt-6.1-sol | OpenAI | runtime_reported | reasoning_effort=max
Approval conclusion (author-owned PR; GitHub blocks formal self-approval)
动机 / Motivation
维护 managed Session 浏览器回归的开发者,需要真正跑到迟到历史隔离与活跃 Turn 的持续观察断言。
页面历史读取已带分页参数,旧测试仍精确匹配不带 query 的地址,因而等不到快照;fixture 启动失败时,旧清理写管道还可能以 EPIPE 覆盖原错误。新测试识别同一 Session 的分页地址,并保留最初的失败原因。
相同打包 UI 与真实 SQLite/Core/Chat 下,旧测试复现 snapshot-not-requested,新 head 运行完整场景通过;同一受控启动失败在旧代码变成未处理 EPIPE,新代码保留原 stderr 和 exit=17。
本 PR 只维护测试路径,不改变产品界面、模型执行、权限或评分;合成 provider 不代表真实模型或安装态资格。
改动思路 / Approach
现有场景的产品断言仍归原测试;局部 helper 只持有子进程的读取、控制和清理责任。只放宽 snapshot 地址匹配不能解决失败被清理覆盖的问题;重新造一个测试框架又不必要。这里按 origin 与精确 Session pathname 匹配,保留真实 query 交给后端;关闭时先观察 close,再按需要终止,不改变原本的产品请求或重放模型。
具体改动 / Changes
完整审阅 head 7258f43 的三个测试路径,+257/-126,主要是现有场景在 helper 内的缩进移动。规范依据为 docs/development/good-smokes.md,spec_revision=19e1525a8babdd6bae5d505d72747f64ec21bc8d。按已有章节整理的本次映射:SMOKE-DURABLE-VALUE 对应恢复已交付路径的真实回归;SMOKE-PROCESS-ORACLE 对应真实进程和独立错误 oracle;SMOKE-RETAIN-COVERAGE 对应合并 plumbing 时保留原场景所有语义断言,三项均已实现。
关键代码讲解
- delayedSnapshot 和 afterHistoryPoll 改为同 origin、精确 Session 路径判断。生产 fetchChatSessionHistory 本来就携带 message_limit;这里没有改变产品 API,只修正测试对它的观察。
- withManagedFixture 在任何控制写入前注册 error/close,读取失败保留 stderr、exit 与 cause;finally 不覆盖原 action 异常,正常 stop 无效时再 TERM/KILL,并等 close。六个新测试分别执行真实 child 的正常、启动退出、原浏览器错误、断管、spawn 失败和拒绝退出场景。
原有独立 native thread、各 Session 草稿、迟到快照隔离、零模型浏览、撤销/恢复和单一事件观察器断言均保留。检索相邻 helper 后,未发现可直接复用的同一交互式 JSON 控制协议;一发即止的 authority 启动 helper 不能代替它。没有根据共享 GitHub 账号推断实际作者相同或建议贡献限制。
对主干的风险 / Risks
最大风险是 helper 绿测掩盖了浏览器仍到不了后续断言,或清理仍吞掉最初异常。我独立构建一次相同 UI,旧主干 19e1525 复现快照等待失败,当前完整 managed-agent-sessions 场景通过,包含桌面/390、真实 SQLite/Core/Chat、历史轮询和 external Turn 恢复。另以同一受控 child 在实际场景中退出17:旧主干 24f4768 出现未处理 EPIPE,新 head 完整保留原诊断;这是故障注入证据,不冒称历史 CI 的根因。
PASS:六项真实子进程测试、Dashboard typecheck/build/chat bundle、语法和 diff 检查、标准 premerge 的4项直接与3项选中检查及全部三路径公开边界扫描,CQR26cfa7f有效,无 manual hold。两个预期失败的负例命令仍记为 exit1,并据独立错误内容判断修复;没有把它们涂成正常成功。初始质量结果的路径引用格式已修正,未改源码或放宽要求。此次使用 Node24.21;未验证每个 Node/OS 组合,也未声称任意后代进程组清理资格。
我的整体评价 / Verdict
该测试维护切片达到目标:long_horizon 与产品 user_experience 保持,实际回归路径和开发诊断恢复;没有用绿测数量替代仓库价值。现有场景继续保有独特的完整链路覆盖,局部进程控制成本合理,无需进一步扩成通用框架。按当前策略未查询、轮询或等待远端 CI,不能据此宣称完整 CI 通过。
已检查三个变更路径;全部为现有浏览器测试与局部进程 helper,没有渲染界面改动。本次只验证测试恢复,未证明整体 UI 质量、真实模型、正式安装或完整 CI。批准只适用于 7258f43;合并和维护者授权是另一判断。
English verdict: APPROVE 7258f43; same-bundle browser and real-process counterfactuals verify restored coverage and preserved original failures.
Managed Session 的浏览器验证仍按无查询参数的 URL 拦截历史快照,实际分页请求已带
message_limit,导致晚到响应与观察器场景无法走到原断言。另一个故障是 fixture 提前退出后,清理阶段的stdin.end()会抛出未捕获 EPIPE,覆盖真正的失败原因。本修改按原 origin 和精确 Session pathname 匹配快照,保留分页参数;把现有子进程读写与关闭收敛到场景内使用的辅助模块,保留原始 stderr、退出码和浏览器异常,等待关闭并在必要时回收无响应子进程。原会话身份、晚到响应隔离、无模型浏览、撤销恢复和单观察器断言保持。
验证基于
19e1525a8babdd6bae5d505d72747f64ec21bc8d:node --test examples/personal-workspace-browser/managed-fixture-process.test.mjs。本 PR 仅修改验证场景及其进程辅助代码,未改变产品 UI、模型执行、权限或评分。局部真实路径通过与全仓库 CI 就绪分开;远端 CI 待运行。有限重构仅覆盖此场景实际使用的管道生命周期,没有引入通用进程框架。