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