For the complete documentation index, see llms.txt. This page is also available as Markdown.

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

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. The request body and the Request Details table both state the targets first, in lifecycle order, so whoever approves or runs the release can see them without inferring. The list is a request-time snapshot — execution resolves environments again, so an environment added or renamed in between can still change the live set.

  • An AI-assisted cascade merge no longer hangs on a permission prompt. When the merge model staged files outside the clone, the underlying agent waited on an approval no automated worker can answer and the run sat idle for its full attempt budget. Merge-assist now grants the temporary directories the model needs, and any stuck prompt is rejected so the run fails fast into its normal retry instead of stalling.

  • The desktop codev command-line tool works on Linux and Windows. Every embedded command that reads sfdx-project.jsonpush, pull, build, validate, install — aborted with "Resource not found: …/sfdx-project.schema.json" before reaching the org, because the tool resolved Electron's own resources directory instead of sfp's. It now locates the bundled engine resources correctly. (macOS was unaffected.)

  • 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.

  • sfp validate's AI error analysis is grounded before it proposes a fix: any sf/sfp command it suggests is checked against the CLI's own help first, Salesforce settings that are only configurable through the Setup UI (browserforce) are known to it, and fixes it cannot verify lower their confidence — so it no longer suggests commands, flags, or metadata that do not exist. The validation report also carries a copy-paste Prompt for AI Agents block you can hand to an AI coding agent to implement the fix.

  • 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.

Last updated

Was this helpful?