Skip to content

fix: regenerate oclif manifests for nightly packaging#7159

Merged
isaacroldan merged 2 commits into
mainfrom
fix-nightly-manifest-mismatch
Apr 29, 2026
Merged

fix: regenerate oclif manifests for nightly packaging#7159
isaacroldan merged 2 commits into
mainfrom
fix-nightly-manifest-mismatch

Conversation

@isaacroldan

@isaacroldan isaacroldan commented Apr 2, 2026

Copy link
Copy Markdown
Contributor

WHY are these changes introduced?

Snapshot and nightly releases were shipping stale oclif.manifest.json files because the manifest was not being regenerated during the prepack step. This meant published packages could have outdated command metadata.

WHAT is this pull request doing?

Adds pnpm oclif manifest to the prepack script for all packages that include /oclif.manifest.json in their published files (app, cli, create-app, plugin-cloudflare, plugin-did-you-mean, and theme). This ensures the manifest is always freshly generated before a package is published.

A new repo-health test is also added to enforce this going forward — it checks that any package publishing oclif.manifest.json includes pnpm oclif manifest in its prepack script, preventing regressions.

How to test your changes?

  • Run the repo-health tests (vitest) and confirm the new oclif manifest packaging test passes.
  • Trigger a prepack on one of the affected packages and verify that oclif.manifest.json is regenerated with up-to-date content.

Measuring impact

  • n/a - this doesn't need measurement, e.g. a linting rule or a bug-fix

Checklist

  • I've considered possible cross-platform impacts (Mac, Linux, Windows)
  • I've considered possible documentation changes

Copy link
Copy Markdown
Contributor Author

This stack of pull requests is managed by Graphite. Learn more about stacking.

@amcaplan amcaplan left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks for the fix!

@github-actions

Copy link
Copy Markdown
Contributor

Differences in type declarations

We detected differences in the type declarations generated by Typescript for this branch compared to the baseline ('main' branch). Please, review them to ensure they are backward-compatible. Here are some important things to keep in mind:

  • Some seemingly private modules might be re-exported through public modules.
  • If the branch is behind main you might see odd diffs, rebase main into this branch.

New type declarations

We found no new type declarations in this PR

Existing type declarations

packages/cli-kit/dist/private/node/analytics.d.ts
@@ -19,12 +19,10 @@ 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;
     env_build_repository: string;
