# Performance Report — Cycle 12 **Date**: 2026-06-26 **Cycle**: 12 (AZ-1124 PT-10 gRPC stream perf) **Runner**: `scripts/run-performance-tests.sh` (default: `PERF_REPEAT_COUNT=20`, `PERF_UAV_BATCH_SIZE=10`, `PERF_PT10_SLOW_MS=50`) **Stack**: `docker compose -f docker-compose.yml -f docker-compose.perf.yml up -d --build` **API_URL**: `https://localhost:18980` **Verdict**: **PASS** (11/11 thresholds; exit 0) ## PT-10 (new — AZ-1124) | Metric | p50 | p95 | Threshold | Verdict | |--------|-----|-----|-----------|---------| | first_batch_ms | 43 ms | 48 ms | ≤ 30000 ms | Pass | | total_stream_ms | 43 ms | 48 ms | ≤ 120000 ms | Pass | | slow-consumer | — | — | completes without DeliveryError | Pass | Warm compose volume — iterations 2–20 served cached tiles; iteration 1 cold path 150 ms first batch. ## REST scenarios (PT-01..PT-08) All passed on warm volume. Notable: PT-07 cold p95=106 ms, warm p95=65 ms (warm faster). ## Step 15 fix applied during gate First run failed PT-10: `CreateFromPemFile(api.crt)` rejected cert-only PEM on host-side gRPC channel. Fixed in `GrpcTestHelpers.CreateChannel` — load CA via `X509Certificate2.CreateFromPem(File.ReadAllText(...))`. Re-run green.