Skip to content

chore: release v0.17.0 - #633

Closed
github-actions[bot] wants to merge 5 commits into
stagingfrom
release-plz-2026-03-06T20-52-24Z
Closed

github-actions[bot] wants to merge 5 commits into
stagingfrom
release-plz-2026-03-06T20-52-24Z

Conversation

@github-actions

@github-actions github-actions Bot commented Mar 6, 2026 •

Copy link
Copy Markdown
Contributor

🤖 New release

  • ironclaw: 0.16.1 -> 0.17.0 (⚠ API breaking changes)

⚠ ironclaw breaking changes

--- failure constructible_struct_adds_field: externally-constructible struct adds field ---

Description:
A pub struct constructible with a struct literal has a new pub field. Existing struct literals must be updated to include the new field.
        ref: https://doc.rust-lang.org/reference/expressions/struct-expr.html
       impl: https://github.com/obi1kenobi/cargo-semver-checks/tree/v0.46.0/src/lints/constructible_struct_adds_field.ron

Failed in:
  field CompletionResponse.cache_read_input_tokens in /tmp/.tmpdcsAfG/ironclaw/src/llm/provider.rs:204
  field CompletionResponse.cache_creation_input_tokens in /tmp/.tmpdcsAfG/ironclaw/src/llm/provider.rs:207
  field AppComponents.mcp_process_manager in /tmp/.tmpdcsAfG/ironclaw/src/app.rs:44
  field EmittedMessage.attachments in /tmp/.tmpdcsAfG/ironclaw/src/channels/wasm/host.rs:86
  field HygieneConfig.daily_retention_days in /tmp/.tmpdcsAfG/ironclaw/src/config/hygiene.rs:14
  field HygieneConfig.conversation_retention_days in /tmp/.tmpdcsAfG/ironclaw/src/config/hygiene.rs:16
  field ReasoningContext.system_prompt in /tmp/.tmpdcsAfG/ironclaw/src/llm/reasoning.rs:194
  field SandboxSettings.claude_code_enabled in /tmp/.tmpdcsAfG/ironclaw/src/settings.rs:544
  field Settings.secrets_master_key_hex in /tmp/.tmpdcsAfG/ironclaw/src/settings.rs:47
  field Settings.bedrock_region in /tmp/.tmpdcsAfG/ironclaw/src/settings.rs:64
  field Settings.bedrock_cross_region in /tmp/.tmpdcsAfG/ironclaw/src/settings.rs:68
  field Settings.bedrock_profile in /tmp/.tmpdcsAfG/ironclaw/src/settings.rs:72
  field Settings.transcription in /tmp/.tmpdcsAfG/ironclaw/src/settings.rs:121
  field ProxyCompletionResponse.cache_read_input_tokens in /tmp/.tmpdcsAfG/ironclaw/src/worker/api.rs:56
  field ProxyCompletionResponse.cache_creation_input_tokens in /tmp/.tmpdcsAfG/ironclaw/src/worker/api.rs:58
  field InstalledExtension.version in /tmp/.tmpdcsAfG/ironclaw/src/extensions/mod.rs:481
  field SetupConfig.provider_only in /tmp/.tmpdcsAfG/ironclaw/src/setup/wizard.rs:78
  field GatewayState.routine_engine in /tmp/.tmpdcsAfG/ironclaw/src/channels/web/server.rs:173
  field RegistryEntry.version in /tmp/.tmpdcsAfG/ironclaw/src/extensions/mod.rs:75
  field HeartbeatConfig.quiet_hours_start in /tmp/.tmpdcsAfG/ironclaw/src/config/heartbeat.rs:17
  field HeartbeatConfig.quiet_hours_end in /tmp/.tmpdcsAfG/ironclaw/src/config/heartbeat.rs:19
  field HeartbeatConfig.timezone in /tmp/.tmpdcsAfG/ironclaw/src/config/heartbeat.rs:21
  field HygieneConfig.daily_retention_days in /tmp/.tmpdcsAfG/ironclaw/src/workspace/hygiene.rs:71
  field HygieneConfig.conversation_retention_days in /tmp/.tmpdcsAfG/ironclaw/src/workspace/hygiene.rs:73
  field LoadedSkill.lowercased_exclude_keywords in /tmp/.tmpdcsAfG/ironclaw/src/skills/mod.rs:211
  field ToolCompletionResponse.cache_read_input_tokens in /tmp/.tmpdcsAfG/ironclaw/src/llm/provider.rs:310
  field ToolCompletionResponse.cache_creation_input_tokens in /tmp/.tmpdcsAfG/ironclaw/src/llm/provider.rs:312
  field JobContext.user_timezone in /tmp/.tmpdcsAfG/ironclaw/src/context/state.rs:168
  field JobContext.user_timezone in /tmp/.tmpdcsAfG/ironclaw/src/context/state.rs:168
  field Turn.image_content_parts in /tmp/.tmpdcsAfG/ironclaw/src/agent/session.rs:511
  field Turn.image_content_parts in /tmp/.tmpdcsAfG/ironclaw/src/agent/session.rs:511
  field HeartbeatConfig.quiet_hours_start in /tmp/.tmpdcsAfG/ironclaw/src/agent/heartbeat.rs:51
  field HeartbeatConfig.quiet_hours_end in /tmp/.tmpdcsAfG/ironclaw/src/agent/heartbeat.rs:53
  field HeartbeatConfig.timezone in /tmp/.tmpdcsAfG/ironclaw/src/agent/heartbeat.rs:55
  field LlmConfig.session in /tmp/.tmpdcsAfG/ironclaw/src/llm/config.rs:116
  field LlmConfig.provider in /tmp/.tmpdcsAfG/ironclaw/src/llm/config.rs:121
  field LlmConfig.bedrock in /tmp/.tmpdcsAfG/ironclaw/src/llm/config.rs:123
  field LlmConfig.request_timeout_secs in /tmp/.tmpdcsAfG/ironclaw/src/llm/config.rs:127
  field ProxyToolCompletionResponse.cache_read_input_tokens in /tmp/.tmpdcsAfG/ironclaw/src/worker/api.rs:79
  field ProxyToolCompletionResponse.cache_creation_input_tokens in /tmp/.tmpdcsAfG/ironclaw/src/worker/api.rs:81
  field HygieneReport.conversation_docs_deleted in /tmp/.tmpdcsAfG/ironclaw/src/workspace/hygiene.rs:104
  field AgentSettings.default_timezone in /tmp/.tmpdcsAfG/ironclaw/src/settings.rs:388
  field AgentDeps.transcription in /tmp/.tmpdcsAfG/ironclaw/src/agent/agent_loop.rs:81
  field AgentDeps.document_extraction in /tmp/.tmpdcsAfG/ironclaw/src/agent/agent_loop.rs:83
  field AgentConfig.default_timezone in /tmp/.tmpdcsAfG/ironclaw/src/config/agent.rs:31
  field HeartbeatSettings.quiet_hours_start in /tmp/.tmpdcsAfG/ironclaw/src/settings.rs:313
  field HeartbeatSettings.quiet_hours_end in /tmp/.tmpdcsAfG/ironclaw/src/settings.rs:317
  field HeartbeatSettings.timezone in /tmp/.tmpdcsAfG/ironclaw/src/settings.rs:321
  field ChatMessage.content_parts in /tmp/.tmpdcsAfG/ironclaw/src/llm/provider.rs:50
  field WorkerDeps.approval_context in /tmp/.tmpdcsAfG/ironclaw/src/agent/worker.rs:44
  field WorkerDeps.http_interceptor in /tmp/.tmpdcsAfG/ironclaw/src/agent/worker.rs:46
  field WorkerDeps.approval_context in /tmp/.tmpdcsAfG/ironclaw/src/agent/worker.rs:44
  field WorkerDeps.http_interceptor in /tmp/.tmpdcsAfG/ironclaw/src/agent/worker.rs:46
  field PendingApproval.user_timezone in /tmp/.tmpdcsAfG/ironclaw/src/agent/session.rs:171
  field PendingApproval.user_timezone in /tmp/.tmpdcsAfG/ironclaw/src/agent/session.rs:171
  field Config.transcription in /tmp/.tmpdcsAfG/ironclaw/src/config/mod.rs:86
  field Config.transcription in /tmp/.tmpdcsAfG/ironclaw/src/config/mod.rs:86
  field Config.transcription in /tmp/.tmpdcsAfG/ironclaw/src/config/mod.rs:86
  field ConversationSummary.channel in /tmp/.tmpdcsAfG/ironclaw/src/history/store.rs:1387
  field ExtensionInfo.version in /tmp/.tmpdcsAfG/ironclaw/src/channels/web/types.rs:431
  field RegistryEntryInfo.version in /tmp/.tmpdcsAfG/ironclaw/src/channels/web/types.rs:535
  field SendMessageRequest.timezone in /tmp/.tmpdcsAfG/ironclaw/src/channels/web/types.rs:21
  field SendMessageRequest.images in /tmp/.tmpdcsAfG/ironclaw/src/channels/web/types.rs:24
  field TokenUsage.cache_read_input_tokens in /tmp/.tmpdcsAfG/ironclaw/src/llm/reasoning.rs:308
  field TokenUsage.cache_creation_input_tokens in /tmp/.tmpdcsAfG/ironclaw/src/llm/reasoning.rs:310
  field ActivationCriteria.exclude_keywords in /tmp/.tmpdcsAfG/ironclaw/src/skills/mod.rs:104
  field SandboxModeConfig.reaper_interval_secs in /tmp/.tmpdcsAfG/ironclaw/src/config/sandbox.rs:24
  field SandboxModeConfig.orphan_threshold_secs in /tmp/.tmpdcsAfG/ironclaw/src/config/sandbox.rs:26
  field RoutineRunInfo.job_id in /tmp/.tmpdcsAfG/ironclaw/src/channels/web/types.rs:779
  field McpServerConfig.transport in /tmp/.tmpdcsAfG/ironclaw/src/tools/mcp/config.rs:44
  field McpServerConfig.headers in /tmp/.tmpdcsAfG/ironclaw/src/tools/mcp/config.rs:48
  field McpServerConfig.transport in /tmp/.tmpdcsAfG/ironclaw/src/tools/mcp/config.rs:44
  field McpServerConfig.headers in /tmp/.tmpdcsAfG/ironclaw/src/tools/mcp/config.rs:48
  field IncomingMessage.timezone in /tmp/.tmpdcsAfG/ironclaw/src/channels/channel.rs:83
  field IncomingMessage.attachments in /tmp/.tmpdcsAfG/ironclaw/src/channels/channel.rs:85
  field IncomingMessage.timezone in /tmp/.tmpdcsAfG/ironclaw/src/channels/channel.rs:83
  field IncomingMessage.attachments in /tmp/.tmpdcsAfG/ironclaw/src/channels/channel.rs:85
  field ThreadInfo.channel in /tmp/.tmpdcsAfG/ironclaw/src/channels/web/types.rs:45

