From 6b1de930afedcc425144d5905eb81379f67036f5 Mon Sep 17 00:00:00 2001 From: Hunter B Date: Sat, 6 Jun 2026 10:49:25 -0700 Subject: [PATCH] chore(release): credit direct v0.9 community merges --- .github/AUTHOR_MAP | 3 +++ CHANGELOG.md | 16 ++++++++++++++++ crates/tui/CHANGELOG.md | 16 ++++++++++++++++ scripts/check-coauthor-trailers.py | 23 ++++++++++++++--------- 4 files changed, 49 insertions(+), 9 deletions(-) diff --git a/.github/AUTHOR_MAP b/.github/AUTHOR_MAP index 057b9e1e..0ee92f40 100644 --- a/.github/AUTHOR_MAP +++ b/.github/AUTHOR_MAP @@ -11,6 +11,9 @@ hmbown = Hmbown <101357273+Hmbown@users.noreply.github.com> reidliu41 = reidliu41 <61492567+reidliu41@users.noreply.github.com> reid201711@gmail.com = reidliu41 <61492567+reidliu41@users.noreply.github.com> +ousamabenyounes = Ben Younes <2910651+ousamabenyounes@users.noreply.github.com> +benyounes.ousama@gmail.com = Ben Younes <2910651+ousamabenyounes@users.noreply.github.com> +ljm3790865 = ljm3790865 <263429444+ljm3790865@users.noreply.github.com> HUQIANTAO = HUQIANTAO <58421104+HUQIANTAO@users.noreply.github.com> Hu Qiantao = HUQIANTAO <58421104+HUQIANTAO@users.noreply.github.com> huqiantao@users.noreply.github.com = HUQIANTAO <58421104+HUQIANTAO@users.noreply.github.com> diff --git a/CHANGELOG.md b/CHANGELOG.md index e2b1b3bf..a7d0e771 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -217,6 +217,14 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 Token Plan region endpoints and pay-as-you-go routing, plus dedicated Token Plan env keys for `tp-*` subscriptions (#2621, #2627). Thanks @springeye for the request and @xyuai for the implementation. +- Added the first TUI hotbar action registry foundation so future UI controls + can dispatch typed app actions instead of growing another command match + surface (#2866). Thanks @reidliu41 for the implementation. +- Added the narrow multi-tab core and persistence foundation, including tab + manager snapshots, delegation/group restore counters, mention parsing, + cross-tab events, and corruption-tolerant persisted state, while leaving the + broader collaboration UI wiring to follow-up work (#2864). Thanks + @ljm3790865 for the tab-core implementation and #2753 direction. ### Changed @@ -335,6 +343,10 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 now count trusted workspace-local `.codewhale/mcp.json` servers together with the global MCP config, matching `codewhale mcp list` for merged global + project setups (#2787). Thanks @yekern for the detailed reproduction. +- AltGr key chords in the composer no longer get swallowed by sidebar shortcuts + on AZERTY and other international layouts, so characters such as `@`, `#`, + `$`, `!`, and `%` can be entered normally (#2863, #2867). Thanks + @ousamabenyounes for the fix and report. - Sub-agent shell completions now refresh the workspace branch/status chip immediately, and `/subagents` plus the Agents sidebar show each sub-agent's current workspace branch when it is running in a child worktree. @@ -386,6 +398,10 @@ settings-path migration work (#2730), **@gaord** for the runtime thread workspace update and completed-thread save APIs (#2640, #2639), **@shenjackyuanjie** for the HarmonyOS/OpenHarmony port and MatePad Edge validation trail (#2634), +**@ousamabenyounes** for the AZERTY AltGr composer shortcut fix (#2863, +#2867), **@reidliu41** for the hotbar action-registry foundation (#2866), and +**@ljm3790865** for the multi-tab core/persistence foundation and broader +collaboration direction (#2864, #2753), **@idling11** for the PlanArtifact direction in Plan mode (#2733), the dense tool-call transcript collapse/sidebar detail direction (#2738, #2734, #2692, #2694), and the HarnessPosture config model for provider/model posture (#2741, diff --git a/crates/tui/CHANGELOG.md b/crates/tui/CHANGELOG.md index e2b1b3bf..a7d0e771 100644 --- a/crates/tui/CHANGELOG.md +++ b/crates/tui/CHANGELOG.md @@ -217,6 +217,14 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 Token Plan region endpoints and pay-as-you-go routing, plus dedicated Token Plan env keys for `tp-*` subscriptions (#2621, #2627). Thanks @springeye for the request and @xyuai for the implementation. +- Added the first TUI hotbar action registry foundation so future UI controls + can dispatch typed app actions instead of growing another command match + surface (#2866). Thanks @reidliu41 for the implementation. +- Added the narrow multi-tab core and persistence foundation, including tab + manager snapshots, delegation/group restore counters, mention parsing, + cross-tab events, and corruption-tolerant persisted state, while leaving the + broader collaboration UI wiring to follow-up work (#2864). Thanks + @ljm3790865 for the tab-core implementation and #2753 direction. ### Changed @@ -335,6 +343,10 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 now count trusted workspace-local `.codewhale/mcp.json` servers together with the global MCP config, matching `codewhale mcp list` for merged global + project setups (#2787). Thanks @yekern for the detailed reproduction. +- AltGr key chords in the composer no longer get swallowed by sidebar shortcuts + on AZERTY and other international layouts, so characters such as `@`, `#`, + `$`, `!`, and `%` can be entered normally (#2863, #2867). Thanks + @ousamabenyounes for the fix and report. - Sub-agent shell completions now refresh the workspace branch/status chip immediately, and `/subagents` plus the Agents sidebar show each sub-agent's current workspace branch when it is running in a child worktree. @@ -386,6 +398,10 @@ settings-path migration work (#2730), **@gaord** for the runtime thread workspace update and completed-thread save APIs (#2640, #2639), **@shenjackyuanjie** for the HarmonyOS/OpenHarmony port and MatePad Edge validation trail (#2634), +**@ousamabenyounes** for the AZERTY AltGr composer shortcut fix (#2863, +#2867), **@reidliu41** for the hotbar action-registry foundation (#2866), and +**@ljm3790865** for the multi-tab core/persistence foundation and broader +collaboration direction (#2864, #2753), **@idling11** for the PlanArtifact direction in Plan mode (#2733), the dense tool-call transcript collapse/sidebar detail direction (#2738, #2734, #2692, #2694), and the HarnessPosture config model for provider/model posture (#2741, diff --git a/scripts/check-coauthor-trailers.py b/scripts/check-coauthor-trailers.py index 527c204f..1ecd605c 100644 --- a/scripts/check-coauthor-trailers.py +++ b/scripts/check-coauthor-trailers.py @@ -154,31 +154,36 @@ def validate(commits: list[Commit], aliases: dict[str, Identity], check_authors: Identity(match.group("name").strip(), match.group("email").strip()) for match in COAUTHOR_RE.finditer(commit.body) ] + harvested_logins = HARVEST_RE.findall(commit.body) + is_harvested_commit = bool(harvested_logins) + mapped_author = lookup_identity(aliases, commit.author_email, commit.author_name) if check_authors: - if is_bot_identity(commit.author_name, commit.author_email): + if is_harvested_commit and is_bot_identity(commit.author_name, commit.author_email): errors.append( f"{prefix}: author {commit.author_name} <{commit.author_email}> is a " "bot/tool identity. Human harvested work should preserve the contributor " "as author or use a human co-author trailer." ) elif ( - (expected := lookup_identity(aliases, commit.author_email, commit.author_name)) - and norm_key(commit.author_email) != norm_key(expected.email) + is_harvested_commit + and mapped_author + and norm_key(commit.author_email) != norm_key(mapped_author.email) ): errors.append( f"{prefix}: author {commit.author_name} <{commit.author_email}> " - f"matches AUTHOR_MAP but is not canonical. Use author {expected.author()}." + f"matches AUTHOR_MAP but is not canonical. Use author {mapped_author.author()}." ) for coauthor in coauthors: if CANONICAL_NOREPLY_RE.match(coauthor.email): continue if is_bot_identity(coauthor.name, coauthor.email): - errors.append( - f"{prefix}: remove bot/tool co-author trailer " - f"{coauthor.name} <{coauthor.email}>; contributor trailers are for humans." - ) + if is_harvested_commit: + errors.append( + f"{prefix}: remove bot/tool co-author trailer " + f"{coauthor.name} <{coauthor.email}>; contributor trailers are for humans." + ) continue expected = lookup_identity(aliases, coauthor.email, coauthor.name) if expected: @@ -194,7 +199,7 @@ def validate(commits: list[Commit], aliases: dict[str, Identity], check_authors: ) coauthor_emails = {norm_key(coauthor.email) for coauthor in coauthors} - for login in HARVEST_RE.findall(commit.body): + for login in harvested_logins: expected = lookup_identity(aliases, login) if expected is None: errors.append(