idea19-missionledger-verifi.../missionledger/dsl.py

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 = ""