@superblocksteam/sdk 2.0.137-next.0 → 2.0.138-next.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (66) hide show
  1. package/.turbo/turbo-build.log +1 -1
  2. package/dist/cli-replacement/automatic-upgrades.d.ts +1 -1
  3. package/dist/cli-replacement/automatic-upgrades.d.ts.map +1 -1
  4. package/dist/cli-replacement/automatic-upgrades.js +64 -59
  5. package/dist/cli-replacement/automatic-upgrades.js.map +1 -1
  6. package/dist/cli-replacement/automatic-upgrades.test.js +54 -33
  7. package/dist/cli-replacement/automatic-upgrades.test.js.map +1 -1
  8. package/dist/cli-replacement/dependency-install-classifier.d.mts +26 -1
  9. package/dist/cli-replacement/dependency-install-classifier.d.mts.map +1 -1
  10. package/dist/cli-replacement/dependency-install-classifier.mjs +58 -0
  11. package/dist/cli-replacement/dependency-install-classifier.mjs.map +1 -1
  12. package/dist/cli-replacement/dependency-install-classifier.test.mjs +33 -1
  13. package/dist/cli-replacement/dependency-install-classifier.test.mjs.map +1 -1
  14. package/dist/cli-replacement/dev.d.mts +4 -2
  15. package/dist/cli-replacement/dev.d.mts.map +1 -1
  16. package/dist/cli-replacement/dev.interception.test.mjs +32 -5
  17. package/dist/cli-replacement/dev.interception.test.mjs.map +1 -1
  18. package/dist/cli-replacement/dev.mjs +142 -65
  19. package/dist/cli-replacement/dev.mjs.map +1 -1
  20. package/dist/cli-replacement/home-npmrc.d.mts.map +1 -1
  21. package/dist/cli-replacement/home-npmrc.mjs +13 -5
  22. package/dist/cli-replacement/home-npmrc.mjs.map +1 -1
  23. package/dist/cli-replacement/home-npmrc.test.mjs +49 -17
  24. package/dist/cli-replacement/home-npmrc.test.mjs.map +1 -1
  25. package/dist/cli-replacement/package-json-snapshot.d.mts +1 -0
  26. package/dist/cli-replacement/package-json-snapshot.d.mts.map +1 -1
  27. package/dist/cli-replacement/package-json-snapshot.mjs +35 -0
  28. package/dist/cli-replacement/package-json-snapshot.mjs.map +1 -1
  29. package/dist/cli-replacement/package-json-snapshot.test.mjs +104 -0
  30. package/dist/cli-replacement/package-json-snapshot.test.mjs.map +1 -1
  31. package/dist/dev-utils/dev-server-metrics.d.mts +17 -7
  32. package/dist/dev-utils/dev-server-metrics.d.mts.map +1 -1
  33. package/dist/dev-utils/dev-server-metrics.mjs +18 -12
  34. package/dist/dev-utils/dev-server-metrics.mjs.map +1 -1
  35. package/dist/dev-utils/dev-server.d.mts.map +1 -1
  36. package/dist/dev-utils/dev-server.mjs +15 -6
  37. package/dist/dev-utils/dev-server.mjs.map +1 -1
  38. package/dist/dev-utils/prepare-in-place-restart.d.mts +31 -0
  39. package/dist/dev-utils/prepare-in-place-restart.d.mts.map +1 -0
  40. package/dist/dev-utils/prepare-in-place-restart.mjs +64 -0
  41. package/dist/dev-utils/prepare-in-place-restart.mjs.map +1 -0
  42. package/dist/dev-utils/prepare-in-place-restart.test.d.mts +2 -0
  43. package/dist/dev-utils/prepare-in-place-restart.test.d.mts.map +1 -0
  44. package/dist/dev-utils/prepare-in-place-restart.test.mjs +46 -0
  45. package/dist/dev-utils/prepare-in-place-restart.test.mjs.map +1 -0
  46. package/dist/telemetry/index.d.ts +12 -0
  47. package/dist/telemetry/index.d.ts.map +1 -1
  48. package/dist/telemetry/index.js +26 -12
  49. package/dist/telemetry/index.js.map +1 -1
  50. package/package.json +6 -6
  51. package/src/cli-replacement/automatic-upgrades.test.ts +68 -58
  52. package/src/cli-replacement/automatic-upgrades.ts +81 -59
  53. package/src/cli-replacement/dependency-install-classifier.mts +74 -1
  54. package/src/cli-replacement/dependency-install-classifier.test.mts +49 -0
  55. package/src/cli-replacement/dev.interception.test.mts +39 -7
  56. package/src/cli-replacement/dev.mts +154 -62
  57. package/src/cli-replacement/home-npmrc.mts +12 -4
  58. package/src/cli-replacement/home-npmrc.test.mts +57 -17
  59. package/src/cli-replacement/package-json-snapshot.mts +50 -0
  60. package/src/cli-replacement/package-json-snapshot.test.mts +121 -0
  61. package/src/dev-utils/dev-server-metrics.mts +48 -21
  62. package/src/dev-utils/dev-server.mts +22 -5
  63. package/src/dev-utils/prepare-in-place-restart.mts +99 -0
  64. package/src/dev-utils/prepare-in-place-restart.test.mts +69 -0
  65. package/src/telemetry/index.ts +24 -10
  66. package/tsconfig.tsbuildinfo +1 -1
