Dashboard › cli › Distillation
3ec1d5be-ce74-4c35-8457-c117f6ee1a1f["lore_tm_v1_HpUWueNKCS2BeagviSavbqW4XrHrM8B5PEqLafxikrQ","lore_tm_v1_zaxv36BBxIVlXR6T1KexVOwrBzsQSPSvEbPUfv74ivc","lore_tm_v1_dTe_bRO1L1cdYnBuXMF5_irQ9uZS326zynIZsjS2OU0","lore_tm_v1_zAQnMn7TyYjQCKMTJNiKnsxSGICRjpz-_Fk3FvwaqE0","lore_tm_v1_nwg91uok0sJRc3jXjn69pzYIsztg7Md4KCGQx46i9Ig","lore_tm_v1_oYh9RJ61RHD2gqVWv1kFVUeLNYlqynn0Vx7XP3vBej0","lore_tm_v1_rR3rKzy0ZsENcIk3HASeMHXSuXpfAvNRvRAmW6S9u_o","lore_tm_v1_U_PlHZBSppS9IXAc879fVVvoz9hsn4hJFksURzw6xm0","lore_tm_v1_5_uW4rPEVej6-YsBYBJlBaj1Sppg1xC_Ku290LrB-gI"]
Date: Sep 10, 2026
packages/cli/install accepts the first cli@X.Y.Z tag_name and never inspects GitHub prerelease or draft flags, unlike the TypeScript resolver; therefore a prerelease with a stable-looking cli@ tag can be installed as the latest stable CLI.BatchProvider.submit() returns null for non-401/403 HTTP errors including 404, so submitBatch() treats unsupported /v1/messages/batches endpoints such as MiniMax as transient and the provider is never disabled, causing a wasted HTTP request every 30 seconds forever."not-found" from both Anthropic and OpenAI submit methods; handle it in submitBatch() using provider-level disabledBatchProviders: Set<string> keyed by provider name; persist through setKV() in kv_meta; restore at startup; and add fast-path bypasses in both flush() and prompt(). Provider-level disabling is required because the URL is fixed at construction and there is one provider per process; groupKey() is authFingerprint(cred)|providerID.ValidationError must always pass field because omitting it collapses unfielded errors into one fingerprint.classifySilenced in src/lib/error-reporting.ts only silences ApiError statuses 401β499; wrapping errors in generic CliError loses status and causes errors such as 403 to be captured. Required rethrow form is new ApiError(msg, error.status, error.detail, error.endpoint) with a terse message because ApiError.format() appends detail and endpoint.ApiError fingerprint rule keys by api_status + command.src/commands/cli/setup.ts must never crash setup and are enforced by bestEffort(stepName, fn). On failure it calls warn(stepName, error) and captureException(error, { level: 'warning', tags: { 'setup.step': stepName } }); runConfigurationSteps() applies bestEffort() independently to all 4 steps.$SENTRY_INSTALL_DIR, 2. ~/.local/bin when it exists and is in PATH, 3. ~/bin when it exists and is in PATH, 4. ~/.sentry/bin fallback. The welcome message appears only for a fresh install, not an upgrade.packages/cli/test/commands/cli/upgrade.test.ts:1279: the mock dispatcher branched on String(url).includes("api.github.com"), a hostname-substring check, rather than an assertion. The condition was replaced with an exact parsed-origin check.packages/cli/src/lib/ghcr.ts:90-96: rethrowExternalAbort() recognized a generic AbortError while the external signal was aborted but threw the caught fetch error rather than externalSignal.reason. Both blob request paths at lines 400β402 and 442β444 were affected, so primitive, object, or Error abort reason R could be replaced by distinct generic AbortError E.rethrowExternalAbort() to throw externalSignal.reason whenever it identifies an external abort, with regressions for both initial GHCR and redirected-storage blob requests using separate primitive, object, and Error reasons; each should assert identity via rejects.toBe(reason) and one request per stage.41dfbb7438cc2b86867afdf28edd92856a35254f, and all 16 changed source/test objects. It issued DO-NOT-MERGE; no tests were run because review was limited to immutable Git objects.signal.reason; prefetched changelogs require the private normalization brand plus matching structural source key; raw or mismatched lists are rejected; stable targets choose stable changelogs independently of tracked channel; pinned nightly targets preserve the tracked channel.packages/cli/src/lib/ghcr.ts, with regression coverage added in packages/cli/test/lib/ghcr.test.ts. The helper now throws the callerβs exact abort reason even when fetch throws a distinct generic AbortError; identity coverage exists for both the initial GHCR blob request and redirected blob-storage request.