Skip to content

feat: Upgrade Vite to 7.1.5#661

Merged
kingston merged 4 commits into
mainfrom
kingston/eng-874-upgrade-vite-to-vite-7
Sep 12, 2025
Merged

feat: Upgrade Vite to 7.1.5#661
kingston merged 4 commits into
mainfrom
kingston/eng-874-upgrade-vite-to-vite-7

Conversation

@kingston

@kingston kingston commented Sep 12, 2025

Copy link
Copy Markdown
Collaborator

Summary by CodeRabbit

  • New Features
    • New CLI command to sync example projects with options to overwrite or skip commands.
    • Added ability to sync all projects with aggregated results and clearer CLI output.
  • Chores
    • Upgraded Vite ecosystem and Tailwind across templates and examples to latest minor versions; no breaking changes expected.
  • Documentation
    • Added a comprehensive Package Upgrade Playbook.
    • Updated best practices on syncing projects after generation changes.
    • Added a changeset documenting the patch release.

@vercel

vercel Bot commented Sep 12, 2025

Copy link
Copy Markdown

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Preview Comments Updated (UTC)
baseplate-project-builder-web Ready Ready Preview Comment Sep 12, 2025 1:35pm

@changeset-bot

changeset-bot Bot commented Sep 12, 2025

Copy link
Copy Markdown

🦋 Changeset detected

Latest commit: a2fbc80

The changes in this PR will be included in the next version bump.

This PR includes changesets to release 18 packages
Name Type
@baseplate-dev/react-generators Patch
@baseplate-dev/project-builder-server Patch
@baseplate-dev/plugin-auth Patch
@baseplate-dev/plugin-storage Patch
@baseplate-dev/project-builder-cli Patch
@baseplate-dev/project-builder-common Patch
@baseplate-dev/project-builder-test Patch
@baseplate-dev/project-builder-web Patch
@baseplate-dev/create-project Patch
@baseplate-dev/code-morph Patch
@baseplate-dev/core-generators Patch
@baseplate-dev/fastify-generators Patch
@baseplate-dev/project-builder-lib Patch
@baseplate-dev/sync Patch
@baseplate-dev/tools Patch
@baseplate-dev/ui-components Patch
@baseplate-dev/utils Patch
@baseplate-dev/plugin-queue Patch

Not sure what this means? Click here to learn what changesets are.

Click here if you're a maintainer who wants to add another changeset to this PR

@coderabbitai

coderabbitai Bot commented Sep 12, 2025

Copy link
Copy Markdown

Important

Review skipped

Review was skipped due to path filters