@@ -1,4 +1,4 @@
1
1
 
2
- > @superblocksteam/sdk@2.0.137-next.0 build /home/runner/work/superblocks/superblocks/packages/cli/packages/sdk
2
+ > @superblocksteam/sdk@2.0.138-next.0 build /home/runner/work/superblocks/superblocks/packages/cli/packages/sdk
3
3
  > tsc --build
4
4
 
@@ -37,7 +37,7 @@ export declare function buildGlobalInstallArgs(pm: {
37
37
  * agent at every call site; the env-overlay approach is uniform.
38
38
  */
39
39
  export declare function buildInstallEnv(userconfigPath: string, logsDir?: string, baseEnv?: NodeJS.ProcessEnv): NodeJS.ProcessEnv;
40
- export declare function checkVersionsAndWritePackageJson(lockService: LockService, config: ApplicationConfigWithTokenConfigAndUserInfo, forceUpgrade?: boolean, skipCliUpgrade?: boolean, appDir?: string): Promise<{
40
+ export declare function checkVersionsAndWritePackageJson(lockService: LockService, config: ApplicationConfigWithTokenConfigAndUserInfo, forceUpgrade?: boolean, skipCliUpgrade?: boolean, appDir?: string, hasAnyRegistryConfigured?: boolean): Promise<{
41
41
  cliUpdated: boolean;
42
42
  upgradePromises: Promise<void>[];
43
43
  }>;
@@ -1 +1 @@
1
- {"version":3,"file":"automatic-upgrades.d.ts","sourceRoot":"","sources":["../../src/cli-replacement/automatic-upgrades.ts"],"names":[],"mappings":"AAMA,OAAO,EAAkB,KAAK,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAc7E,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,qDAAqD,CAAC;AAMvF,OAAO,KAAK,EAAE,2CAA2C,EAAE,MAAM,oBAAoB,CAAC;AAWtF,eAAO,MAAM,sBAAsB,KAAK,CAAC;AAEzC;;;;;;;;;;;GAWG;AACH,wBAAgB,sBAAsB,CACpC,EAAE,EAAE;IAAE,KAAK,EAAE,YAAY,CAAC,OAAO,CAAC,CAAA;CAAE,EACpC,WAAW,EAAE,MAAM,GAClB,MAAM,EAAE,CAQV;AAED;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAgB,eAAe,CAC7B,cAAc,EAAE,MAAM,EACtB,OAAO,CAAC,EAAE,MAAM,EAChB,OAAO,GAAE,MAAM,CAAC,UAAwB,GACvC,MAAM,CAAC,UAAU,CAcnB;AAoUD,wBAAsB,gCAAgC,CACpD,WAAW,EAAE,WAAW,EACxB,MAAM,EAAE,2CAA2C,EACnD,YAAY,GAAE,OAAe,EAC7B,cAAc,GAAE,OAAe,EAM/B,MAAM,GAAE,MAAsB,GAC7B,OAAO,CAAC;IACT,UAAU,EAAE,OAAO,CAAC;IACpB,eAAe,EAAE,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC;CAClC,CAAC,CA+SD"}
1
+ {"version":3,"file":"automatic-upgrades.d.ts","sourceRoot":"","sources":["../../src/cli-replacement/automatic-upgrades.ts"],"names":[],"mappings":"AAMA,OAAO,EAAkB,KAAK,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAc7E,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,qDAAqD,CAAC;AAMvF,OAAO,KAAK,EAAE,2CAA2C,EAAE,MAAM,oBAAoB,CAAC;AAetF,eAAO,MAAM,sBAAsB,KAAK,CAAC;AAEzC;;;;;;;;;;;GAWG;AACH,wBAAgB,sBAAsB,CACpC,EAAE,EAAE;IAAE,KAAK,EAAE,YAAY,CAAC,OAAO,CAAC,CAAA;CAAE,EACpC,WAAW,EAAE,MAAM,GAClB,MAAM,EAAE,CAQV;AAED;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAgB,eAAe,CAC7B,cAAc,EAAE,MAAM,EACtB,OAAO,CAAC,EAAE,MAAM,EAChB,OAAO,GAAE,MAAM,CAAC,UAAwB,GACvC,MAAM,CAAC,UAAU,CAcnB;AAwVD,wBAAsB,gCAAgC,CACpD,WAAW,EAAE,WAAW,EACxB,MAAM,EAAE,2CAA2C,EACnD,YAAY,GAAE,OAAe,EAC7B,cAAc,GAAE,OAAe,EAM/B,MAAM,GAAE,MAAsB,EAQ9B,wBAAwB,CAAC,EAAE,OAAO,GACjC,OAAO,CAAC;IACT,UAAU,EAAE,OAAO,CAAC;IACpB,eAAe,EAAE,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC;CAClC,CAAC,CAqSD"}
@@ -12,6 +12,7 @@ import { bucketNpmRegistryHost, recordNpmInstall, redactNpmRegistryHostsFromText
12
12
  import { classifyNpmExecStderr } from "@superblocksteam/vite-plugin-file-sync/npm-error-parser";
13
13
  import { getTracer } from "../telemetry/index.js";
14
14
  import { getErrorMeta, getLogger } from "../telemetry/logging.js";
15
+ import { classifyUpgradeError, UpgradeFailed, } from "./dependency-install-classifier.mjs";
15
16
  import { superblocksLogsPath, superblocksNpmrcPath } from "./home-npmrc.mjs";
16
17
  import { stripUpgradedCliLockfiles } from "./post-upgrade-lockfile-strip.mjs";
17
18
  import { getCurrentCliVersion, clearCliVersionCache, } from "./version-detection.js";
@@ -125,42 +126,41 @@ async function upgradeCliWithOclif(targetVersion) {
125
126
  return false;
126
127
  }
127
128
  }
128
- // Returns `true` when an install command actually ran and post-install
129
- // validation passed (every other failure throws). Returns `false` only when no
130
- // global install command could be resolved for the detected package manager — a
131
- // no-op the caller marks as a failed span WITHOUT throwing, so the live-edit
132
- // pod degrades on the current version instead of crash-looping. Proper graceful
133
- // degrade + surfacing the failed upgrade to the user is tracked by APPS-4457.
129
+ // Resolves when an install command ran and post-install validation passed.
130
+ // Every failure throws `UpgradeFailed` carrying a classified, non-blocking
131
+ // `DependencyUpgradeError` the no-command branch, an exec failure, and a
132
+ // post-install version mismatch all degrade the same way. The dev.mts join
133
+ // routes that marker to the degrade path, so the live-edit pod keeps serving
134
+ // the currently installed version instead of crash-looping. The auto-upgrade
135
+ // is best-effort: the running version still works, so a failed upgrade is
136
+ // never fatal.
134
137
  async function upgradeCliWithPackageManager(pm, targetVersion, alias, hasAnyRegistryConfigured,
135
138
  // Directory npm should drop its per-run debug log into (the app's
136
139
  // `.superblocks/logs`). Optional so callers/tests that don't care keep
137
140
  // npm's default `_logs` location.
138
- logsDir) {
141
+ logsDir,
142
+ // Currently installed version, carried into the classified error so the
143
+ // overlay can say "still on X; couldn't reach Y". Best-effort context.
144
+ currentVersion) {
139
145
  const packageName = alias
140
146
  ? `@superblocksteam/cli@npm:${alias}@${targetVersion}`
141
147
  : `@superblocksteam/cli@${targetVersion}`;
148
+ // Context shared by every classification path below: the package being
149
+ // upgraded plus whether a registry is configured.
150
+ const parseCtx = {
151
+ requestedPackages: [{ name: packageName }],
152
+ hasAnyRegistryConfigured,
153
+ };
154
+ const versions = { currentVersion, targetVersion };
142
155
  const installArgs = buildGlobalInstallArgs({ agent: pm.agent }, packageName);
143
156
  const installCommand = resolveCommand(pm.agent, "global", installArgs);
144
157
  if (!installCommand) {
145
- // APPS-4544 (Bugbot 613adfc7): we couldn't even build a global install
146
- // command for the detected package manager, so no upgrade happened.
147
- // Before this PR added the `upgradeCli` span `outcome` attribute and the
148
- // `superblocks.npm.install.*` metric, this no-op left no telemetry: the
149
- // span kept its default `outcome=success` and no install metric was
150
- // emitted, so an auto-upgrade that did nothing looked successful.
151
- //
152
- // Emit a failure sample so the histogram carries a `runner="auto_upgrade"`
153
- // failure sample for this path, then return `false` so the caller flips
154
- // the `upgradeCli` span to `outcome=failure`. `durationMs` is 0 because no
155
- // install process ran; `outcome="other"` mirrors the unclassified-failure
156
- // fallback used by the exec/validation paths below.
157
- //
158
- // We deliberately do NOT throw: a rejected upgrade promise routes through
159
- // `dev.mts` to `process.exit(1)`, crash-looping the live-edit pod. The
160
- // no-op dev-server restart that still follows (`cliUpdated` is set
161
- // unconditionally at enqueue time in `checkVersionsAndWritePackageJson`),
162
- // plus degrading gracefully (continue on the current version) and
163
- // surfacing the failed upgrade to the user, are tracked by APPS-4457.
158
+ // We couldn't build a global install command for the detected package
159
+ // manager, so no upgrade ran. Emit a failure sample (durationMs 0 — nothing
160
+ // ran) so the metric doesn't read this no-op as a success, then throw
161
+ // `UpgradeFailed` so the dev.mts join degrades (keep serving the current
162
+ // version) instead of leaving `cliUpdated=true` to trigger a pointless
163
+ // dev-server restart loop.
164
164
  logger.error("Could not determine how to upgrade Superblocks packages.");
165
165
  recordNpmInstall({
166
166
  runner: "auto_upgrade",
@@ -169,7 +169,9 @@ logsDir) {
169
169
  registryHost: undefined,
170
170
  durationMs: 0,
171
171
  });
172
- return false;
172
+ throw new UpgradeFailed(classifyUpgradeError({
173
+ message: "Could not determine how to upgrade Superblocks packages.",
174
+ }, parseCtx, versions));
173
175
  }
174
176
  const { command, args } = installCommand;
175
177
  logger.info(`Running ${command} ${args.join(" ")}...`);
@@ -220,10 +222,7 @@ logsDir) {
220
222
  // and dropping the structured diagnostic this PR exists to guarantee.
221
223
  const errStderr = error.stderr;
222
224
  const stderrText = stderrBuffer || (typeof errStderr === "string" ? errStderr : "");
223
- const blocked = classifyNpmExecStderr(stderrText, {
224
- requestedPackages: [{ name: packageName }],
225
- hasAnyRegistryConfigured,
226
- });
225
+ const blocked = classifyNpmExecStderr(stderrText, parseCtx);
227
226
  // Surface the structured `NpmInstallBlocked.reason` (e.g.
228
227
  // `registry_unreachable`, `registry_auth_failed`) and raw host to
229
228
  // the install metric below; the emitter coerces both at the emit
@@ -324,7 +323,18 @@ logsDir) {
324
323
  if (outcome === "success") {
325
324
  outcome = "other";
326
325
  }
327
- throw err;
326
+ // Both the exec failure (rejected with the raw npm error, re-thrown by
327
+ // `await promise`) and a post-install version mismatch land here. Classify
328
+ // into a non-blocking `DependencyUpgradeError` and throw the `UpgradeFailed`
329
+ // marker so the dev.mts join degrades instead of crash-looping. `stderrBuffer`
330
+ // holds the streamed npm stderr; fall back to the error's own fields when a
331
+ // fast-failing subprocess exited before the listener attached.
332
+ const e = err;
333
+ throw new UpgradeFailed(classifyUpgradeError({
334
+ stdout: e.stdout,
335
+ stderr: stderrBuffer || e.stderr,
336
+ message: e.message,
337
+ }, parseCtx, versions));
328
338
  }
329
339
  finally {
330
340
  // Both the happy path and every throw above (exec failure → callback
@@ -343,9 +353,7 @@ logsDir) {
343
353
  });
344
354
  }
345
355
  // Reached only when the install ran and post-install validation passed
346
- // (every failure above throws). Signals the caller that a real upgrade
347
- // happened so it leaves the `upgradeCli` span `outcome=success`.
348
- return true;
356
+ // (every failure above throws `UpgradeFailed`).
349
357
  }
350
358
  export async function checkVersionsAndWritePackageJson(lockService, config, forceUpgrade = false, skipCliUpgrade = false,
351
359
  // App working directory, used to route the CLI-upgrade install's npm
@@ -353,7 +361,15 @@ export async function checkVersionsAndWritePackageJson(lockService, config, forc
353
361
  // (the dev-server's cwd === app root) so existing callers/tests are
354
362
  // unaffected; `dev()` passes its `cwd` explicitly for consistency with
355
363
  // the startup install.
356
- appDir = process.cwd()) {
364
+ appDir = process.cwd(),
365
+ // Whether the org routes installs through a configured npm registry, as a
366
+ // tri-state: `true` (configured/stale), `false` (deliberately none),
367
+ // `undefined` (couldn't resolve). The caller derives it from the same
368
+ // registry config the startup install classifier uses and forwards it into
369
+ // the CLI auto-upgrade, so a failure classifies/renders with the right
370
+ // guidance ("ask an org admin" vs "temporary") and records the correct
371
+ // `configured` install metric instead of always defaulting to `false`.
372
+ hasAnyRegistryConfigured) {
357
373
  let cliUpdated = false;
358
374
  let hasFailedToUpgrade = false;
359
375
  const upgradePromises = [];
@@ -425,16 +441,16 @@ appDir = process.cwd()) {
425
441
  hasFailedToUpgrade = true;
426
442
  return;
427
443
  }
428
- // Failure-mode contrast with AppShell's per-app install path: AppShell
429
- // routes exec failures through `classifyNpmExecError` and emits a
430
- // structured `NpmInstallBlocked` diagnostic. The auto-upgrade subprocess
431
- // below does NOT route through that classifier it `exec`s
432
- // `npm install -g @superblocksteam/cli@...` directly. A perimeter block
433
- // (ECONNREFUSED) surfaces here as a generic `Error` caught by the outer
434
- // try/catch (`hasFailedToUpgrade = true` release lock `process.exit`),
435
- // which Kubernetes restarts. The operator sees a visible crash-loop with
436
- // "Error upgrading packages" rather than a silent fallback. For symmetry
437
- // with the install path, wrap the upgrade exec in the same classifier.
444
+ // The auto-upgrade runs the global `npm install -g @superblocksteam/cli@...`
445
+ // and classifies its failures the same way the per-app install does. On
446
+ // any failure (network block, registry/auth/TLS error, version mismatch,
447
+ // or no resolvable install command) it throws the `UpgradeFailed` marker
448
+ // carrying a classified `DependencyUpgradeError`. The dev.mts join routes
449
+ // that marker to the degrade path, so the pod keeps serving the current
450
+ // version instead of crash-looping the upgrade is best-effort. The
451
+ // early `process.exit(1)` below is reserved for genuinely-unusable cases
452
+ // (no package manager, an unparseable version, a corrupt package.json)
453
+ // that are not upgrade failures.
438
454
  try {
439
455
  if (!skipCliUpgrade &&
440
456
  (cliNeedsUpgrade || forceUpgrade) &&
@@ -497,24 +513,13 @@ appDir = process.cwd()) {
497
513
  }
498
514
  else {
499
515
  logger.info(`Falling back to package manager upgrade for CLI`);
500
- const cliUpgradeRan = await traceFunction({
516
+ await traceFunction({
501
517
  name: "upgradePackageWithPackageManager - cli",
502
518
  tracer,
503
519
  fn: async () => {
504
- return await upgradeCliWithPackageManager(packageManager, targetVersions.cli, currentCliInfo.alias, undefined, superblocksLogsPath(appDir));
520
+ await upgradeCliWithPackageManager(packageManager, targetVersions.cli, currentCliInfo.alias, hasAnyRegistryConfigured, superblocksLogsPath(appDir), currentCliInfo.version);
505
521
  },
506
522
  });
507
- if (!cliUpgradeRan) {
508
- // No global install command could be resolved → the CLI
509
- // upgrade was a no-op (the failure metric was already
510
- // emitted inline). Flip the span to `failure` so the trace
511
- // is accurate, but do NOT throw: throwing routes through
512
- // `dev.mts` to `process.exit(1)` and crash-loops the pod.
513
- // The no-op dev-server restart that still follows
514
- // (`cliUpdated = true` below), graceful degrade, and user
515
- // surfacing of the failed upgrade are tracked by APPS-4457.
516
- outcome = "failure";
517
- }
518
523
  }
519
524
  // The freshly fetched tarball may ship bundled lockfiles with
520
525
  // stale public-host `resolved` URLs; strip them so the next
@@ -1 +1 @@
1
- {"version":3,"file":"automatic-upgrades.js","sourceRoot":"","sources":["../../src/cli-replacement/automatic-upgrades.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"automatic-upgrades.js","sourceRoot":"","sources":["../../src/cli-replacement/automatic-upgrades.ts"],"names":[],"mappings":"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"}
@@ -13,6 +13,7 @@ import * as os from "node:os";
13
13
  import * as path from "node:path";
14
14
  import { describe, it, expect, beforeEach, vi } from "vitest";
15
15
  import { buildGlobalInstallArgs, buildInstallEnv, checkVersionsAndWritePackageJson, } from "./automatic-upgrades.js";
16
+ import { UpgradeFailed } from "./dependency-install-classifier.mjs";
16
17
  // ---------------------------------------------------------------------------
17
18
  // Mocks
18
19
  // ---------------------------------------------------------------------------
@@ -404,7 +405,7 @@ describe("checkVersionsAndWritePackageJson", () => {
404
405
  "npm error errno ECONNREFUSED",
405
406
  "npm error network request to https://registry.npmjs.org/@superblocksteam%2fcli failed, reason: connect ECONNREFUSED 127.0.0.1:443",
406
407
  ].join("\n"), new Error("Command failed: pnpm install ..."));
407
- await expect(runAndAwaitUpgrade()).rejects.toThrow(/Command failed: pnpm install/);
408
+ await expect(runAndAwaitUpgrade()).rejects.toThrow(UpgradeFailed);
408
409
  // The structured log line fires before the rejection so the operator
409
410
  // sees the reason code in the crash-loop output. Reason is encoded
410
411
  // into the message body — no meta arg is passed, because the
@@ -426,7 +427,7 @@ describe("checkVersionsAndWritePackageJson", () => {
426
427
  "npm error code E401",
427
428
  "npm error 401 Unauthorized - GET https://npm.private.example.com/@superblocksteam%2fcli",
428
429
  ].join("\n"), new Error("Command failed: pnpm install ..."));
429
- await expect(runAndAwaitUpgrade()).rejects.toThrow(/Command failed: pnpm install/);
430
+ await expect(runAndAwaitUpgrade()).rejects.toThrow(UpgradeFailed);
430
431
  expect(loggerMock.error).toHaveBeenCalledWith(expect.stringMatching(/\[npm-install-blocked\] reason=registry_auth_failed/));
431
432
  });
432
433
  it("APPS-4381: buckets a private registry host so the structured registryHost facet is `private`, not the raw hostname", async () => {
@@ -450,7 +451,7 @@ describe("checkVersionsAndWritePackageJson", () => {
450
451
  "npm error code E401",
451
452
  `npm error 401 Unauthorized - GET https://${privateHost}/@superblocksteam%2fcli`,
452
453
  ].join("\n"), new Error("Command failed: pnpm install ..."));
453
- await expect(runAndAwaitUpgrade()).rejects.toThrow(/Command failed: pnpm install/);
454
+ await expect(runAndAwaitUpgrade()).rejects.toThrow(UpgradeFailed);
454
455
  const blockedCall = loggerMock.error.mock.calls.find((c) => typeof c[0] === "string" && c[0].includes("[npm-install-blocked]"));
455
456
  expect(blockedCall).toBeDefined();
456
457
  const message = blockedCall[0];
@@ -467,7 +468,7 @@ describe("checkVersionsAndWritePackageJson", () => {
467
468
  "npm error code ECONNREFUSED",
468
469
  "npm error network request to https://registry.npmjs.org/@superblocksteam%2fcli failed",
469
470
  ].join("\n"), new Error("Command failed: pnpm install ..."));
470
- await expect(runAndAwaitUpgrade()).rejects.toThrow(/Command failed: pnpm install/);
471
+ await expect(runAndAwaitUpgrade()).rejects.toThrow(UpgradeFailed);
471
472
  const blockedCall = loggerMock.error.mock.calls.find((c) => typeof c[0] === "string" && c[0].includes("[npm-install-blocked]"));
472
473
  expect(blockedCall).toBeDefined();
473
474
  expect(blockedCall[0]).toMatch(/registryHost=public_npm(\s|$)/);
@@ -501,7 +502,7 @@ describe("checkVersionsAndWritePackageJson", () => {
501
502
  `npm error 401 Unauthorized - GET https://${privateHost}:4873/@superblocksteam%2fcli`,
502
503
  `npm error request to https://${privateHost}/foo failed, reason: getaddrinfo ENOTFOUND ${privateHost}`,
503
504
  ].join("\n"), new Error("Command failed: pnpm install ..."));
504
- await expect(runAndAwaitUpgrade()).rejects.toThrow(/Command failed: pnpm install/);
505
+ await expect(runAndAwaitUpgrade()).rejects.toThrow(UpgradeFailed);
505
506
  const blockedCall = loggerMock.error.mock.calls.find((c) => typeof c[0] === "string" && c[0].includes("[npm-install-blocked]"));
506
507
  expect(blockedCall).toBeDefined();
507
508
  // Stringify the entire call tuple so we catch the host whether it
@@ -528,7 +529,7 @@ describe("checkVersionsAndWritePackageJson", () => {
528
529
  "npm error code E404",
529
530
  "npm error 404 Not Found - GET https://npm.private.example.com/@superblocksteam%2fcli - Not found",
530
531
  ].join("\n"), new Error("Command failed: pnpm install ..."));
531
- await expect(runAndAwaitUpgrade()).rejects.toThrow(/Command failed: pnpm install/);
532
+ await expect(runAndAwaitUpgrade()).rejects.toThrow(UpgradeFailed);
532
533
  expect(loggerMock.error).toHaveBeenCalledWith(expect.stringMatching(/\[npm-install-blocked\] reason=not_in_registry/));
533
534
  });
534
535
  it("APPS-4324: falls through to the existing generic error path for ERESOLVE (no false-positive)", async () => {
@@ -536,7 +537,7 @@ describe("checkVersionsAndWritePackageJson", () => {
536
537
  "npm error code ERESOLVE",
537
538
  "npm error ERESOLVE unable to resolve dependency tree",
538
539
  ].join("\n"), new Error("Command failed: pnpm install ..."));
539
- await expect(runAndAwaitUpgrade()).rejects.toThrow(/Command failed: pnpm install/);
540
+ await expect(runAndAwaitUpgrade()).rejects.toThrow(UpgradeFailed);
540
541
  // The classifier returns null for ERESOLVE — no structured log fires.
541
542
  expect(loggerMock.error).not.toHaveBeenCalledWith(expect.stringContaining("[npm-install-blocked]"));
542
543
  // The existing generic per-failure log still fires so the operator
@@ -558,7 +559,7 @@ describe("checkVersionsAndWritePackageJson", () => {
558
559
  "npm error network request to https://registry.npmjs.org/foo failed",
559
560
  ].join("\n"),
560
561
  });
561
- await expect(runAndAwaitUpgrade()).rejects.toThrow(/Command failed: pnpm install/);
562
+ await expect(runAndAwaitUpgrade()).rejects.toThrow(UpgradeFailed);
562
563
  expect(loggerMock.error).toHaveBeenCalledWith(expect.stringMatching(/\[npm-install-blocked\] reason=registry_unreachable/));
563
564
  });
564
565
  it("APPS-4324: accumulates stderr across multiple chunks before classifying", async () => {
@@ -571,7 +572,7 @@ describe("checkVersionsAndWritePackageJson", () => {
571
572
  "npm error code ECONNR",
572
573
  "EFUSED\nnpm error network request to https://registry.npmjs.org/foo failed",
573
574
  ], new Error("Command failed: pnpm install ..."));
574
- await expect(runAndAwaitUpgrade()).rejects.toThrow(/Command failed: pnpm install/);
575
+ await expect(runAndAwaitUpgrade()).rejects.toThrow(UpgradeFailed);
575
576
  expect(loggerMock.error).toHaveBeenCalledWith(expect.stringMatching(/\[npm-install-blocked\] reason=registry_unreachable/));
576
577
  });
577
578
  // -----------------------------------------------------------------
@@ -639,7 +640,7 @@ describe("checkVersionsAndWritePackageJson", () => {
639
640
  "npm error errno ECONNREFUSED",
640
641
  "npm error network request to https://registry.npmjs.org/@superblocksteam%2fcli failed, reason: connect ECONNREFUSED 127.0.0.1:443",
641
642
  ].join("\n"), new Error("Command failed: pnpm install ..."));
642
- await expect(runAndAwaitUpgrade()).rejects.toThrow(/Command failed: pnpm install/);
643
+ await expect(runAndAwaitUpgrade()).rejects.toThrow(UpgradeFailed);
643
644
  expect(recordNpmInstallMock).toHaveBeenCalledTimes(1);
644
645
  const args = recordNpmInstallMock.mock.calls[0][0];
645
646
  expect(args.runner).toBe("auto_upgrade");
@@ -661,7 +662,7 @@ describe("checkVersionsAndWritePackageJson", () => {
661
662
  "npm error code E401",
662
663
  `npm error 401 Unauthorized - GET https://${privateHost}/@superblocksteam%2fcli`,
663
664
  ].join("\n"), new Error("Command failed: pnpm install ..."));
664
- await expect(runAndAwaitUpgrade()).rejects.toThrow(/Command failed: pnpm install/);
665
+ await expect(runAndAwaitUpgrade()).rejects.toThrow(UpgradeFailed);
665
666
  expect(recordNpmInstallMock).toHaveBeenCalledTimes(1);
666
667
  const args = recordNpmInstallMock.mock.calls[0][0];
667
668
  expect(args.runner).toBe("auto_upgrade");
@@ -673,12 +674,37 @@ describe("checkVersionsAndWritePackageJson", () => {
673
674
  // that the upgrade path actually feeds the host in.
674
675
  expect(args.registryHost).toBe(privateHost);
675
676
  });
677
+ it("threads hasAnyRegistryConfigured into the classified error and the metric so private-registry upgrade failures get the admin guidance, not the public-npm copy", async () => {
678
+ // E404 against a private host = the org has a registry configured but it
679
+ // can't serve the target version. The caller derives
680
+ // hasAnyRegistryConfigured=true and forwards it here; without the
681
+ // threading both the overlay copy and the metric would wrongly read
682
+ // "no registry configured".
683
+ await mockNpmFallbackExec([
684
+ "npm error code E404",
685
+ "npm error 404 Not Found - GET https://npm.private.example.com/@superblocksteam%2fcli - Not found",
686
+ ].join("\n"), new Error("Command failed: pnpm install ..."));
687
+ const result = await checkVersionsAndWritePackageJson(mockLockService, mockConfig, false, false,
688
+ // appDir omitted (defaults to process.cwd()); pass the registry
689
+ // tri-state in the new trailing position.
690
+ undefined, true);
691
+ const err = await Promise.all(result.upgradePromises).catch((e) => e);
692
+ // The classified error drives the overlay copy: true → "ask an org
693
+ // admin to add the version to your registry".
694
+ expect(err).toBeInstanceOf(UpgradeFailed);
695
+ expect(err.serverError.category).toBe("not_in_registry");
696
+ expect(err.serverError.hasAnyRegistryConfigured).toBe(true);
697
+ // The same signal lands on the install metric so `auto_upgrade`
698
+ // failures attribute to the configured-registry bucket.
699
+ expect(recordNpmInstallMock).toHaveBeenCalledTimes(1);
700
+ expect(recordNpmInstallMock.mock.calls[0][0].configured).toBe(true);
701
+ });
676
702
  it("APPS-4544: emits outcome=other for an unclassified failure (ERESOLVE) so the metric reflects the failure even without a NpmInstallBlocked match", async () => {
677
703
  await mockNpmFallbackExec([
678
704
  "npm error code ERESOLVE",
679
705
  "npm error ERESOLVE unable to resolve dependency tree",
680
706
  ].join("\n"), new Error("Command failed: pnpm install ..."));
681
- await expect(runAndAwaitUpgrade()).rejects.toThrow(/Command failed: pnpm install/);
707
+ await expect(runAndAwaitUpgrade()).rejects.toThrow(UpgradeFailed);
682
708
  expect(recordNpmInstallMock).toHaveBeenCalledTimes(1);
683
709
  const args = recordNpmInstallMock.mock.calls[0][0];
684
710
  expect(args.runner).toBe("auto_upgrade");
@@ -730,7 +756,7 @@ describe("checkVersionsAndWritePackageJson", () => {
730
756
  const result = await checkVersionsAndWritePackageJson(mockLockService, mockConfig, false, false);
731
757
  // The validation failure rejects the upgrade promise (so dev.mts
732
758
  // won't restart into a stale CLI)...
733
- await expect(Promise.all(result.upgradePromises)).rejects.toThrow(/CLI version mismatch after upgrade/);
759
+ await expect(Promise.all(result.upgradePromises)).rejects.toThrow(UpgradeFailed);
734
760
  // ...and the metric still fires exactly once, flipped to `other`.
735
761
  expect(recordNpmInstallMock).toHaveBeenCalledTimes(1);
736
762
  const args = recordNpmInstallMock.mock.calls[0][0];
@@ -861,23 +887,18 @@ describe("checkVersionsAndWritePackageJson", () => {
861
887
  // The pkg-manager fallback rejects the upgrade promise; capture
862
888
  // it so the test doesn't surface as an unhandled rejection,
863
889
  // then assert on the span attribute the `catch` set.
864
- await expect(Promise.all(result.upgradePromises)).rejects.toThrow(/Command failed: pnpm install/);
890
+ await expect(Promise.all(result.upgradePromises)).rejects.toThrow(UpgradeFailed);
865
891
  expect(spanSetAttributeMock).toHaveBeenCalledWith("outcome", "failure");
866
892
  });
867
- // APPS-4544 (Bugbot 613adfc7): when the detected package manager can't be
868
- // turned into a global install command, `resolveCommand` returns
869
- // undefined. The old code logged and returned without throwing, so the
870
- // npm fallback became a silent no-op the `upgradeCli` span still
871
- // recorded `outcome=success` and no `recordNpmInstall` fired, producing a
872
- // trace that claimed a successful auto-upgrade with no matching install
873
- // metric. The fix emits a `runner=auto_upgrade` failure sample and flips
874
- // the span to `outcome=failure` so the no-op is visible in metrics and
875
- // traces but it does NOT throw, because a rejected upgrade promise
876
- // routes through `dev.mts` to `process.exit(1)` and crash-loops the
877
- // live-edit pod. The no-op dev-server restart that still follows, graceful
878
- // degrade, and user surfacing of the failed upgrade are tracked by
879
- // APPS-4457, so this test asserts the promise RESOLVES.
880
- it("APPS-4544: emits outcome=other and fails the span (without throwing) when no global install command can be resolved", async () => {
893
+ // When the detected package manager can't be turned into a global install
894
+ // command, `resolveCommand` returns undefined. It still emits a
895
+ // `runner=auto_upgrade` failure sample and flips the `upgradeCli` span to
896
+ // `outcome=failure` so the no-op stays visible in metrics and traces, and
897
+ // it throws `UpgradeFailed` so the upgrade promise REJECTS. The dev.mts
898
+ // join routes that marker to the degrade path (keep serving the current
899
+ // version) NOT `process.exit(1)` and the rejection also stops the
900
+ // `cliUpdated=true` enqueue from triggering a pointless restart loop.
901
+ it("emits outcome=other, fails the span, and rejects with UpgradeFailed when no global install command can be resolved", async () => {
881
902
  const { exec } = await import("node:child_process");
882
903
  const execMock = vi.mocked(exec);
883
904
  execMock.mockImplementation(((cmd, ...rest) => {
@@ -905,11 +926,11 @@ describe("checkVersionsAndWritePackageJson", () => {
905
926
  const { resolveCommand } = await import("package-manager-detector");
906
927
  vi.mocked(resolveCommand).mockReturnValueOnce(undefined);
907
928
  const result = await checkVersionsAndWritePackageJson(mockLockService, mockConfig, false, false);
908
- // The upgrade promise must RESOLVE, not reject: a no-resolvable-command
909
- // upgrade is a no-op the live-edit pod degrades through, not a throw that
910
- // `dev.mts` would route to `process.exit(1)` (crash-loop). Graceful
911
- // degrade + user surfacing of the failed upgrade is tracked by APPS-4457.
912
- await expect(Promise.all(result.upgradePromises)).resolves.toHaveLength(1);
929
+ // The upgrade promise must REJECT with the `UpgradeFailed` marker so the
930
+ // dev.mts join degrades (keep serving the current version) instead of
931
+ // restarting on the no-op. `handleStartupError` maps the marker to
932
+ // "degrade", so this rejection never reaches `process.exit(1)`.
933
+ await expect(Promise.all(result.upgradePromises)).rejects.toBeInstanceOf(UpgradeFailed);
913
934
  // A failure sample is still recorded for the auto_upgrade runner so the
914
935
  // metric isn't silently missing for this path.
915
936
  expect(recordNpmInstallMock).toHaveBeenCalledTimes(1);