--- failure enum_missing: pub enum removed or renamed ---

Description:
A publicly-visible enum cannot be imported by its prior path. A `pub use` may have been removed, or the enum itself may have been renamed or removed entirely.
        ref: https://doc.rust-lang.org/cargo/reference/semver.html#item-remove
       impl: https://github.com/obi1kenobi/cargo-semver-checks/tree/v0.46.0/src/lints/enum_missing.ron

Failed in:
  enum ironclaw::config::LlmBackend, previously in file /tmp/.tmptf9nIt/ironclaw/src/config/llm.rs:15

--- failure enum_no_repr_variant_discriminant_changed: enum variant had its discriminant change value ---

Description:
The enum's variant had its discriminant value change. This breaks downstream code that used its value via a numeric cast like `as isize`.
        ref: https://doc.rust-lang.org/reference/items/enumerations.html#assigning-discriminant-values
       impl: https://github.com/obi1kenobi/cargo-semver-checks/tree/v0.46.0/src/lints/enum_no_repr_variant_discriminant_changed.ron

Failed in:
  variant RoutineError::MaxConcurrent 7 -> 8 in /tmp/.tmpdcsAfG/ironclaw/src/error.rs:371
  variant RoutineError::Database 8 -> 9 in /tmp/.tmpdcsAfG/ironclaw/src/error.rs:374
  variant RoutineError::LlmFailed 9 -> 10 in /tmp/.tmpdcsAfG/ironclaw/src/error.rs:377
  variant RoutineError::JobDispatchFailed 10 -> 11 in /tmp/.tmpdcsAfG/ironclaw/src/error.rs:380
  variant RoutineError::EmptyResponse 11 -> 12 in /tmp/.tmpdcsAfG/ironclaw/src/error.rs:383
  variant RoutineError::TruncatedResponse 12 -> 13 in /tmp/.tmpdcsAfG/ironclaw/src/error.rs:386
  variant SseEvent::ExtensionStatus 18 -> 19 in /tmp/.tmpdcsAfG/ironclaw/src/channels/web/types.rs:247

