Guidance for AI coding agents and contributors working in this repository.
GeoJSON model types plus JSON converters for Newtonsoft.Json and System.Text.Json, published to nuget.org as three packages:
| Package | Contents |
|---|---|
Appy.Spatial.GeoJSON |
Model: Feature, FeatureCollection, geometries, Crs, BoundingBox |
Appy.Spatial.GeoJSON.Newtonsoft |
FeatureConverter, GeometryConverter, JsonSerializerSettings.UseGeoJsonConverters() |
Appy.Spatial.GeoJSON.TextJson |
FeatureConverter, GeometryConverter, JsonSerializerOptions.UseGeoJsonConverters() |
Architecture and CI: docs/Architecture.md.
dotnet tool restore # Cake, MinVer CLI, gpr
dotnet cake # Default target: Clean, Build, Test, Package (.artifacts/)
dotnet test src/Appy.Spatial.GeoJSON.slnx
dotnet test src/Appy.Spatial.GeoJSON.slnx --filter "FullyQualifiedName~SerialisationTests.ShouldRoundTripPoint"build.cakebuilds the projects listed inconfig.yml(Type: PackageorType: Test); add new projects there.- Cake builds treat all warnings as errors.
PublishandPublish-Package-*targets push to nuget.org and GitHub Packages. They run only in GitHub Actions; never run them locally.
- Central package management: versions live in
src/Directory.Packages.props;PackageReferenceitems carry noVersion. Framework-specific versions use aConditionon$(TargetFramework). - Shared metadata: package info, Source Link settings (built into the SDK) and MinVer are in
src/Directory.Build.props. - Versioning: MinVer derives the version from git tags (
2.0.0). No version is stored in files. - Package validation:
dotnet packchecks each package against the last release (PackageValidationBaselineVersioninsrc/Directory.Build.targets). API breaks fail the build. - Tests: xUnit v3 + FluentAssertions, run on
net10.0andnet8.0. Every geometry round-trips through both serializers, as the base type and the concrete type, bare and inside aFeature. Keep both converter packages in step. - Package source:
nuget.configrestores from nuget.org only. - Target frameworks are set per
.csproj; the SDK is pinned inglobal.json. - Style:
.editorconfig(4 spaces, 2 for XML/JSON/YAML, CRLF). File-scoped namespaces. - Public repo: no secrets, internal hostnames or private feed URLs in code, docs or commits.
- Branch:
feat/<desc>,fix/<desc>,docs/<desc>. - Commits: conventional commits, one line, e.g.
feat(net8): add net8 and drop support for net7. See CONTRIBUTING.md.
- docs/Architecture.md: overview, CI and release flow, plans
- docs/plans/: implementation plans