AskaEth
97768b7e3f
fix(launch): M298 收尾失败不再静默、Toast 接上渲染点
三条提示通道各漏一半,用户才会「启动失败但找不到崩溃日志」:
1) 收尾失败静默不弹:finish() 报错那条出口把 LaunchFinished.session 发成真实
会话,而它登记的现场走 before_start 写死空串 ⇒ dialog.rs 的并发守卫
(!finished.session.is_empty() && report.session != finished.session)成立后
return。改成**会话归属单一来源**:before_start 新增可选 SessionAttribution,
presenter 的 publish_before_start 把它写进报告后**返回同一个值**给 DTO;
两处不可能再各写一遍。守卫原样保留(A 场的现场不许解释 B 场,有用例钉住)。
2) Toast 只 push 不渲染:新增 app/view/toast.rs 覆盖层(MD3E 胶囊 =
ShapeScale::Full,底部居中,InverseSurface 底),接在页面树之上、模态之下;
过期仍走 clock.rs 的 expire;进/出过渡复用模态那一对腿(motion::modal_spec /
modal_scale / scaled),时间轴在 update 侧由 state/toast.rs 采样,关掉动效时
恒为终值(出图可复现)。两个拷贝路径补上 view_dirty(推了不置脏要等下一次事件)。
3) 三个贴线文件先拆再改(纯搬移 + pub use 保路径,机器核对:搬出的 14 个函数体
逐行相同):crash_report.rs 394→318(+context.rs / slot.rs)、
host/launch.rs 399→233(+build.rs)、app/dialog.rs 390→178(+model.rs)。
证据:DevDocs/artifacts/m298/toast-capsule.png(--screenshot + ULL_TOAST_FIXTURE,
图上可见「游戏崩溃 · 12.0 秒」胶囊)。
2026-11-13 13:18:11 +08:00
..
2026-11-13 13:18:11 +08:00
2026-11-12 12:06:46 +08:00