--- failure enum_struct_variant_changed_kind: An enum struct variant changed kind ---

Description:
A pub enum's struct variant with at least one pub field has changed to a different kind of enum variant, breaking access to its pub fields.
        ref: https://doc.rust-lang.org/reference/items/enumerations.html
       impl: https://github.com/obi1kenobi/cargo-semver-checks/tree/v0.46.0/src/lints/enum_struct_variant_changed_kind.ron

Failed in:
  variant McpCommand::Add in /tmp/.tmpdcsAfG/ironclaw/src/cli/mcp.rs:77

--- failure enum_struct_variant_field_added: pub enum struct variant field added ---

Description:
An enum's exhaustive struct variant has a new field, which has to be included when constructing or matching on this variant.
        ref: https://doc.rust-lang.org/reference/attributes/type_system.html#the-non_exhaustive-attribute
       impl: https://github.com/obi1kenobi/cargo-semver-checks/tree/v0.46.0/src/lints/enum_struct_variant_field_added.ron

Failed in:
  field tool_permissions of variant RoutineAction::FullJob in /tmp/.tmpdcsAfG/ironclaw/src/agent/routine.rs:203
  field tool_permissions of variant RoutineAction::FullJob in /tmp/.tmpdcsAfG/ironclaw/src/agent/routine.rs:203
  field timezone of variant Trigger::Cron in /tmp/.tmpdcsAfG/ironclaw/src/agent/routine.rs:63
  field timezone of variant Trigger::Cron in /tmp/.tmpdcsAfG/ironclaw/src/agent/routine.rs:63
  field provider_only of variant Command::Onboard in /tmp/.tmpdcsAfG/ironclaw/src/cli/mod.rs:102
  field timezone of variant WsClientMessage::Message in /tmp/.tmpdcsAfG/ironclaw/src/channels/web/types.rs:639
  field images of variant WsClientMessage::Message in /tmp/.tmpdcsAfG/ironclaw/src/channels/web/types.rs:642

