Skip to content

fix(google-workspace): handle Gmail header casing case-insensitively#35254

Merged
teknium1 merged 1 commit into
mainfrom
hermes/hermes-f59d0da6
May 30, 2026
Merged

fix(google-workspace): handle Gmail header casing case-insensitively#35254
teknium1 merged 1 commit into
mainfrom
hermes/hermes-f59d0da6

Conversation

@teknium1

@teknium1 teknium1 commented May 30, 2026

Copy link
Copy Markdown
Contributor

Summary

Concurrent tool execution no longer mutates checkpoint state for tool calls that get blocked. Previously the concurrent path ran checkpoint preflight before computing block_result, so a blocked write_file/patch/destructive terminal could create a ghost checkpoint and steal the per-turn dedup slot from a later allowed write in the same directory — costing that allowed write its real pre-change snapshot.

Root cause: ordering drift between the concurrent and sequential executors. The sequential path already gates checkpointing on if not _execution_blocked; the concurrent path checkpointed first.

Changes

  • agent/tool_executor.py: move concurrent-path checkpoint preflight to after block evaluation, gated on block_result is None — matching the sequential invariant.
  • tests/run_agent/test_run_agent.py: 4 tests — blocked write/patch/terminal skip checkpoint, and a blocked write doesn't steal the dedup slot from a later allowed write in the same dir.

Validation

Before After
blocked concurrent write/patch/terminal mutates checkpoint state no checkpoint, no slot consumed
allowed write after blocked sibling (same dir) could lose its snapshot always checkpoints
pytest -k concurrent 26 passed

Salvaged from #34856 by @beardthelion (cherry-picked, authorship preserved). Fixes #34827.

Infographic

read-only-skill-sync-cleanup

Normalize Gmail API message header names to lowercase before lookup so
gmail get/search/reply populate to/subject/from regardless of the casing
the message was stored with. Emit conventional MIME header casing
(To/Subject/Cc/From) on send and reply.

Fixes #34806

Co-authored-by: Donovan Yohan <donovan-yohan@users.noreply.github.com>
@github-actions

Copy link
Copy Markdown
Contributor

🔎 Lint report: hermes/hermes-f59d0da6 vs origin/main

ruff

Total: 0 on HEAD, 0 on base (➖ 0)

🆕 New issues: none

✅ Fixed issues: none

Unchanged: 0 pre-existing issues carried over.

ty (type checker)

Total: 9498 on HEAD, 9498 on base (➖ 0)

🆕 New issues: none

✅ Fixed issues: none

Unchanged: 4925 pre-existing issues carried over.

Diagnostics are surfaced as warnings — this check never fails the build.

@alt-glitch alt-glitch added type/bug Something isn't working P3 Low — cosmetic, nice to have tool/skills Skills system (list, view, manage) labels May 30, 2026
@alt-glitch

Copy link
Copy Markdown
Collaborator

Salvage of #34830. Both fix #34806 (Gmail header casing). If this merges, #34830 should be closed as superseded.

@teknium1 teknium1 merged commit 8bd0060 into main May 30, 2026
23 checks passed
@teknium1 teknium1 deleted the hermes/hermes-f59d0da6 branch May 30, 2026 09:38
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

P3 Low — cosmetic, nice to have tool/skills Skills system (list, view, manage) type/bug Something isn't working

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Concurrent checkpoint preflight side effects in tool_executor

3 participants