Skip to content

Move building-rig-agents to rig 0.44 - #9

Merged
DenysMoskalenko merged 1 commit into
mainfrom
claude/skills-library-updates-a55394
Oct 12, 2026
Merged

DenysMoskalenko merged 1 commit into
mainfrom
claude/skills-library-updates-a55394

Conversation

@DenysMoskalenko

Copy link
Copy Markdown
Owner

Release audit of 12 October 2026, following maintenance/release-audit.md. Plugin 0.3.0 → 0.4.0.

Inventory

Item Pinned Current Bucket Outcome
rig / rig-core / rig-agent / rig-rmcp 0.43 0.44.0 (7 Oct) b + c migrated (below)
rmcp 2 3.5.1 hold rig-rmcp 0.44 still pins rmcp = "2"
opentelemetry set 0.32 / 0.33 / 0.39 0.33.1 / 0.34 / 0.42.1 hold reqwest-tracing 0.7.1 still has no opentelemetry_0_33 (TrueLayer/reqwest-middleware#288 open)
testcontainers 0.27 0.28.0 hold testcontainers-modules is still 0.15.0
NATS server 2.14-alpine 2.15.1 hold async-nats 0.50.0 has no server_2_15
otel collector contrib 0.161.0 0.162.0 a tag; 0.162.0 now has a multi-arch image; no breaking entry touches the otlp receiver or debug exporter
cargo-nextest recommended 0.9.146 0.9.148 a 0.9.147 was never finalized
astral-sh/setup-uv (repo CI) v10.2.0 v10.3.0 a adds an input only
scaffold lockfile - - a cargo update: hyper 1.12, uuid 1.28, tokio-util 0.7.20, aws-lc-rs 1.18.2, pest 2.9.3 (adds stacker/psm, dev-only via insta); 588 → 590 packages
Rust toolchain, other crates, tools, images, actions - - - already current

rig 0.44 in building-rig-agents

A compile probe at 0.44 broke 8 snippets (16 errors); the 65 untagged fragments and the prose were checked by hand against the 0.44 sources and the upstream 0.43 → 0.44 migration section. Every edit is at the line the change invalidates:

  • PromptResponse::output is a method; messages is a Vec.
  • PromptError::{Provider, Memory, MaxTurns, Cancelled}, now #[non_exhaustive]; StreamingError is gone, so stream items fail with PromptError (agent_error, sse_events, frame in AXUM-INTEGRATION).
  • Streaming: MultiTurnStreamItem::ToolResult, StreamEvent::Start { name }, tool-call arguments as fragments, stream_to_stdout returns the run's error, one chat span with gen_ai.request.stream.
  • Tools: DynamicTool::try_from(mcp_tool)?, agent.into_tool()?.
  • top_n returns named results; the in-memory store needs only Serialize.
  • Structured output: ExtractorBuilder::tool_choice removed, retries(usize), StructuredOutputError::{Prompt, Deserialization { output, error }}.
  • Media constructors audio_base64 / video_base64 / document_text / document_base64, and unsupported media becomes placeholder text.
  • Malformed tool arguments reach on_invalid_tool_call on both run paths; the default answers with an error result; Repair fails the run; new DisallowedByToolChoice reason; the per-run table gains max_consecutive_malformed_tool_calls and accept_unknown_finish_reasons.
  • Failed turns are a 500. A turn the provider ends in a content filter or an unknown finish reason, and malformed tool arguments that end the run, now fail as Provider(ProviderError::Response(..)) with no status. agent_error would have answered them 503 through its catch-all; its existing 500 arm now also matches ProviderError::Response and ProviderError::UnsupportedOption, since rig marks both not retryable and the house contract keeps 503 for a backend that is down. Provider outages still reach 503: Anthropic stream error events and OpenAI response.failed arrive as ProviderResponse. A test pins the content-filter case; the SKILL bullet and eval 1 say the same. Edge: an OpenAI Responses reply with status: failed in a 200 body (background mode) is a Response turn failure too, so it is now a 500.
  • Typed generation options. AGENTS-CORE gains a Reasoning and Caching section with a compiled snippet: .reasoning(Effort::High) (Anthropic output_config.effort, adaptive thinking where the model takes it), .cache(CacheRetention::Long) (one-hour cache_control), .on_unsupported(..), the default efforts (Opus 5.5 and Haiku 5.5 medium, other Claude models high) and how a refused option surfaces. This closes the effort gap from the 25 Sep prompt audit.
  • Description. ToolCallError, absent from rig 0.42–0.44, is replaced by "max turns limit errors (MaxTurnsError)", which matches 0.44's reached the max turns limit of N; triggering prompt 9 pastes that message.
  • Thinking-binding models. Anthropic's docs list Fable 5.1, Opus 5.5, Sonnet 5.5 and Haiku 5.5; the skill named only the first two. rig 0.44's catalog has no Haiku 5.5, so rig sends no block_binding there; Hooks and Memory say so.
  • Durable memory: rig 0.44 cannot read 0.43 assistant turns holding tool calls or reasoning, so the Memory reference says to clear or migrate those rows before upgrading.
  • On Anthropic's own API rig 0.44 asks for context-bound thinking blocks to be dropped instead of failing the request (thinking.block_binding, adaptive thinking): the 400 warnings in Hooks and Memory say so.
  • VERSION-DRIFT gains a 0.43 → 0.44 table and behaviour list (failed turns, argument fragments, eager_input_streaming, preserve_order, persisted history and AgentRun format).
  • Eval file updated to the 0.44 names.

Follow-ups (not in this pull request)

  • Behaviour evals for building-rig-agents were not run (owner decision); AGENTS.md now says to ask for eval approval at the start of a session.
  • rig 0.44's catalog marks claude-opus-5 as binds_context, which Anthropic's docs do not list; rig sends block_binding there. Harmless as far as the skill teaches; worth an upstream issue.

Verification

  • python3 scripts/validate_skills.py --strict --base main: 0 errors (9 pre-existing budget warnings).
  • make check with Docker: every snippet compiles, clippy -D warnings clean, 70/70 snippet tests pass (including the new content-filter test).
  • Scaffold: make check, make test (14/14), cargo deny check (advisories, bans, licenses, sources ok); root prek run --all-files ok.
  • Reviews: three source-backed validators (API accuracy, migration completeness, repository conventions), a fresh-eye review, ponytail-review and /code-review xhigh; each finding checked against the rig 0.44 source before it was applied or rejected.
  • Trigger-only eval for building-rig-agents (with-plugin arm, 2 runs per case, Opus 5.5): should-load 9/9 cases, 18/18 runs; should-not-load 18/18 runs kept building-rig-agents out (one skip-03 run missed firing rust-redis, a rust-redis recall miss). Cost $11.75.
  • A second round of reviewers (rig-source accuracy, fresh-eye) on the post-review changes; each finding checked against the rig 0.44 source or Anthropic's docs before it was applied.
  • Not run: the throwaway-service exercise (the scaffold changed only a comment, an image tag, nextest's recommended and the lockfile) and the behaviour evals.

Release audit of 12 October 2026 per maintenance/release-audit.md;
plugin and every manifest go from 0.3.0 to 0.4.0.

- rig 0.44: PromptResponse::output() is a method, PromptError variants
  renamed (Provider, Memory, MaxTurns, Cancelled) and non_exhaustive,
  StreamingError removed, DynamicTool::try_from and into_tool() return
  a Result, top_n returns named results, ExtractorBuilder::tool_choice
  removed, new media constructors. VERSION-DRIFT gains a 0.43 -> 0.44
  table and behaviour list; every snippet and the evals use 0.44 names.
- A turn the provider filtered or ended with an unknown finish reason,
  malformed tool arguments that end the run, and an unsupported
  generation option are answered 500 by agent_error, not 503: rig marks
  them not retryable. Outages stay 503. A test pins the filtered turn.
- AGENTS-CORE teaches the typed generation options: .reasoning(Effort),
  .cache(CacheRetention), .on_unsupported(..), default efforts.
- Description: ToolCallError (gone since before 0.42) replaced by the
  0.44 max turns wording; a triggering prompt pastes the 0.44 message.
- Thinking-binding warnings name Fable 5.1, Opus 5.5, Sonnet 5.5 and
  Haiku 5.5 per Anthropic's docs; rig sends no block_binding for Haiku
  5.5, which its catalog lacks. Hooks: malformed arguments reach
  on_invalid_tool_call on both run paths, Repair fails like Fail.
- AGENTS.md: ask for eval approval at the start of a session.
- otel collector 0.162.0, nextest recommended 0.9.148, setup-uv
  v10.3.0, refreshed scaffold lockfile.
- Held: rmcp 3 (rig-rmcp 0.44 pins 2), the opentelemetry 0.33 set,
  testcontainers 0.28, NATS 2.15.

Signed-off-by: Denys Moskalenko <denysmoskalenko11@gmail.com>
@DenysMoskalenko
DenysMoskalenko merged commit 8e2a3bc into main Oct 12, 2026
1 check passed
@DenysMoskalenko
DenysMoskalenko deleted the claude/skills-library-updates-a55394 branch October 12, 2026 19:05
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.

1 participant