⛔ Files ignored due to path filters (73)
  • tests/simple/packages/web/baseplate/generated/package.json is excluded by !**/generated/**, !tests/**, !**/generated/**
  • tests/simple/packages/web/baseplate/generated/src/components/ui/alert.tsx is excluded by !**/generated/**, !tests/**, !**/generated/**
  • tests/simple/packages/web/baseplate/generated/src/components/ui/badge.tsx is excluded by !**/generated/**, !tests/**, !**/generated/**
  • tests/simple/packages/web/baseplate/generated/src/components/ui/breadcrumb.tsx is excluded by !**/generated/**, !tests/**, !**/generated/**
  • tests/simple/packages/web/baseplate/generated/src/components/ui/calendar.tsx is excluded by !**/generated/**, !tests/**, !**/generated/**
  • tests/simple/packages/web/baseplate/generated/src/components/ui/card.tsx is excluded by !**/generated/**, !tests/**, !**/generated/**
  • tests/simple/packages/web/baseplate/generated/src/components/ui/checkbox.tsx is excluded by !**/generated/**, !tests/**, !**/generated/**
  • tests/simple/packages/web/baseplate/generated/src/components/ui/circular-progress.tsx is excluded by !**/generated/**, !tests/**, !**/generated/**
  • tests/simple/packages/web/baseplate/generated/src/components/ui/combobox.tsx is excluded by !**/generated/**, !tests/**, !**/generated/**
  • tests/simple/packages/web/baseplate/generated/src/components/ui/command.tsx is excluded by !**/generated/**, !tests/**, !**/generated/**
  • tests/simple/packages/web/baseplate/generated/src/components/ui/date-picker-field.tsx is excluded by !**/generated/**, !tests/**, !**/generated/**
  • tests/simple/packages/web/baseplate/generated/src/components/ui/date-time-picker-field.tsx is excluded by !**/generated/**, !tests/**, !**/generated/**
  • tests/simple/packages/web/baseplate/generated/src/components/ui/dialog.tsx is excluded by !**/generated/**, !tests/**, !**/generated/**
  • tests/simple/packages/web/baseplate/generated/src/components/ui/dropdown.tsx is excluded by !**/generated/**, !tests/**, !**/generated/**
  • tests/simple/packages/web/baseplate/generated/src/components/ui/empty-display.tsx is excluded by !**/generated/**, !tests/**, !**/generated/**
  • tests/simple/packages/web/baseplate/generated/src/components/ui/error-display.tsx is excluded by !**/generated/**, !tests/**, !**/generated/**
  • tests/simple/packages/web/baseplate/generated/src/components/ui/form-item.tsx is excluded by !**/generated/**, !tests/**, !**/generated/**
  • tests/simple/packages/web/baseplate/generated/src/components/ui/label.tsx is excluded by !**/generated/**, !tests/**, !**/generated/**
  • tests/simple/packages/web/baseplate/generated/src/components/ui/loader.tsx is excluded by !**/generated/**, !tests/**, !**/generated/**
  • tests/simple/packages/web/baseplate/generated/src/components/ui/multi-combobox.tsx is excluded by !**/generated/**, !tests/**, !**/generated/**
  • tests/simple/packages/web/baseplate/generated/src/components/ui/navigation-menu.tsx is excluded by !**/generated/**, !tests/**, !**/generated/**
  • tests/simple/packages/web/baseplate/generated/src/components/ui/popover.tsx is excluded by !**/generated/**, !tests/**, !**/generated/**
  • tests/simple/packages/web/baseplate/generated/src/components/ui/scroll-area.tsx is excluded by !**/generated/**, !tests/**, !**/generated/**
  • tests/simple/packages/web/baseplate/generated/src/components/ui/select.tsx is excluded by !**/generated/**, !tests/**, !**/generated/**
  • tests/simple/packages/web/baseplate/generated/src/components/ui/separator.tsx is excluded by !**/generated/**, !tests/**, !**/generated/**
  • tests/simple/packages/web/baseplate/generated/src/components/ui/sheet.tsx is excluded by !**/generated/**, !tests/**, !**/generated/**
  • tests/simple/packages/web/baseplate/generated/src/components/ui/sidebar.tsx is excluded by !**/generated/**, !tests/**, !**/generated/**
  • tests/simple/packages/web/baseplate/generated/src/components/ui/skeleton.tsx is excluded by !**/generated/**, !tests/**, !**/generated/**
  • tests/simple/packages/web/baseplate/generated/src/components/ui/switch.tsx is excluded by !**/generated/**, !tests/**, !**/generated/**
  • tests/simple/packages/web/baseplate/generated/src/components/ui/table.tsx is excluded by !**/generated/**, !tests/**, !**/generated/**
  • tests/simple/packages/web/baseplate/generated/src/components/ui/textarea.tsx is excluded by !**/generated/**, !tests/**, !**/generated/**
  • tests/simple/packages/web/baseplate/generated/src/components/ui/tooltip.tsx is excluded by !**/generated/**, !tests/**, !**/generated/**
  • tests/simple/packages/web/baseplate/generated/src/styles.css is excluded by !**/generated/**, !tests/**, !**/generated/**
  • tests/simple/packages/web/baseplate/generated/src/styles/button.ts is excluded by !**/generated/**, !tests/**, !**/generated/**
  • tests/simple/packages/web/baseplate/generated/src/styles/input.ts is excluded by !**/generated/**, !tests/**, !**/generated/**
  • tests/simple/packages/web/baseplate/generated/src/styles/select.ts is excluded by !**/generated/**, !tests/**, !**/generated/**
  • tests/simple/packages/web/package.json is excluded by !tests/**
  • tests/simple/packages/web/src/components/ui/alert.tsx is excluded by !tests/**
  • tests/simple/packages/web/src/components/ui/badge.tsx is excluded by !tests/**
  • tests/simple/packages/web/src/components/ui/breadcrumb.tsx is excluded by !tests/**
  • tests/simple/packages/web/src/components/ui/calendar.tsx is excluded by !tests/**
  • tests/simple/packages/web/src/components/ui/card.tsx is excluded by !tests/**
  • tests/simple/packages/web/src/components/ui/checkbox.tsx is excluded by !tests/**
  • tests/simple/packages/web/src/components/ui/circular-progress.tsx is excluded by !tests/**
  • tests/simple/packages/web/src/components/ui/combobox.tsx is excluded by !tests/**
  • tests/simple/packages/web/src/components/ui/command.tsx is excluded by !tests/**
  • tests/simple/packages/web/src/components/ui/date-picker-field.tsx is excluded by !tests/**
  • tests/simple/packages/web/src/components/ui/date-time-picker-field.tsx is excluded by !tests/**
  • tests/simple/packages/web/src/components/ui/dialog.tsx is excluded by !tests/**
  • tests/simple/packages/web/src/components/ui/dropdown.tsx is excluded by !tests/**
  • tests/simple/packages/web/src/components/ui/empty-display.tsx is excluded by !tests/**
  • tests/simple/packages/web/src/components/ui/error-display.tsx is excluded by !tests/**
  • tests/simple/packages/web/src/components/ui/form-item.tsx is excluded by !tests/**
  • tests/simple/packages/web/src/components/ui/label.tsx is excluded by !tests/**
  • tests/simple/packages/web/src/components/ui/loader.tsx is excluded by !tests/**
  • tests/simple/packages/web/src/components/ui/multi-combobox.tsx is excluded by !tests/**
  • tests/simple/packages/web/src/components/ui/navigation-menu.tsx is excluded by !tests/**
  • tests/simple/packages/web/src/components/ui/popover.tsx is excluded by !tests/**
  • tests/simple/packages/web/src/components/ui/scroll-area.tsx is excluded by !tests/**
  • tests/simple/packages/web/src/components/ui/select.tsx is excluded by !tests/**
  • tests/simple/packages/web/src/components/ui/separator.tsx is excluded by !tests/**
  • tests/simple/packages/web/src/components/ui/sheet.tsx is excluded by !tests/**
  • tests/simple/packages/web/src/components/ui/sidebar.tsx is excluded by !tests/**
  • tests/simple/packages/web/src/components/ui/skeleton.tsx is excluded by !tests/**
  • tests/simple/packages/web/src/components/ui/switch.tsx is excluded by !tests/**
  • tests/simple/packages/web/src/components/ui/table.tsx is excluded by !tests/**
  • tests/simple/packages/web/src/components/ui/textarea.tsx is excluded by !tests/**
  • tests/simple/packages/web/src/components/ui/tooltip.tsx is excluded by !tests/**
  • tests/simple/packages/web/src/styles.css is excluded by !tests/**
  • tests/simple/packages/web/src/styles/button.ts is excluded by !tests/**
  • tests/simple/packages/web/src/styles/input.ts is excluded by !tests/**
  • tests/simple/packages/web/src/styles/select.ts is excluded by !tests/**
  • tests/simple/pnpm-lock.yaml is excluded by !**/pnpm-lock.yaml, !tests/**

CodeRabbit blocks several paths by default. You can override this behavior by explicitly including those paths in the path filters. For example, including **/dist/** will override the default block on the dist directory, by removing the pattern from both the lists.

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

Walkthrough

Adds a new CLI command to sync example projects via a new server action that batches per-project syncs. Updates action registry/exports, introduces example-project discovery utility, and bumps Vite/Tailwind ecosystem versions across workspace, generators, and example apps. Adds a changeset and documentation (CLAUDE Best Practice, upgrade playbook).

Changes

Cohort / File(s) Summary
Docs & Process
.changeset/upgrade-vite-7.md, CLAUDE.md, PACKAGE-UPGRADE-PLAYBOOK.md
New changeset for react-generators patch; added best-practice note; added detailed package upgrade playbook.
Workspace Catalog
pnpm-workspace.yaml
Bumped catalog versions for vite, @vitejs/plugin-react, vite-plugin-svgr, tailwindcss, @tailwindcss/vite.
React Generators Constants
packages/react-generators/src/constants/react-packages.ts
Updated REACT_PACKAGES version strings for vite/Tailwind ecosystem.
Examples: version bumps
examples/blog-with-auth/packages/admin/package.json, examples/todo-with-auth0/packages/admin/package.json, examples/todo-with-auth0/packages/web/package.json
Updated devDependency pins: vite, @vitejs/plugin-react, vite-plugin-svgr, tailwindcss, @tailwindcss/vite.
CLI: new sync-examples command
packages/project-builder-cli/src/commands/sync-examples.ts, packages/project-builder-cli/src/index.ts, packages/project-builder-cli/src/utils/list-projects.ts
Added addSyncExamplesCommand with --overwrite and --skip-commands; registered in CLI; introduced getExampleProjects() utility to discover example projects.
Server: action wiring
packages/project-builder-server/src/actions/registry.ts, packages/project-builder-server/src/actions/sync/index.ts
Exported and registered syncAllProjectsAction alongside syncProjectAction.
Server: new batch sync action
packages/project-builder-server/src/actions/sync/sync-all-projects.action.ts
Implemented syncAllProjectsAction with input/output schemas, per-project orchestration, status aggregation, and CLI output.

Sequence Diagram(s)

sequenceDiagram
  autonumber
  actor U as User
  participant CLI as project-builder-cli
  participant LP as getExampleProjects()
  participant SA as invokeServiceActionAsCli
  participant S as Server Actions
  participant SPA as syncProject (per project)

  U->>CLI: baseplate sync-examples [--overwrite --skip-commands]
  CLI->>LP: Discover example projects
  LP-->>CLI: Project list
  CLI->>SA: Invoke sync-all-projects with projects + flags
  SA->>S: syncAllProjectsAction(input, context)

  rect rgba(200,230,255,0.3)
    loop For each project
      S->>SPA: syncProject(dir, flags, context)
      SPA-->>S: {status: success|error|cancelled, message}
    end
  end

  S-->>SA: Aggregate results (overallStatus, per-project)
  SA-->>CLI: Output summary + per-project lines
  CLI-->>U: Display results
Loading

Estimated code review effort

🎯 3 (Moderate) | ⏱️ ~25 minutes

Possibly related PRs

Pre-merge checks (3 passed)

✅ Passed checks (3 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title Check ✅ Passed The title "feat: Upgrade Vite to 7.1.5" is concise, specific, and accurately describes the primary intent of the changeset (upgrading Vite and related tooling to 7.1.5). Although the PR also includes ancillary additions (CLI sync command, server action, and documentation), the title clearly communicates the main change and is appropriate for history scanning.
Docstring Coverage ✅ Passed No functions found in the changes. Docstring coverage check skipped.
✨ Finishing touches
🧪 Generate unit tests
  • Create PR with unit tests
  • Post copyable unit tests in a comment
  • Commit unit tests in branch kingston/eng-874-upgrade-vite-to-vite-7

Comment @coderabbitai help to get the list of available commands and usage tips.

@socket-security

Copy link
Copy Markdown

Review the following changes in direct dependencies. Learn more about Socket for GitHub.

Diff Package Supply Chain
Security
Vulnerability Quality Maintenance License
Added@​tailwindcss/​vite@​4.1.131001007299100
Addedvite-plugin-svgr@​4.5.01001009483100
Addedtailwindcss@​4.1.131001008498100
Added@​vitejs/​plugin-react@​5.0.210010010095100

View full report

@kingston kingston merged commit 354b975 into main Sep 12, 2025
7 of 8 checks passed
@kingston kingston deleted the kingston/eng-874-upgrade-vite-to-vite-7 branch September 12, 2025 13:34
@github-actions github-actions Bot mentioned this pull request Sep 12, 2025

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Actionable comments posted: 0

Caution

Some comments are outside the diff and can’t be posted inline due to platform limitations.

⚠️ Outside diff range comments (3)
examples/todo-with-auth0/packages/web/package.json (1)

1-7: Add packageManager to enforce pnpm 10+.
Per repo guidelines for examples/todo-with-auth0, add the field to hard-enforce pnpm usage/version.

Apply:

 {
   "name": "@prisma-crud/web",
   "version": "1.0.0",
+  "packageManager": "pnpm@10.15.0",
   "private": true,
   "description": "Web app for todo-with-auth0",
   "license": "UNLICENSED",
examples/todo-with-auth0/packages/admin/package.json (1)

1-8: Add packageManager to enforce pnpm 10+.
Required by the examples/todo-with-auth0 policy.

 {
   "name": "@prisma-crud/admin",
   "version": "1.0.0",
+  "packageManager": "pnpm@10.15.0",
   "private": true,
   "description": "Web app for todo-with-auth0",
   "license": "UNLICENSED",
examples/blog-with-auth/packages/admin/package.json (1)

1-8: Add packageManager to enforce pnpm 10+.
Mirror the policy used in todo-with-auth0 examples.

 {
   "name": "blog-with-auth-admin",
   "version": "1.0.0",
+  "packageManager": "pnpm@10.15.0",
   "private": true,
   "description": "Web app for blog-with-auth",
   "license": "UNLICENSED",
🧹 Nitpick comments (12)
.changeset/upgrade-vite-7.md (1)

15-15: Fix markdownlint MD034 (bare URL).
Wrap the URL in a link.

-See https://vite.dev/guide/migration.html
+See [Vite Migration Guide](https://vite.dev/guide/migration.html).
PACKAGE-UPGRADE-PLAYBOOK.md (3)

20-21: Prefer pnpm for registry queries to match the workspace toolchain.

Apply:

- npm view package-name version
+ pnpm view package-name version
...
- npm view package-name versions --json
+ pnpm view package-name versions --json
...
- npm view vite version
- npm view @vitejs/plugin-react version
- npm view @tailwindcss/vite version
- npm view tailwindcss version
+ pnpm view vite version
+ pnpm view @vitejs/plugin-react version
+ pnpm view @tailwindcss/vite version
+ pnpm view tailwindcss version

Also applies to: 64-69, 313-318


115-121: Clarify dedupe scope.

Recommend documenting “pnpm -w dedupe” to emphasize running at the workspace root and avoid per-package dedupe misunderstandings.

- pnpm dedupe
+ pnpm -w dedupe

356-361: Use pnpm-native helpers for outdated/updates.

- npm outdated
+ pnpm -w outdated
...
- pnpm update
+ pnpm -w update
packages/project-builder-server/src/actions/sync/sync-all-projects.action.ts (4)

3-5: Align import style with project alias usage.

Top imports use a path alias while the dynamic import is relative. For consistency (and easier refactors), prefer the alias as well—provided the alias resolves in dynamic imports for your build/runtime.

- const { syncProject } = await import('../../sync/sync-project.js');
+ const { syncProject } = await import('#src/sync/sync-project.js');

If the repo standard is “@src” per guidelines, consider a follow-up to unify aliases repo-wide.

Also applies to: 80-80


49-56: Early return for empty project lists.

Avoid iterating/printing summaries for “0 projects” and return a clear no-op result.

     logger.info(`Starting sync for ${projects.length} projects`);
 
+    if (projects.length === 0) {
+      const message = 'No projects to sync.';
+      logger.info(`Sync completed: ${message}`);
+      return {
+        overallStatus: 'success',
+        message,
+        results: [],
+      };
+    }

Also applies to: 137-150


160-181: Annotate writeCliOutput return type and avoid leading newline.

Minor polish for type clarity and output formatting.

-  writeCliOutput: (output) => {
+  writeCliOutput: (output): void => {
     // Print summary
@@
-    console.info('\nProject Results:');
+    console.info('Project Results:');

61-135: Optional: bounded concurrency to speed up multi-project syncs.

If projects are independent, consider p-limit with a small concurrency (e.g., 2–4) to reduce total wall time while avoiding I/O saturation.

I can provide a patch using p-limit if you want to pursue this.

packages/project-builder-server/src/actions/sync/index.ts (1)

1-1: Prefer barrel re-exports for index files (style guideline).

-export { syncAllProjectsAction } from './sync-all-projects.action.js';
+export * from './sync-all-projects.action.js';

(Optional to also change the next line for symmetry.)

-export { syncProjectAction } from './sync-project.action.js';
+export * from './sync-project.action.js';
packages/project-builder-cli/src/commands/sync-examples.ts (3)

41-46: Type-check the constructed context with satisfies

Prevents accidental shape drift if createServiceActionContext changes.

Apply this diff:

-        const context = {
-          ...baseContext,
-          projects: exampleProjects,
-        };
+        const context = {
+          ...baseContext,
+          projects: exampleProjects,
+        } satisfies Awaited<ReturnType<typeof createServiceActionContext>>;

48-55: Harden CLI error reporting around invokeServiceActionAsCli

If input validation throws before writeCliOutput runs, the user gets no summary. Catch and surface a concise error and set exit code.

Apply this diff:

-        await invokeServiceActionAsCli(
-          syncAllProjectsAction,
-          {
-            overwrite: options.overwrite,
-            skipCommands: options.skipCommands,
-          },
-          context,
-        );
+        try {
+          await invokeServiceActionAsCli(
+            syncAllProjectsAction,
+            {
+              overwrite: options.overwrite,
+              skipCommands: options.skipCommands,
+            },
+            context,
+          );
+        } catch (err) {
+          console.error(
+            `Failed to start sync: ${err instanceof Error ? err.message : String(err)}`,
+          );
+          process.exitCode = 1;
+        }

34-39: Condense project listing log (nit)

Less chatty output while keeping the detail.

Apply this diff:

-        console.info(
-          `Found ${exampleProjects.length} example projects to sync:`,
-        );
-        for (const project of exampleProjects) {
-          console.info(`  - ${project.name}`);
-        }
+        console.info(
+          `Found ${exampleProjects.length} example projects to sync:\n` +
+            exampleProjects.map((p) => `  - ${p.name}`).join('\n'),
+        );
📜 Review details

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro

Disabled knowledge base sources:

  • Linear integration is disabled by default for public repositories

You can enable these sources in your CodeRabbit configuration.

📥 Commits

Reviewing files that changed from the base of the PR and between 2bb3f43 and 2610297.

⛔ Files ignored due to path filters (6)
  • examples/blog-with-auth/packages/admin/baseplate/generated/package.json is excluded by !**/generated/**, !**/generated/**
  • examples/blog-with-auth/pnpm-lock.yaml is excluded by !**/pnpm-lock.yaml
  • examples/todo-with-auth0/packages/admin/baseplate/generated/package.json is excluded by !**/generated/**, !**/generated/**
  • examples/todo-with-auth0/packages/web/baseplate/generated/package.json is excluded by !**/generated/**, !**/generated/**
  • examples/todo-with-auth0/pnpm-lock.yaml is excluded by !**/pnpm-lock.yaml
  • pnpm-lock.yaml is excluded by !**/pnpm-lock.yaml
