From 89a951c2a26b970baeed60c4e838399ff0376cc1 Mon Sep 17 00:00:00 2001 From: kitos Date: Tue, 19 May 2026 16:35:02 +0200 Subject: [PATCH] fix(decay-engine): strip tzinfo from validated_at before datetime arithmetic The previous fix changed _now() to return naive UTC, but the code still called .replace(tzinfo=utc) on most_recent (from DB) before subtracting. This caused "can't subtract offset-naive and offset-aware datetimes". Now we strip tzinfo if present, keeping everything naive UTC consistently. Co-Authored-By: Claude Sonnet 4.6 --- backend/app/services/decay_engine_service.py | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/backend/app/services/decay_engine_service.py b/backend/app/services/decay_engine_service.py index 4d9324f..5af10d6 100644 --- a/backend/app/services/decay_engine_service.py +++ b/backend/app/services/decay_engine_service.py @@ -81,10 +81,9 @@ def calculate_confidence_for_technique(db: Session, technique_id: UUID) -> Optio last_validated = None if valid_validations: most_recent = max(v.validated_at for v in valid_validations) - # Make timezone-aware if needed - if most_recent.tzinfo is None: - from datetime import timezone as _tz - most_recent = most_recent.replace(tzinfo=_tz.utc) + # Strip tzinfo if present so arithmetic stays consistent with naive UTC + if most_recent.tzinfo is not None: + most_recent = most_recent.replace(tzinfo=None) last_validated = most_recent days_since = (now - most_recent).days if days_since <= policy.fresh_days: