claw-code/rust/crates
YeonGyu-Kim a3d0c9e5e7 fix(api): sanitize orphaned tool messages at request-building layer
Adds sanitize_tool_message_pairing() called from build_chat_completion_request()
after translate_message() runs. Drops any role:"tool" message whose
immediately-preceding non-tool message is role:"assistant" but has no
tool_calls entry matching the tool_call_id.

This is the second layer of the tool-pairing invariant defense:
- 6e301c8: compaction boundary fix (producer layer)
- this commit: request-builder sanitizer (sender layer)

Together these close the 400-error loop for resumed/compacted multi-turn
tool sessions on OpenAI-compatible backends.

Sanitization only fires when preceding message is role:assistant (not
user/system) to avoid dropping valid translation artifacts from mixed
user-message content blocks.

Regression tests: sanitize_drops_orphaned_tool_messages covers valid pair,
orphaned tool (no tool_calls in preceding assistant), mismatched id, and
two tool results both referencing the same assistant turn.

116 api + 159 CLI + 431 runtime tests pass. Fmt clean.
2026-04-10 01:35:00 +09:00
..
api fix(api): sanitize orphaned tool messages at request-building layer 2026-04-10 01:35:00 +09:00
commands fix(cli): surface command name in 'not yet implemented' REPL message 2026-04-10 00:39:16 +09:00
compat-harness wip: plugins progress 2026-04-01 07:09:06 +00:00
mock-anthropic-service feat(harness+usage): add auto_compact and token_cost parity scenarios 2026-04-03 22:41:42 +09:00
plugins fix(plugins): chmod +x generated hook scripts + tolerate BrokenPipe in stdin write — closes ROADMAP #25 hotfix lane 2026-04-08 15:48:20 +09:00
runtime fix(runtime): prevent orphaned tool-result at compaction boundary; /cost JSON 2026-04-10 00:13:45 +09:00
rusty-claude-cli fix(cli): JSON parity for /compact and /clear in resume mode 2026-04-10 01:31:21 +09:00
telemetry feat: anthropic SDK header matching + request profile 2026-04-01 05:55:25 +00:00
tools fix(tools): serialize web_search env-var tests with env_lock to prevent race 2026-04-08 18:34:06 +09:00