📒 Files selected for processing (14)
  • .changeset/upgrade-vite-7.md (1 hunks)
  • CLAUDE.md (1 hunks)
  • PACKAGE-UPGRADE-PLAYBOOK.md (1 hunks)
  • examples/blog-with-auth/packages/admin/package.json (2 hunks)
  • examples/todo-with-auth0/packages/admin/package.json (2 hunks)
  • examples/todo-with-auth0/packages/web/package.json (2 hunks)
  • packages/project-builder-cli/src/commands/sync-examples.ts (1 hunks)
  • packages/project-builder-cli/src/index.ts (2 hunks)
  • packages/project-builder-cli/src/utils/list-projects.ts (1 hunks)
  • packages/project-builder-server/src/actions/registry.ts (2 hunks)
  • packages/project-builder-server/src/actions/sync/index.ts (1 hunks)
  • packages/project-builder-server/src/actions/sync/sync-all-projects.action.ts (1 hunks)
  • packages/react-generators/src/constants/react-packages.ts (1 hunks)
  • pnpm-workspace.yaml (1 hunks)
🧰 Additional context used
📓 Path-based instructions (8)
**/*

📄 CodeRabbit inference engine (.cursor/rules/code-style.mdc)

Use kebab-case for file names

Files:

  • CLAUDE.md
  • packages/react-generators/src/constants/react-packages.ts
  • packages/project-builder-cli/src/commands/sync-examples.ts
  • pnpm-workspace.yaml
  • packages/project-builder-server/src/actions/sync/index.ts
  • packages/project-builder-server/src/actions/registry.ts
  • packages/project-builder-server/src/actions/sync/sync-all-projects.action.ts
  • examples/blog-with-auth/packages/admin/package.json
  • examples/todo-with-auth0/packages/web/package.json
  • packages/project-builder-cli/src/utils/list-projects.ts
  • packages/project-builder-cli/src/index.ts
  • examples/todo-with-auth0/packages/admin/package.json
  • PACKAGE-UPGRADE-PLAYBOOK.md
**/*.{ts,tsx}

