From a59571536f13b2eb4ecd811a37f1f65c0fa4650f Mon Sep 17 00:00:00 2001 From: Alfonso Noriega Date: Mon, 20 Apr 2026 14:07:54 +0200 Subject: [PATCH 1/2] Track installation package manager in analytics MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Wire inferPackageManagerForGlobalCLI() into the analytics payload as env_install_package_manager. This field correctly identifies how the CLI was globally installed (homebrew via SHOPIFY_HOMEBREW_FORMULA env var, or yarn/pnpm/bun via binary path inspection, falling back to npm). Previously ~34% of users had unknown package manager in analytics because packageManagerFromUserAgent() requires npm_config_user_agent, which is only set when a package manager spawns the process — not when users run the CLI binary directly from the shell (the common global install case). Co-Authored-By: Claude Sonnet 4.6 --- packages/cli-kit/src/private/node/analytics.ts | 4 +++- packages/cli-kit/src/public/node/monorail.ts | 1 + 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/packages/cli-kit/src/private/node/analytics.ts b/packages/cli-kit/src/private/node/analytics.ts index 968e5a24fd..499fc8ef24 100644 --- a/packages/cli-kit/src/private/node/analytics.ts +++ b/packages/cli-kit/src/private/node/analytics.ts @@ -8,7 +8,7 @@ import * as metadata from '../../public/node/metadata.js' import {platformAndArch} from '../../public/node/os.js' import {ciPlatform, cloudEnvironment, macAddress} from '../../public/node/context/local.js' import {cwd} from '../../public/node/path.js' -import {currentProcessIsGlobal} from '../../public/node/is-global.js' +import {currentProcessIsGlobal, inferPackageManagerForGlobalCLI} from '../../public/node/is-global.js' import {isWsl} from '../../public/node/system.js' import {Command, Interfaces} from '@oclif/core' @@ -64,6 +64,7 @@ interface EnvironmentData { env_device_id: string env_cloud: string env_package_manager: string + env_install_package_manager: string env_is_global: boolean env_auth_method: string env_is_wsl: boolean @@ -90,6 +91,7 @@ export async function getEnvironmentData(config: Interfaces.Config): Promise env_device_id?: Optional env_package_manager?: Optional + env_install_package_manager?: Optional env_package_manager_workspaces?: Optional env_plugin_installed_any_custom?: Optional env_plugin_installed_shopify?: Optional From aaa6cfdf00c46033447a5b39f3bf4149c3f24a8e Mon Sep 17 00:00:00 2001 From: Alfonso Noriega Date: Mon, 20 Apr 2026 14:31:19 +0200 Subject: [PATCH 2/2] Bump Monorail schema topic to app_cli3_command/1.22 Aligns with Shopify/monorail#23445 which adds env_install_package_manager to the schema. Co-Authored-By: Claude Sonnet 4.6 --- packages/cli-kit/src/public/node/monorail.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/cli-kit/src/public/node/monorail.ts b/packages/cli-kit/src/public/node/monorail.ts index dc02beb187..4d4beb846d 100644 --- a/packages/cli-kit/src/public/node/monorail.ts +++ b/packages/cli-kit/src/public/node/monorail.ts @@ -10,7 +10,7 @@ const url = 'https://monorail-edge.shopifysvc.com/v1/produce' type Optional = T | null // This is the topic name of the main event we log to Monorail, the command tracker -export const MONORAIL_COMMAND_TOPIC = 'app_cli3_command/1.21' +export const MONORAIL_COMMAND_TOPIC = 'app_cli3_command/1.22' export interface Schemas { [MONORAIL_COMMAND_TOPIC]: {