Fence unmanaged lifecycle by snapshot time

Co-authored-by: genichin <4282227+genichin@users.noreply.github.com>
This commit is contained in:
copilot-swe-agent[bot]
2026-09-13 05:54:51 +00:00
committed by GitHub
co-authored by genichin
parent 84d81658a1
commit 8b1de8e26a
5 changed files with 239 additions and 34 deletions
+4
View File
@@ -29,6 +29,7 @@ import hashlib
import logging
import math
import re
from datetime import UTC, datetime
from typing import cast
from trex_core.application.alarm_emitter import AlarmEmitter
@@ -407,6 +408,7 @@ def reconcile_core_holdings(
Returns {key: 'error'|'qty_warning'|'ok'|'unmanaged_position'|
'managed_non_holding_divergence'} for telemetry.
"""
snapshot_observed_at = datetime.now(tz=UTC)
broker_qty: dict[str, int] = {
item.symbol: int(item.hldg_qty) for item in broker.get_balance()
}
@@ -507,6 +509,7 @@ def reconcile_core_holdings(
instance_key=instance_key,
symbol=sym,
quantity=bq,
observed_at=snapshot_observed_at,
)
except Exception: # noqa: BLE001
_log.exception(
@@ -555,6 +558,7 @@ def reconcile_core_holdings(
for state in unmanaged_position_store.resolve_absent(
instance_key=instance_key,
observed_symbols=active_unmanaged_symbols,
observed_at=snapshot_observed_at,
):
_log.info(
"unmanaged position resolved: symbol=%s qty=%d instance_key=%s",