📄 CodeRabbit inference engine (.cursor/rules/code-style.mdc)

**/*.{ts,tsx}: TypeScript with strict type checking
Always include return types on top-level functions including React components (React.ReactElement)
Include absolute paths in import statements via tsconfig paths (@src/ is the alias for src/)
If a particular interface or type is not exported, change the file so it is exported

If an interface or type is needed publicly but is not exported, modify the TypeScript file so it is exported

Files:

  • packages/react-generators/src/constants/react-packages.ts
  • packages/project-builder-cli/src/commands/sync-examples.ts
  • packages/project-builder-server/src/actions/sync/index.ts
  • packages/project-builder-server/src/actions/registry.ts
  • packages/project-builder-server/src/actions/sync/sync-all-projects.action.ts
  • packages/project-builder-cli/src/utils/list-projects.ts
  • packages/project-builder-cli/src/index.ts
**/*.{js,ts,tsx}

📄 CodeRabbit inference engine (.cursor/rules/code-style.mdc)

Node 16 module resolution - include file extensions in imports (.js)

Files:

  • packages/react-generators/src/constants/react-packages.ts
  • packages/project-builder-cli/src/commands/sync-examples.ts
  • packages/project-builder-server/src/actions/sync/index.ts
  • packages/project-builder-server/src/actions/registry.ts
  • packages/project-builder-server/src/actions/sync/sync-all-projects.action.ts
  • packages/project-builder-cli/src/utils/list-projects.ts
  • packages/project-builder-cli/src/index.ts
