Dashboard › cli › Distillation
8fece8a3-4606-449e-9515-677dc5906ac5["lore_tm_v1_Zn14OUwe0DaKfA9XC2DDH-_MfZQyqTmyj1APmDpq090","lore_tm_v1_y5QQTv7vhu5utO8WWJb7MpBnRHNRgB4SatPQg7GZsAc","lore_tm_v1_2HRhXZdCZAGExcShjX4ZsowOltdujlOfArhBDQYnDvk","lore_tm_v1_lEpb7vT2NeYgco3i77mJaBPtnhLaHM4cUk64J84PJy0","lore_tm_v1_WQycsZzur9JxVuN7Z5_u6tfmerX3xcZZqwSzv_-jD8M","lore_tm_v1_0-qUL9KFsdYRreBt2vZIDsZLOvRrvFS0CVA_0U4P3oM","lore_tm_v1_mXO6zKMp8LlWdwGLsnEFeuwpI6ccqAxQNNrFPo7HfuU","lore_tm_v1_E2S7qF_X7j2ufyJ_2oRklvrC8WeGvz7bfbKCCzOpX7E","lore_tm_v1_LD0GCWC3QwFmDOSoZsrn2woIu0reAdHI1d9gDZgsByA","lore_tm_v1_ddJCFL0GSFvl_hEp5R-fpQHD-EhGaQFdu5ma9ipLwoo","lore_tm_v1_gTZV8iwZbklaqe8JM_6gLlPt4AKcuM6glmgV_eFlUtE","lore_tm_v1_PKiNHi8EUKlxlwicZulHjeQteh0m7fIA5Bd_L4ddVwo","lore_tm_v1_ngHnQp93J-tPY8gbaPvnc-liEdoqJiLxRb5jSjJ5Htk","lore_tm_v1_5uUSYsAZ2jGeoRZd-Zb4u3gQWH0eN0mMaiaHhk9Aikg","lore_tm_v1_E_cj-BO7V9rj6WIRKJj3Nu2DGdxjW55sLtmeUPcdAsY","lore_tm_v1_OJRLuIGJs2iZPHhERXvCa8Ll2qee7F7ICKxOek94930","lore_tm_v1_5DK0upI0oQWXIPu4MlSQ_zDvCyQ9NVySfqI7ui63xk4","lore_tm_v1_ToEUqlH-tqb9mNeRU5DbcxXUeGb6FMYUgoClcR0Vv-k","lore_tm_v1_lg-BlyX4u_FXAtS1z0mogCfMPENr3oM1VRIahcLY9Y4","lore_tm_v1_fIT-8o83ItGrRpmkaYr1-1YdQqaoytjxW0GtMDlCz-8","lore_tm_v1_rBy-nQZClPT8WNxkpE6q8uHmNmeWBeyTMvakuoj6q0w","lore_tm_v1_AuN2tx3m2KekVVbUB_b-7bxlxCbAUU49ynpCkY7P04k","lore_tm_v1_9pGOKy9eP9b3vAnpR929TiPWzO4GlFDt6kAYBuXYq0M","lore_tm_v1_9t11c7D1AhHCfwuqZCJkLgJ0CNDSNdIBk-V2tXGsHsU","lore_tm_v1_c5c6Ogf588bpPKWE2lBHEgO0hT8MKAvhy8dFrupkmKo","lore_tm_v1_6HQ0ziw-lBRA-w_YN-OminGt6SXtQi6av6TVOnpWqHs","lore_tm_v1_Eh1iBh_9SyG4h0-6NEBf57Tlm2reLd8rztQjVmG4vBE","lore_tm_v1_tCZ74p3s27Fw_5xRRIkwHiK_pSLzDqtaql6CqcimGDU","lore_tm_v1_lIqKm6a0MV5xdnuIrjSrVgzaIBhrPv8K6N1gPJcIBms","lore_tm_v1_weH0TQWCHRmqdLWBC26OWkkEMSlVib84ilHAlKW0Ix0","lore_tm_v1_cI7pIYJH8TVQLALrVtlLHjgVoWXvvW3P2WHIfdceUpg","lore_tm_v1_a9c4vpO1KAz7K8RTuIV_Xo6F9uVHUZvOI4_QEqhjAOg","lore_tm_v1_NWFoC4veJRIYa1Pmsc4PCatWV9-g4yaQiazuLbG3H7M","lore_tm_v1_7gSueD_pj33SFLxf1Imxr5sS-HGneyqZgv4lk1IyzLU","lore_tm_v1_Wpb-M2HTiRr8Nwx0RitCnVdVWVCaIJ0rH_7Kh0llXPY","lore_tm_v1_LNBmXXxIFYwXKVQmFGjutx22KVw_tQqsImN8wjBNQwg","lore_tm_v1_9KWSTNQl23CmCjLsJu7kfSIZWHIKrqpDtAHnJqImREI","lore_tm_v1_bs9hgIjUicob9LfTLLTwS-iOOouKUSy4q24u4AZQYio","lore_tm_v1_0Cw2SiU9GU5o7EWXuzo06t5E8np33aRXis7f7XWDmaY","lore_tm_v1_2XbvLcsyAsgMccHrpqqjVzmBxLGAerSDumFfmuWzRkg","lore_tm_v1_LxZKN06MjSrQQipToC9UUe7q9jSOkPs_edRK1BQ-NA8","lore_tm_v1_T97M4Dovb_XHRE5PXQxKPpLKov5WNpVILMfVksonyfM","lore_tm_v1_VoxAjFDMkZT7A0a_2B4DGQl6UMxNzQf1E-zTsl6pJQA","lore_tm_v1_w9AyV35NiB0uMhKqgozoTI-ewUnyqmM91EAzbw3qc84","lore_tm_v1_YLzeLwpO95wfMG8Q432WPxyNHNee3-YIsEp9fUS3yZo","lore_tm_v1_4HdjBXW3y4ks_UpXT4Ggdw5HrF8u11TwRAKR2zgKKdk","lore_tm_v1_rnJLBQ8bPPGeauxIhZxzU75Yx_hoDEuQtUSeat0camY","lore_tm_v1_aipOG4spSHLdlgN_2jZ7r67OlnU1qNGqpmnZzbn5HRo","lore_tm_v1_Gq2-qXt0jLsnLcNG5JEQHHgsxQHIh4Th8c5GNLZBGEY","lore_tm_v1_9ds2jS_yhx0iB8tw8MqDyNiJUvM-lsXfWplfdKa1UUA","lore_tm_v1_9HH4jd0_JDbioNIitITwCKYnxrIlGK_x-RUHSGDgljI","lore_tm_v1_FiWs-rx9WIyDU8KHRNnWFtzOTuHc4YVB6SaEd16H4uM","lore_tm_v1_Jpj1lJ8IQwyIWs5ZheGrqJG-yKhsn8XE1RTRYCX1Ijs","lore_tm_v1_maZBzaMlG9SxMPfLAItWFSPskIV6zACRHMY6d7SGpwQ","lore_tm_v1_Oq_07893R8MJzPtxaCV-0KIJOIHPAU87NyalasWeR-4","lore_tm_v1_z851bpOtKgpxvVOXi-pvj8cm1cGxRGGs2_TE_oeBXL8","lore_tm_v1_hQ4XZ-XIUN2xFsK5fM4DE4_y0E2sDEQph0igGeKE-V0","lore_tm_v1_NereQraFCUtPeruXTA2EOdgrHbcRThWrFQCB8tnOmag","lore_tm_v1_it3P0VehiiJHIeFaipWBtmjKsYPbqWyifYA-C-JdT_k","lore_tm_v1_v_jrrTVklbwxYhSi8KhTikwiuyL0qGVpbS3spFwunIc","lore_tm_v1_P63bwkmZ3iBYXsgnC4sb5K0XHb2NG-pI3RQrRAiOrMI","lore_tm_v1_K2aq_8xK6h92t0L3jhyJhfPFFQqJYh5rTB3ANmCuX0Y","lore_tm_v1_0LtBPiKmvx7u4LKIF91hxqPdwELUbpW8nfEQ9fjo0UI","lore_tm_v1_yTMIJy_VvKSoifEr9w73SnFLJuSf2HZD2DF7RCECWDg","lore_tm_v1_6WFivWArYPPlyx-CnwQ8VCjAB1JYzPvkTYm9iNFEqKU","lore_tm_v1_xsSz_X7tQIZpwOnzELQcXM0vfpdMmwTEj1eCzGATAtk","lore_tm_v1_ZxXsfL-Sn5hsEhnaVZ9oLBeHK3zqPYWmCGXH31URIAk","lore_tm_v1_5B0jSAXtgEFTe7YViXI4MvANu5r0M_b5TRRURp5BZ38","lore_tm_v1_7AmnydyT_fxo4v8ANQhZj0duvX8dYBqBiwBHVXTJno4","lore_tm_v1_arcBRq0JSWIxqkdWHkoMfBHNrSY5ZTWWfC00MjYwyZQ","lore_tm_v1_9KJ6CEKufkE1dXj5pBQnz30CJqIwinmUmLrfSZoaMh8","lore_tm_v1_H_3edEui042Fzziz8quR9R0okQEAx2glCxmuIg3nL2U","lore_tm_v1_rdCEySSb2sjyuNZUvBpHGMcmoI45nEn5ZF5AqnNsiKQ","lore_tm_v1_USAmQDYChS4gnTRax_09_dl7CrtJPMqpJQUXs6cdPFA","lore_tm_v1_tP-7UAVrE7BALAkX7EGjs4DMysizl0KBTE2AxmHlfms","lore_tm_v1_OZawRrHGhjt7n3sMNWuK6moPssnGPMyr930E5dlyQnA","lore_tm_v1_vnIPFC7HaTkh2WPANynegOg6MLUIZXKePghgJTzC7Eo","lore_tm_v1_YNLogI7xI3VKO9hMOeFiB8_-Au1q3IqveejQji2xI5E","lore_tm_v1_HVumCQLOAbQkAxro_Yee8DuHxeVufegFkrvDsA1bL4o","lore_tm_v1_9G4ZOfjH4QYgWl7j8xvKihf6zOwws-kv_UJXCBfuhK8","lore_tm_v1_W789N54XeU-CDPolNDw36F7SiBuZj_yNL3BrOUHclWc","lore_tm_v1__9l84bn41nOFHwvwQX6KgpMCnbEmVqXwcHmzSzT35sQ","lore_tm_v1_YJH4Z5GMPKQAyXkU1qRkV0TSwPeijQdLLoqEArnre8Y","lore_tm_v1_LrnegKsG7AVI1jlHNQ4qZAD8GMXlDqPcCvAv7P5lCw0","lore_tm_v1_uZdBes5cQgUdiDluK9Nqpt-HO_fUupz8mDnJ91kuoX4","lore_tm_v1_HZjkQCx0B2_YLD3B9KBa2UEsDmQzOnSiXFx2tAuMPv4","lore_tm_v1__KtNd1--6ke6YtHILYLZ5bXYts-X2SkAl0i9NqWhCKc","lore_tm_v1_Y__fKDyRJTpERdZ1_TFW2D2BXF3V-lglQzIBSewAHNI","lore_tm_v1_IGOc9XEb5RwFvIvTXtG_yxqxVlKKCMq5Q6sw0E8H9Ng","lore_tm_v1_0XByqhF6isLTwMvn2vMlGEe4F_d2zNOVtqTOENbdKZw","lore_tm_v1_4KeSouSXcYep1KzTt7OWUNJOVlxXu40Lo8r0iNNZLsI","lore_tm_v1_EYfpNF1ytXf_d06MzUESKdpj5-RjgD9Boc0DV7mfEnk","lore_tm_v1_fwjlYJUQp8RHVviJDGs437TvUH8v7buOeOq0jmEDTVw","lore_tm_v1_pthjXIK9hK_KrTxSUmZOq32ylbRJq0FsAHylQ4QEKM4","lore_tm_v1__S8ivkq5I4TYbeTcYvch9eUX0SLklnNDEr8v25kl0Ss","lore_tm_v1_Xv6R55QfX-kOAq4DUXYeUk2FmP5N9BlyUk55Dq0lvec","lore_tm_v1_-NKWmHj6VwwDqZOjK9ntUhIvC4tRDXIYVWfJESb2EC4","lore_tm_v1_dL9i_oj1sivuFy3OBxuj3H2VCd9lsgIno_cGqZgyRR0","lore_tm_v1__dKXhi-Z3W-BRRC7OM2WxOqOejXXg2sgxHv2-xeK2vU","lore_tm_v1_U4AUHUvGMQ4HAly5UboeRkjumHgEiQQzbsK-oHEzh_g","lore_tm_v1_O3cgZyI-g1OfoiU-4UitOf0pdxbvunJo4xcC0W3ok6g","lore_tm_v1_s7JEFTMDSb9raRadLboxz-SEL3TEerGyIV-ztQ8113U","lore_tm_v1_3yNK7yzEICBaBwLoq6jm2lxS8Akzm17DvBAnLGfw1Bs","lore_tm_v1_vdemByM8gAKajUqXFG5PNTfchqSx_0Ivc1j04rrX42A","lore_tm_v1_SwUAOk3CseYLF3Z9ENef10ZskWUL9YdtGpQk8UF5YJc","lore_tm_v1_A1DyAya4JRqm5H5d6uVA67r5sKjykGzljMe1pKzxaC4","lore_tm_v1_dgjSGN_WA4218Ei3Wyw-WQVwNtiQYh1BqwBi9kSp-MY","lore_tm_v1_cwIV9D56NIb_lejYNMY8-D5s9RaP7Vj67EM1wqFm6v8","lore_tm_v1_SBY9s5byqOzt9u-r3h-4EJSi_xBun6r_-uNOVOu7F6U","lore_tm_v1_ml7Zlo_fVP8MqdfqiA_IMgaWt6-1pVYk3ax3mXcUFhs","lore_tm_v1_oJBWLVlKSjCsFBvaXgfYr1lut-GG1-LmEF60Y9Kv09o","lore_tm_v1_41V8G3JmloBM4vUPADfpKX6aag7UqnoVPnBD7TpCo4A","lore_tm_v1_Sghw2RRKRvzyvG4gT-JHDS9R2xizlN_TaxLdMeByydw","lore_tm_v1_F5bCAIJ1Oa0vRau1DSN1pVc9aBUl7P2hsiGM-c9PoOY","lore_tm_v1_HbgF9EBljdan4EHhR4jojHhR4tdkJ9UDJykwQ8nEuY0","lore_tm_v1_-FE9jVBINEnx3Jkx0DhvRuOI595hrq2M9-jm4VKH-UQ","lore_tm_v1_zw6Turo2zlUP3lXLOKAqYLfLPm6aZ87hWxr_RuI2cU0","lore_tm_v1_bKFXIXOaR23LgdyWtO_mqS-n1J2mq6M-kvAQgV3pvcM","lore_tm_v1_KQ3WZUTpadRXAQmMd-WjUcrnRTEuTeayYZvkfcbyGtI","lore_tm_v1_PCvrbhq-P-UscMxQvcfuDPepluxJtax07ADtqUKC6Jc","lore_tm_v1_5lYZCwFM1MP3s_hv7zv-R9eHNUgplDxUtKtyjECsviQ","lore_tm_v1_7YpFC5Y6PYL36H_vkztAPxmY8vGCcLESRBJJ2t4B2R8","lore_tm_v1_anEfUnTSMrHwIFVO3gl4DQ9Jp7Rt8nQjgIfQ89rWHEo","lore_tm_v1_NUrg_nQ-pov6SDPu0G7eiLNJtULGvTGSIFQtIUx5ZxQ","lore_tm_v1_vbDaf1SAvlw-NesnqLRntvPEN3LQbWmXvxVoY2e7FTk","lore_tm_v1_sUJOJvhiHNIi5C22AduZ0av5Jbo2CN0oeIfzI6eFwWA","lore_tm_v1_xK_mCor_ZCk1yebisUmbaESZVxUpBg0xnyRaUbqg7v8","lore_tm_v1_NedNIbRa3CPArbbo7v8T_Hv7vsBd7pV-3jsHQ3KR8xM","lore_tm_v1_BwUVBWo8YJEDH03whDPMWvQdAsHt03h4v6By3T1lYqM","lore_tm_v1_V4GazPqmHAyM0OWVY0ui3Fd_6aNg6s-gd9g5FbZ1Mm0","lore_tm_v1_FwUVu929PSZhQcP6M4JcnLSjlouQ38cn__TdUKVTUnM","lore_tm_v1_KX1uZmuXMovh_DdzzxMUnH4nQwPk11vblzdGJMAxEjc","lore_tm_v1_-_TqfXZ1MhEmlGduGRgEwzoPS_MqubARtqfrGCbj1HA","lore_tm_v1_BglRwpuXEfO2TUSKWTGgATtB5v6DgMmBt4i1fGuY_Aw","lore_tm_v1_mK-xd0rHX8L_ImOdB6rzYnC9mgstsLmwlf8UtYS1LE0","lore_tm_v1_q4OkIQCVLxGW2yaEqMQQwPGIF5XbAmyWOhuU1Fw1X5I","lore_tm_v1_sEEiQ_Ho9UAqhCtjA5e-rFwlKvuoUGJo26Stzhp9uzM","lore_tm_v1_F8q5dZyObLqhbK9zk24eJdPTIOo0m9fIMIWR4nEkcQM","lore_tm_v1_6DoZoqlyu9gz5jIteZcUaWqmXeI8m0P4ZrfLx6DWz-Q"]
/home/byk/.local/share/opencode/worktree/0e8c2f3bbe145a3280d6fb6ed900a5121f382cf0/toolkit-bridge-upgradefeat/toolkit-bridge-upgrade; at 09:33 it was behind origin/main by 2 commits.packages/cli/src/lib/delta-upgrade.tsbinpatch@0.4.2, researched via GitHub/raw/npm rather than node_modulesgithubReleaseSource supports cli@ tag prefixes and, if not, recommending a minimal repository-safe adapterNo files found; GitHub code search failed with HTTP 401; raw/tag requests using v0.4.2 failed with HTTP 404 because binpatch tags are unprefixed.AGENTS.md: load repo-setup before situation skills.packages/cli/AGENTS.md: always check package.json for current scripts; properties must hold for arbitrary input; do not duplicate property-tested invariants with hardcoded unit tests..cursor/rules/ultracite.mdc must be read before code work.node:* APIs, and Vitest; do not reintroduce Bun.*, bun:test, or bun CLI commands.devDependencies and must use pnpm add -D <package>; CI checks this with pnpm run check:deps.packages/cli/src/lib/delta-upgrade.ts had grown from 627 to 648 lines and now accepts explicit UpgradeSource values through stable/nightly chain resolution, delta application, and prefetch.packages/cli/src/lib/upgrade.ts, packages/cli/src/lib/version-check.ts, and packages/cli/src/commands/cli/upgrade.ts were also shown threading the selected source through discovery, existence checks, downloads, delta attempts, and background prefetch.packages/cli/test/lib/delta-upgrade.test.ts had expanded beyond line 2006 with a "selected source affinity" section.git diff --stat snapshot was at 10:28: exactly 5 modified files and 335 insertions/25 deletions:
packages/cli/src/lib/binary.ts — 139-line diffpackages/cli/src/lib/ghcr.ts — 52-line diffpackages/cli/test/lib/binary.test.ts — 129-line diffpackages/cli/test/lib/ghcr.test.ts — 30-line diffpackages/cli/test/lib/install-script.test.ts — 10-line diffdelta-upgrade.ts, upgrade.ts, version-check.ts, commands/cli/upgrade.ts, tests, and release-notes.ts, but no newer status/diff count was provided.binpatch@0.4.2’s githubReleaseSource has no tagPrefix or tag-normalization option. Merely passing getGitHubReleasesUrl(source) is insufficient for Toolkit releases whose tag_name is cli@<version>, because binpatch compares release tag_name directly to unprefixed currentVersion and targetVersion. A consumer-side normalization/filter adapter or upstream binpatch API extension is still required for Toolkit stable delta discovery.pnpm exec vitest run test/lib/binary.test.tspnpm exec vitest run test/lib/ghcr.test.tspnpm exec vitest run test/lib/delta-upgrade.test.tspnpm exec vitest run test/lib/delta-upgrade.mocked.test.tspnpm exec vitest run test/lib/upgrade.test.tspnpm exec vitest run test/lib/version-check.test.tspnpm exec vitest run test/lib/install-script.test.tspackages/cli/package.json{ githubRepo: "getsentry/toolkit", ghcrRepo: "getsentry/toolkit", tagPrefix: "cli@" }{ githubRepo: "getsentry/cli", ghcrRepo: "getsentry/cli", tagPrefix: "" }
PRIMARY_UPGRADE_SOURCE is the first entry.{ source, response }; callers must parse and reuse the successful probe Response rather than repeating the request.UpgradeSource, that exact source must be passed through:
cli@<version>; legacy tags remain unprefixed. Latest-version discovery must filter Toolkit releases by cli@, ignore unrelated tags such as mcp@9.0.0, exclude drafts/prereleases, and strip the prefix.binpatch@0.4.2 prefix finding: githubReleaseSource does not support tag prefixes. Its config is only releasesUrl, binaryName, userAgent, optional fetch, and optional instrument.
githubReleaseSource that:
source.tagPrefix,tag_name,browser_download_url values unchanged.UpgradeSource; it must never query or merge another repository.tagPrefix/tag-normalization support upstream to binpatch, but that is a larger cross-package/version change and is not available in 0.4.2.MAX_STABLE_CHAIN_DEPTH + 2 releases (12). In Toolkit, the latest 12 repository releases may include MCP or other products and may not contain 12 CLI releases. A prefix adapter therefore needs to fetch a broader page (currently Toolkit latest discovery uses per_page=100) before filtering.nightly-<version> and patch-<version>; only the repository changes, so no cli@ normalization is required. Token, target manifest, tag list, chain manifests, and blobs must all use source.ghcrRepo.SourceStrategy.resolveChain() returning null always means full-download fallback. UnavailableReporter is telemetry-only.
"no_patches" | "malformed_chain" | "too_long" | "over_budget" | "network"."network"."malformed_chain"/poisoned publish.resolveAndApply({ offline: true }) is cache-only—“never touch the network, cache hit or bust.” Package managers always need network access, so CLI offline upgrades are supported only for curl installations.applyPatchChainInMemory; legacy ${destPath}.patching.a and ${destPath}.patching.b files must never exist.safeProgress. Apply progress totals sum every hop’s newSize; CLI rendering uses percent-only for apply to avoid misleading totals such as 930 MB for a 310 MB final binary./Cellar/ detection is cheap and authoritative.getsentry/cli before importing CLI history into getsentry/sentry-mcp.getsentry/cli, so migrated stable releases and nightlies must be dual-published to Toolkit and legacy endpoints.sha256-<binary> and from-version metadata, patch chains, cleanup policy, and keep-count parity.getsentry/cli writable until telemetry/release evidence permits archival.packages/cli/src/lib/binary.ts
UpgradeSource = { readonly githubRepo: string; readonly ghcrRepo: string; readonly tagPrefix: string }UPGRADE_SOURCESPRIMARY_UPGRADE_SOURCEResolvedUpgradeSource = { readonly source: UpgradeSource; readonly response: Response }ResolveUpgradeSourceOptions, later including optional sources?: readonly UpgradeSource[]fetchUpgradeProbe()resolveUpgradeSource()getBinaryDownloadUrl(version, source)getGitHubReleasesUrl(source)getGitHubReleaseByTagUrl(version, source) using encodeURIComponent(source.tagPrefix + version)getGitHubLatestReleaseUrl(source): ?per_page=100 for prefixed repositories, /latest for unprefixedgetGitHubRepositoryUrl(source)GITHUB_RELEASES_URL remains exported but now points at the primary Toolkit releases URL.AbortError: rethrow unchangedUpgradeError("network_error", buildTlsErrorDetail(error))UpgradeError("network_error", "Failed to connect to GitHub: ...")UpgradeError("network_error", "Failed to fetch from GitHub: HTTP ...")UpgradeError("network_error", "No CLI upgrade source was found: every source returned HTTP 404")Bun.semver.order to semver.compare.https://api.github.com/repos/getsentry/toolkit/releases/tags/cli%400.45.0https://api.github.com/repos/getsentry/cli/releases/tags/0.45.0packages/cli/src/lib/ghcr.ts
GHCR_REPO from hard-coded "getsentry/cli" to PRIMARY_UPGRADE_SOURCE.ghcrRepo.getAnonymousToken, fetchManifest, fetchNightlyManifest, downloadNightlyBlob, fetchTagPage, listTags, and downloadLayerBlob source-aware while retaining backward-compatible AbortSignal handling for getAnonymousToken.repository:${source.ghcrRepo}:pull.${GHCR_REGISTRY}/v2/${source.ghcrRepo}/tags/list?n=100.customFetch and the caller’s raw signal, so omitted signals gave redirected Azure Blob downloads no timeout. Binpatch’s required behavior is injected fetch for every request/redirect and buildSignal(BLOB_TIMEOUT, signal) even when no external signal is supplied.packages/cli/src/lib/delta-upgrade.ts
stableSource(source) now uses getGitHubReleasesUrl(source).nightlySource(source) now uses source.ghcrRepo.fetchRecentReleasesresolveStableChainresolveNightlyChainresolveStableDeltaresolveNightlyDeltaattemptDeltaUpgradeprefetchNightlyPatchesprefetchStablePatchesgetPrimaryUpgradeSource() returns PRIMARY_UPGRADE_SOURCE or throws Error("No primary upgrade source is configured").validateChainStep reasons: version-mismatch, missing-layer, size-exceededpatch-chain:${fromVersion}-${toVersion}_source.currentchain.steps existsstableSource(source) still passes only the source-specific releases URL into unmodified githubReleaseSource; no observed adapter normalizes cli@ tag_name values. This means Toolkit stable chain lookup can still fail as no_patches.packages/cli/src/lib/upgrade.ts
ResolvedUpgradeVersion = { readonly version: string; readonly source: UpgradeSource }.extractReleaseVersions()fetchLatestFromGitHubWithSource()fetchLatestNightlyVersionWithSource()resolveLatestUpgradeVersion()resolveExistingUpgradeVersion()standaloneVersionExists()fetchLatestFromGitHub() and fetchLatestNightlyVersion() still return only a version; with explicit source they probe only that source.nightlyVersionExists(version, source) now treats only HTTP 404 as absence; prior HTTP 403-as-absence behavior was removed.versionExistsdownloadNightlyToPathdownloadStableToPathdownloadBinaryToTemptryDeltaUpgradedownloadFullBinaryexecuteUpgradegetBinaryDownloadUrl(version, source); nightly token/manifest/blob requests use the same source.waitForBinaryVisible() with 6 probes at 0, 100, 300, 700, 1500, and 3100 ms0o755 outside WindowsexistsSync(dirname(stored.path))packages/cli/src/lib/version-check.ts
WithSource helpers.maybePrefetchPatches(channel, latestVersion, signal, source) passes the exact selected source to channel-specific prefetch.await prefetchNightlyPatches(latestVersion, signal, source)await prefetchStablePatches(latestVersion, signal, source)packages/cli/src/commands/cli/upgrade.ts
source?: UpgradeSource threaded through target resolution, result types, pinned/latest resolution, and executeUpgrade().packages/cli/src/lib/release-notes.ts
${source.githubRepo}.packages/cli/test/lib/install-script.test.ts parses UPGRADE_SOURCES=(...) from the install script and requires exact repository order equality with UPGRADE_SOURCES.map(source => source.githubRepo).packages/cli/test/lib/binary.test.ts:
cli@TypeError("fetch failed")packages/cli/test/lib/ghcr.test.ts:
packages/cli/test/lib/delta-upgrade.test.ts:
LEGACY_UPGRADE_SOURCE = UPGRADE_SOURCES[1]getsentry/cligetsentry/cli"selected source affinity" section at line 1922vi.resetModules()/vi.doMock() to test non-dev CLI_VERSIONpackages/cli/test/lib/version-check.test.ts:
?per_page=100mcp@9.0.0cli@...packages/cli/test/lib/delta-upgrade.test.ts, resolve a stable chain using Toolkit releases whose raw tags are cli@<version> and include unrelated mcp@... entries; assert:
getsentry/cli request occurs,no_patches.binpatch@0.4.2 facts
packages/cli/package.json:111 contains "binpatch": "^0.4.2".0.4.2 resolves to commit 9ba6bbb8227fcbd2521852d2311c82afac5e9573; 0.4.1 → d0593cdd89eb720edddf9644e0753613e4a8e622; 0.4.0 → 2446f4cbecca92eba775e8ef52dff01fd20a9326.>=22.15.0, zero product coupling.MAX_STABLE_CHAIN_DEPTH = 10MAX_NIGHTLY_CHAIN_DEPTH = 30SIZE_THRESHOLD_RATIO = 0.6PATCH_TAG_PREFIX = "patch-"MAX_OUTPUT_SIZE = 2 GiBgithubReleaseSource, ghcrSource, OciClient, resolveAndApply, applyPatchChainInMemory, makeCache, and associated types.githubReleaseSource expects <binaryName>, <binaryName>.gz, and <binaryName>.patch; it has no prefix-aware configuration.OciClient contract requires all requests and manual redirects to use its injected fetch; redirect requests always receive a live timeout signal.<fromVersion>-<toVersion>.patchchain-<fromVersion>-<toVersion>.jsonsanitizeVersion() replaces characters outside [a-zA-Z0-9.-] with _.7 * 24 * 60 * 60 * 1000).TRDIFF10 magic and sign-magnitude i64 header fields controlLen, diffLen, and newSize, followed by zstd-compressed control/diff/extra streams.SHA-256 mismatch after patching: got ${sha256}, expected ${chain.expectedSha256}.getsentry/cli#1244: “toolkit merge: bridge CLI release + dual-source upgrade compatibility,” authored by BYK, created July 15, 2026, updated September 8, 2026; subtask of getsentry/cli#1248.4978828102 / IC_kwDOQm6jAs8AAAABKMLjRg, created and updated 2026-07-15T09:05:00Z, says: Master tracking issue: https://github.com/getsentry/cli/issues/1248.getsentry/cli#1239.cli@ support as the central task. Repository instructions and relevant test files were loaded.binary.ts/ghcr.ts, issue #1244’s bridge-release plan, source synchronization requirements, delta tests, binpatch metadata/docs/API, and existing delta-upgrade.ts architecture.network, examined the 627-line delta adapter and 1144-line upgrade module, and documented download/visibility/locking behavior.upgrade.ts still calling getBinaryDownloadUrl(version) without a selected source at 10:24, restated project constraints, then traced upgrade/delta/version-check call sites and binpatch orchestration semantics.delta-upgrade.ts at 648 lines with explicit source-aware stable/nightly strategies, source-preserving telemetry, progress corrections, and source-aware prefetch.upgrade.ts, version-check.ts, delta APIs, and tests. Latest/pinned discovery now returns and preserves UpgradeSource; binary resolver gained optional sources; stable/nightly fallback tests were added.version-check.ts:242 and :244.packages/cli/test/lib/delta-upgrade.test.ts; tests cover legacy stable/nightly resolution, attempt, and prefetch without Toolkit access.