# 刷新触发器属于插件生命周期 - Status: accepted - Date: 2026-10-20 ## Context 余额的自动刷新(启动刷新及其在账户就绪前的重试、窗口 focus、轮次结束、兜底轮询、账号登录态变化)必须在侧边栏收起后继续工作,而行组件在收起时会被卸载。 ## Decision 全部触发源由 `apply()` 中的 `ctx.effect(() => controller.attach(), 'balance: triggers')` 绑定到插件生命周期;行组件只读取快照、请求手动刷新,不做任何挂载。 ## Why 启动后余额不自动刷新的 bug,根因是 `attach()` 没有任何调用点;若把挂载点放在行组件的 effect 里,侧边栏一折叠就会静默停掉全部自动刷新,而且渲染测试仍然会通过,很难被发现。 ## Considered Options - 行组件挂载时 attach —— 否:收起侧边栏会卸载行,自动刷新静默停止,且回归测试只覆盖渲染时无法发现。 - 模块顶层或工厂函数内做副作用 —— 否:模块工厂必须无副作用,也无法挂到 `ctx.effect` 的清理上。 ## Consequences - 触发器随插件激活/卸载启停,行是否可见不影响刷新。 - 回归测试必须断言「apply 后恰好一次读取、监听已注册、卸载后清理」,而不只是断言渲染结果。