Files
satellite-provider/_docs/06_metrics/structure_2026-05-11.md
T
Oleksandr Bezdieniezhnykh 18609656f9
ci/woodpecker/push/01-test Pipeline was successful
ci/woodpecker/push/02-build-push Pipeline was successful
[AZ-484] Cycle 1 Step 17 Retrospective: report + structural snapshot
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>
2026-05-11 10:08:47 +03:00

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 architecture lesson triggered
  • No structural metric regressed by >20% — no architecture / dependencies lesson triggered
  • Contract coverage % did not decrease (it increased — went from 0 to 1 frozen contract) — no architecture lesson triggered