{"record":{"id":"e5e85f88a81f42d8","repo":"nautechsystems/nautilus_trader","slug":"livenodeconfig-controller-for-importable-controlle-e5e85f","errorCode":null,"errorMessage":"LiveNodeConfig.controller for importable controller '{}' requires the python feature","messagePattern":"LiveNodeConfig\\.controller for importable controller '(.+?)' requires the python feature","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"error","filePath":"crates/live/src/node/mod.rs","lineNumber":277,"sourceCode":"\n        if config.event_store.is_some() {\n            anyhow::bail!(\n                \"LiveNodeConfig.event_store is set but LiveNode::build cannot install a factory; \\\n                 use LiveNodeBuilder::with_event_store(...) instead\"\n            );\n        }\n\n        let runner = AsyncRunner::new();\n        runner.bind_senders();\n\n        let kernel = NautilusKernel::new(name, config.clone())?;\n        #[cfg(feature = \"python\")]\n        if let Some(controller) = config.controller.as_ref() {\n            Trader::add_controller_from_importable_config(&kernel.trader, controller)?;\n        }\n        #[cfg(not(feature = \"python\"))]\n        if let Some(controller) = config.controller.as_ref() {\n            anyhow::bail!(\n                \"LiveNodeConfig.controller for importable controller '{}' requires the python feature\",\n                controller.controller_path\n            );\n        }\n\n        let exec_manager_config =\n            ExecutionManagerConfig::from(&config.exec_engine).with_trader_id(config.trader_id);\n        let exec_manager = ExecutionManager::new(\n            kernel.clock.clone(),\n            kernel.cache.clone(),\n            exec_manager_config,\n        )?;\n\n        let node = Self {\n            kernel,\n            runner: Some(runner),\n            config,\n            handle: LiveNodeHandle::new(),","sourceCodeStart":259,"sourceCodeEnd":295,"githubUrl":"https://github.com/nautechsystems/nautilus_trader/blob/18893faf8b356be3320add8de2f861b0b647cf06/crates/live/src/node/mod.rs#L259-L295","documentation":"Same as the builder-path variant: importable controllers need the `python` feature to be loaded by Trader::add_controller_from_importable_config. LiveNode::build on a non-python build rejects a config containing a controller.","triggerScenarios":"LiveNode::build (or new/from_config) with LiveNodeConfig.controller = Some(...) while compiled without the `python` feature.","commonSituations":"Rust-only production builds receiving configs authored for Python-enabled environments; missing feature flags in release profiles or CI builds.","solutions":["Recompile with the `python` feature enabled.","Remove the controller from the config.","Replace the Python importable controller with a Rust-native implementation."],"exampleFix":"// before\ncargo build --release\n// after\ncargo build --release --features python","handlingStrategy":"validation","validationCode":"if config.controller.is_some() && !cfg!(feature = \"python\") { /* unsupported: controller requires python feature */ }","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Verify feature flags in release and CI builds.","Separate python-required config from Rust-only config.","Fail early at startup when config needs unavailable features."],"tags":["rust","feature-flag","python"],"backgroundTag":"feature-not-enabled","analyzedSha":"18893faf8b356be3320add8de2f861b0b647cf06","analyzedAt":"2026-09-08T20:49:34.690Z","contentChangedAt":"2026-09-08T20:49:34.690Z","schemaVersion":2},"datasetVersion":"2026-09-14T05:17:10.506Z"}