Skip to content

fix(ci): stabilize required dashboard-browser goal-hierarchy shard - #6890

Merged
huangruiteng merged 1 commit into
loopx-project:mainfrom
JasonBuildAI:codex/goal-hierarchy-coverage-barrier-n8q4
Oct 20, 2026
Merged

huangruiteng merged 1 commit into
loopx-project:mainfrom
JasonBuildAI:codex/goal-hierarchy-coverage-barrier-n8q4

Conversation

@JasonBuildAI

@JasonBuildAI JasonBuildAI commented Oct 19, 2026 •

Copy link
Copy Markdown
Contributor

Goal And Delivered Outcome

Author Declaration

  • Written by: model_agent (OpenAI Codex)

AI disclosure: this change was drafted with AI assistance at my request, under my direction and review.

Human direction: the human operator set the scope constraints and reviewed the submitted change.

Implemented against

Criterion (spec clause) Disposition Symbol / path Test or command
Wait for the initial full-workspace reads to drain before clearing the observation log implemented waitForStatusReads in examples/personal-workspace-browser/goal-hierarchy.mjs coverage-mode goal-hierarchy scenario
Wait for all four scoped subtree requests before asserting the reload result implemented subtreeGoalIds and waitForStatusReads in the same file coverage-mode goal-hierarchy scenario
Preserve the product assertion that only the recursive subtree is requested implemented existing deepEqual scope assertion coverage-mode goal-hierarchy scenario
Do not change product scope filtering or runtime behavior implemented one-file test-only diff git diff --stat
  • Self-check before submission: I ran the diff-scoped semantic inventory (no supported vocabulary carriers in the changed file), inspected the complete diff, and confirmed only the browser scenario changed. I deliberately did not change the repository-wide semantic-vocabulary budget failure reported below.

Scope And Continuation

  • Completed scope and remaining work: This synchronizes the regression with the existing product request fan-out and removes its dependence on coverage CPU speed. The target hosted required shard passed on this exact PR head; unrelated hosted baseline failures remain and are disclosed below.
  • Slice boundary / successor: N/A; complete within this scope. The separate semantic-vocabulary-drift-smoke 44/43 baseline failure is outside this test-only change.

Validation

  • Tested revision: 713f9ced6
  • Run state: finished
  • Input classes: synthetic
Check kind Result Public-safe evidence / limitation
static passed
ode --check examples/personal-workspace-browser/goal-hierarchy.mjs`
unit passed
ode --test examples/personal-workspace-browser/shard.test.mjs`: 2 passed, 0 failed
integration failed Baseline f149d8e24 with the original file and LOOPX_DASHBOARD_COVERAGE=1: AssertionError: reusing loaded subtree snapshots must not open unrelated Goal state after 8.6s.
integration passed Head 713f9ced6 with LOOPX_DASHBOARD_COVERAGE=1 and LOOPX_PERSONAL_WORKSPACE_SCENARIO=goal-hierarchy: passed in 43.8s against the development dashboard and synthetic fixture backend.
integration passed Same scenario without coverage: passed in 38.8s.
integration passed Hosted required dashboard-browser (3) at PR head 713f9ced6: job passed in 10m59s; the goal-hierarchy scenario passed in 31.6s. https://github.com/loopx-project/loopx/actions/runs/39266409846/job/118117881255
integration failed Unrelated hosted baseline failures remain: personal-workspace-contract.test.mjs fails its existing Lark App count does not flash a false zero while loading source assertion, and tests/control_plane_ts/content_digest_single_owner.test.ts fails its existing consumer-set assertion. Both reproduce locally at this head and neither reads the changed scenario file.
static passed loopx canary premerge direct checks (git diff --check, staged/unstaged diff checks, RFC bilingual check) and public-boundary scan for the changed path.
integration failed loopx canary premerge also selected examples/semantic-vocabulary-drift-smoke.py; it failed with 44 independently maintained py/ts twins; budget is 43. This scans the complete tracked tree and is unrelated to the single changed .mjs test file; the maintainability ratchet and public-boundary checks passed.
  • Coverage and gaps: The coverage-mode scenario exercises the exact failing required lane, including the real Vite dashboard and fixture HTTP backend through Playwright. The hosted dashboard-browser (3) job passed at 713f9ced6 with goal-hierarchy at 31.6s. Other hosted jobs remain red on pre-existing assertions outside this one-file test change; they are disclosed above and are not modified or masked here. The remaining Python test shards were still running when this description was updated.

