Summary
Residual gap deliberately left out of #253 (PR #258), recorded so it isn't rediscovered.
#253 auto-opens a "warnings" overlay when a buildAction-routed outcome carries 2+ warnings. But when an outcome carries both ResultLines and 2+ Warnings — today only the apply-updates batch (applyUpdatesSequentially, internal/tui/mutations.go) can — the pre-existing "update results" overlay keeps priority (via the m.overlay == nil guard in app.go's actionDoneMsg handler, pinned by TestActionDoneResultLinesKeepPriorityOverWarningsOverlay), and the warnings overlay defers to it.
The batch's ResultLines carry per-update ✗ failure lines, so failures are readable. What is not: warnings emitted by successful updates — applyUpdatesSequentially folds each successful ApplyUpdate's outcome.Warnings into the aggregate Warnings slice, but the update's ResultLines entry is just ✓ <name> <from> → <to>. On a merged-pak game (Icarus), applying an update that triggers a recompile can emit ≥2 merge-time asset-conflict warnings: the status line reads Applied 1 update(s) (2 warnings), the "update results" overlay shows only the ✓ line, and the warning text is unreachable — exactly #253's failure mode, surviving in the one flow whose outcome shape predates it.
Possible directions (not settled)
- Append the aggregate warnings to the update-results overlay's lines (e.g. a blank separator + one line per warning), keeping a single overlay.
- Or interleave each update's warnings under its own ✓ line in
ResultLines at batch time.
Either touches the update-results overlay's designed content, which is why it was split out of #253's rendering fix rather than bundled in.
Summary
Residual gap deliberately left out of #253 (PR #258), recorded so it isn't rediscovered.
#253 auto-opens a "warnings" overlay when a
buildAction-routed outcome carries 2+ warnings. But when an outcome carries bothResultLinesand 2+Warnings— today only the apply-updates batch (applyUpdatesSequentially,internal/tui/mutations.go) can — the pre-existing "update results" overlay keeps priority (via them.overlay == nilguard inapp.go'sactionDoneMsghandler, pinned byTestActionDoneResultLinesKeepPriorityOverWarningsOverlay), and the warnings overlay defers to it.The batch's
ResultLinescarry per-update ✗ failure lines, so failures are readable. What is not: warnings emitted by successful updates —applyUpdatesSequentiallyfolds each successfulApplyUpdate'soutcome.Warningsinto the aggregateWarningsslice, but the update'sResultLinesentry is just✓ <name> <from> → <to>. On a merged-pak game (Icarus), applying an update that triggers a recompile can emit ≥2 merge-time asset-conflict warnings: the status line readsApplied 1 update(s) (2 warnings), the "update results" overlay shows only the ✓ line, and the warning text is unreachable — exactly #253's failure mode, surviving in the one flow whose outcome shape predates it.Possible directions (not settled)
ResultLinesat batch time.Either touches the update-results overlay's designed content, which is why it was split out of #253's rendering fix rather than bundled in.