merge: external-system retry policy end-to-end (register row 27) — MaxRetries/RetryDelay now travel artifact→gRPC→site schema→S&F enqueue, CLI --max-retries/--retry-delay-seconds, ArtifactDiff compares them

This commit is contained in:
Joseph Doherty
2026-08-15 17:56:21 -04:00
28 changed files with 1036 additions and 453 deletions
@@ -506,7 +506,9 @@ public static class SiteCommandDtoMapper
AuthType = artifact.AuthType,
AuthConfiguration = OrEmpty(artifact.AuthConfiguration),
MethodDefinitionsJson = OrEmpty(artifact.MethodDefinitionsJson),
TimeoutSeconds = artifact.TimeoutSeconds
TimeoutSeconds = artifact.TimeoutSeconds,
MaxRetries = artifact.MaxRetries,
RetryDelay = Duration.FromTimeSpan(artifact.RetryDelay)
};
}
@@ -523,7 +525,9 @@ public static class SiteCommandDtoMapper
dto.AuthType,
NullIfEmpty(dto.AuthConfiguration),
NullIfEmpty(dto.MethodDefinitionsJson),
dto.TimeoutSeconds);
dto.TimeoutSeconds,
dto.MaxRetries,
dto.RetryDelay?.ToTimeSpan() ?? TimeSpan.Zero);
}
/// <summary>Projects a <see cref="DatabaseConnectionArtifact"/> onto the wire.</summary>
@@ -224,6 +224,11 @@ message ExternalSystemArtifactDto {
string auth_configuration = 4; // empty string represents null
string method_definitions_json = 5; // empty string represents null
int32 timeout_seconds = 6;
// Store-and-Forward retry policy for this system's cached calls. Additive (fields 7-8);
// a pre-existing site decodes them as 0/absent, which is exactly the "unset" value that
// makes the engine defaults apply — i.e. the old behaviour.
int32 max_retries = 7;
google.protobuf.Duration retry_delay = 8;
}
message DatabaseConnectionArtifactDto {
File diff suppressed because it is too large Load Diff