dita_v2(zinc): account-truth plane API — publish/read/wait_on/notify_account

Formalizes the CEX-010 E-feed account plane (protocol + InMemoryZincPlane +
real plane). This code flew 33h on UV-PRIME flight-1 via the vendored copy
(T0-DEVIATION mid-edit vendoring) but was never committed upstream — the
2026-07-11 clean vendor_sync regressed it and broke the E-feed at boot
(AttributeError publish_account). Committing the flight-proven bytes closes
the vendor-law gap. Authorship: pre-existing WIP in /mnt working tree
(T0-era, likely codex), committed verbatim by Fable for vendor integrity.
This commit is contained in:
Codex
2026-07-11 22:46:33 +02:00
parent 7a512544b7
commit df40e62104
2 changed files with 99 additions and 10 deletions

View File

@@ -16,7 +16,7 @@ import struct
import sys
import threading
from .contracts import KernelIntent, TradeSide, TradeSlot, TradeStage, VenueOrder, VenueOrderStatus, VenueTelemetrySnapshot
from .contracts import AccountStateSnapshot, KernelIntent, TradeSide, TradeSlot, TradeStage, VenueOrder, VenueOrderStatus, VenueTelemetrySnapshot
from .control import KernelControlSnapshot
_ZINC_ADAPTER_PATH = Path(__file__).resolve().parents[3] / "zinc" / "adapters" / "python"
@@ -185,6 +185,7 @@ class RealZincPlane:
self.state_name = f"{base}_state"
self.control_name = f"{base}_control"
self.venue_name = f"{base}_venue"
self.account_name = f"{base}_account"
self._intent_seq = 0
self._state_seq = 0
self._control_seq = 0
@@ -195,12 +196,16 @@ class RealZincPlane:
self._intent_cache: List[Dict[str, Any]] = []
self._control_cache = KernelControlSnapshot()
self._venue_cache = VenueTelemetrySnapshot()
self._account_cache = AccountStateSnapshot()
self._account_seq = 0
if create:
self.intent_region = SharedRegion.create(self.intent_name, intent_capacity)
self.state_region = SharedRegion.create(self.state_name, state_capacity)
self.control_region = SharedRegion.create(self.control_name, control_capacity)
self.venue_region = SharedRegion.create(self.venue_name, control_capacity)
self.account_region = SharedRegion.create(self.account_name, control_capacity)
self._write_region(self.control_region, self._control_seq, {"control": self._control_cache.as_dict()})
self._write_region(self.account_region, self._account_seq, {"account": self._account_cache.as_dict()})
self._write_region(
self.state_region,
self._state_seq,
@@ -213,10 +218,12 @@ class RealZincPlane:
self.state_region = SharedRegion.open(self.state_name)
self.control_region = SharedRegion.open(self.control_name)
self.venue_region = SharedRegion.open(self.venue_name)
self.account_region = SharedRegion.open(self.account_name)
control_payload = _decode_packet(self.control_region.as_buffer())
state_payload = _decode_packet(self.state_region.as_buffer())
intent_payload = _decode_packet(self.intent_region.as_buffer())
venue_payload = _decode_packet(self.venue_region.as_buffer())
account_payload = _decode_packet(self.account_region.as_buffer())
if isinstance(control_payload.get("control"), dict):
self._control_cache = KernelControlSnapshot(**control_payload["control"])
if isinstance(state_payload.get("slots"), list):
@@ -228,12 +235,15 @@ class RealZincPlane:
self._intent_cache = list(intent_payload["items"])
if isinstance(venue_payload.get("venue"), dict):
self._venue_cache = _venue_from_payload(venue_payload["venue"])
if isinstance(account_payload.get("account"), dict):
self._account_cache = _account_from_payload(account_payload["account"])
def close(self) -> None:
self.intent_region.close()
self.state_region.close()
self.control_region.close()
self.venue_region.close()
self.account_region.close()
def publish_intent(self, intent: KernelIntent) -> None:
with self._lock:
@@ -315,6 +325,26 @@ class RealZincPlane:
def notify_venue(self) -> None:
self.venue_region.notify()
def publish_account(self, snapshot: AccountStateSnapshot) -> None:
with self._lock:
self._account_seq += 1
self._account_cache = snapshot
self._write_region(self.account_region, self._account_seq, {"account": snapshot.as_dict()})
def read_account(self) -> AccountStateSnapshot:
payload = _decode_packet(self.account_region.as_buffer())
acct = payload.get("account") if isinstance(payload, dict) else None
if not isinstance(acct, dict):
return self._account_cache
self._account_cache = _account_from_payload(acct)
return self._account_cache
def wait_on_account(self, timeout_ms: int = 1000) -> bool:
return bool(self.account_region.wait(timeout_ms))
def notify_account(self) -> None:
self.account_region.notify()
def wait_on_intent(self, timeout_ms: int = 1000) -> bool:
return bool(self.intent_region.wait(timeout_ms))
@@ -330,3 +360,20 @@ class RealZincPlane:
view[:] = b"\x00" * len(view)
view[: len(packet)] = packet
region.notify()
def _account_from_payload(payload: Dict[str, Any]) -> "AccountStateSnapshot":
"""Decode raw payload into AccountStateSnapshot. Never raises — returns default."""
from .contracts import AccountStateSnapshot
try:
return AccountStateSnapshot(
wallet_balance=float(payload.get("wallet_balance", 0.0)),
available_margin=float(payload.get("available_margin", 0.0)),
used_margin=float(payload.get("used_margin", 0.0)),
event_seq=int(payload.get("event_seq", 0) or 0),
mono_ns=int(payload.get("mono_ns", 0) or 0),
e_live=bool(payload.get("e_live", False)),
reconcile_ok=bool(payload.get("reconcile_ok", False)),
)
except (TypeError, ValueError, OverflowError):
return AccountStateSnapshot()