Frontend / Visual Evidence

  • UI impact: none
  • Before: N/A
  • After: N/A
  • First viewport and preview: N/A for this test-only synchronization
  • States and viewports shown: N/A
  • Source data: synthetic
  • Attention review: N/A; no product surface or layout changed
  • Craft review: N/A; no product surface or layout changed

Type of Change

  • Bug fix
  • New feature
  • Breaking change
  • Refactoring (no functional changes)
  • Documentation update
  • Test update

LoopX Area

  • Control plane (goals, todos, quota, scheduler, registry, runtime)
  • Benchmark boundary (adapters, runners, verifiers, scoring, evidence)
  • Capability or extension (providers, adapters, skills)
  • Public docs or presentation surface (README, protocols, dashboard)
  • Build, packaging, installer, or CI
  • Host or runtime integration

Technical Direction

  • Direction / acceptance reference, when applicable: CI reliability for the existing dashboard acceptance contract; no roadmap id invented.

Shared-authority RFC fixture impact

  • Production-scale fixture schema: N/A
  • Semantic dimensions changed, or reviewed no-impact rationale: N/A
  • Provider conformance arms run: N/A
  • Read-only legacy/file/PostgreSQL three-arm rehearsal (required for promotion, runtime-routing, or compatibility-projection changes): N/A

