Summary
在复核 #2274 键家族残项时发现一处独立漏网:DesktopHubTaskBridge 在设备注册就绪/设备 ID 改变后失效 ['execution-targets'],而它实际使用的 useHubExecutionTargets 注册键是 [...hubQueryKeys.executionTargets.list('hub'), baseUrl],即 ['hub','execution-targets','hub', ...]。两者不是前缀关系,该失效为空操作。
正常 10 秒轮询或查询重新启用可能掩盖它;不主张所有首次注册都会失败,也不把该问题描述为无界陈旧。
Scope / Files
app/desktop/src/components/DesktopHubTaskBridge.tsx:复用现役 hubQueryKeys.executionTargets.root。
- 同目录组件行为测试:通过生产
useHubExecutionTargets 建立真实 QueryClient 缓存,再检验注册后的重取;不 mock 被测失效函数,不用自造缓存键证明自身。
Invariants / Negative Constraints
保持查询键形状、轮询间隔、注册/同步流程不变;未注册时不刷新目标清单。不扩展成 Desktop 所有本地缓存的风格重构,不改 API 或真实设备。
Acceptance
- 新回归测试在旧失效键下翻红、修复后通过。
- 设备未就绪的负向用例保持零刷新;非执行目标缓存不受影响。
- Desktop 相关回归与 typecheck 通过;PR required checks 通过后 squash merge。
Owner:Desktop;写集由当前主 Agent 独占。
Summary
在复核 #2274 键家族残项时发现一处独立漏网:
DesktopHubTaskBridge在设备注册就绪/设备 ID 改变后失效['execution-targets'],而它实际使用的useHubExecutionTargets注册键是[...hubQueryKeys.executionTargets.list('hub'), baseUrl],即['hub','execution-targets','hub', ...]。两者不是前缀关系,该失效为空操作。正常 10 秒轮询或查询重新启用可能掩盖它;不主张所有首次注册都会失败,也不把该问题描述为无界陈旧。
Scope / Files
app/desktop/src/components/DesktopHubTaskBridge.tsx:复用现役hubQueryKeys.executionTargets.root。useHubExecutionTargets建立真实 QueryClient 缓存,再检验注册后的重取;不 mock 被测失效函数,不用自造缓存键证明自身。Invariants / Negative Constraints
保持查询键形状、轮询间隔、注册/同步流程不变;未注册时不刷新目标清单。不扩展成 Desktop 所有本地缓存的风格重构,不改 API 或真实设备。
Acceptance
Owner:Desktop;写集由当前主 Agent 独占。