mirror of
https://github.com/azaion/satellite-provider.git
synced 2026-06-21 22:11:14 +00:00
18609656f9
Closes the AZ-484 cycle: - retro_2026-05-11.md: 5 patterns identified (code-review-PASS does not imply runtime PASS; spec-authorship under-specifies wire format / test sites; NFR test-spec entries decoupled from runner scripts; pre-existing module doc staleness; pre-existing security Mediums now visible). Top-3 actions ranked by impact, with target rule/skill files and owners. - structure_2026-05-11.md: baseline structural snapshot for future retro deltas (6 components, 12 ProjectReference edges, 0 cycles in import graph, 0 net architecture violations, 1 frozen contract, ~14% contract coverage). - LESSONS.md: header rewritten to describe the two-layer format (deep lessons + 15-entry ring buffer); appended 3 new ring-buffer entries (testing/process/estimation) sourced from this retro. - _autodev_state.md: cycle 2 starting at Step 9 New Task. Co-authored-by: Cursor <cursoragent@cursor.com>
83 lines
5.0 KiB
Markdown
83 lines
5.0 KiB
Markdown
# Structural Snapshot — 2026-05-11 (post-cycle 1, AZ-484)
|
|
|
|
This snapshot is the baseline for future retro deltas. Source of truth: `_docs/02_document/module-layout.md` + on-disk `*.csproj` graph.
|
|
|
|
## Components
|
|
|
|
| Layer | Component | csproj | Public symbols |
|
|
|-------|-----------|--------|----------------|
|
|
| 1 (Foundation) | Common | `SatelliteProvider.Common` | DTOs, Enums (`RegionStatus`, `RoutePointType`, `TileSource` + `TileSourceConverter`), Configs (4), Interfaces, Exceptions, Utils, Imaging |
|
|
| 1 (Foundation) | DataAccess | `SatelliteProvider.DataAccess` | 4 Models, 3 Repositories + 3 interfaces, `DatabaseMigrator`, `DapperEnumTypeHandlers` |
|
|
| 3 (Application) | TileDownloader | `SatelliteProvider.Services.TileDownloader` | `GoogleMapsDownloaderV2`, `TileService`, DI ext. |
|
|
| 3 (Application) | RegionProcessing | `SatelliteProvider.Services.RegionProcessing` | `RegionService`, `RegionProcessingService`, `RegionRequestQueue`, DI ext. |
|
|
| 3 (Application) | RouteManagement | `SatelliteProvider.Services.RouteManagement` | `RouteService`, `RouteProcessingService`, `RouteSummaryWriter`, DI ext. |
|
|
| 4 (API / Entry) | WebApi | `SatelliteProvider.Api` | `Program`, `GlobalExceptionHandler`, `CorsConfigurationValidator`, DTOs, Swagger |
|
|
|
|
**Component count**: 6 (unchanged from cycle 0 baseline)
|
|
|
|
## Cross-Component Import Edges (compile-time `ProjectReference`)
|
|
|
|
| From | To |
|
|
|------|-----|
|
|
| DataAccess | Common |
|
|
| TileDownloader | Common |
|
|
| TileDownloader | DataAccess |
|
|
| RegionProcessing | Common |
|
|
| RegionProcessing | DataAccess |
|
|
| RouteManagement | Common |
|
|
| RouteManagement | DataAccess |
|
|
| WebApi | Common, DataAccess, TileDownloader, RegionProcessing, RouteManagement |
|
|
|
|
**Edge count**: 12 ProjectReference edges (unchanged from cycle 0 baseline). No cross-sibling Layer-3 ProjectReferences (siblings communicate through `Common.Interfaces`).
|
|
|
|
## Source-import sites by component
|
|
|
|
| Importer | Imports from | Site count | Cycle 1 delta |
|
|
|----------|--------------|------------|---------------|
|
|
| DataAccess | `Common.Enums` | 6 (was 5) | +1 — `Models/TileEntity` references `TileSourceConverter.GoogleMapsWireValue` const for the AZ-484 default value |
|
|
| DataAccess | `Common.Configs` | 1 (`MapConfig.DefaultTileSizePixels` in `TileRepository`) | unchanged |
|
|
| DataAccess | `Common.Utils` | 1 (`GeoUtils.*` in `TileRepository`) | unchanged |
|
|
| TileDownloader | `Common.Enums` | 1 (was 0) | +1 — `TileService` references `TileSource` + `TileSourceConverter` (AZ-484) |
|
|
|
|
## Graph properties
|
|
|
|
- **Cycles in component import graph**: 0 (clean DAG — unchanged)
|
|
- **Average ProjectReferences per component**: 12 / 6 = 2.0
|
|
- **Max in-degree**: Common (5 in-edges from DataAccess + 4 Layer-3 components + WebApi)
|
|
- **Max out-degree**: WebApi (5 out-edges)
|
|
|
|
## Architecture violations
|
|
|
|
- **Newly introduced this cycle**: 0 (per code-review batch_25_cycle1_review Phase 7)
|
|
- **Resolved this cycle**: 0
|
|
- **Net delta**: 0 (good)
|
|
- **Outstanding High/Critical from baseline**: see `_docs/02_document/architecture_compliance_baseline.md`
|
|
|
|
## Contracts
|
|
|
|
| Contract | Path | Status | Public API symbols covered |
|
|
|----------|------|--------|----------------------------|
|
|
| tile-storage v1.0.0 | `_docs/02_document/contracts/data-access/tile-storage.md` | **frozen** (this cycle) | `tiles` table schema, `ITileRepository.{InsertAsync, UpdateAsync, GetByTileCoordinatesAsync, GetTilesByRegionAsync}` selection rule, `TileSource` value space |
|
|
|
|
**Contract count**: 1 (was 0 — first frozen contract this cycle).
|
|
**Public-API symbols covered**: storage layer formally specified. The other Common/Interfaces (ITileService, IRegionService, IRouteService, IRegionRequestQueue) and HTTP endpoints remain unspecified.
|
|
**Contract coverage %**: ~14% (1 frozen contract / ~7 candidate contract surfaces). Improvement target for future cycles.
|
|
|
|
## Shared / Cross-Cutting (Common subfolders)
|
|
|
|
| Folder | Used by ≥2 components? | Health |
|
|
|--------|------------------------|--------|
|
|
| Common/DTO | yes (all components) | healthy |
|
|
| Common/Enums | yes (DataAccess, TileDownloader, RegionProcessing, RouteManagement, Tests) | healthy — `TileSource` + `TileSourceConverter` raise utilization vs. cycle 0 |
|
|
| Common/Configs | yes (all components) | healthy |
|
|
| Common/Interfaces | yes (all Layer-3 components implement; WebApi consumes via DI) | healthy |
|
|
| Common/Utils | yes (TileDownloader, RegionProcessing, RouteManagement, DataAccess) | healthy |
|
|
| Common/Exceptions | yes (TileDownloader throws `RateLimitException`) | healthy |
|
|
| Common/Imaging | no — TileGridStitcher used only by RouteManagement (and tests) | **watch** — borderline; if no second consumer emerges by cycle 3, consider relocating to RouteManagement |
|
|
|
|
## Auto-lesson triggers checked
|
|
|
|
- [x] Net Architecture delta this cycle (0) — no `architecture` lesson triggered
|
|
- [x] No structural metric regressed by >20% — no `architecture` / `dependencies` lesson triggered
|
|
- [x] Contract coverage % did not decrease (it increased — went from 0 to 1 frozen contract) — no `architecture` lesson triggered
|