Skip to content

Conversation

@Sung96kim
Copy link

@Sung96kim Sung96kim commented Jan 6, 2026

Note

Introduces a retry capability for failed submissions across the client and GraphQL layers.

  • Adds RetrySubmissionsAsync(IEnumerable<int>) to ISubmissionsClient and implements it in SubmissionsClient, including argument validation and mapping of retries metadata
  • Defines RetrySubmissions GraphQL mutation in Submissions.graphql and wires it via SubmissionSsClient.Retry(...)
  • Adds integration tests validating null/empty input handling, single/multiple retries, and presence of Retries info
  • Minor: updates CODEOWNERS

Written by Cursor Bugbot for commit 2a489e0. This will update automatically on new commits. Configure here.

@github-actions
Copy link

github-actions bot commented Jan 6, 2026

Total Coverage: 0.00%

Coverage Report
FileBranchesFuncsLinesUncovered Lines
D:\a\indico-client-csharp\indico-client-csharp\IndicoV2\DataSets\DataSetClient.cs0%0%0%18, 20, 21, 22, 26, 27, 27, 27, 27, 27, 28, 29, 33, 34, 34, 34, 34, 34, 35, 36, 41, 42, 43, 45, 46, 50, 53, 56, 58, 59, 60, 61, 62, 64, 64, 64, 65, 66, 67, 68, 69, 70, 71, 72
D:\a\indico-client-csharp\indico-client-csharp\IndicoV2\Exception\FileUploadException.cs100%0%0%10, 11, 12, 15
D:\a\indico-client-csharp\indico-client-csharp\IndicoV2\Exception\GraphQLException.cs0%0%0%11, 13, 15, 17, 21, 25, 26, 27, 28, 28, 28, 30, 32
D:\a\indico-client-csharp\indico-client-csharp\IndicoV2\Extensions\DataSets\DataSetAwaiter.cs0%0%0%13, 14, 17, 20, 23, 27, 27, 27, 29, 31, 33
D:\a\indico-client-csharp\indico-client-csharp\IndicoV2\Extensions\JobResultBuilders\JobResultBuilder.cs0%0%0%10, 10, 10
D:\a\indico-client-csharp\indico-client-csharp\IndicoV2\Extensions\JobResultBuilders\Submission\Exceptions\InvalidJobSubmissionResult.cs100%0%0%7, 9
D:\a\indico-client-csharp\indico-client-csharp\IndicoV2\Extensions\JobResultBuilders\Submission\Exceptions\InvalidUrlException.cs100%0%0%7, 9
D:\a\indico-client-csharp\indico-client-csharp\IndicoV2\Extensions\JobResultBuilders\Submission\UrlJobResult.cs0%0%0%11, 15, 15, 15, 17, 20, 20, 20, 22, 25, 27, 27, 27, 29, 32
D:\a\indico-client-csharp\indico-client-csharp\IndicoV2\Extensions\Jobs\JobAwaiter.cs0%0%0%15, 16, 17, 18, 19, 24, 28, 31, 37, 37, 37, 39, 42, 42, 42, 44, 45, 48, 49
D:\a\indico-client-csharp\indico-client-csharp\IndicoV2\Extensions\SubmissionResult\SubmissionResultAwaiter.cs0%0%0%19, 21, 22, 23, 26, 26, 26, 29, 33, 33, 33, 33, 33, 35, 40, 40, 40, 42, 42, 42, 44, 47, 50, 51, 53, 55, 57
D:\a\indico-client-csharp\indico-client-csharp\IndicoV2\Extensions\Workflows\WorkflowAwaiter.cs0%0%0%13, 17, 17, 17, 19, 21
D:\a\indico-client-csharp\indico-client-csharp\IndicoV2\GraphQLRequest\GraphQLRequestClient.cs0%0%0%17, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 32, 32, 32, 34, 36, 37, 38, 39, 40, 42, 43, 43, 43, 45, 48, 48, 48, 49, 50
D:\a\indico-client-csharp\indico-client-csharp\IndicoV2\IndicoClient.cs0%0%0%25, 30, 32, 33, 40, 40, 40, 41, 47, 48, 56, 58, 58, 58, 59, 59, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 79, 80
D:\a\indico-client-csharp\indico-client-csharp\IndicoV2\IndicoClientExtensions.cs100%0%0%25, 32, 39, 47, 54, 61, 68, 70, 78, 81, 82, 85, 93
D:\a\indico-client-csharp\indico-client-csharp\IndicoV2\Jobs\JobsClient.cs0%0%0%17, 19, 20, 21, 25, 26, 27, 31, 33, 34, 38, 39, 40, 40, 40, 42, 43, 45, 46, 47, 49, 50
D:\a\indico-client-csharp\indico-client-csharp\IndicoV2\Models\ModelsClient.cs0%0%0%19, 21, 22, 23, 28, 29, 30, 36, 37, 38, 43, 44, 45, 49, 50, 51, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 54, 55, 56, 57, 58, 60, 61, 62, 63, 64, 65, 66
D:\a\indico-client-csharp\indico-client-csharp\IndicoV2\Ocr\OcrClient.cs0%0%0%20, 22, 23, 24, 28, 29, 30, 31, 36, 37, 38, 38, 38, 40, 41, 42, 43, 44, 45, 47, 48, 49, 50, 51, 53, 55, 56, 57, 58, 60, 62, 63, 65, 69, 70, 72, 74
D:\a\indico-client-csharp\indico-client-csharp\IndicoV2\Reviews\ReviewsClient.cs0%0%0%16, 18, 19, 20, 23, 26, 30, 31, 31, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46
D:\a\indico-client-csharp\indico-client-csharp\IndicoV2\Storage\Blob.cs100%0%0%15, 17, 23, 31, 32, 41, 42, 51, 52
D:\a\indico-client-csharp\indico-client-csharp\IndicoV2\Storage\FileParameter.cs100%0%0%10, 7, 8, 9
D:\a\indico-client-csharp\indico-client-csharp\IndicoV2\Storage\MultipartFormUpload.cs0%0%0%16, 18, 22, 22, 22, 23, 24, 25, 26, 27, 28, 29, 33, 34, 35, 36, 37, 39, 39, 39, 42, 42, 42, 44, 47, 49, 50, 51, 52, 53, 55, 56, 57, 60, 61, 64, 65, 66, 67, 70, 71, 72, 73, 74
D:\a\indico-client-csharp\indico-client-csharp\IndicoV2\Storage\RetrieveBlob.cs0%0%0%19, 21, 23, 24, 24, 24, 25, 32, 42, 43, 44, 45, 46, 50, 51, 51, 51, 53, 57, 59, 67, 68, 69, 69, 69, 71, 75, 77, 85, 86, 87
D:\a\indico-client-csharp\indico-client-csharp\IndicoV2\Storage\StorageClient.cs0%0%0%100, 101, 102, 103, 104, 106, 106, 106, 109, 109, 109, 111, 114, 116, 117, 118, 119, 121, 122, 123, 126, 127, 130, 131, 132, 133, 136, 137, 138, 140, 141, 21, 22, 23, 24, 25, 26, 27, 29, 31, 35, 36, 38, 39, 43, 45, 46, 50, 51, 53, 58, 59, 61, 67, 72, 72, 72, 74, 76, 77, 78, 78, 78, 80, 81, 83, 85, 87, 88, 89, 90, 91, 92, 93, 95, 96
D:\a\indico-client-csharp\indico-client-csharp\IndicoV2\Storage\UploadFile.cs0%0%0%14, 21, 22, 25, 29, 29, 29, 31, 32, 33, 35, 35, 35, 37, 40, 40, 40, 42, 46, 49, 57, 59, 59, 59, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 73, 74, 75, 76, 77, 80, 82, 82, 82, 84, 85, 85, 85, 87, 88, 90, 94, 95
D:\a\indico-client-csharp\indico-client-csharp\IndicoV2\Storage\UploadStream.cs0%0%0%18, 20, 28, 30, 30, 30, 32, 33, 34, 35, 36, 37, 38, 39, 40, 43, 44, 45, 46, 47, 49, 49, 49, 51, 52, 52, 52, 54, 55, 56, 60, 61
D:\a\indico-client-csharp\indico-client-csharp\IndicoV2\Submissions\SubmissionsClient.cs0%0%0%102, 102, 102, 104, 104, 104, 105, 105, 105, 106, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 124, 125, 125, 125, 127, 129, 130, 134, 138, 139, 140, 141, 145, 145, 145, 145, 145, 147, 150, 151, 151, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 167, 169, 169, 169, 169, 169, 169, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 21, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 23, 24, 25, 29, 30, 31, 32, 33, 34, 35, 35, 35, 37, 38, 39, 40, 41, 42, 44, 45, 46, 47, 48, 50, 52, 52, 52, 53, 57, 58, 58, 58, 59, 65, 69, 74, 75, 75, 75, 77, 77, 77, 79, 80, 84, 88, 89, 95, 96, 97
D:\a\indico-client-csharp\indico-client-csharp\IndicoV2\Workflows\WorkflowsClient.cs100%0%0%15, 17, 18, 19, 23, 24, 25, 29, 30, 31, 35, 36, 37, 40, 43, 45, 46, 47, 48, 49
D:\a\indico-client-csharp\indico-client-csharp\IndicoV2.Abstractions\CommonModels\Pagination\HasCursor.cs100%0%0%11, 9
D:\a\indico-client-csharp\indico-client-csharp\IndicoV2.Abstractions\CommonModels\Pagination\PageInfo.cs100%0%0%13, 17, 21, 25
D:\a\indico-client-csharp\indico-client-csharp\IndicoV2.Abstractions\CommonModels\Predictions\Prediction.cs100%0%0%12, 15, 18, 21, 9
D:\a\indico-client-csharp\indico-client-csharp\IndicoV2.Abstractions\Converters\CastingConverter.cs0%0%0%12, 14, 18, 18, 18, 20, 9
D:\a\indico-client-csharp\indico-client-csharp\IndicoV2.Abstractions\DataSets\Models\DataSet.cs100%0%0%5, 6
D:\a\indico-client-csharp\indico-client-csharp\IndicoV2.Abstractions\DataSets\Models\DataSetFull.cs100%0%0%10, 11, 12, 7, 8, 9
D:\a\indico-client-csharp\indico-client-csharp\IndicoV2.Abstractions\Extensions\SubmissionResult\Exceptions\WrongSubmissionStatusException.cs100%0%0%11, 13, 15
D:\a\indico-client-csharp\indico-client-csharp\IndicoV2.Abstractions\Jobs\Exceptions\JobNotSuccessfulException.cs100%0%0%11, 13, 15
D:\a\indico-client-csharp\indico-client-csharp\IndicoV2.Abstractions\Models\Models\Model.cs100%0%0%5, 6, 7
D:\a\indico-client-csharp\indico-client-csharp\IndicoV2.Abstractions\Models\Models\ModelGroup.cs100%0%0%5, 6, 7, 8
D:\a\indico-client-csharp\indico-client-csharp\IndicoV2.Abstractions\Models\Models\ModelGroupBase.cs100%0%0%5
D:\a\indico-client-csharp\indico-client-csharp\IndicoV2.Abstractions\Models\Models\PredictionJobResult.cs100%0%0%15, 17, 19, 21, 24
D:\a\indico-client-csharp\indico-client-csharp\IndicoV2.Abstractions\Ocr\Models\ExtractionJobResult.cs100%0%0%10
D:\a\indico-client-csharp\indico-client-csharp\IndicoV2.Abstractions\Reviews\Models\Review.cs100%0%0%11, 16, 21, 26, 32, 37, 42, 47, 52
D:\a\indico-client-csharp\indico-client-csharp\IndicoV2.Abstractions\Reviews\Models\Review.cs100%0%0%62
D:\a\indico-client-csharp\indico-client-csharp\IndicoV2.Abstractions\Storage\Models\FileMetadata.cs100%0%0%11, 14, 17, 8
D:\a\indico-client-csharp\indico-client-csharp\IndicoV2.Abstractions\Submissions\Models\AndFilter.cs100%0%0%10
D:\a\indico-client-csharp\indico-client-csharp\IndicoV2.Abstractions\Submissions\Models\SubmissionFilter.cs100%0%0%21, 22
D:\a\indico-client-csharp\indico-client-csharp\IndicoV2.Abstractions\Submissions\Models\FilterConverter.cs0%0%0%17, 17, 17, 20, 21, 21, 21, 23, 25, 25, 25, 27, 29, 29, 29, 31, 33, 33, 33, 35, 35, 35, 37, 37, 37, 39, 40, 41, 42, 43, 44, 46, 46, 46, 48, 50, 50, 50, 52, 54, 54, 54, 56, 57, 58, 59, 60, 62, 62, 62, 64, 65, 66, 67, 68, 70, 72, 72, 72, 74, 75, 76, 77, 80, 80, 80, 82, 83, 84, 85, 87
D:\a\indico-client-csharp\indico-client-csharp\IndicoV2.Abstractions\Submissions\Models\OrFilter.cs100%0%0%10
D:\a\indico-client-csharp\indico-client-csharp\IndicoV2.Abstractions\Submissions\Models\Submission.cs100%0%0%107, 112, 117, 122, 127, 132, 137, 142, 147, 152, 157, 162, 167, 172, 177, 182, 187, 192, 197, 202, 207
D:\a\indico-client-csharp\indico-client-csharp\IndicoV2.Abstractions\Submissions\Models\Submission.cs100%0%0%13, 18, 23, 28, 33, 38, 43
D:\a\indico-client-csharp\indico-client-csharp\IndicoV2.Abstractions\Submissions\Models\SubmissionFilter.cs100%0%0%27, 28, 30, 32, 34, 36, 38, 40, 42
D:\a\indico-client-csharp\indico-client-csharp\IndicoV2.Abstractions\Submissions\Models\Submission.cs100%0%0%51, 56, 61, 66, 71
D:\a\indico-client-csharp\indico-client-csharp\IndicoV2.Abstractions\Submissions\Models\Submission.cs100%0%0%79, 84, 89, 94, 99
D:\a\indico-client-csharp\indico-client-csharp\IndicoV2.Abstractions\Submissions\Models\SubmissionFilter.cs100%0%0%14, 15, 16
D:\a\indico-client-csharp\indico-client-csharp\IndicoV2.Abstractions\Submissions\Models\Submission.cs0%0%0%213, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 241, 241, 242, 242, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 280, 280, 280, 280, 280, 280, 280, 280, 280, 280, 283, 285, 287, 289, 291, 293, 295
D:\a\indico-client-csharp\indico-client-csharp\IndicoV2.Abstractions\Workflows\Models\Workflow.cs100%0%0%10, 11, 12