--- failure enum_tuple_variant_changed_kind: An enum tuple variant changed kind ---

Description:
A public enum's exhaustive tuple variant has changed to a different kind of enum variant, breaking possible instantiations and patterns.
        ref: https://doc.rust-lang.org/reference/items/enumerations.html
       impl: https://github.com/obi1kenobi/cargo-semver-checks/tree/v0.46.0/src/lints/enum_tuple_variant_changed_kind.ron

Failed in:
  variant WasmError::ToolReturnedError in /tmp/.tmpdcsAfG/ironclaw/src/tools/wasm/error.rs:74

--- failure enum_variant_added: enum variant added on exhaustive enum ---

Description:
A publicly-visible enum without #[non_exhaustive] has a new variant.
        ref: https://doc.rust-lang.org/cargo/reference/semver.html#enum-variant-new
       impl: https://github.com/obi1kenobi/cargo-semver-checks/tree/v0.46.0/src/lints/enum_variant_added.ron

Failed in:
  variant StatusUpdate:ImageGenerated in /tmp/.tmpdcsAfG/ironclaw/src/channels/channel.rs:235
  variant SseEvent:ImageGenerated in /tmp/.tmpdcsAfG/ironclaw/src/channels/web/types.rs:237
  variant RoutineError:NotAuthorized in /tmp/.tmpdcsAfG/ironclaw/src/error.rs:368

--- failure function_missing: pub fn removed or renamed ---

Description:
A publicly-visible function cannot be imported by its prior path. A `pub use` may have been removed, or the function itself may have been renamed or removed entirely.
        ref: https://doc.rust-lang.org/cargo/reference/semver.html#item-remove
       impl: https://github.com/obi1kenobi/cargo-semver-checks/tree/v0.46.0/src/lints/function_missing.ron

Failed in:
  function ironclaw::llm::session::default_session_path, previously in file /tmp/.tmptf9nIt/ironclaw/src/llm/session.rs:49

--- failure function_parameter_count_changed: pub fn parameter count changed ---

Description:
A publicly-visible function now takes a different number of parameters.
        ref: https://doc.rust-lang.org/cargo/reference/semver.html#fn-change-arity
       impl: https://github.com/obi1kenobi/cargo-semver-checks/tree/v0.46.0/src/lints/function_parameter_count_changed.ron

Failed in:
  ironclaw::agent::routine::next_cron_fire now takes 2 parameters instead of 1, in /tmp/.tmpdcsAfG/ironclaw/src/agent/routine.rs:442
  ironclaw::llm::create_llm_provider_with_config now takes 3 parameters instead of 2, in /tmp/.tmpdcsAfG/ironclaw/src/llm/mod.rs:110
  ironclaw::tools::mcp::auth::exchange_code_for_token now takes 6 parameters instead of 5, in /tmp/.tmpdcsAfG/ironclaw/src/tools/mcp/auth.rs:846
  ironclaw::tools::mcp::auth::build_authorization_url now takes 7 parameters instead of 6, in /tmp/.tmpdcsAfG/ironclaw/src/tools/mcp/auth.rs:780

--- failure inherent_method_missing: pub method removed or renamed ---

Description:
A publicly-visible method or associated fn is no longer available under its prior name. It may have been renamed or removed entirely.
        ref: https://doc.rust-lang.org/cargo/reference/semver.html#item-remove
       impl: https://github.com/obi1kenobi/cargo-semver-checks/tree/v0.46.0/src/lints/inherent_method_missing.ron

Failed in:
  NearAiChatProvider::new_with_flatten, previously in file /tmp/.tmptf9nIt/ironclaw/src/llm/nearai_chat.rs:65

--- failure method_parameter_count_changed: pub method parameter count changed ---

Description:
A publicly-visible method now takes a different number of parameters, not counting the receiver (self) parameter.
        ref: https://doc.rust-lang.org/cargo/reference/semver.html#fn-change-arity
       impl: https://github.com/obi1kenobi/cargo-semver-checks/tree/v0.46.0/src/lints/method_parameter_count_changed.ron

Failed in:
  ironclaw::tools::builder::LlmSoftwareBuilder::new now takes 3 parameters instead of 4, in /tmp/.tmpdcsAfG/ironclaw/src/tools/builder/core.rs:258
  ironclaw::tools::LlmSoftwareBuilder::new now takes 3 parameters instead of 4, in /tmp/.tmpdcsAfG/ironclaw/src/tools/builder/core.rs:258
  ironclaw::tools::ToolRegistry::register_builder_tool now takes 2 parameters instead of 3, in /tmp/.tmpdcsAfG/ironclaw/src/tools/registry.rs:533
  ironclaw::prelude::ToolRegistry::register_builder_tool now takes 2 parameters instead of 3, in /tmp/.tmpdcsAfG/ironclaw/src/tools/registry.rs:533
  ironclaw::agent::compaction::ContextCompactor::new now takes 1 parameters instead of 2, in /tmp/.tmpdcsAfG/ironclaw/src/agent/compaction.rs:40
  ironclaw::agent::ContextCompactor::new now takes 1 parameters instead of 2, in /tmp/.tmpdcsAfG/ironclaw/src/agent/compaction.rs:40
  ironclaw::agent::cost_guard::CostGuard::record_llm_call now takes 8 parameters instead of 4, in /tmp/.tmpdcsAfG/ironclaw/src/agent/cost_guard.rs:165
  ironclaw::agent::HeartbeatRunner::new now takes 4 parameters instead of 5, in /tmp/.tmpdcsAfG/ironclaw/src/agent/heartbeat.rs:140
  ironclaw::agent::routine_engine::RoutineEngine::fire_manual now takes 2 parameters instead of 1, in /tmp/.tmpdcsAfG/ironclaw/src/agent/routine_engine.rs:187
  ironclaw::agent::RoutineEngine::fire_manual now takes 2 parameters instead of 1, in /tmp/.tmpdcsAfG/ironclaw/src/agent/routine_engine.rs:187
  ironclaw::llm::Reasoning::new now takes 1 parameters instead of 2, in /tmp/.tmpdcsAfG/ironclaw/src/llm/reasoning.rs:362
  ironclaw::channels::wasm::WasmChannel::call_on_respond now takes 5 parameters instead of 4, in /tmp/.tmpdcsAfG/ironclaw/src/channels/wasm/wrapper.rs:1376

--- failure struct_missing: pub struct removed or renamed ---

Description:
A publicly-visible struct cannot be imported by its prior path. A `pub use` may have been removed, or the struct itself may have been renamed or removed entirely.
        ref: https://doc.rust-lang.org/cargo/reference/semver.html#item-remove
       impl: https://github.com/obi1kenobi/cargo-semver-checks/tree/v0.46.0/src/lints/struct_missing.ron

Failed in:
  struct ironclaw::config::TinfoilConfig, previously in file /tmp/.tmptf9nIt/ironclaw/src/config/llm.rs:118
  struct ironclaw::config::OpenAiCompatibleConfig, previously in file /tmp/.tmptf9nIt/ironclaw/src/config/llm.rs:107
  struct ironclaw::config::OllamaConfig, previously in file /tmp/.tmptf9nIt/ironclaw/src/config/llm.rs:100
  struct ironclaw::config::OpenAiDirectConfig, previously in file /tmp/.tmptf9nIt/ironclaw/src/config/llm.rs:82
  struct ironclaw::config::AnthropicDirectConfig, previously in file /tmp/.tmptf9nIt/ironclaw/src/config/llm.rs:91

--- failure struct_pub_field_missing: pub struct's pub field removed or renamed ---

Description:
A publicly-visible struct has at least one public field that is no longer available under its prior name. It may have been renamed or removed entirely.
        ref: https://doc.rust-lang.org/cargo/reference/semver.html#item-remove
       impl: https://github.com/obi1kenobi/cargo-semver-checks/tree/v0.46.0/src/lints/struct_pub_field_missing.ron

Failed in:
  field retention_days of struct HygieneConfig, previously in file /tmp/.tmptf9nIt/ironclaw/src/workspace/hygiene.rs:43
  field openai of struct LlmConfig, previously in file /tmp/.tmptf9nIt/ironclaw/src/config/llm.rs:134
  field anthropic of struct LlmConfig, previously in file /tmp/.tmptf9nIt/ironclaw/src/config/llm.rs:136
  field ollama of struct LlmConfig, previously in file /tmp/.tmptf9nIt/ironclaw/src/config/llm.rs:138
  field openai_compatible of struct LlmConfig, previously in file /tmp/.tmptf9nIt/ironclaw/src/config/llm.rs:140
  field tinfoil of struct LlmConfig, previously in file /tmp/.tmptf9nIt/ironclaw/src/config/llm.rs:142
  field retention_days of struct HygieneConfig, previously in file /tmp/.tmptf9nIt/ironclaw/src/config/hygiene.rs:14
  field auth_base_url of struct NearAiConfig, previously in file /tmp/.tmptf9nIt/ironclaw/src/config/llm.rs:157
  field session_path of struct NearAiConfig, previously in file /tmp/.tmptf9nIt/ironclaw/src/config/llm.rs:159

--- failure trait_method_added: pub trait method added ---

Description:
A non-sealed public trait added a new method without a default implementation, which breaks downstream implementations of the trait
        ref: https://doc.rust-lang.org/cargo/reference/semver.html#trait-new-item-no-default
       impl: https://github.com/obi1kenobi/cargo-semver-checks/tree/v0.46.0/src/lints/trait_method_added.ron

Failed in:
  trait method ironclaw::db::ConversationStore::list_conversations_all_channels in file /tmp/.tmpdcsAfG/ironclaw/src/db/mod.rs:186
  trait method ironclaw::db::ConversationStore::get_or_create_routine_conversation in file /tmp/.tmpdcsAfG/ironclaw/src/db/mod.rs:191
  trait method ironclaw::db::ConversationStore::get_or_create_heartbeat_conversation in file /tmp/.tmpdcsAfG/ironclaw/src/db/mod.rs:197
Changelog

0.17.0 - 2026-03-10

