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