# aerocontext-core

Provider-neutral aeronautical-context model and the pluggable `ContextProvider`
contract. Defines the domain types (briefings, products, navdata snapshots,
NOTAMs, TFRs, route alerts, ownship, commands) and the capability traits every
adapter implements, the `Provenance` envelope every agent-facing answer
carries (retrieval time, worst-case freshness, partial flag, navdata cycle
and hash), plus `compare` for cross-source reconciliation with
per-source attribution. The foundation crate of the workspace; carries no
transport dependencies.

Every provider implements the `ContextProvider` identity trait, then one
capability trait per kind of context it serves (`WeatherBriefingProvider`,
`OwnshipStatusProvider`, `ControlCommandProvider`, and the NOTAM, TFR, and
route-alert provider traits). Splitting by capability lets a source implement
only what it offers and a consumer depend only on what it needs.

```rust
let briefing = provider.area_briefing(&request).await?;   // AreaBriefingRequest
let report = compare(&briefings);                         // who said what, where they disagree
```

Identifier-based areas resolve against a `NavDataSnapshot` tagged with
`NavDataCycle`; this crate models cycle math and authority but does not fetch or
cache source files. Upstream credentials are held in a redacting `Secret` type.

Part of the [aerocontext](https://github.com/luofang34/v99n62) workspace — see
the workspace README.

Licensed under AGPL-3.0-only.
