The engine-source check in crucible/src/manifest/workflow.rs:228 verifies only existence and ancestry. validate_autoresearch constrains a decide source to a measure/grade, but type = "custom" skips that path.
A decide sourcing a plain command validates, then fails at runtime with "decide source X has no measured candidate", again after the spend.
The engine-source check in
crucible/src/manifest/workflow.rs:228verifies only existence and ancestry.validate_autoresearchconstrains a decide source to a measure/grade, buttype = "custom"skips that path.A decide sourcing a plain command validates, then fails at runtime with "decide source X has no measured candidate", again after the spend.