{"record":{"id":"9ea3ec8b26fb1200","repo":"nautechsystems/nautilus_trader","slug":"unsupported-day-step-step","errorCode":null,"errorMessage":"Unsupported day step: {step}","messagePattern":"Unsupported day step: (.+?)","errorType":"validation","errorClass":null,"httpStatus":null,"severity":"error","filePath":"crates/adapters/coinbase/src/common/parse.rs","lineNumber":148,"sourceCode":"    let step = spec.step.get();\n\n    match spec.aggregation {\n        BarAggregation::Minute => match step {\n            1 => Ok(CoinbaseGranularity::OneMinute),\n            5 => Ok(CoinbaseGranularity::FiveMinute),\n            15 => Ok(CoinbaseGranularity::FifteenMinute),\n            30 => Ok(CoinbaseGranularity::ThirtyMinute),\n            _ => anyhow::bail!(\"Unsupported minute step: {step}\"),\n        },\n        BarAggregation::Hour => match step {\n            1 => Ok(CoinbaseGranularity::OneHour),\n            2 => Ok(CoinbaseGranularity::TwoHour),\n            6 => Ok(CoinbaseGranularity::SixHour),\n            _ => anyhow::bail!(\"Unsupported hour step: {step}\"),\n        },\n        BarAggregation::Day => match step {\n            1 => Ok(CoinbaseGranularity::OneDay),\n            _ => anyhow::bail!(\"Unsupported day step: {step}\"),\n        },\n        other => anyhow::bail!(\"Unsupported aggregation: {other}\"),\n    }\n}\n\n#[cfg(test)]\nmod tests {\n    use rstest::rstest;\n\n    use super::*;\n\n    #[rstest]\n    #[case(\n        \"BTC-USD.COINBASE-1-MINUTE-LAST-EXTERNAL\",\n        CoinbaseGranularity::OneMinute\n    )]\n    #[case(\n        \"BTC-USD.COINBASE-5-MINUTE-LAST-EXTERNAL\",","sourceCodeStart":130,"sourceCodeEnd":166,"githubUrl":"https://github.com/nautechsystems/nautilus_trader/blob/18893faf8b356be3320add8de2f861b0b647cf06/crates/adapters/coinbase/src/common/parse.rs#L130-L166","documentation":"bar_type_to_granularity cannot map the requested Day-aggregation bar step to a Coinbase Exchange candles granularity; Coinbase's fixed granularity set only includes a one-day bucket, so any other day step fails.","triggerScenarios":"Calling `request_bars` with a `BarType` such as `BTC-USD.COINBASE-7-DAY.INTERNAL` — a weekly bar type that Coinbase cannot serve natively.","commonSituations":"Weekly/monthly bar requests pointed at Coinbase; generic strategies templated with multi-day bar types without per-exchange adjustment.","solutions":["Use a 1-day BarType (`...-1-DAY.INTERNAL`) and aggregate multiple days locally if needed.","Request daily bars from an exchange that supports the larger step natively.","Validate bar types in strategy configuration before handing them to the Coinbase data client."],"exampleFix":"// before\n\"BTC-USD.COINBASE-7-DAY.INTERNAL\"\n// after\n\"BTC-USD.COINBASE-1-DAY.INTERNAL\" // aggregate 7-day bars locally","handlingStrategy":"validation","validationCode":"if bar_type.spec().aggregation == BarAggregation::Day\n    && bar_type.spec().step.get() != 1\n{\n    return Err(anyhow!(\"Coinbase supports only 1-day bars\"));\n}","typeGuard":null,"tryCatchPattern":"match bar_type_to_granularity(&bar_type) {\n    Ok(g) => request_candles(g),\n    Err(e) if e.to_string().contains(\"Unsupported day step\") => {\n        request_candles(CoinbaseGranularity::OneDay); // combine days locally\n    }\n    Err(e) => return Err(e),\n}","preventionTips":["Use 1-day bar types for Coinbase daily candles","Build weekly/monthly bars locally from daily data","Document per-exchange granularity limits in config schemas"],"tags":["coinbase","bars","granularity","configuration"],"backgroundTag":"invalid-argument-value","analyzedSha":"18893faf8b356be3320add8de2f861b0b647cf06","analyzedAt":"2026-09-08T20:49:34.690Z","contentChangedAt":"2026-09-08T20:49:34.690Z","schemaVersion":2},"datasetVersion":"2026-09-14T00:17:10.932Z"}