diff --git a/mercurymesh_federated_reproducible_marke/__init__.py b/mercurymesh_federated_reproducible_marke/__init__.py index 3e2fb78..68858f2 100644 --- a/mercurymesh_federated_reproducible_marke/__init__.py +++ b/mercurymesh_federated_reproducible_marke/__init__.py @@ -6,9 +6,11 @@ Public API (minimal): - PlanDelta - AuditLog - FederatedCoordinator for simple cross-venue signal aggregation +- GraphOfContracts Registry (minimal MVP wiring for adapters and contract schemas) """ from .core import MarketStateSnapshot, SharedSignals, PlanDelta, AuditLog, FederatedCoordinator +from .registry import GraphOfContractsRegistry # type: ignore __all__ = [ "MarketStateSnapshot", @@ -16,4 +18,5 @@ __all__ = [ "PlanDelta", "AuditLog", "FederatedCoordinator", + "GraphOfContractsRegistry", ] diff --git a/mercurymesh_federated_reproducible_marke/registry.py b/mercurymesh_federated_reproducible_marke/registry.py new file mode 100644 index 0000000..a4d8aed --- /dev/null +++ b/mercurymesh_federated_reproducible_marke/registry.py @@ -0,0 +1,52 @@ +"""Minimal Graph-of-Contracts registry for MercuryMesh MVP. + +This module provides a tiny, in-process registry to model contract mappings +and adapter schemas without exposing raw data. It is intentionally small and +extensible, suitable for MVP wiring as you add two starter adapters. +""" + +from __future__ import annotations + +from dataclasses import dataclass, asdict +from typing import Dict, Optional, List, Any + + +@dataclass +class ContractSpec: + """Specification for a contract primitive in MercuryMesh. + + - name: canonical contract name (e.g., "MarketState", "Delta") + - version: contract version string + - schema: optional metadata describing the contract's data shape + """ + + name: str + version: str + schema: Dict[str, Any] | None = None + + def to_dict(self) -> Dict[str, Any]: + return asdict(self) + + +class GraphOfContractsRegistry: + """A lightweight in-process registry for contract specs and adapter schemas.""" + + def __init__(self) -> None: + self._registry: Dict[str, ContractSpec] = {} + + def register_contract(self, spec: ContractSpec) -> None: + """Register or update a contract spec by its name as the key.""" + self._registry[spec.name] = spec + + def get_contract(self, name: str) -> Optional[ContractSpec]: + return self._registry.get(name) + + def list_contracts(self) -> List[str]: + return sorted(self._registry.keys()) + + def to_dict(self) -> Dict[str, Dict[str, Any]]: + return {name: spec.to_dict() for name, spec in self._registry.items()} + + +# Public, module-level registry instance for quick usage patterns in MVP wiring +registry = GraphOfContractsRegistry()