Skip to content

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

Open
ironclaw-ci[bot] wants to merge 1 commit intostaging-promote/3da9810e-23351687636from
staging-promote/ee6f5cd6-23354122351
Open

chore: promote staging to staging-promote/3da9810e-23351687636 (2026-03-20 17:14 UTC)#1467
ironclaw-ci[bot] wants to merge 1 commit intostaging-promote/3da9810e-23351687636from
staging-promote/ee6f5cd6-23354122351

Conversation

@ironclaw-ci
Copy link
Contributor

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

Auto-promotion from staging CI

Batch range: c4ab382522c86e7e19d55fee760b125fb1970518..ee6f5cd62abdc6086a9087f40bd51a53c79b7447
Promotion branch: staging-promote/ee6f5cd6-23354122351
Base: staging-promote/3da9810e-23351687636
Triggered by: Staging CI batch at 2026-03-20 17:14 UTC

Commits in this batch (16):

Current commits in this promotion (1)

Current base: staging-promote/3da9810e-23351687636
Current head: staging-promote/ee6f5cd6-23354122351
Current range: origin/staging-promote/3da9810e-23351687636..origin/staging-promote/ee6f5cd6-23354122351

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

* Use live owner tool scope for autonomous runs

* Address autonomous tool scope review feedback

* Normalize routine context paths again
@github-actions github-actions bot added scope: agent Agent core (agent loop, router, scheduler) scope: channel/web Web gateway channel scope: tool Tool infrastructure scope: tool/builtin Built-in tools scope: worker Container worker scope: extensions Extension management size: XL 500+ changed lines risk: medium Business logic, config, or moderate-risk modules contributor: core 20+ merged PRs labels Mar 20, 2026
@claude
Copy link

claude bot commented Mar 20, 2026

Code review

Found 5 issues:

  1. [HIGH:80] Removed approval requirement check in lightweight routine tool execution

In src/agent/routine_engine.rs, the function execute_routine_tool() previously enforced that lightweight routines could only call tools with ApprovalRequirement::Never, blocking UnlessAutoApproved and Always tools due to prompt injection vulnerability. The new code relies solely on the AUTONOMOUS_TOOL_DENYLIST which is more comprehensive but does not verify the approval requirement of individual tools. If a tool's metadata changes or new tools are added with approval requirements, lightweight routines could now call sensitive tools unintentionally.

https://github.com/anthropics/ironclaw/blob/ee6f5cd62abdc6086a9087f40bd51a53c79b7447/src/agent/routine_engine.rs#L537-L545

  1. [MEDIUM:75] Silent removal of tool_permissions and permission_mode from routine serialization

The PR removes tool_permissions and permission_mode fields from RoutineAction::FullJob, including from the to_config_json() method. While backward compatibility exists for parsing legacy routines from the database, any routine that is read and re-written will lose these fields permanently. Users cannot audit whether a routine was set to Explicit vs InheritOwner permission mode.

https://github.com/anthropics/ironclaw/blob/ee6f5cd62abdc6086a9087f40bd51a53c79b7447/src/agent/routine.rs#L365-L375

  1. [MEDIUM:72] Denylist expansion may silently break existing routines

AUTONOMOUS_TOOL_DENYLIST was expanded from 5 to 17 tools. Tools like event_emit, tool_install, skill_install, secret_delete are now denylisted. Any existing full_job routines referencing these tools in legacy tool_permissions will silently fail at runtime without migration warning.

https://github.com/anthropics/ironclaw/blob/ee6f5cd62abdc6086a9087f40bd51a53c79b7447/src/tools/autonomy.rs#L8-L26

  1. [MEDIUM:70] SchedulerDeps struct exported without documentation

The new SchedulerDeps struct is exported but lacks documentation explaining why it bundles these fields or its role in autonomous tool resolution. This impacts maintainability.

https://github.com/anthropics/ironclaw/blob/ee6f5cd62abdc6086a9087f40bd51a53c79b7447/src/agent/agent_loop.rs#L227-L236

  1. [LOW:50] AUTONOMOUS_TOOL_DENYLIST policy scattered across functions

Tool allowlisting logic is split across multiple functions. Consider a single helper like is_tool_allowed_for_autonomy(name: &str) -> bool to centralize policy.

https://github.com/anthropics/ironclaw/blob/ee6f5cd62abdc6086a9087f40bd51a53c79b7447/src/tools/autonomy.rs#L8-L68

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: extensions Extension management scope: tool/builtin Built-in tools scope: tool Tool infrastructure scope: worker Container worker size: XL 500+ changed lines staging-promotion

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant