Skip to content

chore: promote staging to staging-promote/4c043bf0-23573031775 (2026-03-26 07:26 UTC)#1668

Merged
henrypark133 merged 66 commits intostaging-promote/4c043bf0-23573031775from
staging-promote/ed4d9293-23582522167
Mar 26, 2026
Merged

chore: promote staging to staging-promote/4c043bf0-23573031775 (2026-03-26 07:26 UTC)#1668
henrypark133 merged 66 commits intostaging-promote/4c043bf0-23573031775from
staging-promote/ed4d9293-23582522167

Conversation

@ironclaw-ci
Copy link
Copy Markdown
Contributor

@ironclaw-ci ironclaw-ci bot commented Mar 26, 2026

Auto-promotion from staging CI

Batch range: 4c043bf05767d7e1ab74552eb010182ec44b3222..ed4d92932ac5d2d9123a8448aac4627bb8bb2d7c
Promotion branch: staging-promote/ed4d9293-23582522167
Base: staging-promote/4c043bf0-23573031775
Triggered by: Staging CI batch at 2026-03-26 07:26 UTC

Commits in this batch (2):

Current commits in this promotion (14)

Current base: staging-promote/4c043bf0-23573031775
Current head: staging-promote/ed4d9293-23582522167
Current range: origin/staging-promote/4c043bf0-23573031775..origin/staging-promote/ed4d9293-23582522167

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

henrypark133 and others added 30 commits March 18, 2026 17:30
…3042

chore: promote staging to staging-promote/ec04354c-23271447493 (2026-03-19 00:12 UTC)
…6242

chore: promote staging to staging-promote/b9e5acf6-23283208580 (2026-03-19 15:15 UTC)
…8580

chore: promote staging to staging-promote/3dcccc1e-23280048384 (2026-03-19 06:44 UTC)
…8384

chore: promote staging to staging-promote/ec04354c-23271447493 (2026-03-19 04:37 UTC)
…6661

chore: promote staging to staging-promote/ec04354c-23271447493 (2026-03-19 16:48 UTC)
…7493

chore: promote staging to main (2026-03-18 23:07 UTC)
Co-authored-by: ironclaw-ci[bot] <266877842+ironclaw-ci[bot]@users.noreply.github.com>
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
…4063

chore: promote staging to staging-promote/65062f3c-23317058602 (2026-03-19 23:06 UTC)
…8602

chore: promote staging to staging-promote/52ca9d65-23312673755 (2026-03-19 21:10 UTC)
…3755

chore: promote staging to staging-promote/71f41dd1-23309993684 (2026-03-19 19:18 UTC)
…3684

chore: promote staging to staging-promote/71f9012d-23307625134 (2026-03-19 18:14 UTC)
…5134

chore: promote staging to staging-promote/ec04354c-23271447493 (2026-03-19 17:20 UTC)
Co-authored-by: ironclaw-ci[bot] <266877842+ironclaw-ci[bot]@users.noreply.github.com>
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
…2672

chore: promote staging to staging-promote/c4ab3825-23321164063 (2026-03-20 02:56 UTC)
…7636

chore: promote staging to staging-promote/cba1bc37-23334371795 (2026-03-20 16:12 UTC)
…1795

chore: promote staging to staging-promote/c1762616-23332963145 (2026-03-20 08:09 UTC)
…3145

chore: promote staging to staging-promote/b952d229-23331469361 (2026-03-20 07:18 UTC)
…9361

chore: promote staging to staging-promote/806d4028-23330265305 (2026-03-20 06:16 UTC)
…5305

chore: promote staging to staging-promote/455f543b-23329172268 (2026-03-20 05:23 UTC)
…2351

chore: promote staging to staging-promote/3da9810e-23351687636 (2026-03-20 17:14 UTC)
…1011

chore: promote staging to staging-promote/ee6f5cd6-23354122351 (2026-03-20 19:41 UTC)
…3131

chore: promote staging to staging-promote/ab0ad948-23563320113 (2026-03-25 21:37 UTC)
…0113

chore: promote staging to staging-promote/c949521d-23562109203 (2026-03-25 20:47 UTC)
…9203

chore: promote staging to staging-promote/0341fcc9-23558273569 (2026-03-25 20:19 UTC)
…3569

chore: promote staging to staging-promote/6daa2f15-23538193544 (2026-03-25 18:47 UTC)
…3544

chore: promote staging to staging-promote/82822d7b-23516534944 (2026-03-25 12:01 UTC)
henrypark133 and others added 8 commits March 25, 2026 15:58
…2268

chore: promote staging to staging-promote/89203225-23327092672 (2026-03-20 04:32 UTC)
Co-authored-by: ironclaw-ci[bot] <266877842+ironclaw-ci[bot]@users.noreply.github.com>
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
* fix(llm): filter XML tool-call recovery by context

* fix: address review comments on PR #1641
@github-actions github-actions bot added scope: agent Agent core (agent loop, router, scheduler) scope: llm LLM integration scope: worker Container worker size: L 200-499 changed lines risk: medium Business logic, config, or moderate-risk modules contributor: core 20+ merged PRs labels Mar 26, 2026
@claude
Copy link
Copy Markdown

claude bot commented Mar 26, 2026

Code review

Found 3 issues:

  1. [CRITICAL:95] Potential UTF-8 panic in is_recoverable_tool_call_segment() at line 1405 in src/llm/reasoning.rs. When end position immediately follows a multi-byte UTF-8 character, end.saturating_sub(1) lands mid-character, causing line_bounds() to panic on text[..pos]. Example: 'Result: 🔥\n<tool_call>...' crashes. Fix: Add is_char_boundary() check before line 1405.

