[AZ-588] Close cycle 1 retrospective; bootstrap LESSONS.md

Autodev cycle 1 retro: 5 batches, 12 tasks, 48 SP delivered.
Architecture baseline F4 partial -> resolved (Entities/ +
DTOs/Requests/ removed); net architecture delta -1. Zero blockers,
zero High/Critical findings, zero auto-fix escalations.

Artifacts:
- _docs/06_metrics/retro_2026-05-16.md  (first retro, no trend yet)
- _docs/06_metrics/structure_2026-05-16.md  (baseline snapshot)
- _docs/LESSONS.md  (3 entries: tooling, process, estimation)

State: cycle 1 -> cycle 2 boundary; Step 9 (New Task) is next.
Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
Oleksandr Bezdieniezhnykh
2026-05-16 14:32:22 +03:00
parent 039563dc58
commit 040b1f85f8
4 changed files with 209 additions and 3 deletions
+53
View File
@@ -0,0 +1,53 @@
# Structural Snapshot — 2026-05-16
**Purpose**: First structural snapshot for this codebase. Future retrospectives compute deltas against this file.
## Component Inventory
| # | Component | Owns (representative) | Imports from |
|---|-----------|------------------------|--------------|
| 1 | `01_vehicle_catalog` | `Controllers/VehiclesController.cs`, `Services/VehicleService.cs`, `DTOs/{Create,Update,GetVehicles,SetDefault}*.cs` | `04_persistence`, `05_identity`, `06_http_conventions` |
| 2 | `02_mission_planning` | `Controllers/MissionsController.cs`, `Services/{Mission,Waypoint}Service.cs`, mission/waypoint DTOs | `04_persistence`, `05_identity`, `06_http_conventions`, `01_vehicle_catalog` (DB FK existence) |
| 3 | `04_persistence` | `Database/AppDataConnection.cs`, `Database/DatabaseMigrator.cs`, 7 entities under `Database/Entities/`, persisted enums under `Enums/` | (none internal) |
| 4 | `05_identity` | `Auth/JwtExtensions.cs` (single `"FL"` policy) | (none internal) |
| 5 | `06_http_conventions` | `Middleware/*` (exception → ProblemDetails mapper, etc.) | (none internal) |
| 6 | `07_host` | `Program.cs`, `GlobalUsings.cs`, `Infrastructure/{ConfigurationResolver,CorsConfigurationValidator}.cs` | Every other component |
## Layout Convention
**Custom (layer-organized).** Not per-component-directory. Each component's `Owns` glob is a *set of file paths spanning multiple top-level directories* (`Controllers/`, `Services/`, `DTOs/`, `Enums/`, `Database/`, `Auth/`, `Middleware/`).
This is the established baseline and is **intentional** per `_docs/02_document/module-layout.md` § "Layout Rules". Future refactors that introduce per-component subdirectories would be a structural deviation worth surfacing in the next snapshot delta.
## Graph Metrics
| Metric | Value |
|--------|-------|
| Component count | 6 |
| Cross-component import edges | 8 (`01→04`, `01→05`, `01→06`, `02→04`, `02→05`, `02→06`, `02→01`, `07→all`) |
| Cycles in the import graph | **0** |
| Avg imports per component (excluding `07_host`) | ~2.2 |
| Components imported by `07_host` | 5 (all non-host) — expected for a composition root |
| Public-API contracts directory present | **No** (`_docs/02_document/contracts/` does not exist; this project documents Public API inline in each component's `description.md`) |
## Architecture Baseline State (entering cycle 2)
Source: `_docs/02_document/architecture_compliance_baseline.md` (4 findings F1F4 at cycle-1 start).
| Finding | Severity | Cycle-1 outcome |
|---------|----------|-----------------|
| F1 | (see baseline doc) | unchanged — carried into cycle 2 |
| F2 | (see baseline doc) | unchanged — carried into cycle 2 |
| F3 | (see baseline doc) | unchanged — carried into cycle 2 |
| F4 (Low Maintainability — empty scaffolding dirs) | Low | **Partially resolved**: `Entities/` and `DTOs/Requests/` removed via AZ-588 (batch 05). `Infrastructure/` retained — now legitimately used by `07_host` (`Infrastructure/ConfigurationResolver.cs`, `Infrastructure/CorsConfigurationValidator.cs`). Per the AZ-588 spec the third originally-empty dir was explicitly out of scope. |
## Open Architecture Tickets
- AZ-587 (Epic) — Refactor 02-baseline-cleanup. Single child AZ-588 closed today; epic can close once cycle 2 verifies no regression.
## Notes for Next Snapshot
- Re-run this snapshot at the end of every cycle.
- If `_docs/02_document/contracts/` is added in a future cycle, record contract count + contracts-per-public-API ratio.
- If F1F3 from the architecture baseline are addressed in a future cycle, log the resolution in this file's "Architecture Baseline State" table.
- If the layout convention changes (e.g., one component is split into a `src/01_vehicle_catalog/` subdirectory), flag it as a structural deviation in the next snapshot.