Collect a Support Bundle
Run the collector on the Runtime host:
moveit_pro support-bundle
For a deployment started with moveit_pro run --instance NAME, pass the same name so the bundle reads that instance's logs and service state rather than the default deployment's:
moveit_pro support-bundle --instance NAME
To find an instance name, list the instances. The listing reads saved instance assignments, so it includes stopped instances:
moveit_pro run --list-instances
Named-instance logs are stored below the default deployment's log directory. Collection without --instance leaves them out and names those instances in a warning; collect each instance involved in the incident with its own --instance command.
Collection needs no prior setup. It packages the evidence that MoveIt Pro has already retained on the host, so it cannot include output that was never written or that retention has already removed.
The command writes a gzip-compressed tar archive (.tgz) under ~/moveit_pro_support_bundles/ and prints its absolute path, size, category inventory, and redaction counts. The filename contains the MoveIt Pro release, collection level, and UTC timestamp. Archives are readable only by the invoking user. Collection works offline and with the Runtime stopped; unavailable local queries are recorded in manifest.json. Live ROS enrichment remains bounded: ros2 doctor can run for up to 30 seconds, parameter collection for up to 60 seconds, and other queries for up to 3 seconds. Journal collection can run for up to 30 seconds. A timed-out query is omitted whole.
Collection Levels
| Level | Contents |
|---|---|
minimum | Allowlisted release and host metadata, numeric resource totals, available service exit/OOM/health state, and capture/retention status. No raw log text or Objective failure reason. |
default | Minimum plus available console, ROS, journal, Objective, decision, and host configuration text. Known secret patterns are scrubbed. |
extended | Default plus explicitly selected recording files, each in a separate .tgz sidecar. Selecting this level does not start recording. |
Set the level and exclusions for one collection on the command line:
moveit_pro support-bundle --level minimum
moveit_pro support-bundle --exclude-category host_config --exclude-category objective
These options apply to this collection only. Each --exclude-category replaces the configured exclusion list for that invocation; repeat the option for every category to omit. To change the saved defaults instead, use moveit_pro support-bundle config as described in Diagnostic Settings.
Select a recording for an Extended collection with --recording. A recording belongs to one incident, so config has no equivalent:
moveit_pro support-bundle --level extended --recording /path/to/incident.mcap
Artifact Categories
| Category | Evidence | Protection and remaining exposure |
|---|---|---|
console | Retained initial console segment, older and newest tails, available recovered container output, and capture errors | Known credentials and private-key blocks are scrubbed. Application names, paths, and secrets in unrecognized shapes may remain. |
ros | Recent per-node ROS log files; best-effort live node/topic listings, parameter dumps, and ros2 doctor output | Known secret patterns are scrubbed. Customer names, paths, parameters, and ROS graph contents may remain. |
journal | A bounded journal query over the selected window | Known secret patterns are scrubbed. Other host services' messages may remain. A timed-out or oversized query is omitted whole. |
objective | Retained Objective XML and YAML artifacts in managed run directories | Text is scrubbed; customer application logic remains visible. Collection does not create planning snapshots or enable Behavior Tree tracing. |
decision | Available decision_log.jsonl Objective failure records: Objective name, failure class, reason, execution ID, and error code | Known secret patterns are scrubbed. Objective names and failure reasons may contain customer application data; excluding the objective category does not remove Objective names from these records, so exclude decision as well to leave them out. A line that is not a complete record, such as one cut short when the Runtime stopped mid-write, is left out, and the manifest counts it in skipped_lines. |
host_config | Hostname, robot configuration package identity, service image references, and available CycloneDDS configuration | Text is scrubbed; deployment identity and network addresses remain visible by design. |
crash | Explicitly selected existing core/minidump files | Off by default at every level. Process memory is unsanitized and may contain credentials, keys, and customer data. |
recording | Explicitly selected existing sensor recording files | Extended only, as separate sidecars. Binary payloads are unsanitized and may contain images of the work cell. |
Console and ROS logs are separate sources. Console output contains stderr backtraces that may not appear in the per-node ROS files. Missing producers are reported as unavailable; the collector does not fabricate a missing traceback or failure record.
moveit_pro support-bundle --include-category crash --crash-file /path/to/core
The collector does not install core capture or symbolicate a dump. Matching debug symbols and a supported core-capture setup are required for offline crash analysis. Opting into crash alone does not select an arbitrary file from the host.
Diagnostic Settings
moveit_pro support-bundle config
moveit_pro support-bundle config --retention-days 14 --level default
moveit_pro support-bundle config --exclude-categories host_config,objective
moveit_pro support-bundle config --exclude-categories ""
config alone reports the effective settings. Its --retention-days, --level, and --exclude-categories options change the saved defaults that every later collection uses; --level and --exclude-category on a single collection override them without saving. Settings use the existing host CLI configuration file. The command reports each effective value and whether it comes from the environment, configuration, or default. Environment values take precedence. Invalid settings are rejected before writing any of the requested updates.
| Variable | Default | Accepted values |
|---|---|---|
MOVEIT_DIAGNOSTICS_RETENTION_DAYS | 14 | Whole days, 1 through 3650 |
MOVEIT_DIAGNOSTICS_LEVEL | default | minimum, default, extended |
MOVEIT_DIAGNOSTICS_EXCLUDE_CATEGORIES | Empty | Comma-separated Default categories |
The window selects evidence for collection. It does not establish a complete retention guarantee or delete producer files. Existing byte and run-count limits can shorten retained history, and console rotation can remove middle bytes. The manifest reports dropped bytes, capture completion, known evictions, and unavailable retention-policy information. An old retained timestamp alone does not prove uninterrupted coverage.
The manifest compares readable host settings with the candidate limits: journald SystemMaxUse=1G and RuntimeMaxUse=256M, Docker's local driver with max-size=20m and max-file=5, and MoveIt Pro logrotate settings of 100 MiB with five files. Missing or divergent settings are reported without changing the host. Container overrides and logrotate file coverage still require platform validation; matching settings alone do not prove retained coverage. RT kernel status is read when available. License validity remains unavailable without a structured producer; the presence of a key does not prove a valid license.
Manifest and Size Limits
Open manifest.json inside the archive before transferring it, with an archive manager or with tar -xzOf <archive> manifest.json. It records the schema version, collection choices, allowlisted environment and service data, run capture status, included-file sizes and SHA-256 digests, redaction rule counts, and omission reasons. Generated archive paths keep source filenames out of the inventory. Included text can still contain customer paths.
The collector applies a 1 GiB per-artifact, 2 GiB per-run, and 10 GiB total payload budget. An artifact that exceeds the available budget is excluded whole, with its observed size and effective limit recorded. The trusted host home-directory alias is resolved before the protected directory walk; links within artifact paths are still rejected. Files that change during collection, symlinks, non-regular files, invalid UTF-8, binary content in a text category, and text lines over 1 MiB are omitted. Review omissions alongside the available evidence. Inventory growth is bounded separately: build.inventory_limit_reached marks omitted files or run metadata, and service_history_limited marks a trimmed service timeline. The collector keeps the newest 64 observations per service when a producer exceeds that limit.
Archive generation needs space for the archive and one staged artifact at a time. build.peak_temporary_bytes_before_manifest records the measured peak of the archive, sidecars, and staging file before the manifest is appended; manifest_reserve_bytes reports the separate manifest headroom. These figures describe this collection, not a production disk estimate.
The command reports whether each archive fits the 50 MB per-file ticket-attachment ceiling. Ticket file-type and account restrictions can still reject a file that fits. Recording sidecars are transferred separately. For an oversized main archive, inspect the inventory and regenerate with selected categories excluded, then arrange the transfer path with support.
Review and Transfer
Environment values with names ending in _KEY, _KEY_FILE, _TOKEN, _SECRET, _PASSWORD, or _CREDENTIALS are never included as environment metadata. Known values appearing in selected text, recognizable API tokens, bearer credentials, and private-key blocks are replaced. The manifest records substitution counts without the matched values. Raw Docker inspection JSON, environment lists, labels, mounts, and health-log text are excluded.
Pattern scrubbing cannot recognize every secret. Inspect the manifest and selected files, then regenerate with sensitive categories excluded if necessary. Core dumps and recording sidecars are unsanitized and require particular care. Collection sends nothing automatically. To transfer the reviewed files, sign in to support.picknik.ai and submit a request with them attached, up to 50 MB per file. Do not email bundles: inbound email drops an attachment over its size limit while still creating the ticket.
moveit_pro export_logs and the Desktop App's Ctrl+U shortcut remain raw ROS-log exports. They do not apply this collector's category selection, manifest, or scrubbing rules.