**/*.{ts,tsx,js}

📄 CodeRabbit inference engine (.cursor/rules/code-style.mdc)

**/*.{ts,tsx,js}: Sort imports by group: external libs first, then local imports
Use camelCase for variables/functions, PascalCase for types/classes
Order functions such that functions are placed below the variables/functions they use
We use the prefer using nullish coalescing operator (??) ESLint rule instead of a logical or (||), as it is a safer operator
Use console.info/warn/error instead of console.log

Files:

  • packages/react-generators/src/constants/react-packages.ts
  • packages/project-builder-cli/src/commands/sync-examples.ts
  • packages/project-builder-server/src/actions/sync/index.ts
  • packages/project-builder-server/src/actions/registry.ts
  • packages/project-builder-server/src/actions/sync/sync-all-projects.action.ts
  • packages/project-builder-cli/src/utils/list-projects.ts
  • packages/project-builder-cli/src/index.ts
.changeset/*.md

📄 CodeRabbit inference engine (CLAUDE.md)

When adding or changing a feature, add a new Changeset markdown file in .changeset/ using the specified frontmatter format with a patch bump

Files:

  • .changeset/upgrade-vite-7.md
**/index.{ts,tsx,js}

📄 CodeRabbit inference engine (.cursor/rules/code-style.mdc)

