{"record":{"id":"b948706c3296e5ad","repo":"we-promise/sure","slug":"start-date-validated-start-date-exceeds-maxim","errorCode":null,"errorMessage":"Start date (#{validated_start_date}) exceeds maximum lookback window (#{max_lookback})","messagePattern":"Start date \\(#(.+?)\\) exceeds maximum lookback window \\(#(.+?)\\)","errorType":"validation","errorClass":"ArgumentError","httpStatus":null,"severity":"error","filePath":"app/models/provider/yahoo_finance.rb","lineNumber":664,"sourceCode":"\n      # Ensure start_date <= end_date\n      if validated_start_date > validated_end_date\n        error_msg = \"Start date (#{validated_start_date}) cannot be after end date (#{validated_end_date})\"\n        raise ArgumentError, error_msg\n      end\n\n      # Ensure end_date is not in the future\n      today = Date.current\n      if validated_end_date > today\n        error_msg = \"End date (#{validated_end_date}) cannot be in the future\"\n        raise ArgumentError, error_msg\n      end\n\n      # Optional: Enforce max lookback window (configurable via constant)\n      max_lookback = MAX_LOOKBACK_WINDOW.ago.to_date\n      if validated_start_date < max_lookback\n        error_msg = \"Start date (#{validated_start_date}) exceeds maximum lookback window (#{max_lookback})\"\n        raise ArgumentError, error_msg\n      end\n    end\n\n    def validate_and_coerce_date!(date_param, param_name)\n      # Check presence\n      if date_param.blank?\n        error_msg = \"#{param_name} cannot be blank\"\n        raise ArgumentError, error_msg\n      end\n\n      # Try to coerce to date\n      begin\n        if date_param.respond_to?(:to_date)\n          date_param.to_date\n        else\n          Date.parse(date_param.to_s)\n        end\n      rescue ArgumentError => e","sourceCodeStart":646,"sourceCodeEnd":682,"githubUrl":"https://github.com/we-promise/sure/blob/e69894adb92547273377398c15f45c979cd9416a/app/models/provider/yahoo_finance.rb#L646-L682","documentation":"Error \"Start date (#{validated_start_date}) exceeds maximum lookback window (#{max_lookback})\" thrown in we-promise/sure.","triggerScenarios":"Thrown at app/models/provider/yahoo_finance.rb:664 when the library encounters an invalid state.","commonSituations":"See trigger scenarios.","solutions":[],"exampleFix":null,"handlingStrategy":null,"validationCode":null,"typeGuard":null,"tryCatchPattern":null,"preventionTips":[],"tags":[],"backgroundTag":null,"analyzedSha":"e69894adb92547273377398c15f45c979cd9416a","analyzedAt":"2026-08-21T18:22:41.165Z","schemaVersion":2},"datasetVersion":"2026-08-21T23:17:16.201Z"}