{"record":{"id":"cd53c5f2c7b5d6aa","repo":"zeroclaw-labs/zeroclaw","slug":"sop-has-no-steps-defined","errorCode":null,"errorMessage":"SOP '{}' has no steps defined","messagePattern":"SOP '(.+?)' has no steps defined","errorType":"validation","errorClass":"anyhow::Error","httpStatus":null,"severity":"error","filePath":"crates/zeroclaw-runtime/src/sop/engine.rs","lineNumber":1683,"sourceCode":"                    WARN,\n                    ::zeroclaw_log::Event::new(module_path!(), ::zeroclaw_log::Action::Reject)\n                        .with_outcome(::zeroclaw_log::EventOutcome::Failure)\n                        .with_attrs(::serde_json::json!({\"sop_name\": sop_name})),\n                    \"SOP engine: sop not found\"\n                );\n                anyhow::Error::msg(format!(\"SOP not found: {sop_name}\"))\n            })?\n            .clone();\n\n        if !self.can_start(sop_name) {\n            bail!(\n                \"Cannot start SOP '{}': cooldown or concurrency limit reached\",\n                sop_name\n            );\n        }\n\n        if sop.steps.is_empty() {\n            bail!(\"SOP '{}' has no steps defined\", sop_name);\n        }\n\n        let deterministic = sop.execution_mode == SopExecutionMode::Deterministic;\n        self.run_counter += 1;\n        let dur = std::time::SystemTime::now()\n            .duration_since(std::time::UNIX_EPOCH)\n            .unwrap_or_default();\n        let epoch_ns = dur.as_nanos();\n        let prefix = if deterministic { \"det\" } else { \"run\" };\n        let run_id = format!(\"{prefix}-{epoch_ns}-{:04}\", self.run_counter);\n        let claim = self.claim_admission(&run_id, &sop)?;\n        Ok(StartReservation {\n            run_id,\n            claim,\n            sop,\n            deterministic,\n        })\n    }","sourceCodeStart":1665,"sourceCodeEnd":1701,"githubUrl":"https://github.com/zeroclaw-labs/zeroclaw/blob/88bb9c8533fc57ed7a03e36ca7c9ed2bf8336dcc/crates/zeroclaw-runtime/src/sop/engine.rs#L1665-L1701","documentation":"Error \"SOP '{}' has no steps defined\" thrown in zeroclaw-labs/zeroclaw.","triggerScenarios":"Thrown at crates/zeroclaw-runtime/src/sop/engine.rs:1683 when the library encounters an invalid state.","commonSituations":"See trigger scenarios.","solutions":["Add at least one step to the SOP definition."],"exampleFix":null,"handlingStrategy":null,"validationCode":null,"typeGuard":null,"tryCatchPattern":null,"preventionTips":[],"tags":[],"backgroundTag":null,"analyzedSha":"88bb9c8533fc57ed7a03e36ca7c9ed2bf8336dcc","analyzedAt":"2026-08-23T01:07:41.857Z","schemaVersion":2},"datasetVersion":"2026-08-23T08:06:27.607Z"}