@@ -916,6 +916,64 @@ describe("deriveMessagesTimelineRows", () => {
916916 ] ) ;
917917 } ) ;
918918
919+ it ( "keeps a terminal provider error visible when no assistant message was produced" , ( ) => {
920+ const runId = "turn-provider-error" as never ;
921+ const rows = deriveMessagesTimelineRows ( {
922+ timelineEntries : [
923+ {
924+ id : "user-entry" ,
925+ kind : "message" ,
926+ createdAt : "2026-01-01T00:00:00Z" ,
927+ message : {
928+ id : "user-provider-error" as never ,
929+ role : "user" ,
930+ text : "Start the turn" ,
931+ runId,
932+ createdAt : "2026-01-01T00:00:00Z" ,
933+ updatedAt : "2026-01-01T00:00:00Z" ,
934+ streaming : false ,
935+ } ,
936+ } ,
937+ {
938+ id : "provider-error-entry" ,
939+ kind : "work" ,
940+ createdAt : "2026-01-01T00:00:08Z" ,
941+ entry : {
942+ id : "provider-error" ,
943+ createdAt : "2026-01-01T00:00:08Z" ,
944+ runId,
945+ label : "Provider error" ,
946+ detail : "The model is currently at capacity." ,
947+ tone : "info" ,
948+ itemType : "error" ,
949+ toolLifecycleStatus : "failed" ,
950+ } ,
951+ } ,
952+ ] ,
953+ latestRun : {
954+ runId,
955+ status : "failed" ,
956+ startedAt : "2026-01-01T00:00:00Z" ,
957+ completedAt : "2026-01-01T00:00:08Z" ,
958+ } ,
959+ isWorking : false ,
960+ activeTurnStartedAt : null ,
961+ turnDiffSummaryByAssistantMessageId : new Map ( ) ,
962+ revertTurnCountByUserMessageId : new Map ( ) ,
963+ } ) ;
964+
965+ expect ( rows . map ( ( row ) => row . id ) ) . toEqual ( [ "user-entry" , "provider-error-entry" ] ) ;
966+ expect ( rows . some ( ( row ) => row . kind === "turn-fold" ) ) . toBe ( false ) ;
967+ expect ( rows . find ( ( row ) => row . kind === "work" ) ) . toMatchObject ( {
968+ groupedEntries : [
969+ expect . objectContaining ( {
970+ id : "provider-error" ,
971+ detail : "The model is currently at capacity." ,
972+ } ) ,
973+ ] ,
974+ } ) ;
975+ } ) ;
976+
919977 it ( "keeps persistent cards after the Worked-for row when they arrive before commentary" , ( ) => {
920978 const timelineEntries = [
921979 {
0 commit comments