{"record":{"id":"1482de4bac8e47c3","repo":"can1357/oh-my-pi","slug":"usage-security-cloud-scans-start-status-pull","errorCode":null,"errorMessage":"Usage: /security cloud <scans|start|status|pull>","messagePattern":"Usage: /security cloud <scans\\|start\\|status\\|pull>","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"error","filePath":"packages/coding-agent/src/slash-commands/helpers/security.ts","lineNumber":330,"sourceCode":"\t\t\tif (!options.configurationId) throw new Error(\"cloud status requires a configuration id\");\n\t\t\tawait runtime.output(JSON.stringify(await client.getStats(options.configurationId), null, 2));\n\t\t\treturn;\n\t\t}\n\t\tcase \"pull\": {\n\t\t\tif (!options.configurationId) throw new Error(\"cloud pull requires a configuration id\");\n\t\t\tconst store = await SecurityStore.openForCwd(runtime.cwd);\n\t\t\tconst bundle = await pullCodexSecurityCloudResults({\n\t\t\t\tclient,\n\t\t\t\tconfigurationId: options.configurationId,\n\t\t\t\tstore,\n\t\t\t});\n\t\t\tawait runtime.output(\n\t\t\t\t`Imported ${bundle.findings.length} Codex Security cloud finding(s) as security scan ${bundle.scan.id}.`,\n\t\t\t);\n\t\t\treturn;\n\t\t}\n\t\tdefault:\n\t\t\tthrow new Error(\"Usage: /security cloud <scans|start|status|pull>\");\n\t}\n}\n\nasync function updateDisposition(runtime: SlashCommandRuntime, rest: string): Promise<void> {\n\tconst [scanId, findingId, status, ...rationaleParts] = parseCommandArgs(rest);\n\tif (!scanId || !findingId || !status) {\n\t\tthrow new Error(\"disposition requires <scan-id> <finding-id> <status> [rationale]\");\n\t}\n\tif (!DISPOSITIONS.has(status as SecurityDispositionStatus)) throw new Error(`Unknown disposition: ${status}`);\n\tconst rationale = rationaleParts.join(\" \").trim();\n\tif (status !== \"open\" && !rationale) throw new Error(`${status} requires a rationale`);\n\tconst store = await SecurityStore.openForCwd(runtime.cwd);\n\tconst finding = await store.updateDisposition(scanId, findingId, {\n\t\tstatus: status as SecurityDispositionStatus,\n\t\trationale: rationale || undefined,\n\t\tupdatedAt: new Date().toISOString(),\n\t\tactor: \"operator\",\n\t});","sourceCodeStart":312,"sourceCodeEnd":348,"githubUrl":"https://github.com/can1357/oh-my-pi/blob/969062200754ea02cfac922e5ebb8c608c079e15/packages/coding-agent/src/slash-commands/helpers/security.ts#L312-L348","documentation":"Thrown by the default case of handleCloudCommand when the /security cloud subcommand is not one of scans, start, status, or pull. parseSubcommand splits the first word of the arguments and any unrecognized verb reaches this catch-all, which surfaces the accepted usage.","triggerScenarios":"Run `/security cloud list`, `/security cloud create`, `/security cloud STATUS` (case-sensitive), or `/security cloud start-scan ...`.","commonSituations":"Guessing synonyms (`list` instead of `scans`, `run` instead of `start`); capitalizing the verb; using subcommands from other tools' CLIs.","solutions":["Use one of: scans, start, status, pull — all lowercase.","Bare `/security cloud` defaults to `scans` and lists configurations.","Check `/security` top-level help for commands outside the cloud group."],"exampleFix":"// before\n/security cloud list\n// after\n/security cloud scans","handlingStrategy":"validation","validationCode":"const CLOUD_VERBS = new Set([\"scans\", \"start\", \"status\", \"pull\"]);\nconst verb = args.trim().split(/\\s+/)[0] || \"scans\";\nif (!CLOUD_VERBS.has(verb)) throw new Error(`Usage: /security cloud <scans|start|status|pull>, got: ${verb}`);","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Restrict scripts to the four verbs: scans, start, status, pull (lowercase).","Run bare `/security cloud` (defaults to scans) to confirm syntax before scripting.","Do not use synonyms like list/run/create."],"tags":["cli","usage","argument-parsing"],"backgroundTag":"invalid-subcommand","analyzedSha":"969062200754ea02cfac922e5ebb8c608c079e15","analyzedAt":"2026-08-31T10:29:35.737Z","schemaVersion":2},"datasetVersion":"2026-08-31T14:17:45.589Z"}