Terragrunt v1.1.6 - Windows Git Filters Find Nested Units


Terragrunt v1.1.6, published on 21 September 2026, fixes one Windows regression in Git filters. find, list, and browse returned no units for a filter such as --filter '[main...HEAD]' when the diff changed only nested unit files. The miss sits in the worktree checkout shipped in v1.1.5, which named those directories with \ and then looked them up in a Git file list that uses /.

The full release notes and downloads are on the GitHub release page. This tag is a final release, not a release candidate. The notes list no other bug fixes, features, or dependency bumps.

The bug is limited to three discovery commands and to one kind of diff. find, list, and browse accept a Git filter. The notes use this flag as the example:

terragrunt find --filter '[main...HEAD]'
terragrunt list --filter '[main...HEAD]'
terragrunt browse --filter '[main...HEAD]'

That expression asks which paths differ between main and HEAD, then keeps the Terragrunt units that own those paths. An empty answer drops those units from whatever a later plan or apply would touch.

The failure appeared when the diff changed only unit configurations in nested directories. The notes give the Windows form of that path as nested\path\terragrunt.hcl. On Windows, after v1.1.5, that layout plus a Git filter produced an empty command result. The notes do not describe a crash or a wrong unit. They describe absence. An empty result has the same shape as a diff that truly contains no unit changes.

The worktree shortcut is described for find, list, and browse only. A run with no Git filter is not described as affected.

v1.1.5 added a worktree optimization for these commands. Instead of checking out every directory in the repository, Terragrunt checks out only the directories of units that the Git filter says changed. A diff that touches a few units does not materialize the rest of a large tree.

The shortcut has to turn paths Git reports as changed into directories to check out. On Windows that conversion spelled directories with \ separators. The lookup then ran against Git’s file listing. Git stores and prints those paths with / on every platform, including Windows. None of the backslash directories matched, so the checkout contained nothing.

The comparison is a plain string match, and the two strings are not equal:

nested\path
nested/path

nested\path\terragrunt.hcl is a real unit file in the diff. The directory key built from it on Windows was nested\path. The Git listing contains nested/path/terragrunt.hcl. The key never hit, so the partial checkout had no unit directory, and the three commands printed no units. The notes do not mention a warning when that lookup missed.

The empty result is tied to diffs that changed only nested unit configurations. A path at the repository root has no \ to disagree with /. The same commits could list units on Linux and list nothing on a Windows runner, because only the separator differed. v1.1.5 introduced the checkout. v1.1.6 is the patch for the key.

Terragrunt now uses / separators for those directories on every platform. The lookup key matches the Git file listing. On Windows, nested/path matches nested/path, the checkout includes that directory, and find, list, and browse see terragrunt.hcl again.

A backslash is native for many Win32 file APIs and wrong for a comparison against git output. The notes mention no new flag, no config key, and no migration file. Upgrading the binary is the whole change.

Callers who treated the empty v1.1.5 result as “no units changed” will now see the nested units. The release notes do not call out a breaking change. After upgrading, run the same Git filter on a Windows host against a diff that only touches a nested terragrunt.hcl. If the result is still empty, the diff itself has no unit changes.