# Performance Report — Cycle 13

**Date**: 2026-06-26
**Cycle**: 13 (AZ-1126 capturedAt DateTimeOffset)
**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)

## Notes

First perf attempt failed at PT-01 (exit 7) because the perf stack was not running — resolved by starting the compose overlay before re-run.

## REST scenarios (PT-01..PT-08)

| Scenario | Result | Key metric |
|----------|--------|------------|
| PT-01 cold tile | Pass | 1519 ms |
| PT-02 cached tile | Pass | 230 ms |
| PT-03 region 200m | Pass | 2433 ms |
| PT-04 region 500m stitch | Pass | 2158 ms |
| PT-05 concurrent regions | Pass | 2378 ms |
| PT-06 route create | Pass | 203 ms |
| PT-07 cold/warm | Pass | warm p95 54 ms vs cold 2148 ms |
| PT-08 UAV batch | Pass | batch p95 225 ms |

AZ-1126 does not change perf probe payloads (PT-08 still uses offset-aware `capturedAt` from fixture generator).

## PT-10 (gRPC stream)

| Metric | p50 | p95 | Threshold | Verdict |
|--------|-----|-----|-----------|---------|
| first_batch_ms | 43 ms | 63 ms | ≤ 30000 ms | Pass |
| total_stream_ms | 43 ms | 64 ms | ≤ 120000 ms | Pass |
| slow-consumer | — | — | completes without DeliveryError | Pass |

Iteration 1 cold path ~3950 ms first batch (empty volume); iterations 2–20 warm cached.