Added

  • persist user_id in save_job and expose job_id on routine runs (#709)
  • (ci) chained promotion PRs with multi-agent Claude review (#776)
  • add background sandbox reaper for orphaned Docker containers (#634)
  • (wasm) lazy schema injection on WASM tool errors (#638)
  • add AWS Bedrock LLM provider via native Converse API (#713)
  • full image support across all channels (#725)
  • (skills) exclude_keywords veto in skill activation scoring (#688)
  • (mcp) transport abstraction, stdio/UDS transports, and OAuth fixes (#721)
  • add PID-based gateway lock to prevent multiple instances (#717)
  • configurable LLM request timeout via LLM_REQUEST_TIMEOUT_SECS (#615) (#630)
  • (timezone) add timezone-aware session context (#671)
  • (setup) Anthropic OAuth onboarding with setup-token support (#384)
  • (llm) add Google Gemini, AWS Bedrock, io.net, Mistral, Yandex, and Cloudflare WS AI providers (#676)
  • unified thread model for web gateway (#607)
  • WASM channel attachments with LLM pipeline integration (#596)
  • enable Anthropic prompt caching via automatic cache_control injection (#660)
  • (routines) approval context for autonomous job execution (#577)
  • (llm) declarative provider registry (#618)
  • (gateway) show IronClaw version in status popover [skip-regression-check] (#636)
  • Wire memory hygiene retention policy into heartbeat loop (#629)

Fixed

  • (ci) run fmt + clippy on staging PRs, skip Windows clippy [skip-regression-check] (#802)
  • (ci) clean up staging pipeline — remove hacks, skip redundant checks [skip-regression-check] (#794)
  • (ci) secrets can't be used in step if conditions [skip-regression-check] (#787)
  • prevent irreversible context loss when compaction archive write fails (#754)
  • button styles (#637)
  • (mcp) JSON-RPC spec compliance — flexible id, correct notification format (#685)
  • preserve tool-call history across thread hydration (#568) (#670)
  • CLI commands ignore runtime DATABASE_BACKEND when both features compiled (#740)
  • (web) prevent fetch error when hostname is an IP address in TEE check (#672)
  • add timezone conversion support to time tool (#687)
  • standardize libSQL timestamps as RFC 3339 UTC (#683)
  • (docker) bind postgres to localhost only (#686)
  • (repl) skip /quit on EOF when stdin is not a TTY (#724)
  • (web) prevent Enter key from sending message during IME composition (#715)
  • (config) init_secrets no longer overwrites entire config (#726)
  • (cli) status command ignores config.toml and settings.json (#354) (#734)
  • (setup) preserve model name when re-running onboarding with same provider (#600) (#694)
  • (setup) initialize secrets crypto for env-var security option (#666) (#706)
  • persist /model selection across restarts (#707)
  • (routines) resolve message tool channel/target from per-job metadata (#708)
  • sanitize HTML error bodies from MCP servers to prevent web UI white screen (#263) (#656)
  • prevent Instant duration overflow on Windows (#657) (#664)
  • enable libsql remote + tls features for Turso cloud sync (#587)
  • (tests) replace hardcoded /tmp paths with tempdir + add 300 unit tests (#659)
  • (llm) nudge LLM when it expresses tool intent without calling tools (#653)
  • (llm) report zero cost for OpenRouter free-tier models (#463) (#613)
  • reliable network tests and improved tool error messages (#626)
  • (wasm) use per-engine cache dirs on Windows to avoid file lock error (#624)
  • (libsql) support flexible embedding dimensions (#534)

Other

  • Restructure CLAUDE.md into modular rules + add pr-shepherd command (#750)
  • make src/llm/ self-contained for crate extraction (#767)
  • add simplified Chinese (zh-CN) README translation (#488)
  • (job) cover job tool validation and state transitions (#681)
  • (agent) wire TestRig job tools through the scheduler (#716)
  • Fix single-message mode to exit after one turn when background channels are enabled (#719)
  • remove dead code (#648) (#703)
  • add reviewer-feedback guardrails (CLAUDE.md, pre-commit hook, skill) (#665)
  • update WASM artifact SHA256 checksums [skip ci] (#631)
  • add explanatory comments to coverage workflow (#610)
  • build system prompt once per turn, skip tools on force-text (#583)
  • add comprehensive subdirectory CLAUDE.md files and update root (#589)
  • Improve test infrastructure: StubChannel, gateway helpers, security tests, search edge cases (#623)
  • (workspace) regression test for document_path in search results (#509)

Added

  • AWS Bedrock LLM provider via native Converse API with IAM and SSO auth support (feature-gated: --features bedrock)


This PR was generated with release-plz.

@github-actions
github-actions Bot force-pushed the release-plz-2026-03-06T20-52-24Z branch 3 times, most recently from adae36c to caa61ee Compare March 6, 2026 23:37
@github-actions
github-actions Bot force-pushed the release-plz-2026-03-06T20-52-24Z branch 10 times, most recently from d90abdf to aa2eb5f Compare March 7, 2026 09:20
@github-actions
github-actions Bot force-pushed the release-plz-2026-03-06T20-52-24Z branch 14 times, most recently from f8a02be to 05c98dc Compare March 8, 2026 08:41
@github-actions
github-actions Bot force-pushed the release-plz-2026-03-06T20-52-24Z branch 4 times, most recently from a0f1644 to 7734a0f Compare March 9, 2026 07:18
zmanian
zmanian previously approved these changes Mar 9, 2026

@zmanian zmanian left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Clean automated release PR. Version bump 0.16.1 -> 0.17.0 is correct for the breaking API changes detected by cargo-semver-checks. Changelog is comprehensive (~50 PRs referenced).

Minor: Duplicate "Added" section at the bottom -- the Bedrock entry appears twice (once in main Added section as #713, again as standalone "Added" block). Known release-plz artifact. Cosmetic only.

@github-actions
github-actions Bot force-pushed the release-plz-2026-03-06T20-52-24Z branch 3 times, most recently from 12b763e to 701d198 Compare March 9, 2026 17:04
zmanian
zmanian previously approved these changes Mar 9, 2026

@zmanian zmanian left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Release PR Review: v0.17.0

Version bump: OK

  • 0.16.1 -> 0.17.0 is correct. Minor version bump is appropriate given the extensive breaking API changes detected by cargo-semver-checks (~60+ breaking field additions, removed structs, changed method signatures, new trait methods without defaults).

Changed files: OK

Only 3 files changed (CHANGELOG.md, Cargo.toml, Cargo.lock) -- pure release bookkeeping. No code changes to review.

Changelog: comprehensive

  • ~50 PRs referenced spanning features (Bedrock, image support, timezone awareness, MCP transports, declarative provider registry, prompt caching), fixes (Windows compat, libSQL timestamps, IME composition, config overwrites), and infrastructure (300+ new tests, guardrails, dead code removal).
  • All referenced PRs (#688, #713, #717, #721, #724, #725, #726, #734, #740, etc.) are confirmed merged to main.

Known cosmetic issue (carried forward from dismissed review)

Duplicate "Added" section at the bottom of the changelog -- the Bedrock entry (#713) appears in the main "Added" section and again as a standalone block. This is a known release-plz artifact and is cosmetic only.

One thing to note

The release branch is 1 commit behind main: PR #754 ("fix: prevent irreversible context loss when compaction archive write fails") was merged after the release branch was cut. This is a data-loss prevention fix. Consider whether to rebase the release branch to include it in v0.17.0, or ship as-is and include it in a v0.17.1 patch.

CI

No CI checks are reported on the release branch. Verify that CI has passed on main at the merge base before merging.

Approving -- this is a clean automated release PR. The only decision point is whether to pick up #754 before shipping.

@github-actions
github-actions Bot force-pushed the release-plz-2026-03-06T20-52-24Z branch 6 times, most recently from e091b7b to 957e6f9 Compare March 9, 2026 23:29
…-check] (#787)

GitHub Actions step-level `if:` doesn't have access to `secrets` context.
Replace `if: secrets.X != ''` with `continue-on-error: true` and let
the Set token step handle the fallback.

Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>
…cks [skip-regression-check] (#794)

- Remove continue-on-error from staging-ci.yml app token steps (secrets are configured)
- Skip test.yml and code_style.yml on PRs targeting staging (staging-ci.yml
  already runs tests before promoting, promotion PR gets full CI on main)
- Allow ironclaw-ci[bot] in Claude Code review for bot-created promotion PRs

Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
@github-actions
github-actions Bot force-pushed the release-plz-2026-03-06T20-52-24Z branch from f89c41d to 4530f0e Compare March 10, 2026 00:41
…egression-check] (#802)

- Remove branches:[main] filter from code_style.yml so it runs on all PRs
- Gate clippy-windows with `if: github.base_ref == 'main'` (skip on staging PRs)
- Update rollup job to allow skipped clippy-windows
- Simplify claude-review.yml to only trigger on labeled event (avoids duplicate runs)

Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
@github-actions
github-actions Bot force-pushed the release-plz-2026-03-06T20-52-24Z branch from 4530f0e to 516b7f2 Compare March 10, 2026 01:48
ilblackdragon and others added 2 commits March 10, 2026 01:51
…709)

* feat: persist worker events to DB and fix activity tab rendering

In-process Worker (used by Scheduler::dispatch_job) now persists events
via save_job_event at key execution points: plan creation, LLM
responses, tool_use, tool_result, and job completion/failure/stuck.
Event data shapes match the container worker format so the gateway
activity tab renders them correctly.

Frontend: tool_result errors now show a red X icon with danger styling
instead of a silent empty output. The result event falls back to the
error field when message is absent.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* feat: wire RoutineEngine into gateway for direct manual trigger firing

Replace the message-channel hack in routines_trigger_handler with a
direct call to RoutineEngine::fire_manual(), ensuring FullJob routines
dispatch correctly when triggered from the web UI. Inject the engine
into GatewayState from Agent::run after construction.

Also persists user_id in save_job for both PG and libSQL backends,
removes the source='sandbox' filter so all jobs are visible, and
exposes job_id on RoutineRunInfo for the frontend job link.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* fix: remove stale gateway_state argument from Agent::new test call sites

The gateway_state parameter was removed from Agent::new during rebase
(replaced by post-construction set_routine_engine_slot), but three test
call sites still passed the extra None argument.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* fix: address PR review — restore sandbox source filter, remove blank lines

- Revert removal of `source = 'sandbox'` filter in all SandboxStore
  queries (8 sites across PG and libSQL). Sandbox-specific APIs should
  stay scoped to sandbox jobs; unified job listing for the Jobs tab
  should use a separate query path.
- Remove extra blank lines in agent_loop.rs and worker.rs that caused
  formatting CI failure.

[skip-regression-check]

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* fix: address review — regenerate Cargo.lock, add user_id regression test

- Regenerate Cargo.lock from main's lockfile to eliminate dependency
  version downgrades (anyhow, syn, etc.) that were churn from rebase.
- Add regression test verifying user_id round-trips through save_job
  and get_job in the libSQL backend.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* style: remove trailing blank line in libsql jobs.rs

[skip-regression-check]

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* test: add Postgres-side regression test for user_id persistence in save_job

Mirrors the existing libSQL test (test_save_job_persists_user_id) for the
Postgres backend. Gated behind #[cfg(feature = "postgres")] + #[ignore]
since it requires a running PostgreSQL instance (integration tier).

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
@github-actions
github-actions Bot force-pushed the release-plz-2026-03-06T20-52-24Z branch from 516b7f2 to a9f7298 Compare March 10, 2026 01:57
@henrypark133
henrypark133 changed the base branch from main to staging March 10, 2026 02:32
@github-actions github-actions Bot closed this Mar 10, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants