Skip to content

chore(workbench): update feature branch with changes from main#1014

Merged
gu-stav merged 6 commits intofeat/workbenchfrom
chore/workbench-rebase-more
Apr 24, 2026
Merged

chore(workbench): update feature branch with changes from main#1014
gu-stav merged 6 commits intofeat/workbenchfrom
chore/workbench-rebase-more

Conversation

@gu-stav
Copy link
Copy Markdown
Member

@gu-stav gu-stav commented Apr 24, 2026

Description

#1013 has done the first half - this done brings in more changes from main. Afterwards all conflicts should be resolved.

What to review

Testing


Note

Low Risk
No code changes are present in the diff, so there is effectively no functional or behavioral risk.

Overview
This PR is effectively empty: the provided diff shows no added/modified files or behavior changes.

Reviewed by Cursor Bugbot for commit 4ae342c. Bugbot is set up for automated code reviews on this repo. Configure here.

binoy14 and others added 6 commits April 23, 2026 20:01
* fix(cli): replace preferred-pm with local implementation

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

* fix(cli): address review feedback for preferredPm

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

* fix(cli): detect pnpm-workspace.yaml in parent directory walk-up

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

* fix(cli): normalize path separators for workspace glob matching on windows

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

* fix(cli): continue workspace walk-up when inner workspace globs don't match

When a nested package.json has a workspaces field whose globs don't
match the target path, continue traversing parent directories instead
of returning null. Also simplify error handling in detectFromNodeModules
to swallow all read errors for best-effort detection.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

* fix(cli): remove continue that caused infinite loop in workspace walk-up

The continue statement skipped dir = path.dirname(dir) at the bottom
of the while loop, causing an infinite loop when a workspace's globs
didn't match the target path. Removing it lets the code fall through
to the directory advancement naturally.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

* fix(cli): skip chmod-based permission test on Windows

chmod doesn't enforce read permissions on Windows, so the file remains
readable and the test returns 'pnpm' instead of falling through to 'npm'.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

* fix(cli): remove circular import and add malformed package.json test

Address PR review feedback: inline DetectablePackageManager type to
break circular dependency between preferredPm and packageManagerChoice,
and add test covering malformed package.json handling in workspace
walk-up.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Move registry-mode e2e tests and Slack failure notifications into a
dedicated hourly scheduled workflow. The PR/push workflow now only runs
in pack mode. Post-release dispatch in release.yml updated to target
the new scheduled workflow with `latest` instead of a specific version.

Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
…993)

Use named imports for semver, nock, and typescript to resolve 167
import-x/no-named-as-default-member lint warnings. Also replace one
`as any` with a proper type cast.

CJS modules (json5, dotenv, tar-fs, tar-stream) are left unchanged
since they don't support named ESM imports at runtime.

Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
…1004)

* fix(cli): default to TypeScript in unattended mode for sanity init

When running sanity init in unattended mode (non-interactive terminal or
--yes flag), the CLI now defaults to TypeScript when --typescript or
--no-typescript is not explicitly provided, matching the interactive
prompt default.

Uses the existing flagOrDefault/shouldPrompt helpers already used by
initNextJs.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

* chore: update auto-generated changeset for PR #1004

---------

Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Co-authored-by: squiggler-app[bot] <265501495+squiggler-app[bot]@users.noreply.github.com>
#999)

* refactor(cli): extract init command body into framework-agnostic initAction

Moves ~1100 lines of logic out of the oclif InitCommand into
actions/init/initAction.ts, leaving init.ts as a thin wrapper that
maps oclif flags → InitOptions and catches InitError.

Flow files (initApp, initStudio, initNextJs, scaffoldTemplate) now
accept `options: InitOptions` instead of individual flag params,
and throw InitError directly instead of receiving an `error` callback.

Zero test assertion changes — all 14 init test files pass as-is.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* refactor(cli): clean up init telemetry types

- Make `visibility` optional in `CreateOrSelectDatasetStep` (can be
  undefined in unattended mode)
- Remove dead `ConfigureAppProjectStep` interface (no trace.log call
  exists for it)
- Remove unnecessary `as 'private' | 'public'` cast now that the
  type accepts undefined

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* fix: address PR review feedback — restore telemetry, fix env path, add tests

- Restore configureAppProject trace calls dropped during extraction
  (thread `trace` param into promptForAppTemplateSetup)
- Replace `throw new InitError('', 0)` with plain `return` on --env path
  (it's a normal success path, not an error)
- Remove exitCode===0 special-case from command wrapper
- Add ConfigureAppProjectStep to telemetry union type
- Port 4 new test files from #845: flagsToInitOptions, initAction,
  initError, init.command
- Update 2 existing tests: --env path no longer throws

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* refactor(cli): close remaining oclif decoupling gaps in init flow files

- bootstrapTemplate: make overwriteFiles/useTypeScript optional
- initHelpers: use InitContext['output'] instead of Output
- initNextJs: throw InitError instead of output.error(), pass options directly
- initStudio: dynamic import for ImportDatasetCommand, use workDir over process.cwd()
- initApp: use workDir over process.cwd()
- scaffoldTemplate: remove as boolean casts and unnecessary try/catch

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* fix: address PR review feedback — clean up test names, static import, tighten useTypeScript type

- Rename describe blocks to simpler names (mcpMode resolution, error handling)
- Use static import for InitError instead of dynamic import
- Make useTypeScript a required boolean since flagOrDefault always returns boolean

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* fix: update selectTemplate tests for refactored options signature

Tests from #1004 used the old flat-argument signature; wrap in options
object to match the current selectTemplate interface.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* refactor(cli): split initAction.ts into plan/ and project/ modules

Extract helper functions from the 1175-line initAction.ts into
one-function-per-file modules under plan/ and project/ subdirectories.
initAction.ts now contains only the main orchestrator, flag validation,
and auth — down to ~300 lines.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* fix: forward datasetDefault to app template dataset creation

The refactor from class methods to standalone functions dropped
the implicit this.flags['dataset-default'] read that getOrCreateDataset
relied on. Thread datasetDefault through getProjectDetails →
promptForAppTemplateSetup → getOrCreateDataset so --dataset-default
applies to app templates again.

Adds a regression test exercising the app template + --dataset-default
code path.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
Re-establishes main as a git-ancestor. Main's content was already present
via the squash of #1013, so conflicts resolved by taking the branch's
version (ours) for files where feat/workbench layered federation logic
over main's init refactor. No main content was dropped: tree matches
pre-merge HEAD, and the only files absent from HEAD that exist on main
are the intentional deletions/renames from #770 (getDashboardAppUrl) and
#997 (extractAppManifest → extractCoreAppManifest).

Conflicts resolved (all kept HEAD's version):
- packages/@sanity/cli/src/actions/init/initAction.ts (add/add)
- packages/@sanity/cli/src/actions/init/types.ts
- packages/@sanity/cli/src/actions/init/scaffoldTemplate.ts
- packages/@sanity/cli/src/actions/dev/startStudioDevServer.ts
- pnpm-lock.yaml

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
@claude
Copy link
Copy Markdown

claude Bot commented Apr 24, 2026

Claude finished @gu-stav's task in 36s —— View job


Review

  • Gather context: examine commits and diff
  • Check for changeset
  • Review changes

This PR has no net diff against origin/feat/workbench — it's a pure merge of main into the feature branch with no new code changes. Nothing to flag.

Changeset: Not required for a merge/rebase operation.

@github-actions
Copy link
Copy Markdown
Contributor

github-actions Bot commented Apr 24, 2026

📦 Bundle Stats — @sanity/cli

Compared against feat/workbench (add65f0e)

@sanity/cli

Metric Value vs feat/workbench (add65f0)
Internal (raw) 2.1 KB -
Internal (gzip) 799 B -
Bundled (raw) 10.94 MB -
Bundled (gzip) 2.05 MB -
Import time 834ms +10ms, +1.2%

bin:sanity

Metric Value vs feat/workbench (add65f0)
Internal (raw) 975 B -
Internal (gzip) 460 B -
Bundled (raw) 9.84 MB -
Bundled (gzip) 1.77 MB -
Import time 2.31s -3ms, -0.1%

🗺️ View treemap · Artifacts

Details
  • Import time regressions over 10% are flagged with ⚠️
  • Sizes shown as raw / gzip 🗜️. Internal bytes = own code only. Total bytes = with all dependencies. Import time = Node.js cold-start median.

📦 Bundle Stats — @sanity/cli-core

Compared against feat/workbench (add65f0e)

Metric Value vs feat/workbench (add65f0)
Internal (raw) 94.1 KB -
Internal (gzip) 22.1 KB -
Bundled (raw) 21.62 MB -
Bundled (gzip) 3.42 MB -
Import time 790ms -5ms, -0.6%

🗺️ View treemap · Artifacts

Details
  • Import time regressions over 10% are flagged with ⚠️
  • Sizes shown as raw / gzip 🗜️. Internal bytes = own code only. Total bytes = with all dependencies. Import time = Node.js cold-start median.

📦 Bundle Stats — create-sanity

Compared against feat/workbench (add65f0e)

Metric Value vs feat/workbench (add65f0)
Internal (raw) 976 B -
Internal (gzip) 507 B -
Bundled (raw) 50.7 KB -
Bundled (gzip) 12.6 KB -
Import time ❌ ChildProcess denied: node -
Details
  • Import time regressions over 10% are flagged with ⚠️
  • Sizes shown as raw / gzip 🗜️. Internal bytes = own code only. Total bytes = with all dependencies. Import time = Node.js cold-start median.

@gu-stav gu-stav marked this pull request as ready for review April 24, 2026 08:42
@gu-stav gu-stav merged commit 8535ccd into feat/workbench Apr 24, 2026
17 checks passed
@gu-stav gu-stav deleted the chore/workbench-rebase-more branch April 24, 2026 08:42
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.

3 participants