Repository navigation
fix(smoke): release original analysis reads after loading - #8037
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; model=gpt-6.1-sol; provider=OpenAI; reasoning_effort=max; runtime_reported; observation_id=11ccb2fc8b916d0f1e37ca607ef3a1b72a0e885829ae0a0860aeafb68e605eb9
Approval conclusion (author-owned PR; GitHub blocks formal self-approval)
Exact head f924ed4e9ceb10e3c9b93f656868a3ac44d83f19;base/merge base 53374543abfd7dcfe72d63bfdf2c60bb3ce17786。没有发现阻断问题,结论 APPROVE;这是源码环境的 smoke 修复审查。
动机 / Motivation
维护研究阅读 browser smoke 的贡献者,以及依赖该检查判断回归的维护者。 语言专用分析没有保存结果时,页面还会读取 original pack;原 loading fixture 为每次请求新建未完成 Promise,释放首个响应后,后续 original 读取再次被挂起,页面检查无法结束。 同一 loading cycle 改用一个共享屏障,释放一次便允许该轮语言读取和后续 original 读取完成;下一轮仍有独立的未释放屏障。 只修复测试等待,不改变产品分析、模型执行、真实 benchmark capture、原有 timeout 或权限断言。 这修复了反复消耗检查时间的确定性假失败,没有用更长等待掩盖问题。
改动思路 / Approach
等待属于一次 loading cycle:在该轮 reload 前建一个 Promise,由所有关联读取共同等待,释放一次即可。把 Promise 放在每个 request 内会让后发的 original 请求得到一个永远没人释放的新屏障;把它放在整个 scenario 外又会让以后各轮直接通过。当前局部改动正好区分这两个边界,无需新增通用等待框架。产品决定何时读取 original;fixture 只控制响应到达时机。
具体改动 / Changes
全 PR 只有 examples/personal-workspace-browser/research-route-reading.mjs +4/-1:增加已解析的初始 loadingRead,route handler 等待共享对象,每轮 loading 前重新赋值并保留该轮 releaseLoading。原断言、timeout、模型写入拒绝和 finally cleanup 均未改。
关键内容讲解
researchRouteReadingScenario 的状态循环仍控制七种分析 readback;route callback 等待同轮 gate;每轮初始化 保证新的 loading 不借用上一轮完成状态。没有生产代码需要符号迁移。
规范 docs/development/good-smokes.md,spec_revision 53374543abfd7dcfe72d63bfdf2c60bb3ce17786;它与先前读取的同一已接受文本 blob 一致。Start With The Contract:修复现有真实阅读路径的自动化回归,满足;Review Checklist:合成分析边界、原 source/no-model 断言与确定性输入保留,满足;Prefer Semantic Pressure:相同 handler 在 base 留住 original、head 释放两次读取且下一轮重新阻塞,满足。邻近 progressive-loading、loopx-mode、record-search、history smokes 各有不同边界,本改动没有再造一个重复检查。
对主干的风险 / Risks
独立 Node oracle 直接抽取不可变 base/head 的原 route 声明和每轮初始化,没有改写其 Promise 逻辑:连续两轮,base 均只完成首个读取,head 均在一次释放后完成语言读取和 subsequent original,释放前无响应。真实 Ego 使用当前 head 的 packaged Chat、真实 history backend 以及同一个分析 handler,执行中英文 × 1440/768/390 × 七种 readback,共 42 个状态断言;其中 六轮 loading 均从 disabled 恢复 enabled。读请求轨迹也实际出现先 output_language、再 pack_id 的 original fallback。
本地 JavaScript syntax、Chat build 和 quick premerge 均 PASS;后者 4 direct +3 selected,0 failure/manual hold。build 的 chunk-size advisory 保留,没有提高限制。浏览器共 87 个分析 GET 全部完成、0 个分析写请求;原 backend 141 次 history read,source_unchanged=true、mutation_attempts=0。
保留两次未通过的 reviewer 预览尝试:代理 Origin 与自有 backend 端口不匹配导致 module403,只修复了 disposable proxy 映射;一次在 action enabled 后过早读取 caption 数量,只恢复原 scenario 的先等 caption 顺序,未删除或放宽断言。原始历史 timeout 没有被重新标为成功,CI 按 wait_for_ci=false 未查询、轮询或等待。
我的整体评价 / Verdict
这是有实际维护价值的局部修复,long_horizon 检查可靠性改善,产品 user_experience 保持;既能解除后发读取,也保留下一轮的加载检查。无需增加抽象或改变产品行为。生产 renderer、CSS 和 backend 均未修改;本 PR 的 visual review 不适用,实际 Ego 页面仅作为改变后的测试等待逻辑的入口验证。 未重跑原 Playwright 全阅读导航套件、WebKit、原生 WebView 或安装 App;没有模型调用、科学收益或完整 CI 通过声明。 本轮只资格化改动相关的 loading/state 边界;没有把作者的完整 browser suite 声明当作独立执行。合并权限、现有 review/required validation 与原始 GitHub readiness 分开判断,未执行 merge。
English verdict: APPROVE. At f924ed4e9ceb10e3c9b93f656868a3ac44d83f19, one per-cycle barrier releases both the initial and sequential original read while preserving a fresh gate for later cycles. Exact-handler differential, 42 Ego state checks, zero-write/source readback, build and local quick checks pass; installed and full cross-browser navigation remain unverified.
A language-specific analysis without a saved result now also reads the original pack. The loading-state browser fixture created a separate unresolved promise for each request: releasing the first response stranded the subsequent original read and failed the release browser scenario after 30 seconds (observed failure).
Use one shared barrier per loading cycle so the same release also admits the original fallback. The existing timeouts, lifecycle assertions and write refusals stay in place.
Validation:
research-route-readingscenario passes across Chinese/English and 1440/768/390px, including all seven lifecycle states.research-real-benchmark, the full Dashboard/Chat build, JavaScript syntax and diff checks pass.Required CI lanes skipped on #8034 remain separate holds. This is a browser-fixture repair; the real benchmark captures and product execution policy retain their existing owners.