Repository navigation
fix(frontend): keep refresh feedback scoped to its request - #6273
Conversation
Signed-off-by: LoopX Agent <337587101+loopx-agent@users.noreply.github.com>
There was a problem hiding this comment.
Reviewer: model_agent; gpt-6.1-sol; OpenAI; runtime_reported; reasoning_effort=xhigh
Approval conclusion (author-owned PR; GitHub blocks formal self-approval)
动机
用户连续刷新 Goal 工作区,第二次状态读取尚未完成。 第一轮完成后立即刷新,并将第二轮真实状态响应保持超过旧提示的1.8秒:基线loading消失,当前head保持loading直到自己的响应返回。 打包前端的真实状态响应被保持时loading不被旧timer清掉;释放响应后完成,原blocked来源读取与恢复仍通过。 不改变持久任务、权限、CLI/Lark或反馈时长;不以打包检查证明已安装App采用或真实业务验收。 原真实修正、独立核验、请求者采纳与安装后的采用仍未由本补丁证明。
改动思路
刷新等待与完成提示由现有 PersonalWorkspacePage 负责,原生 status 仍负责事实。为每次已准入的刷新保留局部序号;旧 timer 在下一次请求开始后失去清理资格。无需新状态机、权限、配置或传输重试,也不延长等待时限。局部刷新提示属于现有Page,原生事实来源继续由status owner负责;请求序号仅限定旧timer的清理资格。本PR只关闭前端刷新等待竞态,不增加任务规则、持久状态或权限。用户仍沿原来的刷新按钮操作,没有新增步骤。
具体改动
精确 head 21022f2c62869c937146e111048add10cb2a89f3,base fb5273002fae9d652a0c21c579bb65ee07755f18。规范取自补丁前的 docs/development/frontend-delivery.md 与 design.md 的异步反馈/真实后端交付边界。
-
refreshWorkspace(personal-workspace-page.tsx:1937)保留原 callback、loading/done/error、history revision 和1.8秒提示,只用refreshSequenceRef约束清理回调。正常当前 timer 仍可归 idle。 -
blockedReasonReadbackScenario保持真实 canonical File/HTTP status 读取,将第二次响应保持超过第一轮提示期限;finally 必定释放,不改 task 规则,不提高 timeout,也不删除原 source/unknown/retry 断言。中英文及桌面/手机均通过。 -
packaged interaction and owning state:已实现;打包控件对接隔离的真实canonical状态HTTP,完整入口包含恢复。
-
async feedback ownership:已实现;相同第二轮响应保持条件下,旧main提前idle,当前head保留loading;原提示时长保留。
两个路径 +24/-2,其中生产 +5/-1、回归 +19/-1。没有新模块、依赖、公开截图或持久字段。相关未来维护整理已应用为最小请求身份 seam;热 Page 的无关抽取未混入本次。
对主干的风险
旧 main 的真实打包回归在仍持有第二次响应时得到 loading=0,独立期望为1,exit1;同测试在此 head 通过。基线为不可变源码 archive,生产文件 hash 与原始 main 相符,回归源码与候选相同,未改活动 Goal。
当前完整 smoke:personal-workspace-packaged exit0,确实经过静态契约、52个浏览器场景、真实 team return/recovery 和最后 craft。build/source verification、语义检查及 exact-scope quality/risk-based premerge 通过,premerge 5/5执行加3项diff检查,无失败。wait_for_ci=false,未读取或轮询CI。
失败保留:此前集成前一次完整命令在 cadence 测试关闭时遇到尚在进行的 route.fetch/context disposal;它没有被算作通过,也没有被本 timer patch 声称修复。当前 main 上的完整命令通过。初次验证还因依赖复制未结束而找不到 tsc/类型依赖;完成环境准备后同源命令通过,失败日志保留。测试来源为隔离原生 authority 与打包前端,未资格化当前安装 App 采用、真实模型修正/独立核验/采纳。回滚仅撤回源码与回归并重建,无状态迁移。
我的整体评价
APPROVE(作者账户的 COMMENTED 自评)。长程语义 preserved,用户体验 improved:事实来源不变,当前等待信号不再被旧完成提示覆盖。属于 justified_increment:关闭真实局部刷新竞态,业务采用仍由原交付流程验收。没有新增协议/authority、prose分类或feature-off承诺;当前精确head可供独立评审,本自评不授予合并权限。
English verdict: APPROVE — 21022f2; request-scoped feedback prevents an earlier timer from clearing a newer pending refresh. The identical exact-main counterexample fails before and passes after; the complete packaged entry, real backend recovery, source/semantic and risk-based checks passed. Earlier failed runs remain disclosed. Installed adoption/live acceptance are unqualified; author-owned COMMENTED review, no merge authority.
loopx-agent
left a comment
There was a problem hiding this comment.
Reviewer: model_agent | gpt-6.1-sol | OpenAI | runtime_reported | xhigh
Approval conclusion (author-owned PR; GitHub blocks formal self-approval)
动机
用户在 Goal 工作区完成一次刷新后立即再次刷新,需要等待中的提示持续到本次状态读取结束。
前一次完成提示的1.8秒定时器会清掉第二次仍等待中的加载状态;相同响应保持条件下,候选让旧定时器失效,第二次响应返回后才完成。
打包工作区的刷新按钮在真实状态响应被保持时保留加载提示,释放响应后完成;中英文、桌面和390px均通过。
不改变任务状态、权限、持久协议或1.8秒反馈时长;不证明已安装App采用、真实模型修正或业务采纳。
原完整业务修正、独立核验和采纳仍须原交付流程证明,本补丁只关闭刷新提示竞态。
改动思路
复用已有 PersonalWorkspacePage 反馈 owner,给准入后的刷新递增局部请求序号;定时器只能清理仍属于自己的提示。原 loading/done/error、callback、历史刷新和1800ms完成提示保留。状态事实仍来自原生 status,序号不能改任务或授权。这是可独立回滚的局部修正,不引入共享状态机、传输重试、配置或额外用户步骤。延长超时只能掩盖竞态,抽取整个热 Page 则扩大无关范围。
具体改动
精确 head 21022f2c62869c937146e111048add10cb2a89f3,基线 fb5273002fae9d652a0c21c579bb65ee07755f18。先读取既有 frontend-delivery/design 的真实入口与异步反馈约束,再核验两路径 +24/-2 的全部差异。
refreshWorkspace(personal-workspace-page.tsx:1937)在已准入刷新开始时递增refreshSequenceRef。异步成功、失败及历史 revision 沿用原分支;旧 timeout 比较序号后才归 idle。新的请求没有被完成提示伪装成已完成。blockedReasonReadbackScenario(blocked-reason-readback.mjs:202)保持实际 canonical File/HTTP status 响应,在旧1800ms期限后断言 loading=1,再由 finally 释放请求。原来源、unknown、阻塞原因消失及任务恢复断言仍保留。四个语言/宽度组合证明当前请求提示与原事实读回兼容。
两个验收项均满足:打包控件连接隔离真实状态 owner;相同响应保持条件区分旧、新定时器语义。不可变基线和当前源码分别构建,候选 oracle 在基线只重绑私有 import,不改变生产代码或断言。局部请求身份 seam 已应用;无关 Page 拆分未混入。已有反馈 Literal 保持本地,不新增通用协议词汇。
规范:docs/development/frontend-delivery.md(基线版本),并参考 docs/development/design.md。验收 async_feedback 已实现,当前请求等待提示由本次请求拥有;real_entry 已实现,打包页面读取实际状态并覆盖恢复。
对主干的风险
独立对照在基线得到 loading=0、期望1,精确在旧定时器竞态断言失败;当前 head 同一语义断言通过。完整 smoke:personal-workspace-packaged exit0,覆盖52场景、真实 team return/recovery 与最终 craft;源码 build、diff、advisory 后完整 semantic drift 检查通过。完整扫描保留既有未解析 producer,空 advisory 不证明不支持的语法安全。wait_for_ci=false,未查询、轮询或等待 CI。
保留失败:首次基线启动被其他端口占用阻断,换空闲端口运行相同 oracle 后才取得语义反例;错误的 semantic --check 调用因缺少 --output 退出,随后使用规定的 full drift smoke 通过。这些不是产品回归。作者历史 cadence/context disposal 失败没有被本修正声称解决;本轮完整当前入口通过。测试使用隔离合成 Goal 与真实状态HTTP,不资格化安装后的采用、真实模型或业务接受。回滚两文件并重建即可,无迁移;运行时/UI 仍由维护者合并。
我的整体评价
APPROVE:当前等待反馈修复证据完整,未发现本精确 head 的阻断问题。长期重复刷新与用户状态判断改善,任务事实与原权责保持;交付是 justified_increment,剩余业务验收边界明确。作者同账户由 COMMENTED 记录批准结论,本评审不等于 GitHub 正式 self-approval 或合并授权。原公开结论格式未被 native 接受,本轮以当前能力模板和独立证据发布可读回的精确 head 结论。
English verdict: APPROVE — 21022f2. The same held real-status response counterexample fails on immutable base (loading0 versus expected1) and passes on this head; the complete packaged entry,52 browser scenarios,team return/recovery,craft,source build and semantic checks passed. Previous port/setup and author historical cadence failures remain disclosed, not falsely repaired. Request cleanup remains local; installed/live business adoption is unqualified. Author-owned COMMENTED conclusion; maintainer merge required. No CI fetched/polled/waited.
|
Reviewer: model_agent | gpt-6.1-sol | OpenAI | runtime_reported | xhigh English verdict: APPROVE — 21022f2. The same held real-status response counterexample fails on immutable base (loading0 versus expected1) and passes on this head; the complete packaged entry,52 browser scenarios,team return/recovery,craft,source build and semantic checks passed. Previous port/setup and author historical cadence failures remain disclosed, not falsely repaired. Request cleanup remains local; installed/live business adoption is unqualified. Author-owned COMMENTED conclusion; maintainer merge required. No CI fetched/polled/waited. |
A completed refresh schedules a 1.8-second feedback reset. Starting another refresh during that interval lets the old timer clear the new request’s loading state and enable its control before the response arrives. Scope the reset to the request that created it, preserving the existing success/error states and feedback duration.
The regression holds a real status response past the earlier timer’s deadline in the packaged frontend. It fails on the exact main baseline and passes with the request guard; the existing blocked-source/readback assertions remain. Frontend refresh is the affected entrypoint; CLI, Lark and persistent task state are unchanged.
Validation: packaged build/source verification; the complete
smoke:personal-workspace-packagedentry (52 browser scenarios, native team return/recovery and final craft); semantic checks; exact-scope change-quality and risk-based premerge. A prior pre-integration run exited on an outstanding route during cadence-test teardown; that failed run is retained separately and is not a passing receipt. The current main-based complete entry exited successfully. Installed App adoption and live business acceptance remain outside this patch’s evidence.This follow-up fixes a refresh race found while qualifying the Goal workspace changes merged in #6264. No state migration or new UI is involved.