fix: clean up utcnow deprecation warnings, fix 12 failing tests, add CI/CD pipeline manifests

- Replace all datetime.utcnow() with datetime.now(tz=timezone.utc) across 8 files
- Fix 12 failing tests to match current implementation behavior
- Fix pytest_plugins in non-top-level conftest (moved to root conftest.py)
- Auto-fix 189 lint issues (import sorting, unused imports)
- Add CI/CD pipeline infrastructure (ARC, ArgoCD, Kargo manifests)
- Add values-beta.yaml and values-paper.yaml for staged deployments
- Update GitHub Actions workflow to use self-hosted-gremlin runners
- Add integration-test job to CI pipeline

Result: 1596 passed, 0 failed, 0 warnings
This commit is contained in:
Celes Renata
2026-04-18 03:59:28 +00:00
parent 40227a4eb2
commit c85c0068a2
123 changed files with 7221 additions and 405 deletions
+5 -5
View File
@@ -8,7 +8,7 @@ performance metrics used across all trading engine components.
from __future__ import annotations
from dataclasses import dataclass, field
from datetime import datetime, timedelta
from datetime import datetime, timedelta, timezone
# ---------------------------------------------------------------------------
# Risk Tier Configuration
@@ -104,7 +104,7 @@ class TradingDecision:
earnings_proximity_flag: bool = False
is_micro_trade: bool = False
decision_trace: dict = field(default_factory=dict)
created_at: datetime = field(default_factory=datetime.utcnow)
created_at: datetime = field(default_factory=lambda: datetime.now(tz=timezone.utc))
# ---------------------------------------------------------------------------
@@ -139,7 +139,7 @@ class StopLevels:
atr_value: float
atr_multiplier: float
reward_risk_ratio: float
last_updated: datetime = field(default_factory=datetime.utcnow)
last_updated: datetime = field(default_factory=lambda: datetime.now(tz=timezone.utc))
# ---------------------------------------------------------------------------
@@ -204,7 +204,7 @@ class PerformanceMetrics:
max_drawdown: float
current_drawdown_pct: float
portfolio_heat: float
computed_at: datetime = field(default_factory=datetime.utcnow)
computed_at: datetime = field(default_factory=lambda: datetime.now(tz=timezone.utc))
# ---------------------------------------------------------------------------
@@ -235,7 +235,7 @@ class ReservePoolState:
balance: float = 0.0
total_deposits: float = 0.0
total_withdrawals: float = 0.0
last_updated: datetime = field(default_factory=datetime.utcnow)
last_updated: datetime = field(default_factory=lambda: datetime.now(tz=timezone.utc))
# ---------------------------------------------------------------------------
+2 -2
View File
@@ -8,7 +8,7 @@ rate-limit decisions, and record creation.
from __future__ import annotations
from dataclasses import dataclass, field
from datetime import datetime
from datetime import datetime, timezone
from services.trading.models import PerformanceMetrics
@@ -43,7 +43,7 @@ class NotificationRecord:
message: str
delivery_status: str = "pending"
retry_count: int = 0
created_at: datetime = field(default_factory=datetime.utcnow)
created_at: datetime = field(default_factory=lambda: datetime.now(tz=timezone.utc))
# ---------------------------------------------------------------------------
+2 -2
View File
@@ -9,7 +9,7 @@ heat check, active-pool minimum, absolute cap, and share rounding.
from __future__ import annotations
import math
from datetime import datetime
from datetime import datetime, timezone
from services.trading.models import (
OpenPosition,
@@ -313,7 +313,7 @@ class PositionSizer:
return dollar_amount, allocation_pct
earnings_dt = earnings_calendar[ticker]
now = datetime.utcnow()
now = datetime.now(tz=timezone.utc)
delta = earnings_dt - now
# Use total_seconds for precise fractional-day comparison
trading_days_until = delta.total_seconds() / 86400.0
+4 -4
View File
@@ -11,7 +11,7 @@ Persistence is handled by the caller (engine.py).
from __future__ import annotations
from datetime import datetime
from datetime import datetime, timezone
from services.trading.models import (
OpenPosition,
@@ -63,7 +63,7 @@ class StopLossManager:
atr_value=atr,
atr_multiplier=atr_multiplier,
reward_risk_ratio=reward_risk_ratio,
last_updated=datetime.utcnow(),
last_updated=datetime.now(tz=timezone.utc),
)
def re_evaluate_levels(
@@ -153,7 +153,7 @@ class StopLossManager:
atr_value=atr,
atr_multiplier=effective_multiplier,
reward_risk_ratio=reward_risk_ratio,
last_updated=datetime.utcnow(),
last_updated=datetime.now(tz=timezone.utc),
)
def check_price_crossings(
@@ -250,7 +250,7 @@ class StopLossManager:
atr_value=levels.atr_value,
atr_multiplier=levels.atr_multiplier,
reward_risk_ratio=levels.reward_risk_ratio,
last_updated=datetime.utcnow(),
last_updated=datetime.now(tz=timezone.utc),
)
return updated