Skip to content

release: prepare v0.8.43#1988

Merged
Hmbown merged 22 commits into
mainfrom
work/v0.8.43-ready
May 24, 2026
Merged

release: prepare v0.8.43#1988
Hmbown merged 22 commits into
mainfrom
work/v0.8.43-ready

Conversation

@Hmbown

@Hmbown Hmbown commented May 24, 2026

Copy link
Copy Markdown
Owner

Summary

Release preparation for v0.8.43 — harvests four small candidate fixes, syncs version pins, refreshes contributor surfaces, implements Tasks sidebar inspectability improvements, and adds the CHANGELOG entry.

Included fixes

PR Description Author
#1839 grep_files respects cancellation token @LING71671
#1860 npm installer stream-pause race fix @jeoor
#1911 Ctrl+Z restores cleared composer draft @LING71671
#1938 wl-copy clipboard for non-wlroots Wayland @ousamabenyounes

New features

  • Tasks sidebar inspectability (v0.8.43: make Tasks sidebar inspectable, expandable, and copyable #1975): Turn ID prefixes widened from 12 to 16 characters for task_read/task_cancel disambiguation. Background job status shows clear per-status breakdown (3 running, 2 completed) instead of ambiguous 5 active (3 running). y / Y yank affordances copy the current turn ID or full status line to the system clipboard from the Tasks panel.

Version bumps

  • Workspace: 0.8.420.8.43
  • All 14 internal codewhale-* crate dependency pins
  • npm codewhale: 0.8.420.8.43
  • npm deepseek-tui deprecation shim: 0.8.420.8.43
  • Crate/npm descriptions: open-model-first positioning
  • Cargo.lock: restored compatible resolution (avoided allocative/hashbrown version conflict)

Contributor surfaces

  • MIN_KNOWN_CONTRIBUTORS: 91 → 98 (live GitHub contributors?anon=true count)
  • README Thanks: 30+ previously unlisted contributors added, synced across all three translations

Checks run

Gate Result
check-versions.sh ✅ workspace=0.8.43, npm=0.8.43, lockfile in sync
cargo fmt --all -- --check ✅ clean
git diff --check ✅ clean
cargo build --locked (full workspace) ✅ success
cargo clippy --workspace --all-targets --all-features --locked -- -D warnings ✅ clean
scripts/release/publish-crates.sh dry-run ✅ all 14 crates pass

Commits

3e89ccf98 style: cargo fmt
b773690b3 docs(release): add Tasks sidebar feature to v0.8.43 CHANGELOG
701257ef8 feat(tui): improve Tasks sidebar inspectability (#1975)
6306feb70 fix(build): restore compatible Cargo.lock dependency resolution
e1218e3f0 docs: clarify sponsor links
92e48ce0f docs(release): add v0.8.43 CHANGELOG entry with contributor credits
3dfc7fb71 docs(readme): refresh contributor count and acknowledgements
04d2e4af1 chore(release): sync 0.8.43 version pins
b94ccd389 fix(installer): pause response streams to prevent checksum manifest race (#1860, thanks @jeoor)
8878ac07a fix(tui): harvest v0.8.43 candidate fixes

Deferred steps (after approval)

  1. Merge this PR or fast-forward main
  2. Wait for auto-tag.yml to create tag v0.8.43
  3. Wait for release.yml to build release artifacts
  4. Verify GitHub Release assets
  5. Verify GHCR manifest
  6. Publish npm: npm publish from npm/codewhalecodewhale@0.8.43
  7. Publish legacy shim: npm publish from npm/deepseek-tuideepseek-tui@0.8.43
  8. Publish crates: ./scripts/release/publish-crates.sh publish
  9. Run ./scripts/release/check-published.sh 0.8.43
  10. Verify CNB tag mirror at https://cnb.cool/codewhale.net/codewhale

Hmbown added 5 commits May 24, 2026 03:12
- grep_files now respects cancellation token (#1839, thanks @LING71671)
- Ctrl+Z restores last cleared composer draft (#1911, thanks @LING71671)
- Clipboard works on non-wlroots Wayland via wl-copy (#1938, thanks @ousamabenyounes)
- Workspace version: 0.8.42 → 0.8.43
- All internal codewhale-* deps: 0.8.42 → 0.8.43
- npm codewhale: 0.8.42 → 0.8.43
- npm deepseek-tui shim: 0.8.42 → 0.8.43
- Crate descriptions: open-model-first positioning
- npm descriptions: open-source and open-weight language
- Cargo.lock regenerated
- MIN_KNOWN_CONTRIBUTORS: 91 → 98 (live GitHub count)
- page.tsx fallback: 91 → 98
- README Thanks section: add 30+ previously unlisted contributors
  whose PRs were merged since April 2026
- Sync contributor list across all three translations (en, zh-CN, ja-JP)
Copilot AI review requested due to automatic review settings May 24, 2026 08:13

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Pull request overview

Release prep for v0.8.43, bundling a handful of small fixes (TUI + tools + npm installer), syncing workspace/npm version pins, and refreshing public-facing docs/web copy and contributor acknowledgements.

Changes:

  • Harvested fixes: grep_files cancellation support, npm installer stream pause to avoid manifest truncation, Ctrl+Z composer draft restore, and improved Wayland clipboard behavior via wl-copy first.
  • Version + metadata sync: workspace/crate/npm bumps to 0.8.43, Cargo.lock regeneration, and updated package descriptions/funding fields.
  • Contributor + branding surfaces: website repo stats defaults, homepage copy, and README translations updated (including Support section + acknowledgements).

Reviewed changes

Copilot reviewed 24 out of 25 changed files in this pull request and generated 2 comments.

Show a summary per file
File Description
web/lib/github.ts Updates default repo slug, contributor floor, and web User-Agent for GitHub API calls.
web/app/[locale]/page.tsx Refreshes homepage copy, repo links, fallback contributor count, and adds provider list + new sections.
README.zh-CN.md Adds TOC links, Sponsor badge, Support section, and expands acknowledgements.
README.md Adds TOC links, Sponsor badge, Support section, and expands acknowledgements; removes old inline support link.
README.ja-JP.md Adds TOC links, Sponsor badge, Support section, and expands acknowledgements; removes old coffee badge block.
npm/deepseek-tui/package.json Bumps shim version and updates description/keywords + adds funding metadata.
npm/codewhale/scripts/install.js Pauses response streams early to prevent data loss; resumes explicitly in downloadText.
npm/codewhale/package.json Bumps version + binary pin; refreshes description; adds funding metadata.
crates/tui/src/tui/ui.rs Adds Ctrl+Z keybinding to restore the last cleared composer draft.
crates/tui/src/tui/clipboard.rs Adds wl-copy helper and Linux ordering change; introduces unit tests for helper behavior.
crates/tui/src/tui/app.rs Implements single-slot clear undo buffer and restoration logic; adds tests.
crates/tui/src/tools/search.rs Adds cancellation token checks to grep_files recursion and scanning; adds regression test.
crates/tui/CHANGELOG.md Adds v0.8.43 release notes and link refs.
crates/tui/Cargo.toml Updates crate description and internal dependency pins to 0.8.43.
crates/tools/Cargo.toml Updates internal dependency pin to 0.8.43.
crates/hooks/Cargo.toml Updates internal dependency pin to 0.8.43.
crates/execpolicy/Cargo.toml Updates internal dependency pin to 0.8.43.
crates/core/Cargo.toml Updates internal dependency pins to 0.8.43.
crates/config/Cargo.toml Updates internal dependency pin to 0.8.43.
crates/cli/Cargo.toml Updates crate description and internal dependency pins to 0.8.43.
crates/app-server/Cargo.toml Updates internal dependency pins to 0.8.43.
crates/agent/Cargo.toml Updates internal dependency pin to 0.8.43.
CHANGELOG.md Adds v0.8.43 release notes and link refs (workspace-level).
Cargo.toml Bumps workspace version to 0.8.43.
Cargo.lock Regenerated lockfile reflecting dependency updates and crate version bumps.

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

Comment thread crates/tui/src/tui/app.rs
pub fn stash_current_input_for_recovery(&mut self) {
let draft = self.input.clone();
if draft.trim().is_empty() {
self.clear_undo_buffer = None;
#[cfg(target_os = "linux")]
#[test]
fn wlcopy_helper_succeeds_when_binary_returns_zero() {
let result = write_text_with_wlcopy_using_argv("true", "test");

@gemini-code-assist gemini-code-assist Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Code Review

This pull request updates the project to version 0.8.43 and completes the rebranding from "DeepSeek TUI" to "CodeWhale" across documentation, metadata, and web surfaces. Key functional improvements include implementing cancellation support for the grep_files tool, fixing a race condition in the npm installer by pausing HTTP streams, and adding wl-copy support for Wayland compositors. Additionally, a draft recovery feature was added to the TUI composer, mapped to Ctrl+Z. Review feedback suggests refining the draft recovery logic to prevent accidental buffer clearing and removing redundant code in the restoration method. There is also a note regarding the potential conflict of the Ctrl+Z shortcut with standard terminal job control.

Comment thread crates/tui/src/tui/app.rs
Comment on lines +3802 to +3804
if draft.trim().is_empty() {
self.clear_undo_buffer = None;
return;

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

medium

Clearing the clear_undo_buffer when the current input is empty prevents users from restoring a previously cleared draft if they accidentally trigger the clear action twice. It is better to simply return, preserving the existing buffer content.

        if draft.trim().is_empty() {
            return;
        }

Comment thread crates/tui/src/tui/app.rs
Comment on lines +4046 to +4064
pub fn restore_last_cleared_input_if_empty(&mut self) -> bool {
if !self.input.is_empty() {
return false;
}
let Some(saved) = self.clear_undo_buffer.take().filter(|s| !s.is_empty()) else {
return false;
};

self.input = saved;
self.cursor_position = char_count(&self.input);
self.history_index = None;
self.history_navigation_draft = None;
self.selected_attachment_index = None;
self.slash_menu_selected = 0;
self.slash_menu_hidden = false;
self.needs_redraw = true;
self.clear_undo_buffer = None;
true
}

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

medium

The clear_undo_buffer = None assignment is redundant because self.clear_undo_buffer.take() already clears the field. Additionally, the .filter(|s| !s.is_empty()) is unnecessary as stash_current_input_for_recovery already ensures that only non-empty strings are stored.

    pub fn restore_last_cleared_input_if_empty(&mut self) -> bool {
        if !self.input.is_empty() {
            return false;
        }
        let Some(saved) = self.clear_undo_buffer.take() else {
            return false;
        };

        self.input = saved;
        self.cursor_position = char_count(&self.input);
        self.history_index = None;
        self.history_navigation_draft = None;
        self.selected_attachment_index = None;
        self.slash_menu_selected = 0;
        self.slash_menu_hidden = false;
        self.needs_redraw = true;
        true
    }

Comment thread crates/tui/src/tui/ui.rs
Comment on lines +3392 to +3396
KeyCode::Char('z') if key.modifiers.contains(KeyModifiers::CONTROL) => {
if app.restore_last_cleared_input_if_empty() {
app.status_message = Some("Restored cleared draft".to_string());
}
}

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

medium

Using Ctrl+Z for restoring a draft shadows the standard terminal SIGTSTP signal, which is used to suspend processes. While this is common in full-screen editors, it may surprise users who rely on terminal job control. Consider if this shortcut should be configurable or restricted to specific focus states.

Hmbown and others added 16 commits May 24, 2026 03:23
The previous  resolved allocative 0.3.6 which
pulls hashbrown 0.16, conflicting with starlark_map's hashbrown 0.14
dependency. Restore the original lockfile and update only workspace
crates to 0.8.43 via .
- Show fuller turn ID prefix (16 chars) for disambiguation in task_read/task_cancel
- Replace ambiguous 'X active (Y running)' with clear per-status breakdown
- Add y/Y yank affordances for copying turn ID and full status from Tasks panel
- Add yank hint text in Tasks panel footer
When a turn has been running for > 30 seconds, the footer now shows
a classified stall reason suffix:
- 'waiting for model' — API streaming in progress
- 'tools executing' — active tool calls running
- 'sub-agents working' — child sub-agents in flight
- 'compacting context' — context compaction active
- 'background jobs running' — shell tasks executing
- 'waiting — no recent activity' — turn stalled with no classified work
Implements structured choice cards for the v0.8.43 truth-surface tracker.
When Brother Whale needs user input, it surfaces a bordered card with:
- A question prompt
- Numbered options with (default) marker
- Arrow/j/k navigation and 1-9 number-key shortcuts
- Enter to confirm, Esc to cancel
- Decision results surfaced as status messages

The widget compiles and the keyboard routing is wired into the main
event loop. Rendering overlay wire-up follows in the next commit.
Goal mode (v0.8.43 truth-surface):
- New AppMode::Goal variant orthogonal to Plan/Agent/YOLO
- /goal command to set/complete objectives
- Goal status displayed in Work sidebar with elapsed time
- Alt+G keybinding to toggle Goal mode
- Mode parsed from /mode goal|4 command

Receipts (v0.8.43 truth-surface):
- ToolEvidence struct collects per-turn tool summaries
- Post-turn receipt generated on TurnComplete
- Receipt rendered as dimmed line at transcript tail
- Receipt/evidence cleared on new turn dispatch

Also:
- Fix AppMode::Goal exhaustive pattern coverage across 5 files
- Update doctor error message (deepseek → codewhale)
- Fix clippy::useless_format warning
- Thinking cells now qualify as detail targets alongside tools and sub-agents
- Space key on empty composer toggles the focused cell's collapsed state
- Status message confirms expand/collapse action
- Builds on existing collapsed_cells HashSet from mouse context menu
Before the turn breaks at the thinking-only checkpoint, drain
any sub-agent completions that arrived between the last hold
check and now. If a child finished while we were running the
final status check, surface its sentinel immediately rather
than delaying it to the next turn.
- npm/codewhale/README.md: remove DeepSeek-first language
- docs/INSTALL.md: scoop install codewhale (not deepseek-tui)
- Wire decision card overlay rendering in main render loop
- Decision cards now appear centered on transcript when active
…ntributors

Fixes the macOS test failure on PR #1988 and the contributor-credit
gate from scripts/release/check-versions.sh.

cell_has_detail_target() was matching HistoryCell::Thinking, which
caused the activity footer to append " · ⌥+V raw" to thinking cells
that have no separate raw detail target. The detail-card flow only
exists for tool / sub-agent cells; thinking renders its own raw text
inline. Removing Thinking from the match arm restores the behavior the
existing
activity_footer_hint_surfaces_visible_thinking_without_raw_tool_hint
test asserts.

The CHANGELOG.md 0.8.43 section now credits the 30 contributors added
to README acknowledgements in this cycle, satisfying the README-vs-
CHANGELOG cross-check in check-versions.sh. crates/tui/CHANGELOG.md is
re-synced so the matching guard passes.

Verified locally on macOS:
- cargo fmt --all -- --check         : clean
- cargo clippy --workspace --all-targets --all-features --locked -D warnings : clean
- cargo test --workspace --all-features --locked : 41 suites, 0 failed
- ./scripts/release/check-versions.sh : Version state OK
- ./scripts/release/publish-crates.sh dry-run : all 14 crates OK
- cargo build --release --locked : clean

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
@Hmbown Hmbown deleted the work/v0.8.43-ready branch May 26, 2026 12:55
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