Captures the post-implementation autodev gates for AZ-484 multi-source tile storage: - Step 12 (Test-Spec Sync): added 7 AC rows (AZ-484 AC-1..AC-7) and a PT-07 NFR row to traceability-matrix.md; added PT-07 scenario to performance-tests.md. - Step 13 (Update Docs): refreshed data_model.md (tiles columns + indexes + selection rule + UPSERT contract + migrations 012/013), module-layout.md (Common/Enums section with L-001 guidance, DataAccess imports-from now lists 6 sites), 6 module / component docs to reflect the new repo signatures, source/captured_at fields, and Dapper enum bypass workaround. ripple_log_cycle1.md records zero out-of-scope ripple. - Step 14 (Security Audit): PASS_WITH_WARNINGS - 0 Critical, 0 High, 5 Medium, 5 Low. AZ-484 itself added zero new findings. Hardening items (Postgres default creds, .env in build context, GMaps key rotation, ASP.NET Core 8.0.21 -> 8.0.25, rate limiter) recorded for separate tickets. - Step 15 (Performance Test): all PT-01..PT-07 scenarios Unverified (non-blocking); PT-07 baseline-comparison harness deferred to a leftover for next cycle. - Step 16 (Deploy): cycle deploy report covering migration safety, rollback path, post-deploy verification, security caveats. Co-authored-by: Cursor <cursoragent@cursor.com>
2.8 KiB
Performance Test Scenarios
PT-01: Single Tile Download Latency
Trigger: GET /api/satellite/tiles/latlon (uncached tile) Load: 1 request Expected: Response within 30s (includes Google Maps round-trip) Pass criterion: Response time < 30000ms; HTTP 200
PT-02: Cached Tile Retrieval Latency
Trigger: GET /api/satellite/tiles/latlon (cached tile) Load: 1 request Expected: Response within 500ms (DB lookup + response) Pass criterion: Response time < 500ms; HTTP 200
PT-03: Region Processing Throughput (200m)
Trigger: POST /api/satellite/request with 200m region Load: 1 region Expected: Complete processing within 60s Pass criterion: status="completed" within 60s; tiles downloaded > 0
PT-04: Region Processing Throughput (500m with stitch)
Trigger: POST /api/satellite/request with 500m region + stitch Load: 1 region Expected: Complete processing within 120s (more tiles + stitching) Pass criterion: status="completed" within 120s; stitched image exists
PT-05: Concurrent Region Requests
Trigger: 5 simultaneous POST /api/satellite/request (different coordinates) Load: 5 concurrent requests Expected: All queued immediately; all complete within 5 minutes Pass criterion: All 5 regions reach status="completed"; queue does not reject
PT-06: Route Point Interpolation Speed
Trigger: POST /api/satellite/route with 20 points Load: 1 request Expected: Route created (with interpolation) within 5s Pass criterion: HTTP 200 response within 5000ms; totalPoints > 20
PT-07: GetTilesByRegionAsync Latency Post-AZ-484 (multi-source baseline)
Trigger: TileRepository.GetTilesByRegionAsync exercised via POST /api/satellite/request (200m region, zoom 18) against a tiles table seeded with the pre-AZ-484 data shape (single-source rows backfilled to source='google_maps').
Load: 1 request, repeated 20 times to get a stable distribution.
Expected: 95th-percentile latency must not regress more than 10% vs the pre-AZ-484 baseline measured against PT-03 / PT-04. The new 5-column unique index idx_tiles_unique_location_source covers the same (latitude, longitude, tile_zoom, tile_size_meters) filter columns as the pre-AZ-484 4-column index, so no regression is expected.
Pass criterion: p95(GetTilesByRegionAsync) ≤ 1.10 × pre-AZ-484 p95 baseline.
Source: AZ-484 NFR (Performance) — _docs/02_tasks/done/AZ-484_multi_source_tile_storage.md § Non-Functional Requirements.
Note: This NFR is recorded for tracking. Active enforcement (running PT-07 against a real workload and comparing) is deferred to autodev Step 15 (Performance Test) when a baseline run is available. Until then, the integration test MostRecentAcrossSourcesSelection_AZ484_AC2 provides correctness coverage for the new query shape.