Dashboard › cli › Distillation
d8a8cc20-9d94-4383-8e31-b85defbf5894["lore_tm_v1_8kp3uaPM-_G4QqNI-GgzjUccmulsUTKltP4aZbXrTd0"]
packages/cli/src/lib/release-notes.ts replacing the fixed GITHUB_RELEASES_URL dependency with source-aware imports getGitHubReleasesUrl, PRIMARY_UPGRADE_SOURCE, and UpgradeSource from ./binary.js.packages/cli/src/lib/release-notes.ts importing isNormalizedForSource and normalizeStableReleases alongside GitHubRelease from ./delta-upgrade.js, enabling stable changelog processing to normalize and filter releases for the selected source.source?: UpgradeSource configuration to stable release-note/changelog processing and to FetchChangelogOptions; fetchChangelog defaults the source to PRIMARY_UPGRADE_SOURCE.buildNightlyChangelogSummary(commits, fromVersion, toVersion, maxItems?), which parses conventional commit messages with parseCommitMessages() and builds sections via buildSummaryFromSections().customFetch(url, { headers: getGitHubHeaders() }) failures log "Failed to fetch nightly commits" at debug level and return null.packages/cli/src/lib/version-check.ts behavior rate-limiting new-version notifications with NOTIFICATION_INTERVAL_MS = 24 * 60 * 60 * 1000, so the banner appears at most once per 24 hours instead of on every invocation when the cached latest version exceeds CLI_VERSION.getsentry/cli#785 item #10.shouldSuppressNotification(args: string[]) logic that suppresses notifications for any argument in SUPPRESSED_ARGS and for managed cli subcommands in SUPPRESSED_CLI_SUBCOMMANDS, resolving the cli group and subcommand past interleaved global flags such as --verbose cli setup and cli --verbose setup.checkForUpdateInBackgroundImpl() does not block, starts a detached background fetch, reports failures to Sentry, and never throws because errors are caught and reported to Sentry.checkForUpdateInBackgroundImpl() behavior where failures from shouldCheckForUpdate()—including database-access failures—are handled with Sentry.captureException(error) and an immediate return so the CLI does not crash.isStderrTTY() as Boolean(process.stderr.isTTY) and stated update banners are human-only signals that must be suppressed for non-TTY stderr, including scripts, CI logs, pipes, and editor-captured output, matching gh CLI behavior.getUpdateNotificationWithCopy(formatNotification) returns null when the CLI is up to date, cached version information is absent, the notification is rate-limited, stderr is non-TTY, or an error occurs.getUpdateNotificationWithCopy() never throws; errors are caught and reported to Sentry.getUpdateNotificationWithCopy() side-effect behavior: when it returns a non-null notification, it persists last_notified = now through markUpdateNotified, causing subsequent invocations within the rate-limit window to return null.