{"record":{"id":"862dc8e1b0123ab3","repo":"nautechsystems/nautilus_trader","slug":"failed-to-determine-ts-init-range-for-feather-pat","errorCode":null,"errorMessage":"Failed to determine ts_init range for {feather_path}: {e}","messagePattern":"Failed to determine ts_init range for (.+?): (.+?)","errorType":"exception","errorClass":"anyhow::Error","httpStatus":null,"severity":"error","filePath":"crates/persistence/src/backend/catalog.rs","lineNumber":3992,"sourceCode":"        &self,\n        data_name: &str,\n        feather_path: &str,\n        batches: Vec<RecordBatch>,\n        use_ts_event_for_ts_init: bool,\n    ) -> anyhow::Result<()> {\n        let Some(batch) = Self::apply_stream_conversion_transforms(\n            batches,\n            use_ts_event_for_ts_init,\n        )\n        .map_err(|e| {\n            anyhow::anyhow!(\"Failed to apply stream conversion transforms for {feather_path}: {e}\")\n        })?\n        else {\n            return Ok(());\n        };\n\n        let (start_ts, end_ts) = Self::ts_init_range(&batch).map_err(|e| {\n            anyhow::anyhow!(\"Failed to determine ts_init range for {feather_path}: {e}\")\n        })?;\n        let identifier = Self::identifier_from_batch_or_path(&batch, data_name, feather_path);\n        let directory = if let Some(type_name) = data_name.strip_prefix(\"custom/\") {\n            self.make_path_custom_data(type_name, identifier.as_deref())?\n        } else {\n            self.make_path(data_name, identifier.as_deref())?\n        };\n        let filename = timestamps_to_filename(UnixNanos::from(start_ts), UnixNanos::from(end_ts));\n        let path = PathBuf::from(format!(\"{directory}/{filename}\"));\n        let object_path = self.to_object_path(&path.to_string_lossy())?;\n\n        let file_exists = self.execute_async(async {\n            let exists = self.object_store.head(&object_path).await.is_ok();\n            Ok::<_, anyhow::Error>(exists)\n        })?;\n\n        if file_exists {\n            log::info!(\"File {} already exists, skipping write\", path.display());","sourceCodeStart":3974,"sourceCodeEnd":4010,"githubUrl":"https://github.com/nautechsystems/nautilus_trader/blob/18893faf8b356be3320add8de2f861b0b647cf06/crates/persistence/src/backend/catalog.rs#L3974-L4010","documentation":"Wrapper in convert_feather_batches_to_parquet: computing the ts_init min/max range over the record batch failed (schema/type issue in the converted Feather data), and the error is re-wrapped with the offending Feather path for diagnosis.","triggerScenarios":"Thrown at crates/persistence/src/backend/catalog.rs:3992 when the library encounters an invalid state.","commonSituations":"See trigger scenarios.","solutions":["Verify the Feather file at the reported path is readable and was produced by a compatible NautilusTrader writer","Check the batch schema has a valid ts_init column with the expected integer/timestamp type","Re-export or re-convert the source data and retry the stream conversion","Upgrade or align the persistence backend version if the batch schema is from an older data format"],"exampleFix":null,"handlingStrategy":"fallback","validationCode":null,"typeGuard":null,"tryCatchPattern":null,"preventionTips":[],"tags":[],"backgroundTag":null,"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"}