fix(broker): enforce operator broker truth boundary

This commit is contained in:
Hermes Agent
2026-07-15 08:07:21 +09:00
parent 1b63e79edc
commit 216e462df4
19 changed files with 603 additions and 35 deletions
+18 -7
View File
@@ -58,7 +58,8 @@ def reconcile_core_holdings(
→ set by reconcile_positions
warn_store: Optional — when None, WARN-log-only (backward compat, REQ-103 AC-5).
Returns {key: 'error'|'qty_warning'|'ok'|'unmanaged_warning'} for telemetry.
Returns {key: 'error'|'qty_warning'|'ok'|'unmanaged_position'|
'managed_non_holding_divergence'} for telemetry.
"""
broker_qty: dict[str, int] = {
item.symbol: int(item.hldg_qty) for item in broker.get_balance()
@@ -114,13 +115,23 @@ def reconcile_core_holdings(
)
else:
decisions[str(slot.slot_id)] = "ok"
for sym, bq in broker_qty.items(): # unmanaged broker position
for sym, bq in broker_qty.items(): # unmatched broker position
if bq > 0 and sym not in matched:
decisions[f"broker:{sym}"] = "unmanaged_warning"
_log.warning(
"broker holds %s qty=%d with no core holding slot (unmanaged position)",
sym, bq,
)
managed = slot_repo.find_managed_slot_by_symbol(instance_key, sym)
if managed is not None:
decisions[f"broker:{sym}"] = "managed_non_holding_divergence"
_log.warning(
"managed non-holding divergence: slot_id=%s portfolio_id=%s "
"symbol=%s status=%s instance_key=%s",
managed.slot_id, managed.portfolio_id, sym,
managed.status.value, instance_key,
)
else:
decisions[f"broker:{sym}"] = "unmanaged_position"
_log.warning(
"unmanaged position: symbol=%s qty=%d instance_key=%s",
sym, bq, instance_key,
)
return decisions