Prefer barrel exports e.g. export * from './foo.js' instead of individual named exports

Files:

  • packages/project-builder-server/src/actions/sync/index.ts
  • packages/project-builder-cli/src/index.ts
examples/blog-with-auth/{package.json,packages/**/package.json}

📄 CodeRabbit inference engine (examples/blog-with-auth/CLAUDE.md)

Use ESM only by setting "type": "module" in package.json

Files:

  • examples/blog-with-auth/packages/admin/package.json
examples/todo-with-auth0/{package.json,packages/**/package.json}

📄 CodeRabbit inference engine (examples/todo-with-auth0/CLAUDE.md)

examples/todo-with-auth0/{package.json,packages/**/package.json}: Module system must be ESM only ("type": "module" in package.json)
Package manager is pnpm 10+ (enforce via packageManager field)
Node version 22+ with Volta pinned to 22.18.0

Files:

  • examples/todo-with-auth0/packages/web/package.json
  • examples/todo-with-auth0/packages/admin/package.json
🧠 Learnings (6)
📚 Learning: 2025-09-05T15:28:22.494Z
Learnt from: CR
PR: halfdomelabs/baseplate#0
File: CLAUDE.md:0-0
Timestamp: 2025-09-05T15:28:22.494Z
Learning: Run `pnpm lint:affected` and `pnpm typecheck` before committing changes

Applied to files:

  • CLAUDE.md
📚 Learning: 2025-09-03T17:03:33.250Z
Learnt from: CR
PR: halfdomelabs/baseplate#0
File: examples/todo-with-auth0/CLAUDE.md:0-0
Timestamp: 2025-09-03T17:03:33.250Z
Learning: Applies to examples/todo-with-auth0/{package.json,packages/**/package.json} : Node version 22+ with Volta pinned to 22.18.0

Applied to files:

  • packages/react-generators/src/constants/react-packages.ts
  • pnpm-workspace.yaml
  • examples/blog-with-auth/packages/admin/package.json
  • examples/todo-with-auth0/packages/web/package.json
  • examples/todo-with-auth0/packages/admin/package.json
📚 Learning: 2025-09-03T17:03:33.250Z
Learnt from: CR
PR: halfdomelabs/baseplate#0
File: examples/todo-with-auth0/CLAUDE.md:0-0
Timestamp: 2025-09-03T17:03:33.250Z
Learning: Applies to examples/todo-with-auth0/**/pnpm-workspace.yaml : Use pnpm workspaces with packages located under `packages/`

Applied to files:

  • pnpm-workspace.yaml
  • PACKAGE-UPGRADE-PLAYBOOK.md
📚 Learning: 2025-09-03T17:03:33.250Z
Learnt from: CR
PR: halfdomelabs/baseplate#0
File: examples/todo-with-auth0/CLAUDE.md:0-0
Timestamp: 2025-09-03T17:03:33.250Z
Learning: Applies to examples/todo-with-auth0/{package.json,packages/**/package.json} : Package manager is pnpm 10+ (enforce via `packageManager` field)

Applied to files:

  • examples/todo-with-auth0/packages/web/package.json
  • examples/todo-with-auth0/packages/admin/package.json
📚 Learning: 2025-09-03T17:03:33.250Z
Learnt from: CR
PR: halfdomelabs/baseplate#0
File: examples/todo-with-auth0/CLAUDE.md:0-0
Timestamp: 2025-09-03T17:03:33.250Z
Learning: Applies to examples/todo-with-auth0/{package.json,packages/**/package.json} : Module system must be ESM only (`"type": "module"` in package.json)

Applied to files:

  • examples/todo-with-auth0/packages/web/package.json
📚 Learning: 2025-09-03T17:03:33.250Z
Learnt from: CR
PR: halfdomelabs/baseplate#0
File: examples/todo-with-auth0/CLAUDE.md:0-0
Timestamp: 2025-09-03T17:03:33.250Z
Learning: Applies to examples/todo-with-auth0/packages/{admin,backend}/src/**/*.{unit,int}.test.ts : Vitest: do not use globals; import `describe`, `it`, and `expect` from `vitest`

Applied to files:

  • examples/todo-with-auth0/packages/web/package.json
  • examples/todo-with-auth0/packages/admin/package.json
🧬 Code graph analysis (5)
packages/project-builder-cli/src/commands/sync-examples.ts (5)
packages/project-builder-cli/src/utils/list-projects.ts (1)
  • getExampleProjects (161-164)
packages/project-builder-cli/src/utils/create-service-action-context.ts (1)
  • createServiceActionContext (13-26)
packages/project-builder-server/src/actions/utils/cli.ts (1)
  • invokeServiceActionAsCli (13-26)
packages/project-builder-server/src/actions/sync/sync-all-projects.action.ts (1)
  • syncAllProjectsAction (39-182)
packages/project-builder-cli/src/commands/sync.ts (1)
  • addSyncCommand (14-56)
packages/project-builder-server/src/actions/registry.ts (2)
packages/project-builder-server/src/actions/sync/index.ts (1)
  • syncAllProjectsAction (1-1)
packages/project-builder-server/src/actions/sync/sync-all-projects.action.ts (1)
  • syncAllProjectsAction (39-182)
packages/project-builder-server/src/actions/sync/sync-all-projects.action.ts (4)
packages/project-builder-server/src/actions/types.ts (1)
  • createServiceAction (77-84)
packages/project-builder-server/src/plugins/node-plugin-store.ts (1)
  • createNodeSchemaParserContext (71-83)
packages/project-builder-server/src/sync/sync-metadata-controller.ts (1)
  • SyncMetadataController (24-134)
packages/project-builder-server/src/sync/sync-project.ts (1)
  • syncProject (83-239)
packages/project-builder-cli/src/utils/list-projects.ts (2)
packages/project-builder-server/src/actions/types.ts (1)
  • ServiceActionProject (10-17)
packages/project-builder-server/src/actions/utils/project-discovery.ts (1)
  • discoverProjects (75-114)
packages/project-builder-cli/src/index.ts (1)
packages/project-builder-cli/src/commands/sync-examples.ts (1)
  • addSyncExamplesCommand (15-58)
🪛 markdownlint-cli2 (0.17.2)
.changeset/upgrade-vite-7.md

15-15: Bare URL used

(MD034, no-bare-urls)

⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (6)
  • GitHub Check: Lint Examples (todo-with-auth0)
  • GitHub Check: Verify Sync (todo-with-auth0)
  • GitHub Check: Verify Sync (blog-with-auth)
  • GitHub Check: Test E2E
  • GitHub Check: Lint
  • GitHub Check: test
🔇 Additional comments (18)
examples/todo-with-auth0/packages/web/package.json (2)

65-89: Vite/Tailwind bumps look good and consistent.
Versions align with workspace catalog and generator constants.


91-97: Engines/Volta match the pinned Node 22.18.0 requirement.
Meets the Node version policy for this example package.

CLAUDE.md (1)

881-882: Good best-practice addition.
Explicitly calling out syncing all projects after gen changes aligns with the new sync-examples flow.

.changeset/upgrade-vite-7.md (1)

1-13: Solid changeset scope and patch bump.
Accurately documents the coordinated Vite/tooling upgrade.

examples/todo-with-auth0/packages/admin/package.json (2)

69-93: Version bumps are correct and match workspace/generators.
Consistent with the Vite 7.1.5 upgrade set.


95-101: Engines/Volta meet Node pinning.
Compliant with Node 22.18.0 and pnpm 10+ requirement.

packages/react-generators/src/constants/react-packages.ts (1)

10-20: Approve — Vite 7 package versions verified.
packages/react-generators/src/constants/react-packages.ts, pnpm-workspace.yaml, and examples/*/package.json all match: vite 7.1.5, @vitejs/plugin-react 5.0.2, vite-plugin-svgr 4.5.0, @tailwindcss/vite 4.1.13, tailwindcss 4.1.13.

pnpm-workspace.yaml (1)

7-23: Workspace catalog aligned with Vite 7 ecosystem.
Matches versions used in examples and generator constants.

packages/project-builder-cli/src/utils/list-projects.ts (1)

146-164: New getExampleProjects helper is clean and typed.
Straightforward wrapper over findExamplesDirectories + discoverProjects; no side effects or env coupling.

examples/blog-with-auth/packages/admin/package.json (2)

65-89: Version bumps look correct.
Consistent with catalog and generator constants.


91-97: Engines/Volta OK.
Pinned Node 22.18.0 is present.

PACKAGE-UPGRADE-PLAYBOOK.md (2)

139-150: No action required — referenced scripts exist in package.json.
Confirmed scripts: build, lint:only:affected, test:affected, typecheck.


29-31: Double-check the CLI invocation for syncing examples.

Root package.json's "start" delegates to pnpm run --filter @baseplate-dev/project-builder-cli start, and there are no sync-examples references in the repo. Verify the CLI accepts a positional sync-examples argument or update PACKAGE-UPGRADE-PLAYBOOK.md (lines 29–31, 126–129, 335–337) to the exact command (e.g. pnpm --filter @baseplate-dev/project-builder-cli run start -- sync-examples or a direct bin invocation).

packages/project-builder-server/src/actions/registry.ts (1)

8-8: LGTM — action registered and ordered sensibly.

Also applies to: 26-26

packages/project-builder-cli/src/index.ts (1)

10-10: LGTM — new sync-examples command is properly wired.

Imports respect Node ESM (.js), ordering looks consistent, and runCli has an explicit return type.

Also applies to: 32-32

packages/project-builder-cli/src/commands/sync-examples.ts (3)

15-23: Command scaffold looks solid

Clear name/description, boolean options, and Commander typing are correct.


8-9: Align import path alias with guidelines (@src/ instead of #src/)

Repo guideline specifies using @src/ for absolute imports. Switch to @src to avoid lint/IDE drift.

Apply this diff:

-import { createServiceActionContext } from '#src/utils/create-service-action-context.js';
-import { getExampleProjects } from '#src/utils/list-projects.js';
+import { createServiceActionContext } from '@src/utils/create-service-action-context.js';
+import { getExampleProjects } from '@src/utils/list-projects.js';
⛔ Skipped due to learnings
Learnt from: kingston
PR: halfdomelabs/baseplate#609
File: packages/ui-components/src/components/badge/badge-with-icon.stories.tsx:3-3
Timestamp: 2025-07-14T12:02:36.595Z
Learning: For TypeScript/TSX files: `#src/` is the new path alias standard for `src/` directory imports, replacing the previous `src/` convention.
Learnt from: CR
PR: halfdomelabs/baseplate#0
File: .cursor/rules/code-style.mdc:0-0
Timestamp: 2025-07-22T09:10:31.413Z
Learning: Applies to **/*.{ts,tsx} : Include absolute paths in import statements via tsconfig paths (`src/` is the alias for `src/`)
Learnt from: CR
PR: halfdomelabs/baseplate#0
File: examples/todo-with-auth0/CLAUDE.md:0-0
Timestamp: 2025-09-03T17:03:33.250Z
Learning: Applies to examples/todo-with-auth0/packages/{admin,backend}/src/**/*.{ts,tsx} : Use `import type` for type-only imports in TypeScript
Learnt from: kingston
PR: halfdomelabs/baseplate#505
File: packages/create-project/tsconfig.json:6-6
Timestamp: 2025-04-21T06:32:22.476Z
Learning: Since TypeScript 4.1, baseUrl is not required for paths mapping in tsconfig.json. Removing baseUrl and using explicit relative paths with "./" prefix (e.g., changing "src/*": ["src/*"] to "src/*": ["./src/*"]) prevents bare path imports from node_modules while maintaining path alias functionality.
Learnt from: CR
PR: halfdomelabs/baseplate#0
File: examples/blog-with-auth/CLAUDE.md:0-0
Timestamp: 2025-09-03T17:02:31.412Z
Learning: Applies to examples/blog-with-auth/packages/**/src/**/*.{ts,tsx} : Always use .js extensions in import statements (even when importing from TypeScript files)

24-56: Verify wiring and input schema — CLI registered; server input schema OK; alias mismatch (#src vs @src)

  • CLI: addSyncExamplesCommand is registered in packages/project-builder-cli/src/index.ts.
  • Server: sync-all-projects input schema defines overwrite and skipCommands as optional booleans and the handler reads them — packages/project-builder-server/src/actions/sync/sync-all-projects.action.ts.
  • Path alias: imports use the '#src' alias across the repo and no tsconfig*.json was found to confirm an '@src' mapping — the original suggestion to check/@src is incorrect. Verify '#src' mapping or change imports/tsconfig to '@src' if that was intended.

Likely an incorrect or invalid review comment.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant