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