{"record":{"id":"4eb6942f81728445","repo":"affaan-m/ECC","slug":"conflict-messages-require-at-least-one-file","errorCode":null,"errorMessage":"Conflict messages require at least one --file","messagePattern":"Conflict messages require at least one --file","errorType":"validation","errorClass":"anyhow::Error","httpStatus":null,"severity":"error","filePath":"ecc2/src/main.rs","lineNumber":3936,"sourceCode":"    files: Vec<String>,\n) -> Result<comms::MessageType> {\n    Ok(match kind {\n        MessageKindArg::Handoff => comms::MessageType::TaskHandoff {\n            task: text,\n            context: context.unwrap_or_default(),\n            priority: priority.into(),\n        },\n        MessageKindArg::Query => comms::MessageType::Query { question: text },\n        MessageKindArg::Response => comms::MessageType::Response { answer: text },\n        MessageKindArg::Completed => comms::MessageType::Completed {\n            summary: text,\n            files_changed: files,\n        },\n        MessageKindArg::Conflict => {\n            let file = files\n                .first()\n                .cloned()\n                .ok_or_else(|| anyhow::anyhow!(\"Conflict messages require at least one --file\"))?;\n            comms::MessageType::Conflict {\n                file,\n                description: context.unwrap_or(text),\n            }\n        }\n    })\n}\n\nfn format_remote_dispatch_action(action: &session::manager::RemoteDispatchAction) -> String {\n    match action {\n        session::manager::RemoteDispatchAction::SpawnedTopLevel => \"spawned top-level\".to_string(),\n        session::manager::RemoteDispatchAction::Assigned(action) => match action {\n            session::manager::AssignmentAction::Spawned => \"spawned delegate\".to_string(),\n            session::manager::AssignmentAction::ReusedIdle => \"reused idle delegate\".to_string(),\n            session::manager::AssignmentAction::ReusedActive => {\n                \"reused active delegate\".to_string()\n            }\n            session::manager::AssignmentAction::DeferredSaturated => {","sourceCodeStart":3918,"sourceCodeEnd":3954,"githubUrl":"https://github.com/affaan-m/ECC/blob/8321021c54d670126ce3b2969d5deb880b4b0c2a/ecc2/src/main.rs#L3918-L3954","documentation":"Thrown when composing a `comms::MessageType::Conflict` message without any `--file` values. Conflict messages semantically describe a conflict on a specific file, so `files.first()` is required; the `ok_or_else` turns an empty list into this error. Other message kinds don't have this requirement, only Conflict.","triggerScenarios":"Sending an agent-to-agent comm message with `--kind conflict` (MessageKindArg::Conflict) but omitting `--file <path>`; passing an empty files list via a scripted invocation.","commonSituations":"Users assume the free-text `--context`/message body suffices; shell variable holding filenames expands to empty; copying examples for another message kind (e.g. note) that don't need `--file`.","solutions":["Add at least one `--file <path>` argument to the message command.","Ensure the shell variable feeding `--file` is non-empty (quote/guard it in scripts).","If the message is not actually about a conflicting file, use a different message kind that has no file requirement."],"exampleFix":"// before\n$ ecc comms send --kind conflict --context \"both edited main.rs\"\nerror: Conflict messages require at least one --file\n// after\n$ ecc comms send --kind conflict --file src/main.rs --context \"both edited main.rs\"","handlingStrategy":"validation","validationCode":"# Ensure at least one file is provided for conflict messages\nif [ \"$KIND\" = \"conflict\" ] && [ -z \"$FILE\" ]; then\n  echo \"--kind conflict requires --file <path>\" >&2; exit 2\nfi","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Always pair `--kind conflict` with at least one `--file`.","In scripts, guard file-list variables for emptiness before expansion.","If no file is involved, pick a message kind that doesn't require one."],"tags":["cli","argument-validation","missing-flag"],"backgroundTag":"missing-required-flag","analyzedSha":"8321021c54d670126ce3b2969d5deb880b4b0c2a","analyzedAt":"2026-09-16T10:08:13.343Z","contentChangedAt":"2026-09-16T10:08:13.343Z","schemaVersion":2},"datasetVersion":"2026-09-23T08:17:48.524Z"}