Skip to content

chore: promote staging to staging-promote/4353493a-24449434063 (2026-04-15 11:21 UTC) - #2499

Merged
henrypark133 merged 1 commit into
mainfrom
staging-promote/be0b33b2-24451653982
Apr 18, 2026
Merged

henrypark133 merged 1 commit into
mainfrom
staging-promote/be0b33b2-24451653982

Conversation

@ironclaw-ci

@ironclaw-ci ironclaw-ci Bot commented Apr 15, 2026 •

Copy link
Copy Markdown
Contributor

Auto-promotion from staging CI

Batch range: a53eac5c2dec6b6cd5c08189086093fde64aa9cb..be0b33b2a373e7b1e66cb9a587c181a19654eedc
Promotion branch: staging-promote/be0b33b2-24451653982
Base: staging-promote/4353493a-24449434063
Triggered by: Staging CI batch at 2026-04-15 11:21 UTC

Commits in this batch (46):

Current commits in this promotion (0)

Current base: main
Current head: staging-promote/be0b33b2-24451653982
Current range: origin/main..origin/staging-promote/be0b33b2-24451653982

  • (no non-merge commits in range)

Auto-updated by staging promotion metadata workflow

Waiting for gates:

  • Tests: pending
  • E2E: pending
  • Claude Code review: pending (will post comments on this PR)

Auto-created by staging-ci workflow

#2493)

* fix: duplicate reasoning_content fields in chat completions response

* fix: resolve comments

* style: fix rustfmt and ignore RUSTSEC-2026-{0098,0099} in cargo-deny

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

* fix: resolve comments

---------

Co-authored-by: serrrfirat <f@nuff.tech>
Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
@github-actions github-actions Bot added scope: llm LLM integration size: M 50-199 changed lines risk: low Changes to docs, tests, or low-risk modules contributor: core 20+ merged PRs labels Apr 15, 2026
@claude

claude Bot commented Apr 15, 2026

Copy link
Copy Markdown

Code review

Found 5 issues:

  1. [HIGH:100] Duplicate RUSTSEC-2026-0098 in deny.toml

RUSTSEC-2026-0098 is listed twice in the ignore array (line 16 and line 21). This creates maintenance confusion and should be deduplicated. The new PR additions at line 20-22 inadvertently re-added an advisory already present.

https://github.com/anthropics/ironclaw/blob/1e16b8085a0a0a37734e76c8a7b09e474aec3ac5/deny.toml#L14-L22

  1. [MEDIUM:HIGH] Inconsistent fallback logic between complete() and complete_with_tools()

The two methods implement subtly different semantics for fallback handling:

  • complete() (line 532-534): applies fallback chain unconditionally
  • complete_with_tools() (line 616, 639-643): only applies fallback when tool_calls.is_empty()

This violates the DRY principle and creates a maintainability hazard. Per CLAUDE.md ("extract helpers when logic is reused"), the fallback selection should be extracted to a single source of truth.

https://github.com/anthropics/ironclaw/blob/1e16b8085a0a0a37734e76c8a7b09e474aec3ac5/src/llm/nearai_chat.rs#L532-L534
https://github.com/anthropics/ironclaw/blob/1e16b8085a0a0a37734e76c8a7b09e474aec3ac5/src/llm/nearai_chat.rs#L639-L643

  1. [MEDIUM:HIGH] Missing caller-level regression tests

Per CLAUDE.md's "Test Through the Caller, Not Just the Helper" rule, the new test test_both_reasoning_fields_parse_with_defined_precedence() only validates ChatCompletionResponseMessage deserialization in isolation. It does not verify:

  • Fallback behavior when content is null but reasoning fields are present (through the actual complete() / complete_with_tools() methods)
  • That reasoning_content is preferred over reasoning in the full methods
  • That the tool-call suppression logic still applies when reasoning field is present

These gaps should be addressed with integration tests driving the full LLM provider methods.

https://github.com/anthropics/ironclaw/blob/1e16b8085a0a0a37734e76c8a7b09e474aec3ac5/src/llm/nearai_chat.rs#L1687-L1749

  1. [MEDIUM:MEDIUM] Missing abstraction for reasoning field priority

The fallback precedence (content -> reasoning_content -> reasoning) is hardcoded at each call site. Consider extracting to a method on ChatCompletionResponseMessage to maintain a single source of truth:

impl ChatCompletionResponseMessage {
    fn get_text_content(&self, include_reasoning_fallback: bool) -> Option<String> {
        self.content.clone()
            .or_else(|| {
                if include_reasoning_fallback {
                    self.reasoning_content.clone().or(self.reasoning.clone())
                } else {
                    None
                }
            })
    }
}

This would unify logic across both methods and make the behavioral difference between complete() and complete_with_tools() explicit and maintainable.

https://github.com/anthropics/ironclaw/blob/1e16b8085a0a0a37734e76c8a7b09e474aec3ac5/src/llm/nearai_chat.rs#L1083-L1091

  1. [LOW:HIGH] Field aliasing documentation gap

The comment at line 1083-1085 explains that models return reasoning in different field names, but now that the serde alias is removed and reasoning is a separate field, the documentation should clarify the new behavior: "The reasoning field is preferred by vLLM/SGLang; reasoning_content by GLM-5/DeepSeek. Both are fallbacks to content."

https://github.com/anthropics/ironclaw/blob/1e16b8085a0a0a37734e76c8a7b09e474aec3ac5/src/llm/nearai_chat.rs#L1083-L1091

Base automatically changed from staging-promote/4353493a-24449434063 to main April 18, 2026 00:59
@henrypark133
henrypark133 merged commit be0b33b into main Apr 18, 2026
58 of 73 checks passed
@henrypark133
henrypark133 deleted the staging-promote/be0b33b2-24451653982 branch April 18, 2026 01:00

This branch had an error being deployed

1 failed and 5 inactive deployments
venice-ironclaw / production — be0b33b2 Deployed Apr 15, 2026 by railway-app[bot]
cosmose-ironclaw / production — be0b33b2 Deployed Apr 15, 2026 by railway-app[bot]
Ironclaw-QA / production — be0b33b2 Deployed Apr 15, 2026 by railway-app[bot]
Near Foundation Ironclaw / production — be0b33b2 Deployed Apr 15, 2026 by railway-app[bot]
humble-cat / staging-cameron — be0b33b2 Deployed Apr 15, 2026 by railway-app[bot]
ironclaw-nearai / production — be0b33b2 Deployed Apr 15, 2026 by railway-app[bot]
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

contributor: core 20+ merged PRs risk: low Changes to docs, tests, or low-risk modules scope: llm LLM integration size: M 50-199 changed lines staging-promotion

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants