Changelog

Release history for codev and sfp server — what changed in each version.

codev is delivered through sfp server releases. Cloud tenants receive updates automatically. Self-hosted deployments update through the sfp server lifecycle commands. The desktop app updates itself; a release that requires a new desktop build says so in its entry.

September 2026

v53.2.0 — September 16, 2026

  • A run's log view opens at the end of the log and holds that position while the list finishes measuring, so an expanded failed section taller than the viewport no longer leaves the view at its header. The view stops holding the position once the reader scrolls, presses a key, or toggles a fold or Show All.
  • Selecting a different log within a run opens that log at its end. A log shorter than the one it replaced previously kept the earlier position.
  • sfp server update reports when it pauses worker assignment, and how many workers had their assignment restored once the update finishes. The commands it runs to pause and restore are no longer written to the update output.

v53.1.0 — September 15, 2026

  • The Changes section of a release candidate groups its commits by Packages, Commits or Pull requests, and filters them by package, pull request and work item alongside the search box. A commit with no linked pull request groups under No linked pull request.
  • When the full commit details of a release candidate fail to load, the Changes section keeps the history it already holds and offers Try again, instead of replacing it with an error.
  • The comment reporting outstanding manual deployment steps lists at most ten steps with a count of the remainder, and carries a link per release candidate — at most five — that opens its Pre/Post Steps with the target environment already selected.
  • A release waiting on manual deployment steps resumes that wait when the run is picked up again after a restart. Registering a release approval retries an interrupted request for up to five minutes.
  • The Component Cleanup page lists only components awaiting cleanup. A component that moved to another package is no longer listed, and the Moved filter and summary card are removed.
  • Create deployment step opens in a larger dialog, with a taller instructions editor and preview.

v53.0.1 — September 15, 2026

  • v53.0.1 contains the v53.0.0 changes and nothing else. The v53.0.0 server images failed to build and were not published, so a self-hosted deployment updates to v53.0.1.

v53.0.0 — September 15, 2026

  • Breaking change. Webhook deliveries now use a single envelope: event, repository, timestamp, actor, and the event-specific fields nested under data. Outgoing requests carry an X-SFP-Webhook-Payload-Version: 1 header. Before updating, change consumers, filters and body templates to read data.<field> instead of a root field — $path: "releaseConfigName" becomes $path: "data.releaseConfigName". This applies to validation, publishing, package installation, engine release events and sfp:release:mirrored. The bodies for release.deployed, release.finalized, build.completed and build.failed are unchanged, and queued deliveries and retries replay their original payload. There is no opt-out.
  • The add and edit webhook dialogs list the events the server emits under their display labels, while storing the original event names. A subscription saved under a name the server does not recognise stays editable, and free-form event names are still accepted.
  • Manual deployment steps have a Deployment Steps page under CI/CD. A step definition is created there with an environment and domain scope, steps raised from a pull request are grouped by that pull request, and a history tab records each completion.
  • An environment's detail page carries a Pre/Post Steps section, and a run lists the steps that apply to it in a Deployment Steps dialog.
  • Workflow Settings, opened from either of those places, sets how long a release waits for its outstanding manual pre-deployment steps — timeoutHours, 1 to 90, default 72 — and the fallback recheck interval, pollIntervalMinutes, 1 to 60, default 10. A step change wakes the waiting release immediately. The environment must already enable the manual-steps release gate, and editing the settings does not extend a deadline that is already running.
  • A release waits for human approval before it gates on manual pre-deployment steps. The steps were previously requested before the approval was given.
  • The release log records the wait for outstanding manual steps when it starts and again when the outstanding set changes, rather than on every recheck.
  • Assigning page layouts or compact layouts to a custom object no longer resets that object's own settings on the target org. enableActivities, enableReports and allowInChatterGroups were reset to false, and description, gender, startsWith and a targeted record type's description were cleared, when the composed deployment omitted them.
  • Unbundle is available on the newest release candidate. It was previously offered only on middle rows and needed at least three candidates in the group; it is now offered on every candidate except the oldest visible one.
  • The release candidates page offers All branches and lists the branches that hold an active candidate anywhere in the project, instead of a mandatory single choice among the branches tracked in the project configuration.
  • A link to a release candidate resolves its domain and branch and opens that candidate's detail, instead of the candidate list.
  • Creating a work item that triggers a task checks the caller's role against that task before the item is created, and an item whose task is rejected afterwards is discarded rather than left in the tracker.
  • Changelogs, package diffs, release dependency analysis and build events extract work items under one set of rules: a release definition's changelog.workItemFilters, otherwise the project's workItemRegexFilter, otherwise the defaults for the configured work item provider. A custom expression replaces the default patterns, is case-sensitive, and is bounded to 50 ms per commit.
  • A failed validation's AI error analysis is produced before the result is published, so it reaches the published validation record and the check reported on the pull request. An analysis that passes its timeout is cancelled, and the result records that it was unavailable.
  • A scratch org assigned from a pool shows the alias it was assigned under, with the org username kept as its identity. Log output scrollbars have more contrast.

v52.24.0 — September 11, 2026

  • Validation settings carry a Start validation setting with four options: On PR updates (the default), API driven, After required checks pass and From a PR comment. After required checks pass takes the exact names of checks or pipelines that must pass on the current pull request revision, with an optional polling fallback for missing check events. From a PR comment starts validation from /codev validate, which requires a member or owner account linked to the commenting Git identity.
  • A pool instance that failed to provision carries an Error badge in the pool's instance table, with the provisioning error on hover and in full in a dialog.
  • Publishing pushes a build's git tags in one push and retries a transient network failure. If the push still does not complete, the published artifacts are retained and the run reports the tags to retry instead of failing the publish.

v52.23.0 — September 10, 2026

  • Deleting a project records its cleanup as a durable job and carries it out in the background, retrying the steps that fail — environments, webhooks, schedules, browser sessions and project variables. Onboarding the same repository again returns a conflict until that cleanup completes.
  • A pool scratch org whose Dev Hub record no longer exists is now removed from pool tracking. Deleting it previously failed with a permissions message and left the entry in the pool.
  • A failed changeset shows the error reported by the run, with terminal formatting codes stripped, instead of the raw output stream.
  • A changeset artifact name is capped at 38 characters. Retrying a changeset that carries a longer name, and that has not produced an artifact yet, regenerates the name from the source environment.
  • sfp server update pauses worker assignment before draining and then waits only for work already running, rather than for the queue to empty. If the drain cannot be confirmed, the update stops before services are shut down. --force still skips draining.
  • Package changelogs compare short and full commit SHAs consistently, so a commit recorded as a short SHA in one version and a full SHA in another is no longer reported as an added or removed change.
  • The release candidate detail dialog moves from tabs to a section list — Overview, Cumulative changes, Work items, Changes, Components, Deployment preview and Packages — with a section selector on narrow viewports. Pull requests in the changes list carry their title, author and state, and a work item or package comparison that fails to load reports the failure with a retry instead of rendering empty.
  • The collapsed navigation sidebar no longer repeats the server status, approver requests and help entries; they remain in the expanded sidebar.

v52.22.0 — September 8, 2026

  • Each project selects its own DevHub connection, and build, package creation, validation, sync and release runs authenticate against that selection instead of a single tenant-wide default. The connection is chosen in the setup Dev Hub step or from Set as project DevHub in the orgs table, where the current selection carries a Project default badge, and it is stored as the project's defaultDevHubUsername.
  • Register Org and Connect Dev Hub open on an External Client App tab, marked Recommended, which registers an org through the JWT bearer flow — no web login, and no refresh token that Salesforce can expire.
  • A pool sandbox authenticates through the production org recorded as its parent, and that binding is re-confirmed on each authentication; the repository parameter no longer scopes the lookup and is ignored.
  • A comment command on an Azure DevOps pull request is identified by its thread and comment together. A command in a second comment thread on the same pull request was dropped as already processed when its comment number repeated one already handled in another thread.
  • Rows in the Schema Assist tree — in the project settings editor and the pool advanced editor — show the full setting description on hover, with line breaks preserved, instead of repeating the row's own truncated summary. A row without a description shows no tooltip.
  • The setup card that hosts sign-in, tenant selection and project selection fills the content area instead of stopping at 896×600, and the project list in the web app moves to two columns when its pane is wide enough.

v52.21.2 — September 7, 2026

  • The Schema Assist panel in the pool YAML editor labels a sandbox pool's connection field Parent production connection, where it previously read Dev Hub Username, and describes it as the registered parent production username used for sandbox lifecycle operations and review-environment authentication

v52.21.1 — September 7, 2026

  • A sandbox pool and a scratch org pool now ask for different connections. A sandbox pool selects a Parent production connection — a user with sandbox-management permissions and available licenses; Dev Hub enablement is not required — and a scratch org pool selects a DevHub connection.
  • A user with the member role can unassign a sandbox or scratch org that is assigned to them and return it to the pool. Unassigning an org held by someone else still requires the owner role.
  • An Azure DevOps comment command is matched to an sfp account regardless of the casing of the commenter's user principal name. A mixed-case name such as J.Doe@example.com was previously rejected as not matching an sfp account, because accounts store the email in lowercase.

v52.21.0 — September 4, 2026

  • Signing in to sfp from a terminal now finishes on the codev sign-in page rather than on a page the CLI serves itself, so the sign-in completes when the browser cannot reach the terminal's machine
  • Deployment logs fold more of their output.
  • The desktop app takes PATH, SSH_AUTH_SOCK and GNUPGHOME from the login shell at startup. A commit that needs gpg, ssh-keygen, or a node on PATH for a hook now behaves as it does in a terminal. Requires codev-desktop v2.17.0. (Desktop.)
  • Update on close installs the update. On macOS the deferred install ran inside the quit timeout and was killed before it finished, so the app never updated, and while the choice was pending the update check reported no update Requires codev-desktop v2.17.0. (Desktop.)

v52.20.2 — September 3, 2026

  • Project analysis checks render their findings as a list instead of a table.
  • View more details on a finished analysis check opens the pull request's Change Analysis page instead of the run;
  • The architecture linter no longer reports "No significant architectural changes detected" for a pull request that does change architecture.
  • Switching projects in the codev web app takes effect on the first attempt. A stale ?repo= in the URL and a branch read that wrote back a pre-switch copy of the project settings each restored the previous project.

v52.20.1 — September 2, 2026

  • Onboarding a project before the codev GitHub App is installed on the account no longer returns a service-unavailable error.
  • A project readiness check (preflight) against a repository that has no sfdx-project.json, or an unreadable one, is reported as not configured with a clear message instead of crashing the check.

v52.20.0 — September 2, 2026

  • A release request work item now lists its target deployment environments, not just the excluded ones.
  • In the codev Workspace Explorer, leaving a flow's fullscreen view and then selecting another flow no longer reopens it straight into fullscreen. Switching files now exits fullscreen.

v52.19.1 — September 1, 2026

  • Running sfp prepare from outside the sfp server network no longer fails when registering the new scratch org with the server.
  • Org drift run artifacts are removed on a retention schedule instead of accumulating without bound.
  • Editing an integration's credentials no longer wipes stored secrets. Fields left blank in the edit dialog keep their current value, as the dialog states — changing only an npm registry URL no longer deletes the stored token. An explicit null clears a field.
  • Repository and npm-registry errors from releasecandidate generate and related commands now surface the real server message instead of a generic "Repository identifier is required", so a failed artifact resolution is diagnosable.
  • A package that is not registered in the target DevHub now produces an actionable error — naming the package, its Package2 ID, the DevHub, and the exact sf package list --target-dev-hub command to verify — instead of "Unable to fetch Package Info".
  • Security: insights report HTML is written only by the internal report-rendering worker. Interactive members and public CI application tokens can no longer publish report HTML, closing a stored-XSS path where a published report would execute in another user's session on the application origin.
  • sfp server update no longer stalls behind releases parked at approval gates.

August 2026

v52.18.0 — August 31, 2026

  • The Settings → AI page reports per-repository AI usage over a rolling window — sessions, prompts and failures, tokens in and out, turns, time spent, and provider cost — as cards beside the AI quota cards.
  • Security: mock responses can no longer serve active markup on the application origin.
  • Security: the public mocks data plane enforces its 10 MB request-body limit on the streamed bytes.
  • Security: a project's config directory is confined to the repository root during domain loading, and validated at the API boundary, so a ../ value can no longer read files outside the repository.
  • Security: a local-development picker script is no longer included in production web builds; it is scoped to the dev server only.
  • Security: the unauthenticated /debug route has been removed from the production server configuration.

v52.17.0 — August 30, 2026

  • The desktop app ships an embedded codev command-line tool. Install it from Settings → App Configuration → Command-Line Tools; it covers the org-local commands — pull, push, sync, org login/open/list, apex tests, impact analysis, and package create/install. Requires codev-desktop v2.13.0. (Desktop.)
  • A codev agent Docker image packages a curated codev CLI for AI development agents running in CI.
  • sfp analyze runs the AI version-assist linter only when explicitly enabled — the --version-assist / --no-version-assist flag or the project's analysis setting. A project that never configured the setting no longer runs it implicitly.
  • A package install that fails on a transport error — a dropped connection, DNS, or TLS failure — now names the underlying cause (for example connect ECONNREFUSED) in the deploy Reasons block instead of a bare fetch failed.
  • Salesforce My Domain auth URLs are re-resolved when an org's hostname changes.

v52.16.0 — August 28, 2026

  • Slack and Microsoft Teams notifications can be now configured per event.
  • Salesforce flows render as diagrams in the web Workspace Explorer.
  • PR validation branch rules can restrict checks to named domains. Set an allowed domains list under Workflow Settings → Validation; a domain whose review target is unavailable is reported as skipped with a reason instead of blocking the other domains
  • A per-branch validation setting disables the unlocked-package source override. Disable source package override under Workflow Settings → Validation is opt-in; left off, validation behaves exactly as before.
  • A failure after a successful build is shown on the build row as an amber Failed after the build notice carrying the deployment's reason, instead of the row reading Completed with the failure visible only in the flow run.

v52.15.5 — August 27, 2026

  • A build that fails fatally — for example on a dependency version that cannot be resolved — no longer leaves packages showing Building indefinitely on the Builds page.
  • A release in which every package was already installed at the target version now publishes its release metadata, so the environment reflects the release instead of showing as never released.
  • Renaming an environment preserves its release history. The history migrates with the rename, and a rename is refused while a running release holds the environment lock.

v52.15.4 — August 27, 2026

  • A release that acquired an environment lock and then failed to generate the org's Salesforce credentials — for example on an expired org auth — held the lock for its full two-hour lease, blocking every subsequent release on that environment. The lock is now released as soon as credential generation fails on the request that acquired it
  • The Workspace Explorer Versions tab defaults to Published — the versions actually published to the registry
  • Creating a branch from the app footer starts from a fresh origin base. The create action opens a dialog with a base-branch picker fetched from origin, and the branch starts from that fetched base instead of a stale local ref
  • The Change Validation branch filter no longer fills with branches that never validate.
  • Scheduled and triggered org drift checks run an AI review. It is on by default whenever an AI integration is active Metered under nSight Reports, whose included allowance rises to 100 runs/month.
  • AI usage reads as unlimited when a bring-your-own AI provider is active.
  • Apex test results from large-org runs are stored instead of lost to a timeout. Result fetching is bounded
  • PR validation against a review environment survives large-diff deploys. The deploy poll wait is configurable per branch rule — Deployment Wait (minutes) in Validation Settings, or sfp validate org --waittime (default 120)
  • Cancelling a validation or release now cancels the org-side deployment it started.
  • A wrongly linked project folder can be corrected. The folder picker only appeared before the first link, so a wrong link could previously be fixed only by wiping application data. (Desktop.)

v52.13.1 — August 24, 2026

  • Restoring a developer's elevated access to their default (sfp org dev grant --use-default) no longer leaves them on the elevated profile with their permission sets removed when the restore fails partway.
  • The Workspace Explorer's Component Explorer shows what the next build would actually package
  • A Build Preview check joins Validation and Code Analysis in the Source Control Branch View. It runs the build as a local dry run and reports what the next CI build would package (Desktop.)
  • The desktop app recognises Salesforce Multi-Framework (React) UI bundles. (Desktop.)
  • An Install artifact action is available from the Workspace Explorer — per row on the Versions tab and from the artifact dialog (Web and desktop.)
  • ServiceNow change-request field templates gain now.date and now.dateTime merge fields
  • Apex test failures appear in the deploy error output instead of a generic deployment failure.
  • A scratch-org prepare failure surfaces the underlying component-level deploy errors instead of a generic prepare failure.

v52.12.0 — August 22, 2026

  • Salesforce production orgs and Dev Hubs can be registered with an External Client App (ECA) and a JWT bearer key instead of an SFDX auth URL.
  • Scratch org pools are fully server-driven. Prepare no longer reads or writes the Dev Hub's ScratchOrgInfo custom fields (Pooltag__c, Password__c, SfdxAuthUrl__c, Allocation_status__c)
  • The Deployment Matrix gains a Baseline column showing each package's server-managed baseline
  • Release deployments honor an environment's test-on-install setting: the environment's testOnInstall policy drives whether a release runs tests, ranking above package descriptor defaults. Production deployments always run tests.

v52.11.0 — August 20, 2026

  • The desktop app no longer freezes when duplicate file watchers accumulate on a workspace.
  • Pull-request comment commands on Azure DevOps repositories post their result callback to Azure DevOps.

v52.10.0 — August 19, 2026

  • The Source Control Commits & PRs section runs the two pull-request pre-flight checks — Validation and Code Analysis — locally against any org before a pull request is opened, using the same configuration the server-side pr-validate worker derives (branch rules matched against the target branch, the checksum-skip switch, and the DevHub-dependent unlocked-package test optimisation). (Desktop.)
  • Rerunning a failed release offers three retry modes. Incremental (default) skips already-installed package versions and keeps component checksum skip enabled, so the failed package benefits from checksum pruning; Full honours the original release definition; Force reinstalls everything and disables checksum skip. Available from both the task-detail and child-log rerun surfaces, including cascade release definitions. (Web and desktop.)
  • Running any sfp command from your home directory no longer deletes the global ~/.sfp store of credentials and auth.

v52.9.0 — August 18, 2026

  • Release candidate generation defaults the promotion environment when promotePackagesBeforeDeploymentToOrg is not set explicitly.
  • Diff views and code and YAML editors follow the app's light or dark theme instead of the operating system's.

v52.8.0 — August 18, 2026

  • Email and password sign-in is available on codev web and desktop as an alternative to GitHub or Azure DevOps sign-in.
  • Run build on the Builds toolbar creates a build for an exact commit.
  • Local Operations (preview) records the desktop's local worker runs — push, pull, apex test, validation, sync-to-org, package create and install, and data-package operations (Desktop.)
  • A replayed or duplicate pull-request webhook no longer cancels a healthy in-flight validation of the same commit.
  • A task failure carrying a very large error payload — for example a release that failed on thousands of component errors — always reaches the engine.
  • Environment drift shows the most recently started run.
  • An abandoned AI analysis attempt no longer reports a false failure.

v52.7.0 — August 17, 2026

  • The remote MCP endpoint at /sfp/api/mcp gains flows and approvals tools. A connected MCP client can list and inspect flow and CI/CD runs, dispatch and rerun flows, and list, approve, or reject pending approvals.

v52.6.0 — August 15, 2026

  • ServiceNow change requests get a Configure change request dialog in Settings → Integrations → ServiceNow — set which values populate a change request through field templates, with merge-field tokens, a payload preview, and per-project defaults.
  • Change Analysis rows no longer stay on Running forever when a PR analysis completes without publishing a result
  • A validation run started with --skipTesting no longer logs a misleading "no impacted test classes — skipping tests" warning that blamed the wrong cause and named a flag that does not exist.

v52.5.3 — August 13, 2026

  • Cascade merges refresh their push credentials before the final push, so a run whose clone-to-push time exceeds the GitHub App installation token's ~1-hour lifetime no longer fails authentication after the merge analysis has already succeeded.
  • Re-running a failed child attempt from the run page no longer fails with "Only the latest attempt in a job lineage can be retried".

v52.5.2 — August 13, 2026

  • The CI/CD Performance dashboard's validation cards report one consistent population. Validation outcomes and Validation success rate are now counted per validation run;

v52.5.1 — August 12, 2026

  • Package creation no longer fails when a file read from a commit is larger than 128 KiB.
  • Scratch org pools honour daysToKeepUnassignedAvailable. Assigned orgs keep their own expiry.
  • The Work Items board moves to the shared facet-filter toolbar — filter by state, conflicts, package, component, and label with counts, coloured pills, clear-all, and search in one row, with selections persisted. Open pull requests render first and closed ones collapse behind a Closed (N) separator, and the conflict accent is reserved for open pull requests. (Web and desktop.)

v52.5.0 — August 12, 2026

  • The remote MCP endpoint gains a read-only insights tool that exposes the Insights → Performance dashboard to a connected MCP client.

v52.4.0 — August 11, 2026

  • Each tenant server is a remote MCP endpoint at /sfp/api/mcp that an MCP client — Claude Code, claude.ai connectors, Cursor and more
  • Error Monitoring carries the selected timeframe into the org drill-down. Changing the overview range — to 30 days, say — and then opening an org's error detail showed the default 24 hours; the detail view now opens on the range chosen in the overview and starts at the first page. (Web and desktop.)
  • A release run cancelled mid-approval reports Cancelled, instead of a contradictory Partial or a permanent Running with a stranded pending approval. Cancelling a flow cascades to its child runs and settles their pending approvals, including one held by a child that had already stopped.

v52.3.0 — August 10, 2026

  • While a flow run is streaming, completed log groups collapse automatically — only the group still executing stays open, and an explicit collapse always sticks. Benign wording in a running group (Promotion failed: … already promoted .. skipping, Errors: 0, Roll Back on Error: true) no longer pins it open, and a run that finishes successfully leaves its groups collapsed instead of re-expanding every fold. A failed run keeps the post-mortem behaviour — failure groups auto-expand so the error stays visible.
  • sfp sync honours a project's stage forceignore files (plugins.sfp.ignoreFiles, for example .buildignore). Every sync mode — org-to-branch, diff-deploy, and --from-org — previously diffed and built against the root .forceignore only, so components the build pipeline excludes were counted as changes and deployed to the target org. The deploy stage now inherits the quickbuild ignore file, falling back to the build one, so ignored components no longer sync.

v52.2.1 — August 10, 2026

  • The Push Source dialog's Source Tracking option reads the same local changes as Source Control. It could show "No local changes in your working tree" with Deploy disabled while Source Control listed changes — the dialog gated on a metadata index that lags behind git after a fresh worktree, a change made outside the app, or opening the dialog from the command palette. The gate and the "Will push N changed component(s)" preview now derive from the same git file changes the push itself uses. Components already deployed successfully drop out of the list; a failed deploy stays, since it still needs pushing. (Desktop.)
  • Opening a pool sandbox — a dev or review environment — in the browser resolves across tenants. It could fail with "Cannot generate frontdoor URL … all resolution strategies exhausted" on some tenants while Connect-to-IDE worked for the same sandbox: the open actions on the pools, environments, and activity views did not pass the repository, so the resolver skipped its pool-scoped lookup and fell back to strategies that held on some tenants and not others. Every sandbox-open action now passes the repository.

v52.2.0 — August 10, 2026

  • Deploying a change to a decomposed object (CustomObject and its children — fields, list views, record types, validation rules) now sends only the child components that changed.
  • A package with apex but no detectable test classes now deploys at RunRelevantTests instead of RunLocalTests, on every org type including production.
  • The release.deployed webhook payload gains data.artifactSourceCommits
  • The pool overview's Pool config action opens the same schema-assisted YAML editor

v52.1.2 — August 8, 2026

  • Release builds no longer build packages a domain includes only through dependencyOn

v52.1.1 — August 7, 2026

  • A pool sandbox force-deleted from codev is no longer dropped from the pool when Salesforce refuses the delete.
  • The Work Items board drops pull requests closed without merging instead of showing them as Open, so it reflects open and recently merged pull requests only.
  • sync-org-to-branch waits up to six hours for a Salesforce deployment — the sfp sync org command it runs no longer caps at the CLI's 120-minute wait. Other sync commands and the global CLI default are unchanged.
  • The Environments overview keeps all three categories visible — the Release column is no longer pushed off-canvas at normal desktop widths, and horizontal scrolling appears only when the viewport is genuinely narrower than the board.

v52.1.0 — August 6, 2026

  • Releases run through codev now fire the outbound Release Deployed webhook, and every release.deployed payload carries the deployed commitSha and version. Previously only the external build flow emitted the event.
  • GitHub webhook deliveries missed while the server was down — during an update or outage — are replayed automatically within a two-hour window, once each. Set WEBHOOK_REPLAY_DISABLED=true to turn it off. (Self-hosted.)
  • sfp server stop, status, logs, and scale accept --base-dir, matching start, init, and update, so a deployment rooted outside ./sfp-server can be managed. (Self-hosted.)
  • macOS desktop builds are notarized again — bundled Java native libraries are signed with a Developer ID before the app is sealed. Every v52 build since v52.0.0 was blocked by Gatekeeper. (Desktop, macOS.)

v52.0.2 — August 6, 2026

  • Release candidates on GitHub projects show their work items, including the bare #N and (#N) references a squash merge writes. GitHub and Azure Boards work items are no longer dropped, and each links to its own tracker rather than a Jira-shaped URL.
  • The Request Release dialog's Linked Releases section always renders, so cross-domain linking is visible on a candidate with no detected work items; it explains where work items are read from and links to the docs.
  • The Code Analyzer run page's severity panels agree — the summary bar, Issues by Class, and Issues by Rule read from one severity rollup, and the rule list carries every rule that fired instead of the ten most frequent. A severe but rare rule is no longer dropped from the list.
  • PR Analysis no longer fails when the AI architecture check stalls — the AI turn is time-bounded and degrades to an advisory skip, so the deterministic linters still publish. The pr-analyze step limit is raised from 30 to 45 minutes.

v52.0.1 — August 5, 2026

  • The Jira integration defaults to OAuth Client Credentials, marked Preferred because it writes deployment and build status back to Jira where Basic Auth is read-only. Basic Auth remains available. Integration View Documentation links are repointed to the live /codev/integrations/* pages.
  • The Code Analyzer run page shows each finding's severity — a Severity column and facet filter on both tabs, per-class badges, and a whole-run distribution across Critical, High, Moderate, Low, and Info. An unrecognized severity shows as Unknown.
  • Release builds on long-running domains no longer fail the post-build step with a git authentication error — the git credential is refreshed before each git step that runs after the build.

v52.0.0 — August 5, 2026

  • Outbound webhooks deliver Release Deployed, Release Finalized, Build Completed, and Build Failed events; a subscription that previously stayed active but never sent now fires. An optional JSON body template reshapes the payload to a destination's schema, and each webhook has a delivery-history panel showing every attempt's body and response.
  • Push to Org returns, with a Soft sync (committed branch state) versus Full sync (committed plus uncommitted local changes) choice and a pre-deploy preview of what would deploy. Available from the command palette (⇧⌘P) and the Workspace sync section; scope can be narrowed to one domain.
  • Org Tracking is available from the command palette as a compact dialog — search, filter, multi-select, and retrieve pending org changes into a chosen package without opening the full Org Tracker. (Desktop.)
  • PR Analysis states why a check passed or failed: every Code Analyzer finding shows its severity and whether it blocks, and the check names the threshold in effect. AI architecture analysis distinguishes blocking concerns from advisory warnings and now gates when a project lists architecture in --fail-on. The release/* branch rule excludes architecture, so this stays opt-in.
  • A failed validation shows the real build error on the GitHub check instead of "Failed to create packages". A StaticResource whose content lives in a folder no longer loses its content file during a diff-package build, and sfp analyze and diff-package validation resolve their bundled Java libraries on all builds.
  • Release builds no longer time out on long-running domains — the build step limit is raised from 60 minutes to 4 hours.

v51.51.1 — August 4, 2026

  • Org drift analysis stops reporting components as missing that are present in the org — retrieved files are matched by their metadata type directory, so nested folders and non-main package roots resolve. This removed most drift findings on the measured tenant as false positives.
  • Org drift analysis no longer misclassifies large text files as binary — each side is sampled to a character boundary, so a multi-byte character in a comment no longer disables difference detection or surfaces trailing-newline differences as drift.
  • Compare no longer reports "Component … not found" for metadata whose name contains special characters, such as a layout named Case-Case (Marketing) Layout. The lookup falls back to a normalized comparison scoped to the org and metadata type.
  • Push reports what it deployed — a push that resolves no deployable components errors instead of reporting success, and a successful push reports the component count.
  • Non-owner developers can list a repository's pull requests; the list endpoint no longer requires the owner role.

v51.51.0 — August 4, 2026

  • The compliance check gates a pull request on finding severity: a complianceSeverityThreshold of error, warning, or info sets the cut-off, settable in config/analyze.yaml, project settings, or a branch rule. All findings are still reported; only the gate narrows. Behaviour change: the default is error, so a rule authored as a warning now advises instead of failing the check. A project that relied on warnings failing the check must set complianceSeverityThreshold: warning (or info) under failOn: [compliance].
  • An approval-gated developer access grant resolves its developer configuration when the grant runs, so an elevation approved later applies the current configuration. De-elevation retries a transient failure with backoff.

v51.50.0 — August 4, 2026

  • Onboarding preflight runs against every branch a project tracks, not only the repository default branch. Configuring a project for sfp clones, runs preflight, and opens the configuration pull request for each tracked branch, with baselines registered on the branch the project actually tracks. Wildcard branches are skipped, and when none resolve it falls back to the default branch. The configuration pull request is idempotent per branch — a re-run updates the existing one instead of opening a duplicate — and a per-branch failure is isolated and recorded in the preflight status. sfp project preflight accepts a --branch override.
  • A pull request validation that fails on a pool-backed target reports the exact reason — for example, a missing pool — as a comment on the pull request with a link to the run, and keeps that reason in the check summary. Pool-backed review targets are verified before the first validation is dispatched.
  • config/analyze.yml, config/ai-assist.yml, and config/ai-architecture.yml are detected with either the .yml or .yaml extension. Previously only the .yaml spelling was read and a .yml file was silently ignored; .yaml still takes precedence when both exist.
  • The Review environments page shows a pull request's author and avatar instead of the CI application token (app:…) that created the environment. The author filter and search use the same value.
  • The environment deploy panel distinguishes a release candidate from a release. On test and snapshot environments it presents as a Release candidate with the candidate's full deployed-to progression and an N / M stages indicator, and opens a detail dialog.
  • Server logs distinguish a workflow disabled in Workflow Configuration from a branch exclusion, and include the matched branch pattern, so a missing build is easier to diagnose.

v51.49.2 — August 4, 2026

  • On the Change Analysis page, a row for a pull request whose analysis is still running links to the analysis run itself rather than the validation run. In-flight analyses show a Running state and an Analysis Pending status, and homepage analysis chips read Analyzing… instead of Clean until the run finishes. An analysis that fails or is cancelled without publishing results is marked failed or cancelled instead of staying pending.
  • PR Analysis no longer times out on large, multi-file pull requests. Version assist now runs under a bounded time limit and degrades to an advisory skip when it exceeds it, so the linters and architecture checks still run and the pull request receives its checks.
  • Cascade merges on large, heavily conflicted branches (100+ files) no longer fail with a timeout. AI-assisted conflict resolution is allowed up to two hours to complete.
  • The Code Analyzer run page is rebuilt on web and desktop, with summary cards for errors, warnings, and trend; a filter toolbar for rule, class, and severity with clear-all; and search that filters the results — including by rule id in the class view — and persists across navigation.

v51.49.1 — August 4, 2026

  • PR Analysis on Azure DevOps now analyzes the files a pull request changed. Changed-file paths from Azure DevOps are normalized correctly; previously Code Analyzer received no files and reported a clean pass without checking anything.
  • Pull requests that delete or rename files no longer fail Code Analyzer with a "path must be of type string" error. Deleted and renamed entries are handled, folder entries are ignored, and empty paths are filtered out.
  • config/duplicates.yml and compliance configs are detected with either the .yml or .yaml extension. Each analysis run states which config file it used — or where it looked when none was found — and warns when an explicitly supplied config path does not exist.

v51.49.0 — August 3, 2026

  • Package and domain AI reports are branch-aware end to end — a report, its status check, and its share link stay tied to the branch they were generated against. Completed reports can be printed, opened in a standalone view, downloaded as HTML, and shared with a branch-qualified link. Regenerate forces a fresh analysis, and a report refreshes automatically when its run finishes.
  • The alias chosen when fetching a pool sandbox is saved and shown as the primary label in Assigned to me on web and desktop. Aliases are cleared when a sandbox returns to the pool or expires.
  • Validation no longer fails with "Cannot delete managed object" when a packaged custom-metadata (__mdt) picklist has had values renamed or removed. Locked, installed fields are skipped with a warning naming the leftover values; records, sibling fields, and regular picklists deploy normally.
  • Average PR Turnaround on the CI/CD Performance dashboard counts pull requests opened in the selected period and is reported in hours. Past time ranges are anchored to their calendar window.

v51.48.1 — August 2, 2026

  • Error Monitoring parses standard Salesforce Flow failure emails — including sandbox notifications — extracting the flow name, failing element, error detail, and affected user. Flow emails without an org id are matched to the org by their Lightning domain.
  • Selecting a time range with no errors shows a "No errors found" state. The setup screen appears only when monitoring has never received error data.
  • Desktop: cloning a project on a machine with no stored git credentials fails with a clear authentication message and a ready-to-copy git clone command, instead of a /dev/tty crash. Credentials embedded in a URL are redacted from error messages.
  • Desktop: Sync → Deploy works for projects containing unlocked packages. The deploy step receives the target Dev Hub, selected through a new dialog with a live connection check.
  • A failing PR analysis check names the linter that gated it. A check that cannot be created is no longer recorded as a success, and transient network errors are retried.

July 2026

v51.48.0 — July 31, 2026

  • GitHub's native Re-run button works on every codev check — per-domain validation checks, PR Analysis, and project analysis checks all dispatch the right run. Re-running a child check re-runs its parent validation, and a skipped rerun logs its reason.
  • Validation reruns on merge-based checkouts anchor the diff baseline on the merge commit's own base, so a rerun only re-checks what the pull request touched.
  • Pushing new commits to a pull request cancels the in-flight validation, its child runs, and any pending approvals before the new validation starts, instead of queueing behind them.
  • Collapsed groups in flow logs show how long each step took — final duration for completed groups, live elapsed time for running ones.
  • Projects that gated on Code Analyzer before severity thresholds existed had an empty threshold that fell back to the strictest setting. The intended Critical threshold is backfilled, and the settings UI persists the value on save.
  • The Conflicts button on Dev › Review › Pull Requests toggles a "with conflicts" filter on the table instead of navigating to a route that did not exist.
  • Tenants that do not use the platform AI integration can turn it off with PLATFORM_AI_PROVIDER=none. Credentials are retained so it can be re-enabled later.

v51.47.0 — July 31, 2026

  • Pull requests are branch-based end to end on desktop and web. Create one from the command palette or the Source Control header; the dialog shows source and target branch, warns about unpublished branches and unpushed commits, and lets you push from there. If a pull request already exists the action opens it. Azure DevOps repositories can now create pull requests.
  • Org Changes attributes each changed component to its real package instead of labelling everything src-temp. Retrieving from Org Changes matches Org Explorer: cancellable bulk retrieve, a main/default layout pre-flight with one-click migration, and a completion toast.
  • A code-analyzer.yml at the repository root is discovered and applied. A severity threshold controls when the analysis check fails — settable in config/analyze.yaml or project settings — and a run that analyzed nothing can no longer pass green.
  • When a GitHub or Azure DevOps token has expired, creating a work item guides you through reconnecting. Permission denials name the missing permission, and an expired server-side integration credential no longer signs you out of codev.
  • Impact analysis for release configs runs package checks in parallel — roughly 6–7× faster on a ~200-package repository, with identical output.
  • Desktop: macOS updates apply a ~2 MB delta instead of re-downloading the full app (one final full download is needed to reach this build). A regression that broke desktop Apex test execution and PR validation since 1.23.0 — runtime code in folders named tests was pruned from packaged builds — is fixed, and every bundled worker is now boot-tested before a release ships.

v51.46.0 — July 30, 2026

  • For cloud tenants, the platform-managed AI fallback can route through Anthropic directly in addition to the existing gateway. Keys you configure yourself always take precedence. Decrypted integration secrets are returned only to application tokens, never to interactive users.
  • The Module Explorer in Workspace Explorer resolves domains and packages for the selected branch instead of always showing the default branch.
  • Desktop: Create Package runs against the selected project, appears in the footer with a clear title, and reports the real outcome instead of success before the work finishes. The Sync to Org deploy step reports package-level failures instead of showing "Deployed".
  • Windows: filesystem moves and deletes during diff-package builds retry with backoff when antivirus or indexers hold file locks, and stale staging directories from failed builds are cleaned up.

v51.45.0 — July 28, 2026

  • Every sync entry point accepts a domain name, not just a release-config file path — /codev sync <env> --domain <name>, the CLI, and UI-dispatched syncs. Names are matched on the release name declared inside the config, and an unknown name fails fast listing the available domains. On /codev sync-review-env, --domain chooses what to sync while the pull request's active assignment chooses where, and a requested domain fans out to every review environment assigned to the pull request.
  • Desktop: the remaining pages — Org Changes, Tag Manager, Domains, Packages, Package Versions, Validation Reports, Pull Requests, Run Apex Tests, Local Test Results, and Settings → Orgs — use the unified header row with the command palette (⇧⌘P).
  • The Domains YAML editor saves. The Save button previously cleared the "Unsaved" badge without writing anything; it now persists through the same path as the Edit dialog, ⌘S saves, and invalid YAML surfaces inline.
  • On Change Validation, long domain names truncate cleanly and the table fits ~1270px viewports.

v51.44.0 — July 28, 2026

  • Developer Config stores one named configuration per developer-config file instead of merging every file into a single block. De-elevation restores a user to the correct configuration's own default access level, and access-level names are no longer renamed on collision. The editor is a master-detail view with YAML autocomplete — schema keys with inline docs, profiles, and permission sets suggested from branch and org. The Elevate and Add Users dialogs gain a configuration selector. Existing configurations keep working as default.
  • Desktop: a background worker that exits abnormally marks its task failed and releases its review environment, instead of ticking "running" forever. The validation worker reports the fatal error, and skipTesting: false is honored.
  • Desktop fixes: Create Package lists every authenticated Dev Hub with the default preselected; the Org Changes refresh spinner clears reliably with a 60-second timeout on org round-trips; the Settings shortcut is ⌘, (Ctrl+, on Windows/Linux); the package-creation folder picker refreshes on open; renaming a package updates every domain release-config that referenced the old name.

v51.43.2 — July 27, 2026

  • The Run Apex Tests dialog in Ops no longer offers Coverage Validation and Results Storage options that were invalid for the test levels this action runs and made runs fail immediately.
  • Importing a developer configuration is additive — existing access levels are preserved, and an imported level whose name already exists is kept under a suffixed name instead of overwriting. When a branch holds several configurations, a picker shows each file and its levels, and the import result lists what was added and renamed.

v51.43.1 — July 27, 2026

  • Desktop: the packaged app no longer crashes on startup of its sync-to-org worker with a "Cannot find module" error — a runtime dependency had been stripped during packaging. Ships in a new desktop build; server and CLI are unaffected.

v51.43.0 — July 27, 2026

  • Error Monitoring spans every registered Salesforce org in the tenant, with paginated loading and a guided setup screen. Error emails — including asynchronous Apex exceptions — are ingested through an unguessable, rotatable per-tenant address with signature validation, duplicate protection, and automatic retries.
  • On cloud tenants the server decides which AI provider is used, so AI features keep working when a repository pins a specific provider. When no provider resolves, the feature skips with a clear message instead of failing with an authentication error. Self-hosted deployments managing their own keys are unaffected.
  • Fetching a sandbox from a pool reports what happened — "no sandbox available" or "N sandboxes are currently being provisioned" instead of Error: 200 — and reused assignments authenticate correctly. Desktop, web, and CLI behave identically.

v51.42.0 — July 27, 2026

  • Pool users can be provisioned individually, each with their own access level and password-reset choice. The Add Users dialog looks up existing codev users or accepts an email. Access levels are resolved on the server from the project's developer configuration — the client only sends the level name, closing a privilege-escalation gap where a forged policy block could grant more than the named level.
  • New owner-only Ops → Developer Config page for defining a project's developer access levels on the server, with a schema-assisted editor, versioned saves, and an import from the repository. The same named levels drive pool provisioning and privilege elevation.
  • Desktop: the activity lock lives in the database instead of UI state, so triggering the same action twice against the same target — from another window, or after a project switch — returns an "already running" message. Actions against different targets still run in parallel.
  • Background tasks are tracked with heartbeats: tasks left behind by a crashed or force-quit app are recovered at next launch, and stalled tasks are reclaimed automatically.

v51.41.0 — July 26, 2026

  • Pending Approvals gains an Approved · Last 30 days tab scoped to the active repository — task type, scope, requester, approver, timestamps, response time, and work-item context. Tab selection is URL-addressable.
  • Org Insights reports are shareable — Share copies a URL carrying the selected org. Opening Insights without an org picks the newest registered org that has a report.
  • The Performance and Domain Evolution dashboards live under Insights → Dashboards. Existing dashboard URLs keep working.
  • A pool tag reused across a sandbox pool and a scratch-org pool could make one pool unreachable by tag. New cross-type collisions are blocked at creation, and the Pools overview flags pre-existing ones.
  • Cloud tenants route AI features through a platform-managed gateway with no keys to configure. A new Settings → AI page shows gateway status, model selection, and monthly usage. An AI integration you configure yourself takes precedence.
  • Data-package org actions (Pull, Push, Simulate, Preview) run in the background with the outcome delivered as a toast with a logs link. Analysis and Validation tabs are URL-addressable.
  • Desktop: auto-update completes its relaunch cleanly, and the app bundle is ~56 MB lighter.

v51.40.3 — July 25, 2026

  • Publishing artifacts to external npm registries (JFrog Artifactory, npmjs, GitLab) authenticates correctly for both token-based and basic-auth configurations. Previously no credentials were sent to any registry other than GitHub Packages.
  • Artifacts published to external registries receive the intended branch dist-tag instead of always landing on latest.

v51.40.2 — July 25, 2026

  • Desktop: My Activity no longer crashes when switching to a tenant whose Project Pulse dashboard was cached from an older server build. Tiles with missing values show a "—" placeholder until fresh data loads.

v51.40.1 — July 24, 2026

  • Azure DevOps identity linking through Microsoft Entra device sign-in no longer loops for guest users whose Microsoft account lives in a different tenant than the Azure DevOps organization. The correct tenant is determined automatically; a genuine mismatch produces a message naming both tenants. Affected connections self-heal on their next token refresh.

v51.40.0 — July 24, 2026

  • The Release Dry Run Results comment links to the release candidate's detail page in codev — work items, packages, and commits since the production baseline — so approvers can review what a release carries before approving it.
  • Release KPIs on the CI/CD Performance dashboard are scoped to environments in the release category. New cards break out snapshot and test release outcomes and flag release failures outside release environments.
  • Log section timers stop when a run reaches a terminal state, instead of counting past the run's real end.
  • Auth sessions show distinct active, refresh available, and expired states, and an expired token is never returned for scripting — you are pointed to refresh instead.

v51.39.0 — July 23, 2026

  • Retrieving metadata into a package that does not use the main/default layout warns before the retrieve and offers a one-click migration to the convention, so retrieves merge instead of creating a duplicate folder tree. Applies to bulk retrieves in Org Explorer and profile retrieves.
  • Terminal runs record end timestamps, so Elapsed and Duration reflect the run's real length — a failed run no longer shows hours of phantom elapsed time.
  • Validation concurrency is scoped per pull request, so different pull requests validate the same domain in parallel on their own pooled orgs. Same-PR safety is preserved.
  • Pools using installAll resolve the artifact scope and registry from the repository's npm integration instead of falling back to the public registry.
  • An inactive review-pool assignment rule no longer blocks creating a rule on the same branch pattern.

v51.38.0 — July 23, 2026

  • Org Insights introduced under Observe → Org Insights: an on-demand report for any registered org, covering twelve sections — an executive summary plus Apex, users, permissions, fields, field utilization, connected apps, object automation, packages, flows, logins, and content usage. Captures run in the background, keep a history, and download as a self-contained HTML file.
  • Editing a pool offers schema-aware assistance — inline suggestions and validation as you type.
  • Running an Apex test suite no longer trips over the .cls extension, and a rejected run shows the underlying Salesforce error.
  • The Open Org frontdoor shortcut is disabled for production orgs.
  • Work Items refresh runs as a background workflow instead of on the API request path, eliminating timeouts on larger boards.
  • Run rows are clickable through to the run's details.

v51.37.0 — July 22, 2026

  • The log viewer shows elapsed time for each section of a run, and long transcripts are folded into collapsible phases — successful phases collapsed, failing phases expanded.
  • The Runs and Scheduled Runs views add a sortable Work Item column and a searchable multi-select work-item filter. Filter and search selections persist between views.
  • The Work Items board's Refresh forces a live status fetch, so merged pull requests no longer stay stuck showing "in progress". The cards gain an Open / Closed / All filter and hover details.
  • Pool reconciliation interprets localized Salesforce sandbox statuses (German, French, Italian, Japanese, and others), so an in-progress sandbox on a non-English Dev Hub is not marked failed. Unrecognized statuses are held for retry.

v51.36.0 — July 21, 2026

  • codev's AI features — architecture and domain insights, validation-error analysis, AI reviews, version assist — can run on Claude through Google Cloud Vertex AI, for organizations that license Claude through their own Google Cloud project.
  • Repository workspaces are cached: a persistent, token-free git mirror with a fresh isolated clone per run, instead of cloning from scratch every time. This speeds up builds on merge, PR validation and analysis, releases, sync, package creation, changesets, and repository visualization — most noticeably on large repositories.
  • The pool editor's advanced configuration step discovers and inserts supported fields with schema-derived defaults, with formatting, copy, and reset. Field definitions come from the server.

v51.35.4 — July 20, 2026

  • Stopping the server waits for active runs — builds, releases, sandbox provisioning — to finish before shutting down, with options to force an immediate stop or bound the wait. An update aborts if work is still running when the drain times out, instead of interrupting it.
  • In a release targeting several environments, one environment's failure no longer cancels the others. A mix of success and failure ends as Partial, a release with no successes shows Failed, and a rejected approval is recorded as cancelled for that environment only.
  • Filters on the Runs page apply server-side, so pagination and the total count reflect the filtered set. A Status filter is added.

v51.35.3 — July 16, 2026

  • Sync → Deploy to org works from git worktree project layouts. A linked worktree's .git pointer file is recognized and a self-contained repository is rebuilt in the temporary deploy location, instead of failing with "fatal: not a git repository".

v51.35.2 — July 16, 2026

  • A self-hosted server update no longer silently disables SAML SSO. The update backfills the SAML setting when missing, while always preserving an explicit choice.
  • Completes the passkey fix from v51.35.1: formatting escape codes leaking into machine-readable output made successful passkey preparations read as failures. Color output is disabled for these steps, so a success is reported as a success.

v51.35.1 — July 16, 2026

  • Passkey enrollment during PR validation is confirmed directly from the virtual authenticator, so gated runs no longer log false "Passkey preparation attempt failed" warnings. A genuine failure carries a secret-redacted reason.

v51.35.0 — July 15, 2026

  • Cherry-to introduced — delivers a pull request's net change onto a divergent target branch as a draft delivery pull request, for the exception cases where artifact promotion does not fit. Triggered from a pull request with /codev cherry-to <target>. A deterministic native apply is tried first, with bounded AI analysis and semantic file resolution as fallback when histories have diverged. The delivery pull request surfaces the AI's confidence, dependency findings, warnings, and resolved or unresolved conflicts, and preserves each original commit's author, date, and message. It is always a draft. Works on GitHub and Azure DevOps; requires per-project configuration, a target allow-list, and an active AI provider.
  • PR validation prepares a virtual passkey after authentication, so UI automation on MFA- or passkey-enrolled review orgs runs without enrollment prompts. The credential exists only for the life of the job.
  • Approval gating is resolved centrally: builds on merge and cascade releases (and their retries) stay ungated by default, adding a human gate applies to both, and changing a retry's environment or target re-applies the current gate.
  • Retrying a failed build continues downstream releases by default, instead of leaving the rebuilt release candidate stranded.
  • Version allocation is floored on the Dev Hub's promoted version, so a build can no longer produce a version Salesforce rejects after the artifact is built.
  • The Releases "changes from previous" view compares all four version segments, so rollbacks show their real removed content instead of a placeholder.
  • Package content diffs use a real diff algorithm — a one-line change shows as one line changed, not a rewritten file.

v51.34.0 — July 11, 2026

  • The Change Analysis and Change Validation tables link each result to the run that produced it — server runs open in place, external CI runs open in a new tab.
  • Retrying a failed build resumes the release: failed and impacted packages are rebuilt under the same release-candidate version, and the release continues from where it left off. The retry dialog gains controls to force specific domains or packages and a Continue releases after successful build toggle.
  • The flow-run detail page separates rerunning a whole flow from retrying a single job — Rerun entire flow in the header links to the new run, which carries a persistent rerun marker; Retry job groups attempts into job lineages and is allowed only from the latest attempt.
  • Retrying a release re-resolves the environment's configured approver list instead of falling back to all project owners, and the latest-attempt rule is enforced at the server boundary.

v51.33.4 — July 10, 2026

  • Release requests apply Exclude Packages and Override Package Versions to the release candidate before the dry run, approval, and deployment — previously both were silently dropped.
  • The build version sweep starts from each package's most recent published or tagged point instead of scanning most of the repository history, so builds on large repositories no longer stall at "Computing package versions".
  • Build logs are organized into collapsible nested phases; failed phases stay expanded.

v51.33.3 — July 10, 2026

  • Review-environment assignment rules can be ranked, and when the winning pool has no free org the request falls through to the next ranked pool — including across pool types, such as a scratch-org tier falling back to a sandbox tier. Only capacity exhaustion triggers fallback; authentication and configuration errors surface immediately. The rule editor gains pool type and an integer priority.
  • Priority acts as a tie-breaker between equally specific rules; a more specific rule always wins.
  • Simultaneous requests for the same review environment settle on a single winner, and a losing speculative claim returns to its pool.

v51.33.2 — July 10, 2026

  • Replacing a registered org's stale SFDX auth URL now persists. Previously the new value validated but could not be saved, so expired credentials could not be rotated in place.

v51.33.1 — July 9, 2026

  • Web: registering an org with This is a DevHub org unchecked no longer validates it as a Dev Hub, so sandboxes, scratch orgs, and production orgs can be registered from the web app. A sandbox mistakenly marked as a Dev Hub is rejected with a message saying so, and genuine connection problems surface instead of reading as "not a Dev Hub".
  • Review environments spanning multiple domains resolve correctly when opened without naming a domain, instead of reporting "not found".

v51.33.0 — July 9, 2026

  • A production release can be gated on a ServiceNow change request: one change request is opened (or reused) per release, carrying the release's changelog — package deltas and linked work items — and the deployment holds until it is approved. Environments without the gate deploy independently. Poll cadence and timeout are configurable per project. See ServiceNow release gating.
  • Owners can define exactly who approves — for releases and for operational actions (sandbox requests, freeze and unfreeze, installs, elevate, rollback, unbundle, sync). Approver lists can include non-owners, and the configured list is authoritative for both approve and reject across the UI, the API, and the /codev approve comment. See Configuring approval gates.
  • With segregation of duties enabled, the requester of an action cannot approve it — enforced uniformly across release and operational gates. A self-approval bypass was closed: caller-supplied approver lists and skip flags are stripped at the boundary.
  • When checksum skip prunes unchanged Apex from a validation with tests, tests are selected from what is actually deployed and coverage is evaluated against the deployed Apex only.
  • Behaviour change: the default approval timeout is 60 hours (previously 24), configurable per project. Projects that configure none of the new approval settings keep their previous behaviour.

v51.32.0 — July 8, 2026

  • A pool sandbox's stored login can be refreshed in place with a Regenerate auth URL action in My Dev Orgs and the pool detail instances table. Pool owners can refresh any sandbox in the pool; members can refresh their assigned sandbox.
  • Fixed false "GitHub App not installed" errors that blocked git operations and the onboarding Verify Installation step for organizations with many app installations.
  • Transient network errors between the server and its database on read-heavy pages retry automatically. Writes are never retried.
  • On Azure DevOps, the version-assist /version comment edits its existing comment on each run instead of leaving stale information.

On this page

September 2026v53.2.0 — September 16, 2026v53.1.0 — September 15, 2026v53.0.1 — September 15, 2026v53.0.0 — September 15, 2026v52.24.0 — September 11, 2026v52.23.0 — September 10, 2026v52.22.0 — September 8, 2026v52.21.2 — September 7, 2026v52.21.1 — September 7, 2026v52.21.0 — September 4, 2026v52.20.2 — September 3, 2026v52.20.1 — September 2, 2026v52.20.0 — September 2, 2026v52.19.1 — September 1, 2026August 2026v52.18.0 — August 31, 2026v52.17.0 — August 30, 2026v52.16.0 — August 28, 2026v52.15.5 — August 27, 2026v52.15.4 — August 27, 2026v52.13.1 — August 24, 2026v52.12.0 — August 22, 2026v52.11.0 — August 20, 2026v52.10.0 — August 19, 2026v52.9.0 — August 18, 2026v52.8.0 — August 18, 2026v52.7.0 — August 17, 2026v52.6.0 — August 15, 2026v52.5.3 — August 13, 2026v52.5.2 — August 13, 2026v52.5.1 — August 12, 2026v52.5.0 — August 12, 2026v52.4.0 — August 11, 2026v52.3.0 — August 10, 2026v52.2.1 — August 10, 2026v52.2.0 — August 10, 2026v52.1.2 — August 8, 2026v52.1.1 — August 7, 2026v52.1.0 — August 6, 2026v52.0.2 — August 6, 2026v52.0.1 — August 5, 2026v52.0.0 — August 5, 2026v51.51.1 — August 4, 2026v51.51.0 — August 4, 2026v51.50.0 — August 4, 2026v51.49.2 — August 4, 2026v51.49.1 — August 4, 2026v51.49.0 — August 3, 2026v51.48.1 — August 2, 2026July 2026v51.48.0 — July 31, 2026v51.47.0 — July 31, 2026v51.46.0 — July 30, 2026v51.45.0 — July 28, 2026v51.44.0 — July 28, 2026v51.43.2 — July 27, 2026v51.43.1 — July 27, 2026v51.43.0 — July 27, 2026v51.42.0 — July 27, 2026v51.41.0 — July 26, 2026v51.40.3 — July 25, 2026v51.40.2 — July 25, 2026v51.40.1 — July 24, 2026v51.40.0 — July 24, 2026v51.39.0 — July 23, 2026v51.38.0 — July 23, 2026v51.37.0 — July 22, 2026v51.36.0 — July 21, 2026v51.35.4 — July 20, 2026v51.35.3 — July 16, 2026v51.35.2 — July 16, 2026v51.35.1 — July 16, 2026v51.35.0 — July 15, 2026v51.34.0 — July 11, 2026v51.33.4 — July 10, 2026v51.33.3 — July 10, 2026v51.33.2 — July 10, 2026v51.33.1 — July 9, 2026v51.33.0 — July 9, 2026v51.32.0 — July 8, 2026