chore: WIP pre-implement cycle 14 baseline

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
Oleksandr Bezdieniezhnykh
2026-06-26 16:13:37 +03:00
parent 50d4a76be3
commit 80ef5608f1
33 changed files with 619 additions and 47 deletions
@@ -0,0 +1,37 @@
# 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 220 warm cached.
@@ -0,0 +1,48 @@
# Retrospective — Cycle 13 (2026-06-26)
**Tasks**: AZ-1126 (capturedAt DateTimeOffset, 2 SP). **1 task, 2 SP, 1 batch.**
**Mode**: cycle-end. Step 16.5 (Release) **skipped** (no release harness).
**Previous retro**: `retro_2026-06-26_cycle12.md`
## Implementation Summary
| Metric | Cycle 13 | Δ vs cycle 12 |
|--------|----------|---------------|
| Tasks implemented | **1** | unchanged |
| Total complexity delivered | **2 SP** | -1 SP |
| Blocked tasks | **0** | unchanged |
| Auto-fix attempts | **1** (filter message propagation) | new |
## Quality
| Gate | Result |
|------|--------|
| Code review | PASS_WITH_WARNINGS (batch_01_cycle13) |
| Step 11 full suite | **PASS** (pre-verified in Step 10) |
| Step 14 security | **PASS** (delta) — F-AZ810-2 **resolved** |
| Step 15 perf | **PASS** 11/11 (first run failed: stack not up) |
| Step 16 deploy | **PASS**`deploy_cycle13.md` |
## Cycle 13 delta
- **F-AZ810-2 closed** — cycle 12 retro Action #1 shipped; `DateTimeOffset` + strict converter eliminates `DateTimeKind` ambiguity on UAV upload path.
- **Filter regression caught in batch** — generic `JsonException` handler initially masked converter diagnostics; fixed by propagating exception message.
- **Security finding → task → closure** — 2 SP dedicated cycle resolved a multi-cycle Low carry-over without scope creep.
## Comparison with cycle 12 retro actions
| Cycle 12 action | Cycle 13 outcome |
|-----------------|------------------|
| F-AZ810-2 DateTimeOffset (~1 SP) | **Done** (AZ-1126) |
| Align `environment.md` integration command | **Open** — not scheduled |
| PT-09 shell harness promotion | **Open** — optional |
## Top 3 Improvement Actions (cycle 14 candidates)
1. **D-AZ795-1** — bump FluentValidation 12.0.0 → 12.1.1 (~1 SP) — sole remaining Low prod dependency finding
2. **Align `environment.md` integration command** with `run-tests.sh` (`docker-compose.tests.yml` only) (~0.5 SP) — third-cycle carry-over
3. **Perf gate preflight** — document or script-check that perf compose stack is up before PT-01 (~0.5 SP) — cycle 13 first-run exit 7
## Cycle 13 Verdict
**Successful security-closure cycle** — AZ-1126 delivered a focused type migration with full gate coverage (security + perf + deploy). One auto-fix in the validation filter; no architecture drift.
@@ -0,0 +1,28 @@
# Structural Snapshot — 2026-06-26 (post-cycle 13, capturedAt DateTimeOffset)
Cycle 13 delta against `structure_2026-06-25_cycle10.md` (no cycle 11/12 structure snapshots on disk). Source: `_docs/02_document/module-layout.md` + on-disk `*.csproj` graph.
## Projects
| Layer | csproj | Cycle 13 delta |
|-------|--------|----------------|
| 2 (Common) | `SatelliteProvider.Common` | `UtcOffsetRequiredDateTimeOffsetConverter` + `UavTileMetadata.CapturedAt` type change |
| 4 (API) | `SatelliteProvider.Api` | Validator + `UavUploadValidationFilter` message propagation |
| 3 (Application) | `SatelliteProvider.Services.TileDownloader` | Quality gate + upload handler UTC comparisons |
| 6 (Tests) | `SatelliteProvider.Tests`, `SatelliteProvider.IntegrationTests` | Converter + UAV validation tests |
**Project count**: **10** (unchanged).
## Cross-Project Import Edges
**Total ProjectReference edges**: **23** (unchanged). **Import cycles**: 0.
## Contract coverage
| Surface | Contract | Cycle 13 delta |
|---------|----------|----------------|
| UAV upload metadata | `uav-tile-upload.md` v1.2.1 | patch — explicit UTC offset on `capturedAt` |
| gRPC `DeliverRouteTiles` | `tile_provision.proto` | unchanged |
| REST error envelope | `error-shape.md` v1.0.1 | unchanged |
**gRPC perf coverage**: PT-10 verified (cycle 12); cycle 13 did not regress.