-    env_auto_upgrade_enabled: boolean | null;
 }
 export declare function getEnvironmentData(config: Interfaces.Config): Promise<EnvironmentData>;
 export declare function getSensitiveEnvironmentData(config: Interfaces.Config): Promise<{
packages/cli-kit/dist/private/node/session.d.ts
@@ -63,14 +63,14 @@ export interface OAuthSession {
 }
 type AuthMethod = 'partners_token' | 'device_auth' | 'theme_access_token' | 'custom_app_token' | 'none';
 /**
- * Retrieves a stable user identifier for analytics, or  if none applies.
+ * Retrieves the user ID from the current session or returns 'unknown' if not found.
  *
- * Evaluation order:
- * 1. If an app automation token or theme token is used, returns a deterministic UUID
- *    derived from that secret.
- * 2. Otherwise, if  was called (e.g. after OAuth), returns that value.
- * 3. Otherwise, if a persisted CLI session id is available, returns it.
- * 4. Otherwise returns .
+ * This function performs the following steps:
+ * 1. Checks for a cached user ID in memory (obtained in the current run).
+ * 2. Attempts to fetch it from the local storage (from a previous auth session).
+ * 3. Checks if a custom token was used (either as a theme password or partners token).
+ * 4. If a custom token is present in the environment, generates a UUID and uses it as userId.
+ * 5. If after all this we don't have a userId, then reports as 'unknown'.
  *
  * @returns A Promise that resolves to the user ID as a string.
  */
packages/cli-kit/dist/private/node/ui.d.ts
 import { Logger, LogLevel } from '../../public/node/output.js';
-import React from 'react';
 import { Key, RenderOptions } from 'ink';
 import { EventEmitter } from 'events';
-/**
- * Signal that the current Ink tree is done. Must be called within an
- * InkLifecycleRoot — throws if the provider is missing so lifecycle
- * bugs surface immediately instead of silently hanging.
- */
-export declare function useComplete(): (error?: Error) => void;
-/**
- * Root wrapper for Ink trees. Owns the single `exit()` call site — children
- * signal completion via `useComplete()`, which sets state here. The `useEffect`
- * fires post-render, guaranteeing all batched state updates have been flushed
- * before the tree is torn down.
- */
-export declare function InkLifecycleRoot({ children }: {
-    children: React.ReactNode;
-}): React.JSX.Element;
 interface RenderOnceOptions {
     logLevel?: LogLevel;
     logger?: Logger;
     renderOptions?: RenderOptions;
 }
 export declare function renderOnce(element: JSX.Element, { logLevel, renderOptions }: RenderOnceOptions): string | undefined;
-export declare function render(element: JSX.Element, options?: RenderOptions): Promise<void>;
+export declare function render(element: JSX.Element, options?: RenderOptions): Promise<unknown>;
 export declare class Stdout extends EventEmitter {
     columns: number;
     rows: number;
     readonly frames: string[];
     private _lastFrame?;
     constructor(options: {
         columns?: number;
         rows?: number;
     });
     write: (frame: string) => void;
     lastFrame: () => string | undefined;
 }
 export declare function handleCtrlC(input: string, key: Key, exit?: () => void): void;
 export {};
packages/cli-kit/dist/public/common/version.d.ts
@@ -1 +1 @@
-export declare const CLI_KIT_VERSION = "3.94.0";
\ No newline at end of file
+export declare const CLI_KIT_VERSION = "3.92.0";
\ No newline at end of file
packages/cli-kit/dist/public/node/cli-launcher.d.ts
@@ -1,8 +1,6 @@
-import type { LazyCommandLoader } from './custom-oclif-loader.js';
 interface Options {
     moduleURL: string;
     argv?: string[];
-    lazyCommandLoader?: LazyCommandLoader;
 }
 /**
  * Launches the CLI.
packages/cli-kit/dist/public/node/cli.d.ts
@@ -1,4 +1,3 @@
-import type { LazyCommandLoader } from './custom-oclif-loader.js';
 /**
  * IMPORTANT NOTE: Imports in this module are dynamic to ensure that "setupEnvironmentVariables" can dynamically
  * set the DEBUG environment variable before the 'debug' package sets up its configuration when modules
@@ -8,8 +7,6 @@ interface RunCLIOptions {
     /** The value of import.meta.url of the CLI executable module */
     moduleURL: string;
     development: boolean;
-    /** Optional lazy command loader for on-demand command loading */
-    lazyCommandLoader?: LazyCommandLoader;
 }
 /**
  * A function that abstracts away setting up the environment and running
@@ -20,7 +17,6 @@ export declare function runCLI(options: RunCLIOptions & {
     runInCreateMode?: boolean;
 }, launchCLI?: (options: {
     moduleURL: string;
-    lazyCommandLoader?: LazyCommandLoader;
 }) => Promise<void>, argv?: string[], env?: NodeJS.ProcessEnv, versions?: NodeJS.ProcessVersions): Promise<void>;
 /**
  * A function for create-x CLIs that automatically runs the "init" command.
@@ -42,5 +38,5 @@ export declare const jsonFlag: {
 /**
  * Clear the CLI cache, used to store some API responses and handle notifications status
  */
-export declare function clearCache(): Promise<void>;
+export declare function clearCache(): void;
 export {};
\ No newline at end of file
packages/cli-kit/dist/public/node/error.d.ts
@@ -1,6 +1,6 @@
+import { AlertCustomSection } from './ui.js';
 import { OutputMessage } from './output.js';
 import { InlineToken, TokenItem } from '../../private/node/ui/components/TokenizedText.js';
