mirror of
https://github.com/azaion/autopilot.git
synced 2026-06-21 08:31:10 +00:00
e56d428753
AZ-649 mission_executor telemetry forwarding: - shared::models::telemetry::UavTelemetry canonical model - TelemetryForwarder with atomic ArcSwap snapshot + 3 lossy tokio::sync::broadcast channels (MissionExecutor, ScanController, MavlinkUplink) + per-consumer drop counters - MavlinkProjection::from_mavlink for HEARTBEAT/GLOBAL_POSITION_INT/ ATTITUDE/SYS_STATUS - spawn_mavlink_pump bridges mavlink_layer into the forwarder at the binary edge AZ-674 vlm_client schema validation + model_version tracking: - AssessmentParser owns schema validation + model-version state - wire::read_response_raw splits raw bytes from parsing so invalid payloads can be logged size-capped - VlmStatus gains an Inconclusive variant; exhaustive-match test guards downstream consumers - VlmPipelineStatus mirrors the new variant in shared::models::poi AZ-667 mapobjects_store hydrate + pending logs + cascade: - SyncState enum aligned with description.md (FreshBoot, Synced, CachedFallback, Degraded, Failed) - Store::hydrate(MapObjectsBundle) replaces in-memory map atomically; freshness=Stale -> CachedFallback - classify() + end_of_pass append MapObjectObservation events to pending_observations (New/Moved/Existing/RemovedCandidate) - apply_decline + LocalAppended ignored items append to pending_ignored - drain_pending() returns and clears both logs - cascade_mission(id) purges by_cell + IgnoredSet + pending logs - Health surface reports sync_state, pending_obs, pending_ign Co-authored-by: Cursor <cursoragent@cursor.com>
52 lines
1.3 KiB
Rust
52 lines
1.3 KiB
Rust
//! `POI` — per `data_model.md §3 Decision entities`.
|
|
|
|
use chrono::{DateTime, Utc};
|
|
use serde::{Deserialize, Serialize};
|
|
use uuid::Uuid;
|
|
|
|
use super::tier2::Tier2Evidence;
|
|
use super::vlm::VlmStatus;
|
|
|
|
#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
|
|
#[serde(rename_all = "snake_case")]
|
|
pub enum VlmPipelineStatus {
|
|
NotRequested,
|
|
Pending,
|
|
Ok,
|
|
Inconclusive,
|
|
Timeout,
|
|
SchemaInvalid,
|
|
IpcError,
|
|
Disabled,
|
|
}
|
|
|
|
impl From<VlmStatus> for VlmPipelineStatus {
|
|
fn from(s: VlmStatus) -> Self {
|
|
match s {
|
|
VlmStatus::Ok => Self::Ok,
|
|
VlmStatus::Inconclusive => Self::Inconclusive,
|
|
VlmStatus::Timeout => Self::Timeout,
|
|
VlmStatus::SchemaInvalid => Self::SchemaInvalid,
|
|
VlmStatus::IpcError => Self::IpcError,
|
|
VlmStatus::Disabled => Self::Disabled,
|
|
}
|
|
}
|
|
}
|
|
|
|
#[derive(Debug, Clone, Serialize, Deserialize)]
|
|
pub struct Poi {
|
|
pub id: Uuid,
|
|
pub confidence: f32,
|
|
pub mgrs: String,
|
|
pub class: String,
|
|
pub class_group: String,
|
|
pub source_detection_ids: Vec<Uuid>,
|
|
pub enqueued_at: DateTime<Utc>,
|
|
pub priority: f32,
|
|
pub decline_suppressed: bool,
|
|
pub vlm_status: VlmPipelineStatus,
|
|
#[serde(skip_serializing_if = "Option::is_none")]
|
|
pub tier2_evidence: Option<Tier2Evidence>,
|
|
pub deadline: DateTime<Utc>,
|
|
}
|