83 lines
2.4 KiB
Python
83 lines
2.4 KiB
Python
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 = ""
|