-import type { AlertCustomSection } from './ui.js';
 export { ExtendableError } from 'ts-error';
 export declare enum FatalErrorType {
     Abort = 0,
packages/cli-kit/dist/public/node/is-global.d.ts
@@ -1,4 +1,4 @@
-import type { PackageManager } from './node-package-manager.js';
+import { PackageManager } from './node-package-manager.js';
 /**
  * Returns true if the current process is running in a global context.
  *
packages/cli-kit/dist/public/node/metadata.d.ts
@@ -34,7 +34,7 @@ export type SensitiveSchema<T> = T extends RuntimeMetadataManager<infer _TPublic
  * @returns A container for the metadata.
  */
 export declare function createRuntimeMetadataContainer<TPublic extends AnyJson, TSensitive extends AnyJson = Record<string, never>>(defaultPublicMetadata?: Partial<TPublic>): RuntimeMetadataManager<TPublic, TSensitive>;
-type CmdFieldsFromMonorail = PickByPrefix<MonorailEventPublic, 'cmd_all_'> & PickByPrefix<MonorailEventPublic, 'cmd_app_'> & PickByPrefix<MonorailEventPublic, 'cmd_create_app_'> & PickByPrefix<MonorailEventPublic, 'cmd_theme_'> & PickByPrefix<MonorailEventPublic, 'store_'> & PickByPrefix<MonorailEventPublic, 'env_auto_upgrade_'>;
+type CmdFieldsFromMonorail = PickByPrefix<MonorailEventPublic, 'cmd_all_'> & PickByPrefix<MonorailEventPublic, 'cmd_app_'> & PickByPrefix<MonorailEventPublic, 'cmd_create_app_'> & PickByPrefix<MonorailEventPublic, 'cmd_theme_'> & PickByPrefix<MonorailEventPublic, 'store_'>;
 declare const coreData: RuntimeMetadataManager<CmdFieldsFromMonorail, {
     commandStartOptions: {
         startTime: number;
packages/cli-kit/dist/public/node/monorail.d.ts
@@ -2,7 +2,7 @@ import { JsonMap } from '../../private/common/json.js';
 import { DeepRequired } from '../common/ts/deep-required.js';
 export { DeepRequired };
 type Optional<T> = T | null;
-export declare const MONORAIL_COMMAND_TOPIC = "app_cli3_command/1.22";
+export declare const MONORAIL_COMMAND_TOPIC = "app_cli3_command/1.20";
 export interface Schemas {
     [MONORAIL_COMMAND_TOPIC]: {
         sensitive: {
@@ -46,10 +46,6 @@ export interface Schemas {
             cmd_all_timing_network_ms?: Optional<number>;
             cmd_all_timing_prompts_ms?: Optional<number>;
             cmd_all_timing_active_ms?: Optional<number>;
-            env_auto_upgrade_enabled?: Optional<boolean>;
-            env_auto_upgrade_accepted?: Optional<boolean>;
-            env_auto_upgrade_skipped_reason?: Optional<string>;
-            env_auto_upgrade_success?: Optional<boolean>;
             cmd_extensions_binary_from_source?: Optional<boolean>;
             cmd_scaffold_required_auth?: Optional<boolean>;
             cmd_scaffold_template_custom?: Optional<boolean>;
@@ -70,10 +66,6 @@ export interface Schemas {
             cmd_app_linked_config_uses_cli_managed_urls?: Optional<boolean>;
             cmd_app_warning_api_key_deprecation_displayed?: Optional<boolean>;
             cmd_app_deployment_mode?: Optional<string>;
-            cmd_app_validate_json?: Optional<boolean>;
-            cmd_app_validate_valid?: Optional<boolean>;
-            cmd_app_validate_issue_count?: Optional<number>;
-            cmd_app_validate_file_count?: Optional<number>;
             cmd_dev_tunnel_type?: Optional<string>;
             cmd_dev_tunnel_custom_hash?: Optional<string>;
             cmd_dev_urls_updated?: Optional<boolean>;
@@ -129,7 +121,6 @@ export interface Schemas {
             env_ci_platform?: Optional<string>;
             env_device_id?: Optional<string>;
             env_package_manager?: Optional<string>;
-            env_install_package_manager?: Optional<string>;
             env_package_manager_workspaces?: Optional<boolean>;
             env_plugin_installed_any_custom?: Optional<boolean>;
             env_plugin_installed_shopify?: Optional<string>;
packages/cli-kit/dist/public/node/node-package-manager.d.ts
@@ -60,22 +60,10 @@ export declare class FindUpAndReadPackageJsonNotFoundError extends BugError {
 export declare function packageManagerFromUserAgent(env?: NodeJS.ProcessEnv): PackageManager;
 /**
  * Returns the dependency manager used in a directory.
- * Walks upward from  so workspace packages (e.g. )
- * still resolve to the repo root lockfile ().
- * If no lockfile is found, it falls back to the package manager from the user agent.
- * If the package manager from the user agent is unknown, it returns 'npm'.
  * @param fromDirectory - The starting directory
  * @returns The dependency manager
  */
 export declare function getPackageManager(fromDirectory: string): Promise<PackageManager>;
-/**
- * Builds the command and argv needed to execute a local binary using the package manager
- * detected from the provided directory or its ancestors.
- */
-export declare function packageManagerBinaryCommandForDirectory(fromDirectory: string, binary: string, ...binaryArgs: string[]): Promise<{
-    command: string;
-    args: string[];
-}>;
 interface InstallNPMDependenciesRecursivelyOptions {
     /**
      * The dependency manager to use to install the dependencies.
packages/cli-kit/dist/public/node/notifications-system.d.ts
@@ -24,7 +24,7 @@ declare const NotificationSchema: zod.ZodObject<{
     surface: zod.ZodOptional<zod.ZodString>;
 }, "strip", zod.ZodTypeAny, {
     id: string;
-    type: "info" | "error" | "warning";
+    type: "error" | "info" | "warning";
     message: string;
     frequency: "always" | "once" | "once_a_day" | "once_a_week";
     ownerChannel: string;
@@ -41,7 +41,7 @@ declare const NotificationSchema: zod.ZodObject<{
     surface?: string | undefined;
 }, {
     id: string;
-    type: "info" | "error" | "warning";
+    type: "error" | "info" | "warning";
     message: string;
     frequency: "always" | "once" | "once_a_day" | "once_a_week";
     ownerChannel: string;
@@ -84,7 +84,7 @@ declare const NotificationsSchema: zod.ZodObject<{
         surface: zod.ZodOptional<zod.ZodString>;
     }, "strip", zod.ZodTypeAny, {
         id: string;
-        type: "info" | "error" | "warning";
+        type: "error" | "info" | "warning";
         message: string;
         frequency: "always" | "once" | "once_a_day" | "once_a_week";
         ownerChannel: string;
@@ -101,7 +101,7 @@ declare const NotificationsSchema: zod.ZodObject<{
         surface?: string | undefined;
     }, {
         id: string;
-        type: "info" | "error" | "warning";
+        type: "error" | "info" | "warning";
         message: string;
         frequency: "always" | "once" | "once_a_day" | "once_a_week";
         ownerChannel: string;
@@ -120,7 +120,7 @@ declare const NotificationsSchema: zod.ZodObject<{
 }, "strip", zod.ZodTypeAny, {
     notifications: {
         id: string;
-        type: "info" | "error" | "warning";
+        type: "error" | "info" | "warning";
         message: string;
         frequency: "always" | "once" | "once_a_day" | "once_a_week";
         ownerChannel: string;
@@ -139,7 +139,7 @@ declare const NotificationsSchema: zod.ZodObject<{
 }, {
     notifications: {
         id: string;
-        type: "info" | "error" | "warning";
+        type: "error" | "info" | "warning";
         message: string;
         frequency: "always" | "once" | "once_a_day" | "once_a_week";
         ownerChannel: string;
packages/cli-kit/dist/public/node/path.d.ts
 import type { URL } from 'url';
 /**
  * Joins a list of paths together.
  *
  * @param paths - Paths to join.
  * @returns Joined path.
  */
 export declare function joinPath(...paths: string[]): string;
 /**
  * Normalizes a path.
  *
  * @param path - Path to normalize.
  * @returns Normalized path.
  */
 export declare function normalizePath(path: string): string;
 /**
  * Resolves a list of paths together.
  *
  * @param paths - Paths to resolve.
  * @returns Resolved path.
  */
 export declare function resolvePath(...paths: string[]): string;
 /**
  * Returns the relative path from one path to another.
  *
  * @param from - Path to resolve from.
  * @param to - Path to resolve to.
  * @returns Relative path.
  */
 export declare function relativePath(from: string, to: string): string;
 /**
  * Returns whether the path is absolute.
  *
  * @param path - Path to check.
  * @returns Whether the path is absolute.
  */
 export declare function isAbsolutePath(path: string): boolean;
 /**
  * Returns the directory name of a path.
  *
  * @param path - Path to get the directory name of.
  * @returns Directory name.
  */
 export declare function dirname(path: string): string;
 /**
  * Returns the base name of a path.
  *
  * @param path - Path to get the base name of.
  * @param ext - Optional extension to remove from the result.
  * @returns Base name.
  */
 export declare function basename(path: string, ext?: string): string;
 /**
  * Returns the extension of the path.
  *
  * @param path - Path to get the extension of.
  * @returns Extension.
  */
 export declare function extname(path: string): string;
 /**
  * Parses a path into its components (root, dir, base, ext, name).
  *
  * @param path - Path to parse.
  * @returns Parsed path object.
  */
 export declare function parsePath(path: string): {
     root: string;
     dir: string;
     base: string;
     ext: string;
     name: string;
 };
 /**
- * Returns the longest common parent directory of two absolute paths.
- *
- * @param first - First absolute path.
- * @param second - Second absolute path.
- * @returns The common parent directory, or '/' if they share only the root.
- */
-export declare function commonParentDirectory(first: string, second: string): string;
-/**
  * Given an absolute filesystem path, it makes it relative to
  * the current working directory. This is useful when logging paths
  * to allow the users to click on the file and let the OS open it
  * in the editor of choice.
  *
  * @param path - Path to relativize.
  * @param dir - Current working directory.
  * @returns Relativized path.
  */
 export declare function relativizePath(path: string, dir?: string): string;
 /**
  * Given 2 paths, it returns whether the second path is a subpath of the first path.
  *
  * @param mainPath - The main path.
  * @param subpath - The subpath.
  * @returns Whether the subpath is a subpath of the main path.
  */
 export declare function isSubpath(mainPath: string, subpath: string): boolean;
 /**
  * Given a module's import.meta.url it returns the directory containing the module.
  *
  * @param moduleURL - The value of import.meta.url in the context of the caller module.
  * @returns The path to the directory containing the caller module.
  */
 export declare function moduleDirectory(moduleURL: string | URL): string;
 /**
  * When running a script using `npm run`, something interesting happens. If the current
  * folder does not have a `package.json` or a `node_modules` folder, npm will traverse
  * the directory tree upwards until it finds one. Then it will run the script and set
  * `process.cwd()` to that folder, while the actual path is stored in the INIT_CWD
  * environment variable (see here: https://docs.npmjs.com/cli/v9/commands/npm-run-script#description).
  *
  * @returns The path to the current working directory.
  */
 export declare function cwd(): string;
 /**
  * Tries to get the value of the `--path` argument, if provided.
  *
  * @param argv - The arguments to search for the `--path` argument.
  * @returns The value of the `--path` argument, if provided.
  */
 export declare function sniffForPath(argv?: string[]): string | undefined;
 /**
  * Returns whether the `--json` or `-j` flags are present in the arguments.
  *
  * @param argv - The arguments to search for the `--json` and `-j` flags.
  * @returns Whether the `--json` or `-j` flag is present in the arguments.
  */
 export declare function sniffForJson(argv?: string[]): boolean;
 /**
  * Removes any `..` traversal segments from a relative path and calls `warn`
  * if any were stripped. Normal `..` that cancel out within the path (e.g.
  * `foo/../bar` → `bar`) are collapsed but never allowed to escape the root.
  * Both `/` and `\` are treated as separators for cross-platform safety.
  *
  * @param input - The relative path to sanitize.
  * @param warn - Called with a human-readable warning when traversal segments are removed.
  * @returns The sanitized path (may be an empty string if all segments were traversal).
  */
 export declare function sanitizeRelativePath(input: string, warn: (msg: string) => void): string;
packages/cli-kit/dist/public/node/system.d.ts
@@ -87,12 +87,6 @@ export declare function exec(command: string, args: string[], options?: ExecOpti
  * @returns A Promise resolving after the number of seconds.
  */
 export declare function sleep(seconds: number): Promise<void>;
-/**
- * Check if the terminal supports OSC 8 hyperlinks.
- *
- * @returns True if the terminal supports hyperlinks.
- */
-export declare function terminalSupportsHyperlinks(): boolean;
 /**
  * Check if the standard input and output streams support prompting.
  *
packages/cli-kit/dist/public/node/ui.d.ts
@@ -34,7 +34,7 @@ export interface RenderConcurrentOptions extends PartialBy<ConcurrentOutputProps
  * 00:00:00 │ frontend │ third frontend message
  *
  */
-export declare function renderConcurrent({ renderOptions, ...props }: RenderConcurrentOptions): Promise<void>;
+export declare function renderConcurrent({ renderOptions, ...props }: RenderConcurrentOptions): Promise<unknown>;
 export type AlertCustomSection = CustomSection;
 export type RenderAlertOptions = Omit<AlertOptions, 'type'>;
 /**
@@ -328,6 +328,7 @@ interface RenderTasksOptions {
 /**
  * Runs async tasks and displays their progress to the console.
  * @example
+ * ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
  * Installing dependencies ...
  */
 export declare function renderTasks<TContext>(tasks: Task<TContext>[], { renderOptions, noProgressBar }?: RenderTasksOptions): Promise<TContext>;
@@ -345,6 +346,7 @@ export interface RenderSingleTaskOptions<T> {
  * @param options.renderOptions - Optional render configuration
  * @returns The result of the task
  * @example
+ * ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
  * Loading app ...
  */
 export declare function renderSingleTask<T>({ title, task, onAbort, renderOptions, }: RenderSingleTaskOptions<T>): Promise<T>;
packages/cli-kit/dist/public/node/upgrade.d.ts
@@ -1,10 +1,8 @@
-import { getAutoUpgradeEnabled, setAutoUpgradeEnabled } from '../../private/node/conf-store.js';
-export { getAutoUpgradeEnabled, setAutoUpgradeEnabled };
 /**
  * Utility function for generating an install command for the user to run
  * to install an updated version of Shopify CLI.
  *
- * @returns A string with the command to run, or undefined if the package manager cannot be determined.
+ * @returns A string with the command to run.
  */
 export declare function cliInstallCommand(): string | undefined;
 /**
@@ -30,14 +28,11 @@ export declare function versionToAutoUpgrade(): string | undefined;
 export declare function warnIfUpgradeAvailable(): Promise<void>;
 /**
  * Generates a message to remind the user to update the CLI.
- * For major version bumps, appends a link to the GitHub release notes so users
- * can review breaking changes before deciding to upgrade.
  *
  * @param version - The version to update to.
- * @param isMajor - Whether the version bump is a major version change.
  * @returns The message to remind the user to update the CLI.
  */
-export declare function getOutputUpdateCLIReminder(version: string, isMajor?: boolean): string;
+export declare function getOutputUpdateCLIReminder(version: string): string;
 /**
  * Prompts the user to enable or disable automatic upgrades, then persists their choice.
  *
packages/cli-kit/dist/public/node/hooks/postrun.d.ts
@@ -1,7 +1,3 @@
-/**
- * Postrun hook — uses dynamic imports to avoid loading heavy modules (base-command, analytics)
- * at module evaluation time. These are only needed after the command has already finished.
- */
 import { Hook } from '@oclif/core';
 /**
  * Check if post run hook has completed.
packages/cli-kit/dist/public/node/hooks/prerun.d.ts
@@ -14,4 +14,4 @@ export declare function parseCommandContent(cmdInfo: {
  * Triggers a background check for a newer CLI version (non-blocking).
  * The result is cached and consumed by the postrun hook for auto-upgrade.
  */
-export declare function checkForNewVersionInBackground(): Promise<void>;
\ No newline at end of file
+export declare function checkForNewVersionInBackground(): void;
\ No newline at end of file
packages/cli-kit/dist/private/node/ui/components/DangerousConfirmationPrompt.d.ts
@@ -1,4 +1,3 @@
-import { InlineToken, TokenItem } from './TokenizedText.js';
 import { InfoTableProps } from './Prompts/InfoTable.js';
 import { AbortSignal } from '../../../../public/node/abort.js';
 import { FunctionComponent } from 'react';
@@ -6,7 +5,6 @@ export interface DangerousConfirmationPromptProps {
     message: string;
     confirmation: string;
     infoTable?: InfoTableProps['table'];
-    warningItem?: TokenItem<InlineToken>;
     onSubmit: (value: boolean) => void;
     abortSignal?: AbortSignal;
 }

@isaacroldan isaacroldan marked this pull request as ready for review April 28, 2026 13:43
@isaacroldan isaacroldan requested a review from a team as a code owner April 28, 2026 13:44
Copilot AI review requested due to automatic review settings April 28, 2026 13:44
@isaacroldan isaacroldan requested a review from a team as a code owner April 28, 2026 13:44

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Ensures snapshot/nightly packages no longer ship stale oclif.manifest.json by regenerating the manifest during prepack, and adds a repo-health test to prevent regressions.

Changes:

  • Add pnpm oclif manifest to prepack for packages that publish oclif.manifest.json.
  • Add a repo-health Vitest that enforces manifest regeneration in prepack when the manifest is published.

Reviewed changes

Copilot reviewed 7 out of 7 changed files in this pull request and generated 2 comments.

Show a summary per file
File Description
packages/app/package.json Regenerates oclif.manifest.json during prepack before packaging.
packages/cli/package.json Regenerates oclif.manifest.json during prepack before packaging.
packages/create-app/package.json Regenerates oclif.manifest.json during prepack before packaging.
packages/plugin-cloudflare/package.json Regenerates oclif.manifest.json during prepack before packaging.
packages/plugin-did-you-mean/package.json Regenerates oclif.manifest.json during prepack before packaging.
packages/theme/package.json Regenerates oclif.manifest.json during prepack before packaging.
packages/cli/src/cli/repo-health.test.ts Adds repo-health test to enforce manifest regeneration in prepack when published.

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

Comment thread packages/cli/src/cli/repo-health.test.ts Outdated
Comment on lines +126 to +127
if (!packageJson.scripts?.prepack?.includes('pnpm oclif manifest')) {
missingManifestRefresh.push(path.relative(repoRoot, packageJsonPath))

Copilot AI Apr 28, 2026

Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

packageJson.scripts?.prepack?.includes('pnpm oclif manifest') is a fairly brittle string check: it will fail for equivalent commands like pnpm --silent oclif manifest, pnpm exec oclif manifest, or nx run ...:refresh-manifests. If the goal is to enforce regeneration rather than a specific spelling, consider using a small regex that matches oclif manifest (optionally preceded by pnpm flags / exec) or parsing the prepack command chain more deliberately.

Copilot uses AI. Check for mistakes.
isaacroldan and others added 2 commits April 28, 2026 17:07
Co-authored-by: Claude Code <claude-code@anthropic.com>
Store package ships /oclif.manifest.json but the prepack didn't regenerate
it — same bug the test is meant to catch. Add `pnpm oclif manifest` to
store's prepack alongside the other six packages.

Per Copilot review feedback, soften the repo-health matchers so the test
doesn't miss legitimate variants:
- files entries: match any path ending in `oclif.manifest.json` (covers
  `'oclif.manifest.json'` and globs in addition to `'/oclif.manifest.json'`)
- prepack script: match `oclif manifest` via word-boundary regex (covers
  `pnpm exec oclif manifest`, `pnpm --silent oclif manifest`, etc.)

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
@isaacroldan isaacroldan force-pushed the fix-nightly-manifest-mismatch branch from ac6a3bd to 93c70f4 Compare April 28, 2026 15:37
@github-actions github-actions Bot added the no-changelog This PR doesn't include a changeset entry. Is an internal only change not relevant to end users. label Apr 28, 2026
@isaacroldan isaacroldan added this pull request to the merge queue Apr 28, 2026
@github-merge-queue github-merge-queue Bot removed this pull request from the merge queue due to no response for status checks Apr 28, 2026
@isaacroldan isaacroldan added this pull request to the merge queue Apr 29, 2026
@isaacroldan isaacroldan removed this pull request from the merge queue due to the queue being cleared Apr 29, 2026
@isaacroldan isaacroldan added this pull request to the merge queue Apr 29, 2026
Merged via the queue into main with commit 060767f Apr 29, 2026
27 checks passed
@isaacroldan isaacroldan deleted the fix-nightly-manifest-mismatch branch April 29, 2026 09:45
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

no-changelog This PR doesn't include a changeset entry. Is an internal only change not relevant to end users.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants