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