mirror of
https://github.com/azaion/satellite-provider.git
synced 2026-06-21 14:31:13 +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>
5.0 KiB
5.0 KiB
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
- Net Architecture delta this cycle (0) — no
architecturelesson triggered - No structural metric regressed by >20% — no
architecture/dependencieslesson triggered - Contract coverage % did not decrease (it increased — went from 0 to 1 frozen contract) — no
architecturelesson triggered