Boundary Checklist

  • Neither the diff nor this PR body/comments/attachments disclose private state, credentials, raw traces or verifier output, internal links, or local machine paths (including .loopx/, .codex/goals/, and live ACTIVE_GOAL_STATE.md).
  • I did not duplicate maintainer-owned benchmark work unless a maintainer split out a public issue for it.
  • I kept the change scoped to the linked issue/task.
  • Existing English/Chinese RFC pairs (including ledger entries) both have a diff, and the local premerge check python3 scripts/check_rfc_bilingual.py --base origin/main --head HEAD passes, or no paired RFC changed.
  • I completed the visual evidence section for UI changes, or marked UI impact
    one`.
  • Every commit includes a DCO Signed-off-by trailer (git commit -s).

Signed-off-by: JasonBuildAI <jasonbuildai@gmail.com>
@JasonBuildAI
JasonBuildAI force-pushed the codex/goal-hierarchy-coverage-barrier-n8q4 branch from ef83e02 to 713f9ce Compare October 19, 2026 14:09

@loopx-agent loopx-agent left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Reviewer: actor_kind=model_agent; model=gpt-6.1-sol; provider=OpenAI; runtime_reported; reasoning_effort=max

动机

受影响的是依赖 Goal 子树浏览器回归来判断改动是否安全的贡献者和维护者。例如,页面目录和选中行已经出现,但另外两个子 Goal 的状态请求还没有发出,旧测试就会把未完成的读取误报成产品漏读;新测试等待目标请求全部完成后再核对范围。本机实际 base/head 的覆盖率和普通浏览器场景四次均通过;新头保留精确子树、无关 Goal 不读、失效范围和拒绝恢复等原断言,等待条件明确排除了已知的过早检查窗口。本片只改现有 smoke 的同步;不改变产品读取范围、UI、权限、任务或配额,也不声称本机已经复现每次必现的原始竞态或证明整个远端分片健康。

改动思路

复用现有产品 loader 和原测试,补齐观察时序即可。产品仍由两个 worker 读取目录,测试里的 networkidle 和选中行出现不构成“整个读取已经完成”的证明。新增局部 helper 同时检查预期 Goal 都已观察到、当前没有未完成的 status route,再进入原有断言。没有扩成新重试框架,也没有修改产品权限或读取选择。

具体改动

本次实际基线 88df41c2261708ec587a50723e4b1ee5aad587de,精确 head 713f9ced6b1fdf0d39c22ad1794f4537a61e442b;只改 examples/personal-workspace-browser/goal-hierarchy.mjs,+25/-6。既有前序 #6834 的产品范围与历史恢复断言保留。该文件属于已存在的必需 dashboard-browser coverage 场景,修正这里的同步有持续维护价值,没有新增重复 smoke。

关键代码讲解

  1. waitForStatusReads 等待全部 expected ID 和 inFlightStatusReads === 0,15秒后带读取列表与未完成数报错。它不从 log 删除无关 ID,因此后面的精确断言仍能发现越界读取。
  2. /status.json 路由 用 try/finally 成对维护 inflight,覆盖正常 fulfillment 和失败路径;初始8个 Goal 完成后才清 log,防止把合法初始请求计入后续范围操作。
  3. scope/reload 屏障 等待4个子树请求,reload 前先排空当前 handler,reload 后再等待全部4个。原来的 subset、deepEqual、失效 root、拒绝恢复和跨 source Back 断言保持原样。

规格依据:https://github.com/loopx-project/loopx/issues/6886,`spec_revision=2026-10-19T13:43:44Z`,使用事先读取的 Expected behavior:

  • Expected-initial-workspace-drain:implemented;初始完整读取后清 log。
  • Expected-four-subtree-reads:implemented;scope/reload 后等待 research、portfolio、calibration、graph 全部读取。
  • Expected-no-unrelated-goal-state:implemented;原精确集合和失效范围不读断言继续执行,额外读取不会被 helper 过滤。

对主干的风险

未发现本片的可行动阻塞。风险限定在测试等待与失败诊断:漏读会等到15秒报错,额外 Goal 仍会让原断言失败,handler 异常会通过 finally 释放 inflight 计数。真实场景继续覆盖 denied child 恢复、缺失/非法 root、层级排序、键盘/窄屏、reload/Back 和 source/root 一起恢复;Turn、action 与源修改均为零。产品路径逐字节不变,用户无需新增导航、输入或确认。

独立本地验证使用 Node24.21.0、Python3.14.8:实际 base 的 coverage/普通模式分别23.09/19.23秒,新 head 分别22.78/16.95秒,四次均通过。这只是有界样本,不能用单次耗时宣称性能收益;本机这次没有重现旧失败,也不把 issue 的 hosted 复现冒领为本次结果。JavaScript 语法和 committed diff 检查通过。原生预合并直接检查通过,所选 semantic-vocabulary smoke 在真实 base/head 都以同样的44个独立 py/ts twins、预算43失败,相关 owner 与文件未被本片修改;它是独立的既存合并资格问题。没有查询、轮询或等待远端 CI。

我的整体评价

APPROVE 这一精确 head 的有界测试修复。产品的连续任务与状态 owner 完全不变;等待仅存在于已有回归中,不引入运行时重试或自动操作。用户的 Goal 浏览、收起展开、Back、拒绝恢复与失效范围交互保留;贡献者得到更明确的请求完成屏障和超时诊断,无新增用户输入或确认轮次。局部同步机制与问题规模相称,保留原产品和范围 oracle;不要求用新 UI、更多 example 或运行真实模型来扩大这次修复。先前长期运行案例的交付建议在这里用于确认真实调用点和维护收益,不代表测试通过就证明长期净益。原生 approval closeout 与 merge readiness 需另行读回;批准不授予合并或清除其他评审的权限,44/43既存失败继续如实保留。

English verdict: APPROVE 713f9ced6b1fdf0d39c22ad1794f4537a61e442b. The existing Goal-hierarchy regression now waits for the complete observed request set and drained handlers while preserving exact subtree and negative-path assertions. Actual base/head coverage and normal browser runs all passed locally; the historical race did not reproduce in this sample. The unchanged44/43 semantic vocabulary failure remains a separate baseline/readiness issue. Remote CI was not consulted.

@huangruiteng
huangruiteng merged commit 8d90e99 into loopx-project:main Oct 20, 2026
29 of 40 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[Bug]: required dashboard-browser (3) shard asserts before the scoped Goal snapshot fan-out settles

3 participants