Skip to content

chore: promote staging to staging-promote/0892f56a-24821371795 (2026-04-23 09:51 UTC) - #2893

Merged
henrypark133 merged 1 commit into
mainfrom
staging-promote/1d8a46bb-24828673723
Apr 29, 2026
Merged

henrypark133 merged 1 commit into
mainfrom
staging-promote/1d8a46bb-24828673723

Conversation

@ironclaw-ci

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

Copy link
Copy Markdown
Contributor

Auto-promotion from staging CI

Batch range: 7fb41555a9e55677d1aaea29ca567a5b369c2b05..1d8a46bbdfe0cbe356e680ba56456d00d8791a59
Promotion branch: staging-promote/1d8a46bb-24828673723
Base: staging-promote/0892f56a-24821371795
Triggered by: Staging CI batch at 2026-04-23 09:51 UTC

Commits in this batch (84):

Current commits in this promotion (1)

Current base: staging-promote/0892f56a-24821371795
Current head: staging-promote/1d8a46bb-24828673723
Current range: origin/staging-promote/0892f56a-24821371795..origin/staging-promote/1d8a46bb-24828673723

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

…2891)

* fix(bridge): surface latent WASM provider actions to the LLM (#2883)

After d33fecb centralized the action vs capability surface policy, the
ActionProjector stopped iterating over latent provider actions — tools
owned by installed extensions that are not yet ready (primarily WASM
tools pending OAuth). Because WASM tools register in `tool_registry`
only at activation (which requires auth first), they were invisible to
the LLM, so the LLM never attempted them and the auth-on-first-call
gate never fired. The user-visible regression: asking the assistant to
connect Gmail returned "secrets are missing" without triggering the
OAuth prompt.

Re-add the latent-iteration loop in `ActionProjector::project`, sharing
the `seen` dedup set with the capability-lease pass so we never emit
the same action name twice. Latent actions use `effects: vec![]` and
`requires_approval: false`; approval/effects are enforced at auth-gate
and capability-lease time, not here.

Flip the previously negative `available_actions_omit_latent_inactive_
provider_actions` assertion into a positive
`available_actions_include_latent_inactive_provider_actions` regression
test and add an explanatory docstring pointing at #2883.

Fixes #2883

* fix(bridge): normalize latent action names and satisfy fmt

Normalize hyphen->underscore on latent provider action names to match the
first loop's tool-def handling. This keeps the LLM-facing name stable
across the latent->registered transition and ensures the shared `seen`
dedup suppresses overlap with tools already surfaced above.

Also satisfies `cargo fmt` (the prior multi-line for-loop head
collapses onto one line).
@github-actions github-actions Bot added size: S 10-49 changed lines risk: low Changes to docs, tests, or low-risk modules contributor: core 20+ merged PRs labels Apr 23, 2026
@claude

claude Bot commented Apr 23, 2026

Copy link
Copy Markdown

Code review

No issues found.

@claude

claude Bot commented Apr 23, 2026

Copy link
Copy Markdown

Code review

Found 3 items from performance analysis; however, 2 are pre-existing issues outside this PR's scope:

  1. [Pre-existing] N+1 query pattern in extensions/manager.rs (lines 1884-1905): The latent_provider_actions() method calls is_extension_active() per server without caching. This is not introduced by this PR and should be addressed separately in extensions/manager.rs.

  2. [Pre-existing] Missing cache invalidation in extensions/manager.rs: The latent_provider_actions() parent call doesn't cache results. This is not introduced by this PR.

  3. String cloning in dedup check (action_projector.rs:169): The analysis flagged potential inefficiency, but the code only performs one clone (in seen.insert(name.clone())); the name is then moved into ActionDef, not cloned again. The current approach is already optimal for this pattern.

Conclusion: No issues introduced by this PR. All three findings either pre-date this change or are inaccurate. The PR itself is sound across security, architecture, bugs, and performance.

Base automatically changed from staging-promote/0892f56a-24821371795 to main April 29, 2026 04:09
@henrypark133
henrypark133 merged commit 1d8a46b into main Apr 29, 2026
305 of 461 checks passed
@henrypark133
henrypark133 deleted the staging-promote/1d8a46bb-24828673723 branch April 29, 2026 04:09

This branch had an error being deployed

1 failed and 5 inactive deployments
cosmose-ironclaw / production — 1d8a46bb Deployed Apr 23, 2026 by railway-app[bot]
Ironclaw-QA / production — 1d8a46bb Deployed Apr 23, 2026 by railway-app[bot]
Near Foundation Ironclaw / production — 1d8a46bb Deployed Apr 23, 2026 by railway-app[bot]
humble-cat / staging-cameron — 1d8a46bb Deployed Apr 23, 2026 by railway-app[bot]
venice-ironclaw / production — 1d8a46bb Deployed Apr 23, 2026 by railway-app[bot]
ironclaw-nearai / production — 1d8a46bb Deployed Apr 23, 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 size: S 10-49 changed lines staging-promotion

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants