Follow-up from PR #1764 review (CodeRabbit finding, confirmed real, deliberately not fixed in that PR because the change needs the C++ toolchain to compile and verify).
Problem — In packages/server/engine-lib/engLib/store/pipeline/pipeline_config.cpp, PipelineConfig::validate() builds pipeline.chain, but its source-control traversal marks only DIRECT entries in comp.controls. generatePipelineStack() (packages/server/engine-lib/engLib/store/stack.cpp) uses walkControl, a fixpoint that also walks data descendants of control-attached components (walkComponents) and picks up controls-of-controls on restart. A tool attached to tools can therefore have data descendants or control another component that the chain traversal never visits, so the generated pipeline.chain can omit components that the instantiated stack contains.
Fix — Mirror walkControl's fixpoint inside the validate() cycle-check traversal: for every source-controlled component, mark it visited, then traverse its output lanes and control attachments with the existing DFS before appending pipeline.chain.
Verification — Compile with the engine toolchain and validate the resulting chain against the instantiated stack.
Thread: #1764 (pipeline_config.cpp lines 349-359)
Follow-up from PR #1764 review (CodeRabbit finding, confirmed real, deliberately not fixed in that PR because the change needs the C++ toolchain to compile and verify).
Problem — In
packages/server/engine-lib/engLib/store/pipeline/pipeline_config.cpp,PipelineConfig::validate()buildspipeline.chain, but its source-control traversal marks only DIRECT entries incomp.controls.generatePipelineStack()(packages/server/engine-lib/engLib/store/stack.cpp) useswalkControl, a fixpoint that also walks data descendants of control-attached components (walkComponents) and picks up controls-of-controls on restart. A tool attached totoolscan therefore have data descendants or control another component that the chain traversal never visits, so the generatedpipeline.chaincan omit components that the instantiated stack contains.Fix — Mirror
walkControl's fixpoint inside the validate() cycle-check traversal: for every source-controlled component, mark it visited, then traverse its output lanes and control attachments with the existing DFS before appendingpipeline.chain.Verification — Compile with the engine toolchain and validate the resulting chain against the instantiated stack.
Thread: #1764 (pipeline_config.cpp lines 349-359)