{"record":{"id":"498c468c3238de0c","repo":"JuliusBrussee/caveman","slug":"usage-caveman-proxy-usage-import-link-refresh-unl","errorCode":null,"errorMessage":"usage: caveman-proxy usage import|link|refresh|unlink <provider>","messagePattern":"usage: caveman-proxy usage import\\|link\\|refresh\\|unlink <provider>","errorType":"validation","errorClass":null,"httpStatus":null,"severity":"error","filePath":"proxy/cmd/caveman-proxy/main.go","lineNumber":591,"sourceCode":"\tcase \"promote\":\n\t\ttrialID := requiredTrialID(logger, spend, args)\n\t\toptimizerID := firstPositional(args)\n\t\tif optimizerID == \"\" {\n\t\t\tfatalJSON(logger, fmt.Errorf(\"usage: caveman-proxy trial promote <optimizer_id> --trial-id <id>\"))\n\t\t}\n\t\tplan, err := spend.BuildTrialPlan(trialID)\n\t\tif err != nil {\n\t\t\tfatalJSON(logger, err)\n\t\t}\n\t\tpromoteMove(logger, home, trialID, optimizerID, plan)\n\tdefault:\n\t\tfatalJSON(logger, fmt.Errorf(\"unknown trial subcommand: %s\", sub))\n\t}\n}\n\nfunc runUsage(logger *slog.Logger, args []string) {\n\tif len(args) == 0 {\n\t\tfatalJSON(logger, fmt.Errorf(\"usage: caveman-proxy usage import|link|refresh|unlink <provider>\"))\n\t}\n\tsub := args[0]\n\targs = args[1:]\n\thome := mustHome(logger)\n\tspend := mustStore(logger, home)\n\tdefer spend.Close()\n\tprovider := firstPositional(args)\n\tswitch sub {\n\tcase \"import\":\n\t\tif provider == \"\" {\n\t\t\tfatalJSON(logger, fmt.Errorf(\"usage: caveman-proxy usage import codex|claude\"))\n\t\t}\n\t\tpath := argFlag(args, \"--path\", \"\")\n\t\tsince := argFlag(args, \"--since\", \"\")\n\t\tswitch provider {\n\t\tcase \"codex\":\n\t\t\tout, err := spend.ImportCodex(path, since)\n\t\t\tif err != nil {","sourceCodeStart":573,"sourceCodeEnd":609,"githubUrl":"https://github.com/JuliusBrussee/caveman/blob/3ee70a102609e550bd2e68004bf5990a9341c851/proxy/cmd/caveman-proxy/main.go#L573-L609","documentation":"runUsage requires a subcommand (import, link, refresh, or unlink) plus a provider argument; with no arguments at all it exits via fatalJSON with the usage line \"usage: caveman-proxy usage import|link|refresh|unlink <provider>\". It is the entry guard for the usage-tracking command group.","triggerScenarios":"Running bare `caveman-proxy usage` with no subcommand, before args[0] is even inspected.","commonSituations":"Users exploring the CLI, omitting the subcommand, or assuming `usage` alone prints a usage report rather than requiring an action verb.","solutions":["Provide one of: import, link, refresh, unlink as the subcommand.","Include the provider argument, e.g. caveman-proxy usage refresh openai.","Consult the usage line in the error to see all valid forms.","Check docs/README for the provider names supported by your installed version."],"exampleFix":"// before\ncaveman-proxy usage\n// after\ncaveman-proxy usage refresh anthropic","handlingStrategy":"validation","validationCode":"valid := map[string]bool{\"import\": true, \"link\": true, \"refresh\": true, \"unlink\": true}\nif len(os.Args) < 3 || !valid[os.Args[2]] {\n    fmt.Fprintln(os.Stderr, \"usage: caveman-proxy usage import|link|refresh|unlink <provider>\")\n    os.Exit(2)\n}","typeGuard":null,"tryCatchPattern":"if err := cmd.Run(); err != nil && strings.Contains(err.Error(), \"usage: caveman-proxy usage\") {\n    // a subcommand + provider is required\n}","preventionTips":["Always pair `usage` with a subcommand and a provider.","Build wrapper aliases like `usage-refresh` that embed the subcommand.","Check the usage error line — it enumerates every valid form."],"tags":["cli","usage","arguments"],"backgroundTag":"missing-cli-argument","analyzedSha":"3ee70a102609e550bd2e68004bf5990a9341c851","analyzedAt":"2026-09-20T15:53:39.229Z","contentChangedAt":"2026-09-20T15:53:39.229Z","schemaVersion":2},"datasetVersion":"2026-09-23T08:17:48.524Z"}