https://github.com/anthropics/ironclaw/blob/b3fbef5287c84d0388fcdab1713c69d5ef62104a/src/llm/reasoning.rs#L1398-L1410

  1. [HIGH:75] Truncation count accumulation logic asymmetry in src/agent/agentic_loop.rs lines 137-246. Counter persists across text responses (only reset on tool success), but comment says 'not reset by text responses'. Pattern [truncated, text, truncated, text, truncated] triggers force_text after 3 non-consecutive truncations. Clarify if this is intentional.

https://github.com/anthropics/ironclaw/blob/b3fbef5287c84d0388fcdab1713c69d5ef62104a/src/agent/agentic_loop.rs#L134-L150

  1. [MEDIUM:60] Inefficient cloning in select_tools() at lines 534-539 in src/llm/reasoning.rs. Unconditionally clones context.messages and available_tools, but early-returns on truncation at line 546. Wastes allocations on error path.

https://github.com/anthropics/ironclaw/blob/b3fbef5287c84d0388fcdab1713c69d5ef62104a/src/llm/reasoning.rs#L530-L555

Positive observations: Comprehensive test coverage, correct filtering of tool calls from code regions, no .unwrap() in production code.

Chore: Sync Main/Staging
…2140

chore: promote staging to staging-promote/ed4d9293-23582522167 (2026-03-26 18:18 UTC)
@github-actions github-actions bot added scope: docs Documentation scope: dependencies Dependency updates labels Mar 26, 2026
PierreLeGuen and others added 2 commits March 26, 2026 13:49
…override (#1681)

* fix(extensions): channel-relay auth dead-end, add observability and relay URL override

Fix a bug where clicking Activate on the Slack relay extension produces
a dead-end "Authentication required" error with no OAuth URL. The root
cause: `auth_channel_relay()` used `is_relay_channel()` to check auth
status, but that function returns true as soon as the extension is
*installed* (in-memory set), before OAuth completes. This short-circuits
the OAuth flow so the authorization URL is never offered.

Changes:

1. **Bug fix** — `auth_channel_relay()` now uses `has_stored_team_id()`
   which only checks the persistent settings store for an actual team_id.
   The extension list `authenticated` field uses the same check so the UI
   accurately reflects OAuth completion status.

2. **Observability** — Added debug/warn/info tracing to all channel-relay
   code paths that were previously silent on failure:
   - `activate_channel_relay`: team_id retrieval, relay config, signing
     secret fetch, hot_add, cache operations
   - `auth_channel_relay`: auth check, OAuth initiation, nonce storage
   - `extensions_activate_handler`: request entry, auth fallback flow
   - `slack_relay_oauth_callback_handler`: team_id persistence (was
     silently ignored with `let _`)
   - `RelayClient`: initiate_oauth, get_signing_secret, proxy_provider
     all log URL, status, and errors
   - `has_stored_team_id`: store read success/failure

3. **Per-extension relay URL override** — Users can now override the
   CHANNEL_RELAY_URL via Settings > Extensions > Reconfigure. Stored
   under `extensions.{name}.relay_url` in settings. Both auth and
   activate read this override before falling back to the env default.

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

* style: cargo fmt

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

* fix: address review feedback — clear relay_url override and improve log message

1. Allow clearing the relay_url override: when an optional setup field
   with a setting_path is submitted empty, delete the stored setting so
   the system reverts to the env/default value. Previously empty values
   were silently skipped, making it impossible to undo an override from
   the UI.

2. Improve the OAuth callback team_id persistence error log to be
   self-contained without referencing implementation details.

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

* style: collapse nested if per clippy::collapsible_if

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

* fix: address review feedback — security, scope consistency, and error handling

1. OAuth callback team_id persistence is now fatal: if set_setting fails,
   the callback returns an error instead of proceeding to activate (which
   would re-read from the store and fail anyway).

2. effective_relay_url uses owner scope (self.user_id) for reads, matching
   configure() which writes under the same scope. Prevents multi-user
   mismatch where an override saved via Reconfigure was invisible during
   auth/activation.

3. has_stored_team_id uses owner scope for the same reason — the OAuth
   callback stores team_id under state.owner_id (= self.user_id).

4. Security: effective_relay_url validates the override URL — only
   http/https without embedded credentials (userinfo) is accepted. This
   prevents API-key exfiltration if a user points relay_url at an
   attacker-controlled host. Logs only host portion, not full URL.

5. Fixed effective_relay_url docstring to match behavior (returns Option,
   callers handle the fallback).

6. get_setup_schema for ChannelRelay now logs a warning on settings store
   errors instead of silently returning None.

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

---------

Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
…1675

chore: promote staging to staging-promote/ed4d9293-23582522167 (2026-03-26 21:08 UTC)
@github-actions github-actions bot added scope: channel/web Web gateway channel scope: extensions Extension management size: XL 500+ changed lines and removed size: L 200-499 changed lines labels Mar 26, 2026
@henrypark133 henrypark133 merged commit 00aba92 into staging-promote/4c043bf0-23573031775 Mar 26, 2026
13 checks passed
@henrypark133 henrypark133 deleted the staging-promote/ed4d9293-23582522167 branch March 26, 2026 21:21
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: medium Business logic, config, or moderate-risk modules scope: agent Agent core (agent loop, router, scheduler) scope: channel/web Web gateway channel scope: dependencies Dependency updates scope: docs Documentation scope: extensions Extension management scope: llm LLM integration scope: worker Container worker size: XL 500+ changed lines staging-promotion

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants