Skip to content

Release v2.4.17#5582

Closed
tig wants to merge 15 commits into
mainfrom
release/v2.4.17
Closed

Release v2.4.17#5582
tig wants to merge 15 commits into
mainfrom
release/v2.4.17

Conversation

@tig

@tig tig commented Jul 7, 2026

Copy link
Copy Markdown
Member

Release v2.4.17

Version: 2.4.17
NuGet Package: Terminal.Gui 2.4.17

What happens when this PR is merged

  1. ✅ The Finalize Release workflow will automatically create tag v2.4.17
  2. ✅ The Publish workflow will build and push to NuGet.org
  3. ✅ A GitHub Release will be created with auto-generated notes
  4. ✅ A back-merge PR from maindevelop will be opened

Checklist

  • CI passes on this PR
  • Version looks correct: 2.4.17
  • Release notes reviewed (will be auto-generated on merge)

tig and others added 15 commits June 28, 2026 11:46
Back-merge v2.4.16 from main into develop
---
updated-dependencies:
- dependency-name: Microsoft.Extensions.Options
  dependency-version: 10.0.9
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
#5569)

* Fixes #5544 #issuecomment-4836836706. FileDialog/OpenDialog: one unreadable entry makes the entire directory render empty (`FileDialogState.GetChildren` swallows the exception)

* Fixes #5570. FileDialog/OpenDialog tree builder crash on unreadable entries
---
updated-dependencies:
- dependency-name: GitVersion.MsBuild
  dependency-version: 6.8.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
…ild-6.8.0

Bump GitVersion.MsBuild from 6.7.0 to 6.8.0
…sions.Options-10.0.9

Bump Microsoft.Extensions.Options from 10.0.7 to 10.0.9
---
updated-dependencies:
- dependency-name: GitVersion.MsBuild
  dependency-version: 6.8.1
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
---
updated-dependencies:
- dependency-name: Microsoft.Net.Compilers.Toolset
  dependency-version: 5.6.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
---
updated-dependencies:
- dependency-name: Spectre.Console
  dependency-version: 0.57.2
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Bumps [gittools/actions](https://github.com/gittools/actions) from 4.5.0 to 4.7.0.
- [Release notes](https://github.com/gittools/actions/releases)
- [Commits](GitTools/actions@v4.5.0...v4.7.0)

---
updated-dependencies:
- dependency-name: gittools/actions
  dependency-version: 4.7.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
…ild-6.8.1

Bump GitVersion.MsBuild from 6.8.0 to 6.8.1
…ompilers.Toolset-5.6.0

Bump Microsoft.Net.Compilers.Toolset from 5.3.0 to 5.6.0
…-0.57.2

Bump Spectre.Console from 0.57.1 to 0.57.2
…ls/actions-4.7.0

Bump gittools/actions from 4.5.0 to 4.7.0
…Inaccessible change (#5581)

The switch to EnumerateDirectories/EnumerateFileSystemInfos with
EnumerationOptions { IgnoreInaccessible = true } (from the #5544 follow-up)
kept the framework default AttributesToSkip = Hidden | System, so the file
dialog silently filtered out hidden/system entries — including dotfiles on
Unix, which .NET marks as Hidden. The GetDirectories ()/GetFileSystemInfos ()
calls it replaced never skipped them.

- Clear AttributesToSkip (FileAttributes.None) so hidden/system entries stay
  visible while still ignoring inaccessible ones.
- Fall back to the eager listing methods when the IFileSystem implementation
  throws NotSupportedException for the non-default AttributesToSkip (e.g.
  System.IO.Abstractions.TestingHelpers MockFileSystem).
- Add regression tests covering the enumeration options, the fallback, and
  hidden/system files via MockFileSystem.

Flagged by Codex review on #5580.

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

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: da4d9a2ebb

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

}
catch (Exception)
{
return false; // treat an unreadable entry as not a reparse point / not expandable

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge Fail closed when reparse status is unreadable

When Attributes throws for an entry that is actually a symlink/junction, returning false makes both CanExpand/GetChildren and FileDialog.SearchState treat the entry as safe to traverse, so an unreadable reparse point can still be followed and recreate the directory-cycle risk this guard is meant to prevent. In this error path it is safer to treat the status as reparse/unknown and not expand it.

Useful? React with 👍 / 👎.

@tig tig temporarily deployed to github-pages July 7, 2026 03:15 — with GitHub Actions Inactive
tig added a commit that referenced this pull request Jul 7, 2026
…lision (#5583)

Two fixes flagged on release PR #5582:

1. Codex CR feedback: FileSystemTreeBuilder.IsReparsePoint returned false
   when reading Attributes throws, so an unreadable symlink/junction was
   treated as safe to traverse — recreating the directory-cycle risk the
   guard exists to prevent. Now fails closed (treats unreadable status as
   a reparse point), so CanExpand/GetChildren and FileDialog.SearchState
   do not traverse it.

2. CI failure (Parallel Unit Tests, windows): FileDialog's ctor crashed
   with "A binding for Ctrl+P exists" when PopoverMenu.DefaultKey read
   Ctrl+P — a key TableView already binds to Command.Up. Root cause was
   MecDottedKeyTests mutating the process-wide PopoverMenuSettings.Defaults
   while running in parallel with view-constructing tests; but the crash is
   also reachable by real users who configure PopoverMenu.DefaultKey to an
   already-bound key.
   - FileDialog/CharMap now use KeyBindings.ReplaceCommands instead of Add
     for the context-menu key (the user's configured key wins).
   - The "StaticSettingsTests" xUnit collection now has a
     CollectionDefinition with DisableParallelization = true, so the five
     Mec* test classes that swap static settings facades no longer race
     the rest of the suite.

Tests: fail-closed IsReparsePoint regression test; FileDialog/CharMap
ctor no-throw tests under a colliding DefaultKey.

Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
@tig

tig commented Jul 7, 2026

Copy link
Copy Markdown
Member Author

Closing to recreate the release from develop with the CI fix and Codex CR feedback addressed (#5583).

@tig tig closed this Jul 7, 2026
@tig tig deleted the release/v2.4.17 branch July 7, 2026 03:27
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants