Dashboard › cli › Distillation
cbaf0efe-01bb-4bbc-8f8a-37ef43af7a0c["lore_tm_v1_-fswfP7NXt7YaEJaPdQxRDTeYZrJPHW3glS_uoW0MMw","lore_tm_v1_EQXtIiohtAJQ7M9EOmzq5OtAkwmN1ygxZqAqoERxR_M"]
ec83887a16f780f32fba4b7d710bad262dba3a22, base tree 110d6530e57ca4fbfb2a3f98e52013d2668b5b5e, base parent e7beceb6ba09b64dc277ae1732df04e65500062b; head commit e565b1afb39a341605adc883de8812851de7d581, head tree d6c50e6e63351dd7e552c193199788fb455a5d47, head parent 4a1d5bad105c006193c68459175f5eb3c7f78e08; reviewed diff SHA-256 c3d7791d84ebb5ad57a949129d66f9147973d239432b7695c3f1d034a1956351.DO-NOT-MERGE with 3 MUST-FIX findings and 1 concern.packages/cli/src/commands/cli/upgrade.ts:325-333 keeps the existing channel for a pinned version, and upgrade.ts:1067-1077 routes a nightly target into standalone migration, but upgrade.ts:797-805 hardcodes channel: "nightly" when spawning setup; packages/cli/src/commands/cli/setup.ts:507-518 persists that value. Thus sentry cli upgrade --method npm 0.99.0-dev.123 reports the original channel while changing future bare upgrades to nightly, whereas curl installs preserve the original channel, making behavior installation-method-dependent.migrateToStandaloneForNightly() and use it for setup. Alternative if pinned nightlies are intended to switch channels: update resolution, persistence, result output, and changelog selection together.stable, run a mocked npm pinned-nightly upgrade, assert spawned setup arguments contain --channel stable, result reports stable, and persisted channel remains stable. Existing test/commands/cli/upgrade.test.ts:1185-1201 checks migration but not channel state.packages/cli/src/lib/upgrade.ts:118-137, but the delta adapter at packages/cli/src/lib/delta-upgrade.ts:127-155 checks only GitHubβs prerelease flag, with legacy releases bypassing even that filter; fetchRecentReleases() repeats incomplete filtering at delta-upgrade.ts:227-237. packages/cli/src/lib/release-notes.ts:427-448 accepts those prerelease tags during changelog normalization, and range selection at release-notes.ts:459-465 can include their notes. Consequently, a release such as cli@1.0.0-dev.1 with prerelease: false can enter stable delta and changelog inputs.1.0.0-dev.1 with prerelease: false between stable endpoints; assert fetchRecentReleases() excludes it, stable-chain resolution never requests its patch, and stable changelog output never includes its body.packages/cli/src/lib/release-notes.ts:441-445 accepts every unprefixed valid SemVer whenever prefetched input may be normalized. Although needed for normalized output from fetchRecentReleases(), this also accepts raw legacy releases when Toolkit is selected. The raw-fetch path rejects the same unprefixed Toolkit input, causing raw and prefetched behavior to diverge.fetchChangelog() with Toolkit selected and raw prefetched release 0.21.0, asserting exclusion; separately pass source-tagged or explicitly normalized Toolkit data and assert acceptance.AbortError. packages/cli/src/lib/ghcr.ts:75-89 requires both an aborted signal and error.name === "AbortError", but controller.abort(reason) is valid JavaScript and fetch may reject with that exact reason. Such cancellation may be retried or wrapped at ghcr.ts:121-144, ghcr.ts:393-400, and ghcr.ts:435-442. Current internal callers use ordinary abort(), so the primary path works, but the public signal-compatible API is incomplete.new Error("cancelled"), make fetch reject with signal.reason, and assert exactly 1 request plus identity-preserving propagation.