[AZ-1074] [AZ-1075] Cycle 9 closeout: security, tests, metrics
ci/woodpecker/push/01-test Pipeline failed
ci/woodpecker/push/02-build-push unknown status

Resolve F-AZ1074-1/2 (collection caps, generic gRPC internal errors).
Standalone integration compose stack, docs, security audit, perf and retro.

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
Oleksandr Bezdieniezhnykh
2026-06-25 17:32:14 +03:00
parent 7633134a8a
commit 7ed780b063
22 changed files with 618 additions and 40 deletions
@@ -214,6 +214,10 @@ public sealed class RouteTileDeliveryOrchestrator
await sink.WriteCompleteAsync(delivered, skippedByClient, serverFiltered, cancellationToken);
}
private const int MaxWaypoints = 500;
private const int MaxGeofencePolygons = 50;
private const int MaxClientTiles = 5000;
private void ValidateJob(RouteTileDeliveryJob job)
{
if (job.RouteId == Guid.Empty)
@@ -226,6 +230,27 @@ public sealed class RouteTileDeliveryOrchestrator
throw new ArgumentException("Route must have at least 2 waypoints", nameof(job));
}
if (job.Waypoints.Count > MaxWaypoints)
{
throw new ArgumentException(
$"waypoints must contain at most {MaxWaypoints} entries",
nameof(job));
}
if (job.GeofenceVertices.Count > MaxGeofencePolygons)
{
throw new ArgumentException(
$"geofences must contain at most {MaxGeofencePolygons} polygons",
nameof(job));
}
if (job.ClientTiles.Count > MaxClientTiles)
{
throw new ArgumentException(
$"client_tiles must contain at most {MaxClientTiles} entries",
nameof(job));
}
for (var i = 0; i < job.Waypoints.Count; i++)
{
var (lat, lon) = job.Waypoints[i];