from __future__ import annotations from dataclasses import dataclass, field from typing import Any, Dict, List @dataclass class LocalProblem: """Per-asset planning objective and constraints. - assets: mapping from asset_id to asset-specific objectives. - variables: free-form variables used by the planner (e.g., timing, routing). - constraints: list of simple constraint descriptors. - risk_budget: a rough budget to limit risk (abstracted for this MVP). """ asset_objectives: Dict[str, Dict[str, Any]] = field(default_factory=dict) variables: Dict[str, Any] = field(default_factory=dict) constraints: List[str] = field(default_factory=list) risk_budget: float = 0.0 @dataclass class SafetyContracts: """Pre/post conditions and risk terms for safety proofs.""" pre_conditions: List[str] = field(default_factory=list) post_conditions: List[str] = field(default_factory=list) safety_budget: float = 0.0 collision_envelope: float = 0.0 cost_of_violation: float = 0.0 @dataclass class PrivacyContracts: """Minimal data-exposure policies for privacy.""" allowed_publishers: List[str] = field(default_factory=list) aggregate_signals: bool = True per_message_privacy_budget: float = 0.0 @dataclass class PlanDelta: """Compact representation of plan changes with metadata for auditability.""" delta: Dict[str, Any] = field(default_factory=dict) version: int = 0 metadata: Dict[str, Any] = field(default_factory=dict) @dataclass class PoeticCert: """Compact human+machine verifiable certificate for quick triage. - invariants: key safety/resource invariants (collision, energy envelopes) - summary: short natural-language summary for on-call triage - issued_by: identifier of the issuer (device or service) - timestamp: optional ISO timestamp string """ invariants: Dict[str, Any] = field(default_factory=dict) summary: str = "" issued_by: str = "" timestamp: str = "" @dataclass class ReplayBundle: """Signed, Merkle-linked plan trace bundle used for deterministic replay. - entries: list of logged entries (dicts) - signer: identifier of signer - merkle_root: compact hex digest representing the bundle contents - nonce: optional replay nonce """ entries: List[Dict[str, Any]] = field(default_factory=list) signer: str = "" merkle_root: str = "" nonce: str = ""