4fff733516
- resourceCanvasAssetGenerationTaskModel.applyLocalProjectAssetGenerationRecords:入参在函数入口归一化, 非数组(undefined / null / 字符串 / 数字 / 对象)一律按「没有后端记录」处理,数组内的垃圾条目 (null / 数字 / 缺 taskId)逐条丢弃;类型放宽为 `readonly …[] | null | undefined` - resourceCanvasAssetGenerationQueue:轮询 `list_local_project_asset_generations` 的 IPC 拒绝与非数组 返回值都在本地接住,按「本轮读不到」计数;到上限后按「账本不可用」与「账本里没有这条」两种原因分别收口; 派发循环再补两道兜底(dispatch 意外抛出、宿主 onSettled 抛出),保证 `void (async …)()` 不产生未处理拒绝、 也不会把任务永远卡在「已派发但未终态」 - index.tsx 恢复任务账本的 effect:IPC 拒绝与返回非数组都落到既有提示条 「生成任务列表读取失败,暂时无法恢复历史任务」,本地任务列表保持原样不清空 - 测试:模型层补「undefined / 非数组 / 垃圾条目不抛错且列表不变」,驱动器层补 「轮询返回 undefined」「轮询 IPC reject」两条(收口原因、不产生未处理拒绝、后续排队任务照常补发) - AppSurface 补两条:账本返回 undefined / 读取被拒绝时视图照常渲染、生成入口还在、提示可见 - AppSurface 既有的「布局读时提示」用例显式登记 `list_local_project_asset_generations` 返回空账本: 该命令是只读的独立链路,严格桩把它判成 unexpected invoke 会让新提示混进「没有任何提示」的断言