@Sung96kim Sung96kim requested a review from goatrocks January 6, 2026 20:02
@Sung96kim
Copy link
Author

@goatrocks not sure if im missing anything, mind taking a quick peek? 🙏

{
Status = SubmissionStatus.FAILED
};
var failedSubmissions = await _submissionsClient.ListAsync(new List<int> { submissionId }, new List<int> { _workflowId }, filters, 0, 10);
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

shouldn't filter submissionId here

@Sung96kim
Copy link
Author

IndicoV2.StrawberryShake/Generated/IndicoGqlClient.StrawberryShake.cs does this need to be regenerated?

cursor[bot]

This comment was marked as outdated.

Copy link

@cursor cursor bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Cursor Bugbot has reviewed your changes and found 1 potential issue.

Bugbot Autofix is OFF. To automatically fix reported issues with Cloud Agents, enable Autofix in the Cursor dashboard.

};
}).ToArray() ?? Array.Empty<SubmissionRetry>()
};
}).ToList() ?? new List<ISubmission>();
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Missing null checks for collection elements in Select

Medium Severity

The RetrySubmissionsAsync method iterates over result using Select without checking if individual elements are null. If the GraphQL API returns null elements in the retrySubmissions array or in the nested retries array, accessing properties like r.Status, r.Id, or retry.PreviousStatus will throw a NullReferenceException. This was flagged by the reviewer as "null reference issues" that need to be fixed.

Additional Locations (1)

Fix in Cursor Fix in Web

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants