From 3b804b97c5878192ba1a4e58cb9e2c80a77bbba3 Mon Sep 17 00:00:00 2001 From: agent-db0ec53c058f1326 Date: Thu, 16 Apr 2026 22:01:51 +0200 Subject: [PATCH] build(agent): molt-z#db0ec5 iteration --- .../__init__.py | 5 +++ .../dsl.py | 41 +++++++++++++++++++ tests/test_dsl.py | 15 +++++++ 3 files changed, 61 insertions(+) create mode 100644 signalvault_verifiable_privacy_preservin/dsl.py create mode 100644 tests/test_dsl.py diff --git a/signalvault_verifiable_privacy_preservin/__init__.py b/signalvault_verifiable_privacy_preservin/__init__.py index 7fccc92..13e0676 100644 --- a/signalvault_verifiable_privacy_preservin/__init__.py +++ b/signalvault_verifiable_privacy_preservin/__init__.py @@ -6,6 +6,7 @@ replay, and privacy primitives placeholders. """ from .schema import SignalNode, Edge, Scenario, HedgePlan, AuditLog, PrivacyBudget +from .dsl import LocalProblem, SharedVariables, PlanDelta, AuditLog as DSLAuditLog from .registry import GraphRegistry from .replay import DeterministicReplayEngine from .privacy import SecureAggregator, DPBudget @@ -19,6 +20,10 @@ __all__ = [ "HedgePlan", "AuditLog", "PrivacyBudget", + "LocalProblem", + "SharedVariables", + "PlanDelta", + "DSLAuditLog", "GraphRegistry", "DeterministicReplayEngine", "SecureAggregator", diff --git a/signalvault_verifiable_privacy_preservin/dsl.py b/signalvault_verifiable_privacy_preservin/dsl.py new file mode 100644 index 0000000..b8fe13b --- /dev/null +++ b/signalvault_verifiable_privacy_preservin/dsl.py @@ -0,0 +1,41 @@ +from __future__ import annotations + +from dataclasses import dataclass, field +from typing import Dict, List, Optional + + +@dataclass +class LocalProblem: + id: str + asset: str + objective: str + constraints: Dict[str, object] = field(default_factory=dict) + version: int = 1 + + +@dataclass +class SharedVariables: + contract_id: str + variables: Dict[str, object] = field(default_factory=dict) + version: int = 1 + + +@dataclass +class PlanDelta: + delta: Dict[str, object] + timestamp: int + author: Optional[str] = None + contract_id: Optional[str] = None + privacy_budget: Optional[float] = None + + +@dataclass +class AuditLog: + entries: List[str] = field(default_factory=list) + signer: Optional[str] = None + timestamp: Optional[int] = None + contract_id: Optional[str] = None + + +# Backwards-compat alias for external imports +DSLAuditLog = AuditLog diff --git a/tests/test_dsl.py b/tests/test_dsl.py new file mode 100644 index 0000000..11280ce --- /dev/null +++ b/tests/test_dsl.py @@ -0,0 +1,15 @@ +import time +from signalvault_verifiable_privacy_preservin.dsl import LocalProblem, SharedVariables, PlanDelta, DSLAuditLog + + +def test_basic_dsl_instantiation(): + lp = LocalProblem(id="lp1", asset="ETH", objective="maximize", version=2) + sv = SharedVariables(contract_id="contract-1", variables={"lambda": 0.5}) + pd = PlanDelta(delta={"action": "adjust"}, timestamp=int(time.time()), author="tester", contract_id="c-1") + alog = DSLAuditLog(entries=["created"], signer="tester", timestamp=int(time.time())) + + assert lp.id == "lp1" + assert lp.asset == "ETH" + assert sv.contract_id == "contract-1" + assert pd.timestamp > 0 + assert isinstance(alog.entries, list)