test_replay.py 1.5 KB

12345678910111213141516171819202122232425262728293031323334353637
  1. from hermes_mcp.replay import build_replay_input, compare_to_baseline
  2. def test_compare_to_baseline_replays_decision_and_exposes_audit():
  3. concern = {"id": "c1", "account_id": "a1", "market_symbol": "xrpusd", "base_currency": "XRP", "quote_currency": "USD"}
  4. narrative = {
  5. "stance": "neutral_rotational",
  6. "confidence": 0.7,
  7. "opportunity_map": {"continuation": 0.18, "mean_reversion": 0.68, "reversal": 0.05, "wait": 0.09},
  8. }
  9. wallet_state = {
  10. "inventory_state": "balanced",
  11. "rebalance_needed": False,
  12. "grid_ready": True,
  13. "base_ratio": 0.5,
  14. "quote_ratio": 0.5,
  15. }
  16. strategies = [
  17. {"id": "protect-1", "strategy_type": "exposure_protector", "mode": "active", "account_id": "a1", "state": {}, "config": {}},
  18. {"id": "grid-1", "strategy_type": "grid_trader", "mode": "off", "account_id": "a1", "state": {}, "config": {}},
  19. ]
  20. replay_input = build_replay_input(
  21. concern=concern,
  22. narrative_payload=narrative,
  23. wallet_state=wallet_state,
  24. strategies=strategies,
  25. history_window={"window_seconds": 900, "recent_states": []},
  26. )
  27. result = compare_to_baseline(
  28. replay_input=replay_input,
  29. baseline={"mode": "act", "action": "replace_with_grid", "target_strategy": "grid-1"},
  30. )
  31. assert result["changed"] is False
  32. assert result["replayed"]["action"] == "replace_with_grid"
  33. assert result["decision_audit"]["within_rebalance_tolerance"] is True