#37095·nx

nx release: dependent traversal continues through an excluded dependent, pulls a fixed release group in partially, then fails with "no current version resolved"

Author: BurzmalianCreated Sep 17, 2026Updated Sep 17, 2026

Current Behavior

Two fixed release groups, apps depends on libs. libs has updateDependents: "never"; apps is at the default ("always"), has no tag yet and fallbackCurrentVersionResolver: "disk".

nx release --group libs --dry-run --verbose fails:

app-core  Resolved the specifier as "minor" using git history and the conventional commits standard
app-api ⚠️  Unable to resolve the current version from git tags using pattern "apps/{version}". Falling back to the version 0.0.0 in manifest: packages/app-api/package.json
NX   There was no current version resolved for project "app-core", but it was configured to be bumped via a semver relative keyword "minor", derived from conventional commits data

app-core is bumped but never resolved; app-api shows the disk fallback itself works.

Cause (packages/nx/src/command-line/release/utils/release-graph.ts, findDependentsToProcess, still on master):

  1. app-core depends on lib-a. libs says never, so shouldIncludeDependent is false and app-core is not added — but nextLevel.push(dep) runs regardless, so traversal continues through it.
  2. app-api / app-web depend on app-core, whose group says always, so they are added. The apps group is appended with releaseGroupToFilteredProjects = {app-api, app-web}.
  3. resolveCurrentVersionsForProjects skips app-core (not in allProjectsToProcess), but fixed-group processing versions every member, so app-core is bumped with currentVersion undefined.

Expected Behavior

  • Don't keep traversing through a dependent that was excluded, or
  • when a fixed group is pulled in via dependents, include and resolve all of its members.

A fixed group should never be processed partially ("all projects in the group are versioned together").

GitHub Repo

No response (inline reproduction below; can push a repo on request)

Steps to Reproduce

  1. npm workspace with four packages: lib-a (1.0.0) and private app-core, app-api, app-web (0.0.0). Dependencies: app-core → lib-a, app-api → app-core, app-web → app-core, lib-a. Tag release/1.0.0 on the first commit, no apps/* tag.
  2. nx.json:
    json
    {
      "release": {
        "groups": {
          "libs": {
            "projects": ["lib-a"],
            "projectsRelationship": "fixed",
            "releaseTag": { "pattern": "release/{version}" },
            "version": { "conventionalCommits": true, "updateDependents": "never" }
          },
          "apps": {
            "projects": ["app-core", "app-api", "app-web"],
            "projectsRelationship": "fixed",
            "releaseTag": { "pattern": "apps/{version}" },
            "version": { "conventionalCommits": true, "fallbackCurrentVersionResolver": "disk" }
          }
        }
      }
    }
  3. One feat(lib-a): … commit touching packages/lib-a and one feat(app-core): … touching packages/app-core.
  4. npx nx release --group libs --dry-run --verbose

Workaround: updateDependents: "never" (or "auto") on the apps group.

Nx Report

bash
Node           : 24.14.0
OS             : darwin-arm64
Native Target  : aarch64-macos
npm            : 11.9.0

nx                 : 23.1.3
@nx/js             : 23.1.3
@nx/devkit         : 23.1.3
@nx/workspace      : 23.1.3
typescript         : 6.0.3

Package Manager Version

npm 11.9.0

Operating System

  • macOS
  • Linux
  • Windows