Skip to main content

logbrew_cli/
help.rs

1//! CLI help text kept separate from command parsing.
2
3use crate::HelpTopic;
4
5/// Returns user-facing help for a topic.
6#[must_use]
7pub const fn help_text(topic: HelpTopic) -> &'static str {
8    match topic {
9        HelpTopic::Root => ROOT_HELP,
10        HelpTopic::Login => LOGIN_HELP,
11        HelpTopic::Logout => LOGOUT_HELP,
12        HelpTopic::Setup => SETUP_HELP,
13        HelpTopic::Status => STATUS_HELP,
14        HelpTopic::Version => VERSION_HELP,
15        HelpTopic::Auth => AUTH_HELP,
16        HelpTopic::Json => JSON_HELP,
17        HelpTopic::Examples => EXAMPLES_HELP,
18        HelpTopic::Projects => PROJECTS_HELP,
19        HelpTopic::Usage => USAGE_HELP,
20        HelpTopic::Read => READ_HELP,
21        HelpTopic::ReadLogs => READ_LOGS_HELP,
22        HelpTopic::ReadIssues => READ_ISSUES_HELP,
23        HelpTopic::ReadActions => READ_ACTIONS_HELP,
24        HelpTopic::ReadReleases => READ_RELEASES_HELP,
25        HelpTopic::ReadTraces => READ_TRACES_HELP,
26        HelpTopic::ReadTrace => READ_TRACE_HELP,
27        HelpTopic::ReadIssue => READ_ISSUE_HELP,
28        HelpTopic::Watch => WATCH_HELP,
29        HelpTopic::Explain => EXPLAIN_HELP,
30        HelpTopic::Investigate => INVESTIGATE_HELP,
31        HelpTopic::NativeDebugArtifacts => NATIVE_DEBUG_ARTIFACTS_HELP,
32        HelpTopic::Set => SET_HELP,
33        HelpTopic::Support => SUPPORT_HELP,
34    }
35}
36
37/// Root command help text.
38const ROOT_HELP: &str = "\
39LogBrew CLI
40
41Usage:
42  logbrew login [--provider github|gitlab|bitbucket] [--no-open] [--json]
43  logbrew logout [--json]
44  logbrew setup [--auto] [--yes] [--json]
45  logbrew projects [--json]
46  logbrew projects create <name> --ingest-key-file <path> [--runtime <runtime>] \
47                         [--environment <environment>] [--json]
48  logbrew projects archive <project_id> --yes [--json]
49  logbrew usage [--json]
50  logbrew status [--json]
51  logbrew health [--json]
52  logbrew doctor [--json]
53  logbrew doctor --project <project_id> [--json]
54  logbrew whoami [--json]
55  logbrew me [--json]
56  logbrew version [--json]
57  logbrew support create --category <category> --title <title> --description <description> [--json]
58  logbrew support list [--status <status>] [--category <category>] [--json]
59  logbrew support show <ticket_id> [--json]
60  logbrew support context <ticket_id> [--json]
61  logbrew support reply <ticket_id> --context <text> --retry-key <key> [--diagnostics] [--json]
62  logbrew support close <ticket_id> [--json]
63  logbrew support reopen <ticket_id> [--json]
64  logbrew read logs [--severity error] [--search checkout] [--release <release>] [--environment \
65                         production] [--since 24h] [--json]
66  logbrew logs checkout failed [--severity error] [--release <release>] [--environment \
67                         production] [--json]
68  logbrew logs error checkout failed [--release <release>] [--environment production] [--json]
69  logbrew search checkout [--release <release>] [--environment production] [--json]
70  logbrew find checkout [--release <release>] [--environment production] [--json]
71  logbrew grep checkout [--release <release>] [--environment production] [--json]
72  logbrew show logs [--release <release>] [--environment production] [--json]
73  logbrew latest logs [--limit 20] [--json]
74  logbrew last 10 logs [--json]
75  logbrew last 5 open issues [--json]
76  logbrew list issues [--status unresolved] [--json]
77  logbrew issues open [--release <release>] [--environment production] [--json]
78  logbrew issue open [--release <release>] [--environment production] [--json]
79  logbrew open issues [--release <release>] [--environment production] [--json]
80  logbrew open issue [--release <release>] [--environment production] [--json]
81  logbrew errors closed [--release <release>] [--environment production] [--json]
82  logbrew get issue <issue_id> [--json]
83  logbrew read issues [--release <release>] [--environment production] [--status unresolved] \
84                         [--json]
85  logbrew read actions [--release <release>] [--environment production] [--name checkout_failed] \
86                         [--json]
87  logbrew events checkout_failed [--release <release>] [--environment production] [--json]
88  logbrew read releases [--environment production] [--json]
89  logbrew traces [--service <service_name>] [--status error] [--since 24h] [--json]
90  logbrew read trace <trace_id> [--release <release>] [--environment production] [--json]
91  logbrew trace <trace_id> [--release <release>] [--environment production] [--json]
92  logbrew issue <issue_id> [--json]
93  logbrew issue <issue_id> explain [--json]
94  logbrew trace <trace_id> explain [--json]
95  logbrew explain issue <issue_id> [--json]
96  logbrew explain trace <trace_id> [--json]
97  logbrew explain <issue_id_or_trace_id> [--json]
98  logbrew investigate issue <issue_id> [--json]
99  logbrew debug-artifacts upload <path> --project <project_id> --release <release> --environment \
100                         <environment> --service <service> [--expect-image-uuid <uuid>]... \
101                         [--dry-run] [--json]
102  logbrew debug-artifacts lookup --project <project_id> --release <release> --environment \
103                         <environment> --service <service> --image-uuid <uuid> --architecture \
104                         <architecture> [--json]
105  logbrew <issue_id_or_trace_id> explain [--json]
106  logbrew set issue <issue_id> resolved [--json]
107  logbrew resolve <issue_id> [--json]
108  logbrew close <issue_id> [--json]
109  logbrew ignore <issue_id> [--json]
110  logbrew reopen <issue_id> [--json]
111
112Popular terms: auth, status, health, setup, projects, usage, logs, issues, errors, traces, spans, \
113                         actions, events, releases, environments, support.
114Health aliases: logbrew status, logbrew health, logbrew ping, logbrew doctor.
115Setup aliases (non-mutating plan): logbrew init, logbrew install, logbrew configure, logbrew sdk.
116Authenticated project creation: logbrew projects create <name> --ingest-key-file <path>.
117After CLI authentication, project creation requires no dashboard sign-in; the one-time ingest key \
118is stored in the chosen owner-only file and never printed.
119Shortcuts: logbrew auth, logbrew whoami, logbrew me, logbrew log, logbrew logs, logbrew issues, \
120                         logbrew logs checkout failed, logbrew logs error checkout, logbrew \
121                         search checkout, logbrew find checkout, logbrew grep checkout, logbrew \
122                         errors, logbrew actions, logbrew events, logbrew events checkout_failed, \
123                         logbrew release, logbrew releases, logbrew trace <id>, logbrew issue \
124                         <id>, logbrew resolve <id>, logbrew close <id>, logbrew ignore <id>, \
125                         logbrew reopen <id>.
126Read verbs: logbrew show logs, logbrew latest logs, logbrew last 10 logs, logbrew recent issues, \
127                         logbrew list issues, logbrew get issue <id>.
128Singular read aliases: logbrew read log, read release, show log, list issue, get release.
129Pasted IDs: logbrew issue_123 or logbrew <trace_id>.
130Examples: logbrew examples.
131Topic help: logbrew logs --help, logbrew help logs, logbrew help read logs, or logbrew help json.
132JSON mode: logbrew --json status and logbrew status --json both work.
133Use --json for stable machine-readable output.";
134
135/// Login command help text.
136const LOGIN_HELP: &str = "\
137Usage:
138  logbrew login [--provider github|gitlab|bitbucket] [--no-open] [--json]
139
140Starts browser login for the native CLI and stores a private local access/refresh pair.
141Authenticated commands refresh local auth once after an expired-token response.
142Use --provider github|gitlab|bitbucket to choose the account provider (default: github).
143Use --no-open to print the URL without opening a browser.
144--json prints the auth handoff without opening a browser.";
145
146/// Logout command help text.
147const LOGOUT_HELP: &str = "\
148Usage:
149  logbrew logout [--json]
150
151Attempts to revoke the stored server session, then always removes both local CLI credentials.
152If LOGBREW_TOKEN is set, unset it separately to fully log out.";
153
154/// Setup command help text.
155const SETUP_HELP: &str = "\
156Usage:
157  logbrew setup [--auto] [--yes] [--json]
158
159Detects supported project manifests and prints a non-mutating SDK setup plan.
160No files are changed. SwiftPM planning uses compatible releases from 0.1.6 for detected SwiftPM \
161or XcodeGen projects.
162Python planning detects Django, Flask, and FastAPI from bounded local project metadata. It emits \
163the public core and framework packages, the detected pip, uv, poetry, or pipenv command, and \
164explicit Python/framework compatibility requirements.
165Authenticated project creation (no dashboard sign-in):
166  logbrew projects create <name> --ingest-key-file <path> [--runtime <runtime>] \
167                           [--environment <environment>] [--json]
168Run that command after logbrew login. It stores the one-time ingest key in the chosen owner-only \
169file and never prints the key or its path.
170logbrew setup --create-project shows secure project-creation help and does not create a project.
171Package: https://github.com/LogBrewCo/sdk.git
172Product: LogBrew
173Dependency: .package(url: \"https://github.com/LogBrewCo/sdk.git\", from: \"0.1.6\")
174Python packages: logbrew-sdk, logbrew-django, logbrew-flask, logbrew-fastapi.
175Other detected runtimes use released SDK guidance until a structured CLI install plan is enabled.
176Aliases (same non-mutating plan): logbrew init, logbrew install, logbrew configure, logbrew sdk.
177Options: --auto records automatic detection preference; --yes records confirmation preference; \
178                          --json prints stable setup JSON.
179Supported manifests: package.json, pyproject.toml, Pipfile, Cargo.toml, Package.swift, \
180                          project.yml, project.yaml, .xcodeproj, .xcworkspace, go.mod, \
181                          composer.json.
182Package managers: npm, pnpm, yarn, bun, pip, uv, poetry, pipenv, cargo, SwiftPM, XcodeGen, Go, \
183                          Composer.";
184
185/// Status command help text.
186const STATUS_HELP: &str = "\
187Usage:
188  logbrew status [--json]
189  logbrew health [--json]
190  logbrew ping [--json]
191  logbrew doctor [--json]
192  logbrew doctor --project <project_id> [--json]
193  logbrew whoami [--json]
194  logbrew me [--json]
195  logbrew auth status [--json]
196
197Status checks API reachability and authentication.
198Whoami/me return the authenticated account identity.";
199
200/// Version command help text.
201const VERSION_HELP: &str = "\
202Usage:
203  logbrew version [--json]
204  logbrew --version [--json]
205
206Prints the installed CLI version.
207The CLI is a native Rust binary.";
208
209/// Auth workflow help text.
210const AUTH_HELP: &str = "\
211Usage:
212  logbrew login [--provider github|gitlab|bitbucket] [--no-open] [--json]
213  logbrew auth login [--provider github|gitlab|bitbucket] [--no-open] [--json]
214  logbrew status [--json]
215  logbrew auth status [--json]
216  logbrew auth whoami [--json]
217  logbrew auth me [--json]
218  logbrew whoami [--json]
219  logbrew me [--json]
220  logbrew logout [--json]
221  logbrew auth logout [--json]
222
223Use login once, status to verify API/auth state, whoami/me to inspect the authenticated account,
224and logout to revoke the stored server session when possible and always remove local credentials.
225Use --json for agent-readable auth checks.";
226
227/// JSON output help text.
228const JSON_HELP: &str = "\
229Usage:
230  logbrew --json status
231  logbrew status --json
232  logbrew logs --json
233  logbrew help json --json
234
235Use --json before or after commands for stable machine-readable output.
236Stable JSON keeps server response shapes for reads and mutations.
237Errors include ok, error, message, and next.";
238
239/// First-run examples and common workflows.
240const EXAMPLES_HELP: &str = "\
241Usage:
242  logbrew examples
243  logbrew help examples
244
245First run:
246  logbrew status
247  logbrew login
248  logbrew setup
249
250Troubleshoot:
251  logbrew logs error checkout failed --release checkout@1 --environment production
252  logbrew issues open --release checkout@1 --environment production
253  logbrew issue issue_123
254  logbrew explain issue issue_123
255  logbrew trace <trace_id>
256
257Live:
258  logbrew watch --json
259  logbrew watch --severity error,critical --json
260
261Agent JSON:
262  logbrew --json status
263  logbrew logs checkout failed --json
264  logbrew explain trace <trace_id> --json
265
266More help:
267  logbrew help logs
268  logbrew help issues
269  logbrew help watch
270  logbrew help json";
271
272/// Backend-owned project setup help text.
273const PROJECTS_HELP: &str = "\
274Usage:
275  logbrew projects [--json]
276  logbrew project [--json]
277  logbrew projects create <name> --ingest-key-file <path> [--runtime <runtime>] \
278                           [--environment <environment>] [--abandon-retry] [--json]
279  logbrew projects archive <project_id> --yes [--json]
280  logbrew setup --create-project [--json]
281  logbrew projects setup <project_id> [--runtime <runtime>] [--source api|cli|sdk] \
282[--environment <environment>] [--json]
283
284Reads the authenticated active project catalog without mutating project state.
285Human output is bounded to project identity, setup status, and latest activity. JSON preserves the \
286exact validated bare array.
287Project creation, setup status, and project-scoped ingest credentials are backend-owned.
288An authenticated CLI can create a project without dashboard sign-in or additional browser auth.
289logbrew setup --create-project shows this help and never creates a project.
290Project creation stores the one-time ingest key in a new owner-only file before reporting success;
291it never prints the one-time ingest key or its file path. An ambiguous attempt reuses the pending retry key only for the exact same request; --abandon-retry starts a new explicit attempt.
292Builds that cannot prove owner-only file permissions fail before sending the create request.
293No local install, quota, or usage state is created.
294Project setup uses POST /api/projects/{project_id}/setup/seen and preserves backend setup status JSON.
295Project archival requires explicit --yes, removes it from the active project catalog, and returns \
296success only for an empty 204 response.
297Project-scoped ingest keys stop authorizing new ingestion after archival.
298This soft-archive command does not claim hard deletion or restoration.
299Project-scoped SDK/ingest credentials are shown only when backend returns one-time credentials.
300Never use an account bearer token as SDK or ingest configuration.
301Next: run logbrew setup for the current non-mutating local plan.";
302
303/// Backend-owned usage and quota help text.
304const USAGE_HELP: &str = "\
305Usage:
306  logbrew usage [--json]
307  logbrew account usage [--json]
308
309Reads authenticated account usage, configured limits, quota state, and reset dates without mutating \
310account or billing state.
311Human output is bounded to plan, state, totals, limits, the driving limit, and one next step. JSON \
312preserves the exact validated account-usage object for agents.
313The CLI does not calculate or persist usage/quota state from local files.
314Next: run logbrew usage to inspect current account usage.";
315
316/// Read command help text.
317const READ_HELP: &str = "\
318Usage:
319  logbrew read logs [filters] [--json]
320  logbrew read log [filters] [--json]
321  logbrew show logs [filters] [--json]
322  logbrew list issues [filters] [--json]
323  logbrew get issue <issue_id> [--json]
324  logbrew read issues [filters] [--json]
325  logbrew read actions [filters] [--json]
326  logbrew read releases [filters] [--json]
327  logbrew read release [filters] [--json]
328  logbrew read traces [filters] [--json]
329  logbrew read trace <trace_id> [--json]
330  logbrew read issue <issue_id> [--json]
331
332Reads historical observability data for agents and developers.
333Singular read aliases: logbrew read log, read release, show log, list issue, get release.
334Recency counts are limit shortcuts: logbrew last 10 logs or logbrew recent 5 issues.
335Use --environment <environment> with logs, issues, actions, releases, or traces.
336Use --service <service_name> with logs, issues, actions, or releases.
337Filter aliases: --service-name, --env, --project-id, --trace-id, and --distinct-id.";
338
339/// Read logs help text.
340const READ_LOGS_HELP: &str = "\
341Usage:
342  logbrew read logs [--severity error] [--search checkout] [--release <release>] [--environment \
343                              production] [--service <service_name>] [--since 24h] [--trace \
344                              <trace_id>] [--project <project_id>] [--pagination cursor] [--limit \
345                              100] [--json]
346  logbrew read logs [filters] --pagination cursor --cursor-time <RFC3339> --cursor-id <uuid> \
347                              [--limit 100] [--json]
348  logbrew logs checkout failed [--severity error] [--release <release>] [--environment \
349                              production] [--json]
350  logbrew logs error checkout failed [--release <release>] [--environment production] [--json]
351
352Reads structured logs. Severity values are info, warning, error, and critical.
353Legacy severity aliases are accepted on input and normalized.
354Severity matching is case-insensitive. --level is accepted as a compatibility alias for \
355                              --severity.
356The logs shortcut accepts obvious multi-word search text, such as logbrew logs checkout failed.
357Shortcut levels can include search text, such as logbrew logs error checkout failed.
358Recency counts are limit shortcuts, such as logbrew last 10 logs.
359Explicit filters accept unquoted search text too, such as logbrew logs --severity warning checkout \
360                              failed or logbrew logs --search checkout failed.
361Use -- before literal flag-looking search text, such as logbrew logs -- --timeout --json.
362Filter by severity, message search, release, or trace_id to correlate logs with spans.
363--service-name <service_name> is accepted as an alias for --service <service_name>.
364Cursor pagination preserves JSON as {logs,next_cursor}; next_cursor is either {time,id} or null.
365Use --pagination cursor alone for the first page. Continue with --cursor-time and --cursor-id from \
366                              next_cursor.
367Keep the same active filters and pagination limit on every continuation page.
368Limit must be a positive whole number.";
369
370/// Read issues help text.
371const READ_ISSUES_HELP: &str = "\
372Usage:
373  logbrew read issues [--release <release>] [--environment production] [--status unresolved] \
374                                [--service <service_name>] [--since <24h|7d|RFC3339>] [--project \
375                                <project_id>] [--pagination cursor] [--limit 100] [--json]
376  logbrew read issues [filters] --pagination cursor --cursor-time <RFC3339> --cursor-id <uuid> \
377                                [--limit 100] [--json]
378  logbrew issues open [--release <release>] [--environment production] [--json]
379  logbrew issue open [--release <release>] [--environment production] [--json]
380  logbrew open issues [--release <release>] [--environment production] [--json]
381  logbrew open issue [--release <release>] [--environment production] [--json]
382  logbrew last 5 open issues [--json]
383  logbrew errors closed [--release <release>] [--environment production] [--json]
384
385Reads grouped issues across releases and environments.
386Status accepts unresolved/open, resolved/closed, or ignored, case-insensitively.
387Issue shortcuts accept status words, such as logbrew issues open, logbrew issue open, logbrew open \
388                                issues, logbrew open issue, or logbrew errors closed.
389Recency issue shortcuts can include status and count, such as logbrew last 5 open issues.
390--service-name <service_name> is accepted as an alias for --service <service_name>.
391Since accepts positive compact durations such as 24h or 7d, or an RFC3339 timestamp such as \
392                                2026-05-01T00:00:00Z.
393Cursor pagination preserves JSON as {issues,next_cursor}; next_cursor is either {time,id} or null.
394Use --pagination cursor alone for the first page. Continue with --cursor-time and --cursor-id from \
395                                next_cursor.
396Keep the same active filters and pagination limit on every continuation page.
397Limit must be a positive whole number.";
398
399/// Read actions help text.
400const READ_ACTIONS_HELP: &str = "\
401Usage:
402  logbrew read actions [--release <release>] [--environment production] [--name checkout_failed] \
403                                 [--user <distinct_id>] [--service <service_name>] [--since 24h] \
404                                 [--project <project_id>] [--pagination cursor] [--limit 100] \
405                                 [--json]
406  logbrew read actions [filters] --pagination cursor --cursor-time <RFC3339> --cursor-id <uuid> \
407                                 [--limit 100] [--json]
408  logbrew events checkout_failed [--release <release>] [--environment production] [--json]
409
410Reads product actions. Use distinct_id to follow one actor or session.
411Action/event aliases accept one positional name as the same filter as --name.
412--service-name <service_name> is accepted as an alias for --service <service_name>.
413Cursor pagination preserves JSON as {actions,next_cursor}; next_cursor is either {time,id} or null.
414Use --pagination cursor alone for the first page. Continue with --cursor-time and --cursor-id from \
415                                 next_cursor.
416Keep the same active filters and pagination limit on every continuation page.
417Limit must be a positive whole number.";
418
419/// Read releases help text.
420const READ_RELEASES_HELP: &str = "\
421Usage:
422  logbrew read releases [--release <release>] [--environment production] [--service \
423                                  <service_name>] [--since <24h|7d|RFC3339>] [--project \
424                                  <project_id>] [--limit 100] [--json]
425
426Reads release summaries with counts for issues, logs, trace spans, and actions.
427--service-name <service_name> is accepted as an alias for --service <service_name>.
428Since accepts positive compact durations such as 24h or 7d, or an RFC3339 timestamp such as \
429                                  2026-05-01T00:00:00Z.
430Limit must be a positive whole number.";
431
432/// Recent trace discovery help text.
433const READ_TRACES_HELP: &str = "\
434Usage:
435  logbrew traces [--project <project_id>] [--service <service_name>] [--release <release>] \
436                               [--environment <environment>] [--status <error|ok>] \
437                               [--since <24h|7d|RFC3339>] \
438                               [--min-duration-ms <milliseconds>] [--limit 100] [--json]
439  logbrew spans [filters] [--json]
440  logbrew latest traces [--limit 100] [--json]
441
442Lists recent distributed traces for incident investigation. JSON preserves the backend bare array.
443Status accepts error or ok, case-insensitively. Minimum duration is a non-negative whole number.
444Since accepts positive compact durations such as 24h or 7d, or an RFC3339 timestamp such as \
445                               2026-05-01T00:00:00Z.
446The backend defaults limit to 100 and clamps it to 1..500.
447CLI aliases --project-id, --service-name, and --env still serialize only canonical API query keys.
448Next: run logbrew trace <trace_id> or logbrew explain trace <trace_id>.";
449
450/// Read trace help text.
451const READ_TRACE_HELP: &str = "\
452Usage:
453  logbrew read trace <trace_id> [--release <release>] [--environment production] [--project \
454                               <project_id>] [--json]
455  logbrew trace <trace_id> [--release <release>] [--environment production] [--project \
456                          <project_id>] [--json]
457
458Reads spans for one distributed trace.";
459
460/// Read issue help text.
461const READ_ISSUE_HELP: &str = "\
462Usage:
463  logbrew read issue <issue_id> [--json]
464
465Reads one grouped issue with status, release, environment, and occurrence counts.";
466
467/// Watch command help text.
468const WATCH_HELP: &str = "\
469Usage:
470  logbrew watch --json
471  logbrew watch logs [--json]
472  logbrew watch issues [--json]
473  logbrew watch actions [--json]
474  logbrew watch --severity error,critical --json
475
476Aliases: tail, follow, and stream use the same live watch flow.
477Live watch uses a short-lived feed ticket and WebSocket stream.
478Transient disconnects reconnect with a fresh ticket and backoff.
479Server-side live filters are not sent yet; severity filtering is applied client-side.";
480
481/// Explain command help text.
482const EXPLAIN_HELP: &str = "\
483Usage:
484  logbrew explain issue <issue_id> [--json]
485  logbrew explain trace <trace_id> [--json]
486  logbrew explain <issue_id_or_trace_id> [--json]
487  logbrew issue <issue_id> explain [--json]
488  logbrew trace <trace_id> explain [--json]
489  logbrew <issue_id_or_trace_id> explain [--json]
490
491Fetches enough context for an AI agent to explain what happened.
492Pasted UUID/issue_* values are treated as issues; 32-hex/trace_* values are treated as traces.";
493
494/// Server-directed issue investigation help text.
495const INVESTIGATE_HELP: &str = "\
496Usage:
497  logbrew investigate issue <issue_id> [--json]
498
499Reads the issue first, then follows only its public trace-summary or related-log next action.
500The command is read-only and preserves issue scope in the directed request.
501JSON preserves the issue and exactly one directed result in a stable four-key envelope.";
502
503/// Apple native debug-artifact command help text.
504const NATIVE_DEBUG_ARTIFACTS_HELP: &str = "\
505Usage:
506  logbrew debug-artifacts upload <path> --project <project_id> --release <release> \
507                         --environment <environment> --service <service> \
508                         [--expect-image-uuid <uuid>]... [--dry-run] [--json]
509  logbrew debug-artifacts lookup --project <project_id> --release <release> \
510                         --environment <environment> --service <service> --image-uuid <uuid> \
511                         --architecture <arm64|arm64e|x86_64> [--json]
512
513Discovers and validates Apple dSYM, ZIP, or Mach-O debug objects locally, uploads every supported \
514exact identity, and verifies each identity with an authenticated lookup. Optional repeated \
515--expect-image-uuid values require an exact discovered UUID set for release automation. --dry-run \
516performs the same local validation without authentication or network access. Local paths and \
517filenames are never included in output or API metadata.";
518
519/// Set command help text.
520const SET_HELP: &str = "\
521Usage:
522  logbrew set issue <issue_id> unresolved [--json]
523  logbrew set issue <issue_id> resolved [--json]
524  logbrew set issue <issue_id> ignored [--json]
525  logbrew resolve <issue_id> [--json]
526  logbrew close <issue_id> [--json]
527  logbrew ignore <issue_id> [--json]
528  logbrew reopen <issue_id> [--json]
529  logbrew issue <issue_id> resolve [--json]
530  logbrew issue <issue_id> close [--json]
531  logbrew issue <issue_id> ignore [--json]
532  logbrew issue <issue_id> reopen [--json]
533  logbrew <issue_id> resolve [--json]
534  logbrew resolved <issue_id> [--json]
535  logbrew closed <issue_id> [--json]
536  logbrew ignored <issue_id> [--json]
537  logbrew open <issue_id> [--json]
538  logbrew unresolved <issue_id> [--json]
539
540Updates grouped issue status. Resolve/close map to resolved; ignore maps to ignored; reopen maps \
541                        to unresolved.
542Close is an alias for resolved.
543Issue-first, pasted-ID, and status-first aliases are useful after reading issue detail.
544Status values are case-insensitive.";
545
546/// Support-ticket workflow help text.
547const SUPPORT_HELP: &str = "\
548Usage:
549  logbrew support create --category <category> --title <title> --description <description> \
550                           [--project <project_id>] [--environment <environment>] \
551                           [--runtime <runtime>] [--framework <framework>] \
552                           [--sdk-package <package>] [--sdk-version <version>] \
553                           [--release <release>] [--trace-id <trace_id>] [--event-id <event_id>] \
554                           [--diagnostics] [--json]
555  logbrew support list [--project <project_id>] [--status <status>] [--source <source>] \
556                         [--category <category>] [--release <release>] [--limit 100] \
557                         [--pagination cursor] [--json]
558  logbrew support list [filters] --pagination cursor --cursor-time <RFC3339> \
559                         --cursor-id <ticket_id> [--json]
560  logbrew support show <ticket_id> [--json]
561  logbrew support context <ticket_id> [--json]
562  logbrew support reply <ticket_id> --context <text> --retry-key <key> [--diagnostics] [--json]
563  logbrew support close <ticket_id> [--json]
564  logbrew support reopen <ticket_id> [--json]
565
566Creates, reads, adds requested context to, closes, and reopens authenticated account support \
567                         tickets. Creation source is \
568                         always cli.
569Categories: sdk_install_failure, ingest_failure, auth_failure, project_setup, dashboard_issue, \
570                         docs_confusion, cli_issue, mobile_issue, billing_question, other.
571--diagnostics adds only binary, CLI version, operating system, and architecture. It never reads \
572                         arbitrary environment variables or files.
573Cursor continuations repeat --pagination cursor, all active filters, and the paired cursor from \
574                         next_cursor. JSON preserves the server response exactly.
575Context replies require a retry key. Reuse the key only when retrying the exact same context. \
576                         Chat, messages, and internal notes are not part of this command.";