Skip to content

[codex] v0.8.50 triage harvest#2504

Merged
Hmbown merged 98 commits into
mainfrom
codex/v0.8.50-triage
Jun 2, 2026
Merged

[codex] v0.8.50 triage harvest#2504
Hmbown merged 98 commits into
mainfrom
codex/v0.8.50-triage

Conversation

@Hmbown
Copy link
Copy Markdown
Owner

@Hmbown Hmbown commented Jun 1, 2026

Summary

v0.8.50 triage harvest after v0.8.48/v0.8.49 release stewardship. This branch does not tag, publish, create a GitHub Release, or republish deepseek-tui.

Newly Harvested In This Push

Additional Local Fixes In This Push

Earlier Harvested Work Still In Branch

Includes #2476, #2491, #2499, #2498, #2505, #2509, #2511, #1722/#1723, #2529, #2538, #2530, #2540, #2524, #2534, #2516, #2552, #2553, #2550, #2549, #2547, #2526, #2555, #2551, and #2557. Contributor authorship and relevant reporter credit are preserved in commits, changelog, and maintainer comments.

Local Verification

  • cargo fmt --all -- --check
  • ./scripts/release/check-versions.sh
  • bash -n scripts/release/check-published.sh
  • git diff --check
  • workflow YAML parse with Ruby
  • node --test npm/codewhale/test/run.test.js
  • NSIS compile smoke: makensis -DVERSION=0.8.50 scripts/installer/codewhale.nsi with staged dummy binaries
  • cargo test -p codewhale-agent --all-features --locked atlascloud -- --nocapture
  • cargo test -p codewhale-agent --all-features --locked
  • cargo clippy -p codewhale-agent --all-targets --all-features --locked -- -D warnings
  • cargo test -p codewhale-tui --all-features --locked foreground_shell_does_not_block_on_orphaned_subprocess_pipe -- --nocapture
  • cargo test -p codewhale-tui --all-features --locked test_orphaned_subprocess_does_not_block_collect_output -- --nocapture
  • cargo test -p codewhale-tui --all-features --locked test_timeout -- --nocapture
  • cargo test -p codewhale-tui --all-features --locked test_exec_shell_foreground_timeout_guides_background_rerun -- --nocapture
  • cargo clippy -p codewhale-tui --all-targets --all-features --locked -- -D warnings
  • cargo test -p codewhale-tui --all-features --locked composer_arrow -- --nocapture
  • cargo test -p codewhale-tui --all-features --locked footer_balance -- --nocapture
  • cargo test -p codewhale-tui --all-features --locked v4_pro -- --nocapture
  • cargo test -p codewhale-tui --all-features --locked cost_estimate -- --nocapture
  • cargo test -p codewhale-tui --all-features --locked context_inspector
  • cargo test -p codewhale-tui --all-features --locked truncated_subagent
  • cargo test -p codewhale-config --all-features --locked migrate_config_reports_copied_legacy_path
  • cargo test -p codewhale-tui --all-features --locked absolute_updated_timestamp
  • cargo test -p codewhale-tui --all-features --locked current_model
  • cargo test -p codewhale-tui --all-features --locked turn_metadata
  • cargo test -p codewhale-config --all-features --locked
  • Clean detached origin/main compile check for codewhale-tui fails to compile on main: method lines_with_copy_metadata_folded not found on &HistoryCell #2570: cargo check -p codewhale-tui --locked at 31f34c5d
  • Global local install: cargo install --path crates/cli --locked --force and cargo install --path crates/tui --locked --force; verified codewhale, codewhale-tui, codew, deepseek, and deepseek-tui report 0.8.50 from PATH, with legacy shim warnings intact.

Recent Triage Notes

Skipped Or Still Needs Follow-Up

External Blocker

npm view deepseek-tui deprecated still returns an empty value. Registry deprecation for the legacy package still needs npm OTP/browser auth. Do not republish deepseek-tui; DeepSeek provider/model support remains first-class.

cyq1017 and others added 8 commits June 1, 2026 05:42
…ility

When MCP servers return tool schemas, the field order within each schema
object and the order of entries in required / dependentRequired arrays
can vary across reconnections. This causes the serialized tool catalog
bytes to change even when the logical schema is unchanged, busting
DeepSeek's KV prefix cache.

Add schema_canonicalize::canonicalize_schema which recursively:
- Sorts every required array alphabetically
- Sorts every dependentRequired sub-array alphabetically
- Rebuilds object keys in alphabetical order
- Recurses into all nested objects and arrays

The canonicalize step runs after schema_sanitize in build_api_tools,
so each tool's input_schema is first cleaned then byte-stabilized.
The existing OnceLock api_cache pins the result, ensuring the tool
catalog bytes are identical across reads and across process restarts.

8 unit tests cover: required sorting, dependentRequired sorting,
equivalent-ordering byte match, recursive nesting, empty schemas,
deeply nested schemas, non-required array preservation, and key
ordering.

(cherry picked from commit 7cee9cd)
Copy link
Copy Markdown
Contributor

@greptile-apps greptile-apps Bot left a comment

Choose a reason for hiding this comment

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

Hmbown has reached the 50-review limit for trial accounts. To continue receiving code reviews, upgrade your plan.

Copy link
Copy Markdown
Contributor

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

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 introduces several updates, including support for an optional sibling permissions.toml file for ask-only typed permission rules, byte-level JSON Schema canonicalization for prefix-cache stability, and Windows job object integration to prevent orphaned descendant processes. It also refactors the state store migration query to correctly handle same-second messages. Feedback is provided regarding the migration query, which may suffer from $O(N^2)$ complexity on large messages tables if an appropriate index is missing.

Comment thread crates/state/src/lib.rs
Comment on lines 347 to 360
SET parent_entry_id = (
SELECT m2.id
FROM messages m2
WHERE m2.created_at < messages.created_at AND m2.thread_id = messages.thread_id
ORDER BY m2.id DESC
WHERE m2.thread_id = messages.thread_id
AND (
m2.created_at < messages.created_at
OR (
m2.created_at = messages.created_at
AND m2.id < messages.id
)
)
ORDER BY m2.created_at DESC, m2.id DESC
LIMIT 1
);
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 correlated subquery used to update parent_entry_id performs a lookup on the messages table for every single row during migration. If the messages table contains a large number of rows and lacks an index on (thread_id, created_at, id), this migration will have $O(N^2)$ complexity and could cause significant startup delays.

Consider ensuring that an index on (thread_id, created_at, id) exists before running this migration, or creating a temporary index specifically for this migration and dropping it afterwards to optimize performance.

Copy link
Copy Markdown
Contributor

@greptile-apps greptile-apps Bot left a comment

Choose a reason for hiding this comment

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

Hmbown has reached the 50-review limit for trial accounts. To continue receiving code reviews, upgrade your plan.

@aboimpinto
Copy link
Copy Markdown
Contributor

Thanks for harvesting #2498 into this v0.8.50 slice.

I compared the current #2504 branch with the final #2498 head (96adffb) and noticed that #2504 appears to include only the earlier Windows shell commits:

  • cb4f660 ix(tui): contain Windows shell process trees
  • 382635e ix(tui): harden Windows job cleanup

The final review-driven #2498 head also includes two later commits that are important for the 5/5-confidence version:

  • 46eb7e6 est(tui): cover Windows job cleanup fallbacks
  • 96adffb ix(tui): close Windows job before foreground joins

The second one is not only tests: it applies the close-before-reader-join fallback to the foreground execute_sync_sandboxed path as well as the background path. Without it, JOB_OBJECT_LIMIT_KILL_ON_JOB_CLOSE can still be unreachable in the foreground stdout/stderr reader join path if explicit job termination fails.

Can you please harvest the final #2498 head (96adffb) or apply the equivalent diff before merging #2504?

Paulo Aboim Pinto

Override `supports_parallel()` to return `true` in `WebSearchTool`,
allowing the engine to batch multiple concurrent web_search calls
into a `FuturesUnordered` parallel group instead of serializing them.

The tool is already read-only, auto-approved, and non-interactive —
parallel-safe by all other criteria. This change removes the final
gate (`supports_parallel() -> false` default) so co-issued searches
run concurrently rather than one-at-a-time.

Closes the ~55s serial wall-clock for 3 simultaneous web searches
(now ~20s, the slowest individual call).

Co-authored-by: Cursor <cursoragent@cursor.com>
(cherry picked from commit a7dcf63)
Copy link
Copy Markdown
Contributor

@greptile-apps greptile-apps Bot left a comment

Choose a reason for hiding this comment

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

Hmbown has reached the 50-review limit for trial accounts. To continue receiving code reviews, upgrade your plan.

Copy link
Copy Markdown
Contributor

@greptile-apps greptile-apps Bot left a comment

Choose a reason for hiding this comment

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

Hmbown has reached the 50-review limit for trial accounts. To continue receiving code reviews, upgrade your plan.

@Hmbown
Copy link
Copy Markdown
Owner Author

Hmbown commented Jun 1, 2026

Thanks @aboimpinto. Confirmed your read was correct: #2504 had only the first two #2498 commits at the time of your comment.

I have now harvested the remaining final #2498 commits into #2504:

  • 14ea0721a from upstream 4db07a451682 - close Windows job before output joins
  • 54a93994f from upstream f46eb7e6644 - cover Windows job cleanup fallbacks
  • 2c256d7b3 from upstream 96adffb2438 - close Windows job before foreground joins

Local verification on the updated harvest branch:

  • cargo fmt --all -- --check
  • cargo test -p codewhale-tui --all-features --locked windows_job (compiled locally; Windows-only tests filtered out on macOS)
  • cargo test -p codewhale-tui --all-features --locked background_collection_does_not_block_on_detached_descendant_pipe (compiled locally; Windows-only test filtered out on macOS)
  • cargo test -p codewhale-tui --all-features --locked shell
  • cargo clippy -p codewhale-tui --all-targets --all-features --locked -- -D warnings

The branch is pushed; Windows CI is the platform proof for the new Windows-only tests.

@greptile-apps
Copy link
Copy Markdown
Contributor

greptile-apps Bot commented Jun 2, 2026

Too many files changed for review. (111 files found, 100 file limit)

@Hmbown Hmbown marked this pull request as ready for review June 2, 2026 04:32
@gemini-code-assist
Copy link
Copy Markdown
Contributor

Warning

You have reached your daily quota limit. Please wait up to 24 hours and I will start processing your requests again!

Hmbown added 2 commits June 1, 2026 21:34
Users copying text from the output area and right-clicking in the
composer expect Paste to be the first, most accessible action.
Previously Paste appeared after all cell-specific actions (Open
Details, Copy Message, etc.), requiring extra mouse travel or
keyboard navigation.

Reported by a WeChat/Chinese UX user during the v0.8.50 triage pass.
@Hmbown Hmbown merged commit 0072209 into main Jun 2, 2026
12 of 14 checks passed
@cyq1017
Copy link
Copy Markdown
Contributor

cyq1017 commented Jun 2, 2026

Thanks for harvesting these into the v0.8.50 branch, and for keeping the individual PR references/credit in the notes. I’ll keep the remaining follow-ups narrow and issue-scoped.

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.

10 participants