Repository navigation
ci: allow dashboard acceptance to finish - #5917
huangruiteng merged 4 commits into
Conversation
54cf4b0 to
3a8718c
Compare
loopx-agent
left a comment
There was a problem hiding this comment.
Reviewer: model_agent | gpt-6.1-sol | OpenAI | runtime_reported | xhigh
动机
贡献者和维护者在等待 Dashboard 的完整验收结果时会遇到这个问题。原 job 给依赖安装、覆盖率和整套浏览器测试共 15 分钟;PR 改成 20 分钟,意图减少正常工作因总时限被取消,但这次本机 head 首跑在 reload 的 30 秒定位等待中失败,延长 job 总时限不会修复该失败。已确认只有 job 时限从 15 改为 20,检查步骤和失败传播保持;base 的完整浏览器运行通过,head 的一次失败尚未得到独立归因,因此当前证据不能把可靠性问题宣称为已解决。此次评审不查询或等待 CI,也不要求改无关运行时;配置余量不等于性能改善、完整 hosted job 通过或长期稳定性验收。
评审 head 3a8718ce4f1adfe117ea6e3f769569daa5cd0b8e,base aa0c2ea6a6bad1f105e8c2f66464cf4d8c4de2b1。独立依据为 docs/development/testing-and-quality.md,spec_revision aa0c2ea6a6bad1f105e8c2f66464cf4d8c4de2b1:Budget Failure Decisions 要保留原失败、比较同一工作负载并说明扩容余量;Browser waits 要保留针对实际界面的有界断言。本次不把作者引用的历史 hosted 时长作为本人测量。
改动思路
时限留在已有 Dashboard job,避免拆掉验收步骤或建立重复配置 owner;仍需补当前失败归因与余量证据。当前 PR 边界只有该 job 的有限 watchdog 调整,不交付浏览器恢复或运行性能优化。全 YAML 解析确认除这一项外结构相等,生产代码、依赖锁、浏览器脚本/目录和 verify-core 都为相同 git blob/tree。有限扩容最大增加 300 秒 runner 占用,胜过删掉验收案例;它没有改变单个 locator 等待。未来相关重构检查已做:无需引入重复 timeout owner 或把完整验收拆散。
具体改动
仅 .github/workflows/python-tests.yml:310 的 jobs.dashboard-acceptance.timeout-minutes 从 15 改为 20。core_tests 选择、changes/chat-bundle 依赖、Node 22.22.3 配置、两处安装、CSS 检查、Dashboard coverage、Chromium 安装、完整 browser smoke 和 coverage 上传均保持。checks 继续调用 scripts/ci/review_gate.py:54 的 verify_checks -> _verify,要求 Dashboard 真正 success;failed/cancelled/错误 skipped 不会被时限改动认可。
独立执行同命令 base/head workflow 测试各 546 passed,包含实际 verify-core 子进程的完整/前端结果矩阵;CSS 两项通过。隔离依赖后的 base/head 单元覆盖率均为 100% statements、97.5% branches;保留了首次 base 因依赖 symlink 导致空覆盖的无效观测,没有把它算作覆盖证明。本机浏览器用 Node 24.21.0 和真实 Vite/Chromium,后端是原合成 fixture,不能当作 hosted Node 22.22.3 job 或真实用户后端。
完整未过滤浏览器 workload:base 48 场景通过,591.28 秒;head 首跑前 14 场景通过,然后 answer-presentation.mjs:82 reload 后等待管家导航 Chat/对话按钮,30 秒 TimeoutError,总 203.08 秒。head 的一次完整复核 exit=0,602.74 秒,48 场景通过。一次复核通过不能独立解释首次失败或稳定性,所有原结果均保留;没有增大 locator 时限、减少 workload 或查询 CI。
对主干的风险
[P1] 先补完整验收失败的独立归因和预算依据。 当前缺口是评审证据,不声称这一行改动造成了 UI bug:生产树相同,但 immutable base 的全量命令通过,不能据此把 head 的失败标成已验证的 baseline 故障。总 job 时限 15→20 也不能修复早于两种上限发生的 30 秒定位失败;不能只挑一次绿的复核宣称可靠性完成。
保留失败和完整原工作负载,独立归因 answer-presentation 的 reload 定位失败并用相同入口验证恢复;同时给出完整 job 测量边界、旧/新上限与所需余量的有界依据。无需等待或查询 CI,不以放宽 locator 等待、删断言或选一个绿的重跑代替归因。此修复可以先补证据并明确未改动测试的恢复 owner,不要求随手扩成无关 runtime 重构。其余风险是有限的最坏 +300 秒占用;原失败传播没有被放宽。整个 hosted 安装/下载/执行耗时分布仍未独立测量。
我的整体评价
REQUEST_CHANGES:整个一行 diff 的归属、工作负载保持与失败传播都已核验,配置方案本身很小且可回退;当前完整浏览器失败仍未独立归因,可靠性结论尚不成立。保留这个有限 job owner,补最小判别证据后再评审同一精确 head。该结论基于真实本机观测,不是等待 CI,也不称此次 PR 引入了已证明的运行时回归。
English verdict: REQUEST_CHANGES - 3a8718c; only the finite Dashboard job watchdog changes 15 to 20 minutes and paired 546 workflow/gate tests plus CSS/coverage pass. Full base browser passes 48 scenarios; the initial head fails an unchanged 30-second reload locator. A later run alone does not attribute that failure or qualify stability. Preserve the full run set and establish independent failure attribution and bounded same-workload margin evidence; CI was not consulted.
Signed-off-by: mika <211269698+mikamikasuki@users.noreply.github.com>
Signed-off-by: mika <211269698+mikamikasuki@users.noreply.github.com>
3a8718c to
3998e91
Compare
|
Follow-up to the review on 3a8718c: The original 30-second reload-navigation timeout remains unreproducible, and its exact transient trigger cannot be recovered because the failed run's contemporaneous trace and DOM/network state were not retained. I can attribute the observed failure against this PR: it is not caused by this diff. The PR changes only the Dashboard job timeout and its workflow assertion; the browser scenario has the same blob (7156387c) at the reviewed base, reviewed head, and current main. The local browser smoke does not read the workflow timeout. I am not claiming the timeout change fixes or explains the original locator failure. Recovery validation on the unchanged scenario:
The separate budget evidence remains: complete hosted Dashboard jobs measured 14m47–19m21; a 25-minute limit leaves 5m39 over the longest measured run and caps additional occupancy at 10 minutes over the old 15-minute limit. Run 37793912820 completed the full hosted job in 15m40 (9m20 margin); run 37815015316 was cancelled at 15m16 under the old 15-minute cap. The current-head workflow regression suite passed 546/546 in 26.36s. The PR remains limited to the job timeout and its threshold assertion. |
Signed-off-by: mika <211269698+mikamikasuki@users.noreply.github.com>
Signed-off-by: mika <211269698+mikamikasuki@users.noreply.github.com>
|
CI attribution for run 37837399822 at head |
loopx-agent
left a comment
There was a problem hiding this comment.
Reviewer: model_agent — gpt-6.1-sol / OpenAI; reasoning_effort=xhigh; declaration_source=runtime_reported; execution_observation_id=74232957e41f1ff74a2361448064aacc9aa62afc5c862543060eee0d3e684c01
动机
贡献者提交 PR 并等待完整 Dashboard 验收。完整验收超过 15 分钟时,旧上限提前取消;新上限允许它在 25 分钟内完成,仍要求每项检查成功。这能减少已经投入验收后因整项预算不足而重新运行、再次等待的成本。
独立核验确认全部步骤与失败传播保持;当前提交的全量浏览器 49 场景通过,新整项上限为 25 分钟。不修改浏览器行为或定位等待,不声称运行加速、历史瞬态已查明或所有未来运行稳定。这里交付的是整项验收预算的修正,不能把测试数量视为性能或长期稳定性的证明。
改动思路
入口仍是 GitHub Actions 的 Dashboard 验收任务,先满足原有依赖,再安装依赖、运行覆盖率检查和完整浏览器场景,最后由原有汇总检查确认每项计划内验收都成功。整项 watchdog 与浏览器局部等待属于不同边界;复用现有配置即可,保留完整验收和严格失败传播。它没有添加自动重试、吞掉错误或放宽浏览器断言。
当前 PR 仅交付有界的整项验收预算修正,不承诺运行加速或历史瞬态根因已查明。继续保留 15 分钟会留下已有的提前取消风险;删减场景会损失验收价值;20 分钟相对作者报告的最长完整运行只剩 39 秒余量。25 分钟是一项明确披露的资源权衡,不需要另建超时能力或把局部 UI 等待加长。
具体改动
复审目标是 5917@1d28e6e8d8e22bad8ca50640cacfbb3d1693c775,固定基线 f67a6d8。两文件 +4/-1;完整 YAML 对比只改变一个数值。浏览器总入口、answer-presentation、全部场景目录、Dashboard 目录、两份 lockfile 和实际汇总 gate 在基线、当前提交及核验时的 main 上均为相同 Git 对象。
关键代码讲解
- dashboard-acceptance.timeout-minutes 将包含安装、覆盖率及浏览器验收的整项上限从 15 改为 25 分钟。Node 版本、触发范围、步骤、完整场景以及断言均保留。
- jobs.checks 是未修改的真实消费者:始终汇总结果并调用 verify-core。失败、取消和计划内跳过仍不能取得完整验收资格。
- test_dashboard_acceptance_and_kernel_checks_run_independently 新增存在性和至少 25 分钟断言。我将当前断言用于隔离的旧 15 分钟 YAML,得到预期的
assert 15 >= 25失败;当前完整模块通过。这个断言保护下限,未来若再改预算,可用精确值或有界范围同时保护资源上限;当前真实配置本身已经是有限的 25。
规范为固定基线的 testing-and-quality.md。Budget Failure Decisions:implemented,保留完整工作量、旧失败和测量边界,并披露成本;Browser waits:implemented,未改定位、局部等待和完成断言;Preserve the required Dashboard workload and success propagation:implemented,实际汇总脚本的成功/失败/取消/跳过矩阵在基线与当前提交各通过 546 项。没有增加 frontend/Lark/CLI 配置入口,因为这些产品入口和能力完全未改。
对主干的风险
真实挂起任务最多会比旧设置多占用 10 分钟;到 25 分钟仍会被取消,严格汇总 gate 仍拒绝它。作者报告完整托管运行范围为 14 分 47 秒至 19 分 21 秒,曾有旧上限运行在 15 分 16 秒取消,新的 25 分钟运行在 15 分 40 秒完成。这是作者提供的历史证据,我未查询或轮询 CI,不把它写成独立测量。按报告中的最长值,新余量为 5 分 39 秒;未来分布未测,不能推断所有运行都有这一余量。
我独立在固定基线和当前提交各跑完整工作流测试:546 项均通过,其中成功与失败传播调用实际 verify-core 子进程。当前提交独立依赖环境的全量 Vite/Chromium 浏览器验证为 49/49 PASS,650.904 秒,没有筛选场景;使用合成 API fixture,是开发模式而非托管 Node 22.22.3 覆盖率整项任务。原生 premerge 五项选定检查与直接 hygiene、compile、public-boundary 检查通过;先执行的语义 advisory 未发现支持语法中的新词汇。额外敏感性检查第一次命令的测试选择写错,退出 4 且未运行测试;纠正后得到上述预期断言失败,保留两份结果。
上一轮某个旧提交曾在 14 个场景之后出现 30 秒 reload locator 超时,后来全量通过。原始 trace、DOM 和网络状态没有保留,精确瞬态原因仍未知。本次确认浏览器和依赖输入的 Git 对象完全一致,完整场景不会读取这个 YAML 的整项 watchdog,因此这两行策略/断言改动不能造成那个本机定位失败;新的当前提交全量验证也已通过。这里保留历史失败,不把后一次通过当作查明根因。若同场景再失败,应保存 trace/DOM/network 并由场景 owner 修复,不追加局部等待来掩盖它。
语义与 CI 对齐
这是既有有限预算的有证据调整,复用原有语义与 owner,没有新状态词汇、协议、Agent 生命周期或授权。它不修改 Goal 配额、冻结实验阈值、账户权限或合并资格;不是关闭某项能力后才生效的 opt-in,默认整项预算变化已公开披露。预算扩容允许验收继续工作,不会将错误状态改写为成功。
我的整体评价
APPROVE 当前 exact head。长程效果和体验判断为 accepted_tradeoff:完整验收与严格结果保留,降低提前取消导致的重复等待具有正向价值,代价是每项最多增加 10 分钟运行占用。依据是现有 Budget Failure Decisions 接受边界、独立的基线/当前提交失败传播对照和当前全量验收,而不是作者声明或测试数量。没有测得执行加速、托管长期耗时分布或恢复历史瞬态的因果证据。
前瞻性有界重构检查已做:整项预算和局部断言应继续各有其 owner,当前单数值改动无需抽象;未来预算改动可收紧测试的上界表达。此批准只覆盖完整预算修正,不是主干已合并、CI 绿色或免除其它有效评审阻塞的声明。发布后将单独读回批准收尾状态。
English review
English verdict: APPROVE
Reviewed 5917@1d28e6e8d8e22bad8ca50640cacfbb3d1693c775 against immutable f67a6d8. The only workflow delta is a finite whole-job watchdog of 15 -> 25 minutes; workload, browser assertions, dependencies and strict aggregate gate are unchanged. Independent base/head workflow suites passed 546 tests each; the exact-head complete development browser suite passed all 49 scenarios in 650.904 seconds. The new assertion rejects the old 15-minute fixture. Native risk-based premerge checks passed.
This is a bounded reliability/resource tradeoff, not a speed-up claim. Hosted full-job timings are author-reported, not independently fetched; the earlier missing-trace locator transient and future timing distribution remain unknown. The ten-minute maximum extra occupancy is explicit and genuine failures/cancellations still fail qualification. Approval, remaining review blockers and merge readiness are separate.
|
Additional current-main check for run 37837399822: I replayed the 16 distinct selectors parsed from its complete failed-shard logs on canonical main b27c4c7; all 16 failed there as well. They map to already-open fixes: #5986 (six periodic/Todo selectors), #5991 (local coordination authority), #5993 (both hook-read actor cases), #5994 (durable successor acknowledgement), #5962 (Explore/replan semantic and selection cases), and #5980 (chat configuration and manager-detail fixtures). The PR diff remains limited to the Dashboard timeout and its workflow assertion. The required dashboard-acceptance job passed in 12m11s; the overall test suite is not green. I will revalidate this workflow PR after the companion fixes land. |
Goal And Delivered Outcome
Author Declaration
Some coding work was AI-assisted. I personally reviewed the changes, verified the relevant behavior and tests, and take responsibility for the submission.
Implemented against
Scope And Continuation
Validation
Frontend / Visual Evidence
Type Of Change
LoopX Area
Technical Direction
Shared-authority RFC fixture impact
Boundary Checklist