Dashboard › cli › Distillation
0f7c93b1-948f-4a87-a1e9-5748d75abd07["lore_tm_v1__2yowIv02XlpmaKhohoruq9VOrw2EehL4HNgdxCsH_Q","lore_tm_v1_IzjPnzmLH76FrkfmcBjT3_SFM6C-URT16eR6lxRYGrs","lore_tm_v1_ZcPmZK5ndbqnzIwLqF9iiiPc0dclCE_kzMdQOVIPziU","lore_tm_v1_xZB0K7qbrXAS_PUSzSnbTg97kSFAMOIE0-HDcRVrHwU","lore_tm_v1_RxM4lAwRgXeXNLmboe-ET7PHARpv3gYhhZSzaKqtEjQ","lore_tm_v1_txH0dlvvmCt4-vi1Qclh5CAbPpKRftkOWOjjwkwgya4","lore_tm_v1_PYXIMGGcs02s0URZirqYeOvew7FpeBPDPJEjJUc_otU","lore_tm_v1__sOG3zTEsw5xnK_0s5NsfxZrvckPItARTJCHdbesXN0","lore_tm_v1_HDoim73ad8xfgACCVvHmSEAXezXKxhkM6Ch5FJIZEOg","lore_tm_v1_77JnO1PPyILklDhGv_pDl_8BivxWz-muBrnV95SzEzE","lore_tm_v1_0q8YdI3p5GDdJ9YvCdkQ6094J23p0er0PBkxm1g6RbQ","lore_tm_v1_TBjZPttdX6gjudnthClcXdcWNOJUh8ARHehIyGpAHX8","lore_tm_v1_juSCZ0Kyxu2w0u5nte2yNp8YD4KL_XF9JEN0F6xWIP4","lore_tm_v1__5MdirSp4v-2vNnbBOaI_VfJgMBjYRg9TddtjFr0ySM","lore_tm_v1_YvBicbI5mOgzRTqJATa3A0Yf_G9XTQ9M1I9BTDV8vk4","lore_tm_v1_x8sS9iqDog0mcVYYc1CH2xf_kg6usfUvCJgM2hDTSJU","lore_tm_v1_aggqA31XH-KDNtqaQ8A61Z9lCw-G6Sjho3pouJZO_U8","lore_tm_v1_W6Z6CTHHKNJ4uHtpIokkPEs9gbcZw8ND8fHyt-2tkis","lore_tm_v1_JsXSgIagPcWANZHTYzcw-5jACU4bBi006n4ksTUIZiQ","lore_tm_v1_nQEjhT646KPQFYNdEBN2Y_VwMHxLBxqokNyTKcY-MjI","lore_tm_v1_KKKYaTacm4p1V2oQUMUz2VJGmvA0WzVIL5qBkx_rsYc","lore_tm_v1_2XhMJHzC4G7ivathK921NHkTZgn0AgxJ5EhWjpY3n38","lore_tm_v1_Wam7uva4CFjomAYebgqvbBFTbTKNmRQ3BofULriZ-FE","lore_tm_v1_vzLyV4B_Qmmy8pevKQVhlYmLLbbyXbXryFlq6gLoCQM","lore_tm_v1_SCqt8iZE3Va3PPAQm_YtQfRVpCuKXoTIg1DUaGBpQeA","lore_tm_v1_C--p83bqLVXb63D5Yl--TFW0vGVyuPMqfistCMY0myo","lore_tm_v1_H427R33DWTqrDZ53jMEUjppHiAobDZir3a1dKyuiS3Y"]
packages/cli/src/commands/debug-files/upload.ts, collectScanPaths(paths: string[], derivedData: boolean): string[] appends Library/Developer/Xcode/DerivedData under homedir() only on macOS and only when the directory exists; otherwise it warns and returns explicit paths unchanged.--derived-data path handling ensures the stricter scanPaths existence check is “never tripped by an absent DerivedData directory.”packages/cli/test/commands/debug-files/upload.test.ts verifies --derived-data is additive: an explicit fixture directory is still scanned regardless of whether DerivedData exists, producing exactly 1 JSON file and exit code 0 under --no-upload --json.packages/cli/test/commands/debug-files/upload.test.ts verifies dry-run behavior: --no-upload scans a directory, reports KNOWN_DEBUG_ID, exits 0, and under --json reports uploaded: false with the file.packages/cli/test/commands/debug-files/find.test.ts verifies sentry debug-files find --no-cwd --no-well-known with no IDs exits successfully; unknown --type bogus exits nonzero; and an unmatched requested ID prints "Missing debug information files" and exits 1.debug-files find matches with type: "breakpad" and its ID while still not satisfying the request, leaving that ID in missing and producing exit code 1.packages/cli/test/commands/schema.test.ts documents the getsentry/cli#1424 fix: resolveResourceQuery() no longer dumps the full resource list when a resource query has no match.resolveResourceQuery("committers") throws ResolutionError, not OutputError; its message says resource "committers" does not exist, suggests the close resource "commits", and has a nonzero exitCode. Garbage "zzzznomatch" and unmatched glob "zzzz*" also throw ResolutionError.resolveResourceQuery("issues") returns nonempty endpoints all belonging to resource "issues"; resolveResourceQuery("issues", "getOrganizationIssue") returns one endpoint for "issues"; and glob "issue*" returns matching endpoints.resolveResourceQuery("issues", "xyznonexistent123") throws OutputError whose data has kind: "endpoints" and contains only "issues" endpoints.packages/cli/test/commands/cli/defaults.test.ts verifies defaults storage independently persists organization and project values, supports replacing "org1" with "org2" without changing "proj1", clears organization via setDefaultOrganization(null), and returns undefined for an unset telemetry preference.feedbackCommand.func throws for empty or whitespace-only feedback with "Please provide a feedback message."; with telemetry disabled/no DSN it throws "Feedback not sent: telemetry is disabled."packages/cli/test/commands/send-envelope.test.ts establishes that deprecated sentry send-envelope always throws CliError directing users to sentry event send --raw; it includes the supplied filename such as my.envelope, or uses sentry event send --raw <file> when no files are supplied.packages/cli/test/commands/monitor/run.test.ts verifies missing command, missing monitor slug, and a dependent flag such as "max-runtime": 30 without --schedule each throw ValidationError; dependent-flag validation occurs before any check-in is sent."0 * * * *" and "max-runtime": 30 includes "monitor_config" and the cron expression in the opening check-in body, but omits "monitor_config" from the closing check-in body.packages/cli/test/commands/docs.test.ts verifies docs query assembles "How do I trace?", auto-detects safe context { frameworks: ["nextjs"], languages: ["javascript"], sentryConfigured: true }, passes that context to queryDocs, and returns it as detectedContext in JSON alongside the answer and sources.withProgress with json: true, interactiveOnly: true, message "Searching Sentry docs…", rotationIntervalMs: 4000, and rotating messages in order: 1. "Finding the relevant bits…", 2. "Cross-checking the details…", 3. "It’s getting there…", 4. "Collecting trusted sources…".query, and alias search to the same docs query command. docs list deterministically calls listDocs("nextjs tracing", 5), outputs "Tracing", and does not invoke progress rendering."Tracing" at https://docs.sentry.io/platforms/javascript/tracing/ with description "Configure tracing."; the query answer links to that page and includes it under ## Sources.parseDashboardPositionalArgs([]) throws ValidationError mentioning "Dashboard ID or title"; one argument such as "123" becomes dashboardRef: "123" with targetArg undefined."123" and title "Error Rate" prints "Added widget" and the title; supplying only "123" throws ValidationError containing "Widget title is required"."Created dashboard" with "My Dashboard"; JSON includes id: "123", title: "My Dashboard", and a URL containing "dashboard/123". Missing title throws ValidationError containing "Dashboard title is required"."my-org/", "My Dashboard" resolve to createDashboardSpy("my-org", { title: "My Dashboard", widgets: [], projects: undefined }); failure to resolve the organization throws ContextError.packages/cli/test/commands/trace/view.property.test.ts, parseTraceTarget([], HINT) always throws ContextError.traceId, the result of parseTraceTarget([traceId], HINT) always has traceId property defined and its type is "string".parseTraceTarget() is deterministic for [target, traceId]: repeated parsing of the same tuple produces equal results across DEFAULT_NUM_RUNS.parseSpanListArgs([]) selects { mode: "project" }; "my-org/my-project" selects project mode with that exact target, and a bare "my-project" also selects project mode.parsePositionalArgs() for span view auto-splits a single traceId/spanId argument only when both sides are valid hex IDs; it normalizes uppercase IDs to lowercase and returns kind: "resolved", trace target type "auto-detect", and the span ID in rawSpanIds.org/traceId or multi-slash org/project/traceId forms when span IDs are separate; these return kind: "deferred" and preserve rawTraceArg and rawSpanIds.ContextError because no separate span IDs remain.org/project/spanId with the trace ID missing (CLI-1GP), span-view parsing throws a trace-focused ContextError that mentions "trace ID" and the supplied span ID, and does not incorrectly suggest span list org/project/<spanId>.org/project/badTrace/spanId, span-view parsing surfaces trace-ID validation detail in a ContextError.ContextError for empty arguments and for a lone trace ID without span IDs; the empty-argument message mentions "Trace ID", while the missing-span case suggests "span list".