Repository navigation
test(workspace): follow the renamed tentative-finding label - #7482
huangruiteng merged 1 commit into
Conversation
loopx-project#7368 renamed the tentative finding state from 待检查 to 暂定结论 so the reader no longer calls a tentative finding a queued check. The packaged research-finding-reader acceptance scenario still pinned the retired label in three assertions, so dashboard-browser (2) and chat-bundle-browser (2) aborted there and the required checks job failed for every PR. Follow the shipped label and keep the Chinese/English assertions paired. Closes loopx-project#7480 Signed-off-by: JasonBuildAI <jasonbuildai@gmail.com>
cocolord
left a comment
There was a problem hiding this comment.
Reviewer: model_agent; GPT-5; OpenAI; self_reported
动机
维护个人工作台浏览器验收的开发者会遇到一个确定性问题:产品已经把研究结论的 tentative 状态显示为“暂定结论”,但 packaged research-finding-reader 场景仍在三处断言“待检查”,因此 required shard 在第一处断言即停止,后续覆盖无法执行。保持现状会持续制造所有相关 PR 的红灯;修改产品文案去迁就旧测试则会倒退 #7368 已交付的语义区分。这个 PR 的目标只是让既有验收跟随已发布文案,不改变产品状态、用户权限或运行时行为。
维护个人工作台浏览器验收的开发者会遇到确定性的旧文案断言失败。同一 packaged 场景在 base 于第 64 行失败,在 exact head 完整通过。真实 chat bundle 上三个中文观察点和后续英文断言均通过。本 PR 不修改产品状态、用户权限、运行时行为、Lark board 示例或研究说明。
在 exact head 86ff8d7016431b3d46f1454728d9428778e1f530 上,我独立构建真实 chat bundle 并运行 packaged 场景:同一场景在 base 17b2a0f9b818dc6e6fe77ccc567b20ff91b3bc40 于第 64 行按 待检查 失败,在 head 完整通过。当前 hosted shard 也已经越过 research-finding-reader,随后才在未修改的 goal-suggestions 场景失败,因此不能把那条红灯归因于本次三行修复。
改动思路
改动复用现有 researchFindingReaderScenario、现有 synthetic fixture 和现有 packaged catalog,不新建第二套 smoke 或 helper。三个断言分别覆盖概览计数、历史分组 header 和选择 tentative 结论后的正文;全部改为产品 copy owner explore-finding-copy.ts 已使用的“暂定结论”,英文 Tentative 对照和其余行为断言保持不变。这样既恢复 required shard 的真实路径,也保留了对中文状态语义的回归保护。
最小替代方案正是修改这三处 stale oracle。两处仍使用旧词的 Lark board 示例和研究说明不在本 issue 的 browser-acceptance 修复范围内;它们没有被本 PR 静默改写,也不影响这里的 packaged 场景结论,可另行按各自产品/文档语义处理。
具体改动
全 PR 只有 examples/personal-workspace-browser/research-finding-reader.mjs,共 +3/-3,无产品代码、fixture、状态模型、依赖或 workflow 变化。
关键内容讲解
- 第 64 行:概览异常计数从匹配
已反驳 3.*待检查 4改为已反驳 3.*暂定结论 4;这是 base 实际失败的位置。 - 第 118 行:历史分组 header 的 20 条记录、已反驳数和 tentative 数仍全部校验,只替换状态名称。
- 第 181 行:选中
finding-4后仍要求文章显示 tentative 状态,并继续执行后面的英文Tentative断言,未缩短场景。
规范依据是 issue #7480,spec_revision 2026-10-27T09:43:31Z。无原始编号的验收点以本评审标签列出:
I7480-THREE-ASSERTIONS— implemented:三处 stale 中文断言全部更新,diff 中没有删除断言。I7480-PACKAGED-SCENARIO— implemented:base 同场景 exit 1,head 同场景完整 exit 0;hosted shard 日志显示该场景已执行到scenario-end。I7480-NO-PRODUCT-CHANGE— implemented:仅修改一个既有 acceptance scenario,产品 copy 与 fixture 未动。
对主干的风险
主要风险不是三处字符串本身,而是“测试通过但真实 packaged 路径没有跑完”或为了变绿而删除后续语义断言。我使用本 checkout 的依赖构建 chat bundle,再从公开 scenario entrypoint 运行 research-finding-reader;head 输出 scenario-end=research-finding-reader 和 packaged ok,base 则复现原始正则失败。另运行 shard partition test,2 项全部通过,证明场景仍被 catalog 唯一覆盖。该验证没有使用 mock 返回值直接伪造被审结论。
Hosted chat-bundle-browser (2) 当前仍红,但完整日志显示 research-finding-reader 已通过,失败发生在八个步骤之后的未修改 goal-suggestions.mjs:133。没有同一 immutable base 的该后续失败对照,因此我把它保留为 unresolved merge hold,不把它虚构成 pre-existing outage,也不要求本 PR 修复无关场景。当前其他 browser/stage2c 红项同样没有足够归因,APPROVE 不代表可合并。
这是一个薄且耐久的 smoke 修复:它保护已经发布的 tentative 状态标签和 required packaged journey,而不是添加一次性 walkthrough。对同作者 open PR 的扫描只看到三个分别绑定独立 issue 的 encoding、Turn race 和本测试修复,形状与 owner 不同,没有同形批量刷 PR 的证据。bounded future-facing pass 的边界检查结论是无需新增抽象;保留现有单一场景最易定位、回滚和维护。
我的整体评价
结论是 goal_achieved。long_horizon=preserved:运行时、调度、持久化和后续工作完全未变,required shard 能继续执行后续场景。user_experience=preserved:产品已经显示“暂定结论”,本 PR 只让验收重新如实观察该界面,不增加用户步骤或改变默认行为。
完整 diff 方向明确正向,真实 base/head packaged 对照、三处断言覆盖、shard catalog 以及 hosted 日志都支撑这一点;未发现阻断性代码问题。批准该 exact head,但保留当前未归因 CI 红项、pending shards、required checks 和 merge policy 作为独立合并条件。本评审不授权 merge、dismiss 或扩大改动范围。
English verdict: APPROVE - 86ff8d7 updates all three stale tentative-label assertions; the exact packaged scenario fails on base and passes on head, while the current hosted shard fails later in unchanged goal-suggestions coverage.
Goal And Delivered Outcome
The required
dashboard-browser (2)andchat-bundle-browser (2)shard jobs deterministically fail onmainbecause the packagedresearch-finding-readerscenario still asserts the retired待检查tentative-finding label.checksneeds both jobs, so it cannot pass while that mismatch exists. This change follows the shipped暂定结论label and clears the failure.17b2a0f9b; the hosted shard-2 jobs fail on the same assertion at an ancestor commit).#7368(fix(research): distinguish tentative findings from queued checks) renamed the tentative state so a tentative finding is no longer called a queued check; the acceptance scenarioresearch-finding-readerstill pinned待检查in three assertions, so both shard-2 browser jobs aborted at line 64.assert.match(...) /已反驳 3.*待检查 4/andactual: '已反驳 3 · 暂定结论 4'→ exits 0 withpersonal-workspace-browser-smoke (packaged): ok.Closes #7480; baseloopx-project/loopx:main.Author Declaration
Implemented against
apps/presentation/dashboard/src/features/personal-workspace/explore-finding-copy.tsat17b2a0f9b, wheretentativeis暂定结论("Tentative") after fix(research): clarify tentative findings and explicit status selection #7368.examples/personal-workspace-browser/research-finding-reader.mjslines 64, 118, 181research-finding-readerscenarioTentativeassertion at line 185research-finding-readerscenariogit diff upstream/main...HEADScope And Continuation
research-finding-readernow follows the shipped label. Earlier scenarios in those jobs already pass in the hosted run at the ancestor commit; the scenarios after this one in shard 2 are not exercised here (see Coverage and gaps). Any failure there would be a separate defect.Validation
86ff8d7016431b3d46f1454728d9428778e1f530regression_paritypassedresearch-finding-readerscenario with the chat bundle built from this checkout. Base17b2a0f9b: exit 1,AssertionError [ERR_ASSERTION]: The input did not match the regular expression /已反驳 3.*待检查 4/. Input: '已反驳 3 · 暂定结论 4'. Head86ff8d701: exit 0,personal-workspace-browser-smoke (packaged): ok. Hosted evidence that the same scenario fails the shard jobs: main run 40454462809 at ancestor218aa087b,dashboard-browser (2)job 122026651827 andchat-bundle-browser (2)job 122026651893. That run'schecksjob 122034119425 failed earlier on the TypeScript-core regression that #7459 has since fixed; the browser failures in the same run are the failure class this PR removes. No hosted run completed at17b2a0f9b(the run was cancelled), so the base-level failure is the local reproduction above.staticpassedgit diff --check;node examples/personal-workspace-browser/shard.test.mjs(2 passed, shards still cover every scenario exactly once).integrationpassedloopx canary premerge --from-git-diff --git-diff-base upstream/main: passed, direct checks 4/4, selected canaries 2/2, failures 0, public boundary scan passed on the changed scenario file.unitnot_runresearch-display-language,replan-cadence,goal-workspace-m2,since-you-looked,first-goal-agent-unavailable,attention-notifications,goal-suggestions,completed-history-isolation) were not exercised in CI;research-display-languagealready asserts暂定结论and the others are unrelated to this diff. This is a test-only change with no runtime behavior, so no real-backend or PostgreSQL qualification applies. Two leftovers from fix(research): clarify tentative findings and explicit status selection #7368 remain outside this scope:examples/research-history-lark/board.mts:41andexamples/personal-workspace-browser/research-history.md:195still use the retired label.Frontend / Visual Evidence
Type of Change
LoopX Area
Boundary Checklist
none, as recorded above.Signed-off-bytrailer (git commit -s).AI Disclosure
AI disclosure: this change was drafted with AI assistance at my request, under my direction and review.