{"record":{"id":"e55fb1ba6207f01e","repo":"wasmerio/wasmer","slug":"no-owner-specified-use-owner-owner","errorCode":null,"errorMessage":"No owner specified: use --owner <owner>","messagePattern":"No owner specified: use --owner <owner>","errorType":"validation","errorClass":"anyhow::Error","httpStatus":null,"severity":"error","filePath":"lib/cli/src/commands/app/create.rs","lineNumber":216,"sourceCode":"                    .and_then(|f| f.to_str())\n                    .map(|s| s.to_owned())\n            }),\n        };\n\n        crate::utils::prompts::prompt_for_app_ident(\n            \"What should be the name of the app?\",\n            default_name.as_deref(),\n        )\n    }\n\n    async fn get_owner(&self, client: Option<&WasmerClient>) -> anyhow::Result<String> {\n        if let Some(owner) = &self.owner {\n            return Ok(owner.clone());\n        }\n\n        if self.non_interactive {\n            // if not interactive we can't prompt the user to choose the owner of the app.\n            anyhow::bail!(\"No owner specified: use --owner <owner>\");\n        }\n\n        let user = if let Some(client) = client {\n            Some(wasmer_backend_api::query::current_user_with_namespaces(client, None).await?)\n        } else {\n            None\n        };\n        crate::utils::prompts::prompt_for_namespace(\"Who should own this app?\", None, user.as_ref())\n    }\n\n    async fn get_output_dir(&self, app_name: &str) -> anyhow::Result<PathBuf> {\n        let mut output_path = if let Some(path) = &self.app_dir_path {\n            path.clone()\n        } else {\n            PathBuf::from(\".\").canonicalize()?\n        };\n\n        if output_path.is_dir() && output_path.read_dir()?.next().is_some() {","sourceCodeStart":198,"sourceCodeEnd":234,"githubUrl":"https://github.com/wasmerio/wasmer/blob/8c4b9ee9d33fb2068863fbb3d328683e7e6ff7f5/lib/cli/src/commands/app/create.rs#L198-L234","documentation":"During `wasmer app create`, get_owner resolves the owner from --owner or an interactive prompt (listing the user's namespaces). In non-interactive mode it cannot prompt, so it bails demanding an explicit owner. The library throws it because app ownership must be explicit in automation.","triggerScenarios":"Running `wasmer app create --non-interactive` without --owner, so neither a flag value nor a prompt can supply the owner.","commonSituations":"CI/CD deployments, scripts, or machines with no TTY where the login account has multiple namespaces and no --owner was given.","solutions":["Add --owner <owner> (your username or a namespace/org) to the command.","Ensure you are logged in so the default user could be resolved, and still pass --owner for determinism.","Remove --non-interactive to let the CLI prompt for the owner."],"exampleFix":"// before\n// wasmer app create --non-interactive --name my-app\n// after\n// wasmer app create --non-interactive --name my-app --owner my-org","handlingStrategy":"validation","validationCode":"if process.env.CI || !process.stdin.isTTY {\n  if (!args.owner) throw new Error('owner required in non-interactive mode');\n}","typeGuard":"fn has_owner(args: &CreateArgs) -> bool {\n    args.owner.as_deref().map(|s| !s.trim().is_empty()).unwrap_or(false)\n}","tryCatchPattern":"match result {\n    Err(e) if e.to_string().contains(\"No owner specified\") => {\n        eprintln!(\"re-run with --owner <owner>\");\n        std::process::exit(2);\n    }\n    other => other?,\n}","preventionTips":["Always pass --owner explicitly in automation, especially with multiple namespaces.","Store owner/namespace in CI secrets or deploy config rather than relying on prompts.","Confirm the logged-in account owns the namespace before deploying."],"tags":["wasmer","cli","app-deploy","non-interactive"],"backgroundTag":"missing-required-cli-argument","analyzedSha":"8c4b9ee9d33fb2068863fbb3d328683e7e6ff7f5","analyzedAt":"2026-09-01T23:06:31.009Z","contentChangedAt":null,"schemaVersion":2},"datasetVersion":"2026-09-09T06:17:21.866Z"}