## 0xPlaygrounds/rig — v0.42.0…v0.43.0

_123 commits._

### Features
- **feat(providers): base support for the new Anthropic and OpenAI models (#2632)** (9991428)
- **feat(gemini): automatic explicit caching for long runs (#2628)** (3456884)
- **feat(rig-candle): local YOLOv8 pose estimation (#2615)** (0887455)
- **feat(cassette)!: refuse account failures and stored state, keep failed attempts, and move recording tooling into xtask (#2587)** (7762052)
- **feat(core)!: signature slots, upstream reasoning provenance and the legacy fixture corpus (#2580)** (679edbe)
- **feat(core)!: stateful handle round-trips and reasoning provenance (#2578)** (1a7a27a)
- **feat(cassette)!: record provider-opaque fields verbatim (#2577)** (c1080cd)
- **feat(cassette): skip non-recordable tests during live re-recording (#2556)** (53cb5e1)
- **feat: initial typesafeai provider (jev) (#2550)** (2d16c1b)
- **feat(rig-ecs)!: the ECS contract under a long tool loop on five wires, with tool results as data, cached utterance views, bindings as data and runs as commands (#2516)** (6828097)
- **feat(rig-ecs): explicit stream delivery — StreamItemsDelivered, two consumers, five-wire matrix (#2515)** (4ded561)
- **feat(ecs): add durable tool-turn checkpoint boundaries (#2514)** (d7e4636)
- **feat(ecs): expose typed content parts and shared binary assets (#2513)** (2cc4c89)
- **feat!: the effect-bus critical path — one protocol, one channel, typed views (#2443)** (bbeeb84)
- **feat!: finish the data layer — blessed ModelTurn conversion, counter/newtype ids, owned dispatch, serde across the protocol surface (#2419)** (475cfdd)
- **feat!: event-sourced hook state — RunEntry log on AgentRun replaces the durable Scratchpad snapshot (#2408)** (ef2fea7)
- **feat!: transport middleware + run lifecycle hooks (on_run_start/on_run_settled, durable Scratchpad) (#2407)** (5210805)
- **feat!: lower ModelHandle and the erased tool set into rig-core; pure rig_run::prepare_request (#2405)** (2b271b6)
- **feat!: rig-run — extract the sans-IO run protocol out of rig-agent (RunSpec, TurnTools, transcript validator, counter RunId) (#2403)** (4be9599)
- **feat!: BoxedHttpClient — an erased HTTP transport; Client<Ext> defaults to it (#2401)** (b75850e)
- **feat(agent): sync, retrieval-free registry reads — ToolServerHandle::{snapshot, static_tool_defs, toolset}, public ToolRegistrySnapshot, ToolSet: Clone (#2400)** (330d897)
- **feat(agent): run_channel/RunEvents, static Send+Sync pins, bevy_tasks example, dependency-graph guard (#2399)** (c76a1f8)
- **feat!: rig-rmcp — move MCP tool support out of rig-agent into its own crate (#2398)** (6016050)
- **feat!: rig-reqwest — cut the bundled transport into its own crate; rig-core has no default transport and no reqwest/tokio (#2397)** (d6f6933)
- **feat(telemetry): gen_ai spans for every non-completion modality, plus a recorded embedding matrix for all seven keyed providers (#2390)** (0867f56)
- **feat!: type-erasure sweep part 2 — normalize embedding/rerank responses, erase rerank and image-embedding models, move ModelLister construction to a hook (#2389)** (103fbdf)
- **feat!: finish the type-erasure sweep — normalize transcription/image/audio responses, move construction off every model trait, erase the embedding model in vector stores (#2385)** (455abbb)
- **feat(llamacpp)!: replace the llamafile provider, merge its two suites, and exhaust the matrix (#2382)** (6ef7402)
- **feat(gemini): explicit context caching, and three usage-mapping bugs the cache audit found (#2375)** (65b4508)

### Fixes
- **fix(openai): preserve assistant message phase across streamed and multi-message turns (#2639)** (768a91c)
- **fix: pre-0.43 release fixes (docs.rs, opt-in rig::cassette, rust-version, READMEs) (#2638)** (9cecb8b)
- **fix(openai): preserve reasoning and citations across response decoding (#2636)** (f46ad29)
- **fix(usage)!: one meaning for Usage on every provider (#2631)** (3ead77e)
- **fix: publish the facade, not the repository — and stop asking for dependencies nothing uses (#2563)** (f6fa591)
- **fix: repair eleven downstream consumer conformance defects (#2561)** (c217a66)
- **fix(core)!: redact resolved credentials and encoded request diagnostics (#2546)** (ee4be8b)
- **fix: honour the WASM bounds in every vector store (#2545)** (10ecfd8)
- **fix: recover from malformed streamed tool arguments, preserve Responses compaction/phase, drop the tool_macro alias (#2532)** (e68cec8)
- **fix: lenient Responses metadata decode (top_p) and valid rig-postgres search SQL (#2531)** (4486dad)
- **fix: Responses strict:false, Anthropic 128k/Claude 5, and stale Groq/Moonshot/Ollama constants (#2530)** (77d3f62)
- **fix: the parity gaps the ECS matrices found, closed — Gemini's block is a refusal, a truncated reasoning-only turn commits nothing, images ride the regrouped stream (#2509) (#2510)** (387abee)
- **fix(rig-ecs): a Retry written on an empty turn asks again instead of settling (#2504)** (a6897db)
- **fix(core): restore the observe scrub helpers; a truncated stream is retryable (#2502)** (3c43463)
- **fix(gemini, rig-ecs): retry transient provider failures inside the run; block_reason=OTHER is not a refusal (#2500)** (724dce2)
- **fix!: the merge review's defects on main, each pinned by a matrix (#2499)** (58124a5)
- **fix(rig-cassette): restore start_at and checkpoint_recording for consumers that stage candidates (#2498)** (896bb8b)
- **fix(rig-reqwest): default-transport constructors return an error instead of panicking when the client cannot be built (#2471)** (18c95c9)
- **fix(openai-compatible): let llama.cpp receive an image in a tool result, plus two cassette-hygiene bugs (#2380)** (23f1cf6)
- **fix(gemini): six cachedContents defects the follow-up audit found (#2379)** (80cdde1)

### Backend
- **feat!(core, ecs): one provider vocabulary, lossless configuration (#2548)** (9b94481)
- **Unify every provider onto one wire model (#2538)** (806710e)
- **feat!(core): Usage counters are Option<u64> — an absent counter is representable (#2535)** (49d2fff)
- **refactor!(ecs, providers): delete the ECS message cache, the second task/handler storage, and test-only wire→core conversions (#2534)** (863d31c)
- **Revise agent guidelines and error handling rules (#2533)** (2e275ec)
- **rig-ecs: a Bevy app — one pass per update, tasks and handlers as components, one RunPhase, split systems, reflected checkpoint (#2529)** (a719e28)
- **Reduce test-suite compilation and duplicated fixtures (#2518)** (b004e10)

### Tests
- **test(caching): long-run cache coverage for realistic workloads on GPT-6 and Claude Opus 5 (#2633)** (68d8aad)
- **test(cache): long-run cache proof and one cache cost report across providers (#2629)** (8336fec)
- **test(cassette): guard history round-trips and fix Groq and Ollama replay (#2576)** (6d6b514)
- **test(cassette): cover long native ECS tasks and cache accounting (#2573)** (ba9a878)
- **test(ecs): pin every native cell to its own world golden (#2572)** (34bc9e8)
- **test(ecs): give cassette harness IO an independent runtime (#2520)** (5f86a42)
- **test(ecs): images through record, history, tool loop, memory and scene resume on four wires (#2512)** (daacca8)
- **test(ecs): pin reasoning across six provider wires (#2511)** (234626e)
- **test(ecs): the ECS contract under faults on six wires — setup, retryable statuses, truncated and error-bearing streams, refusals, failing tools, stops, scenes (#2503)** (ef2d240)
- **test(ecs): the ECS contract on five more wires — OpenAI Chat, OpenAI Responses, Gemini, DeepSeek, Doubleword, Venice (#2501)** (258377b)
- **test(llamacpp, llamafile): bring all 53 ignored llama.cpp tests under recorded coverage (#2381)** (c08735c)
- **test(cache): a prompt-cache verification harness, and the two cache bugs it found (#2374)** (841d275)

### Docs
- **docs: drop the issue-first, small-PR, and no-draft rules (#2602)** (42f4e06)
- **docs: finish the comment cleanup across the workspace (#2575)** (510e89a)
- **docs: simplify production comments and preserve contract rationale (#2568)** (0ec055c)
- **docs: reduce agent context churn and verification retries (#2547)** (0c79322)
- **docs: shorten and de-duplicate agent-facing documentation (#2527)** (40dbf84)
- **docs: use minimal local checks and CI-first PR verification (#2519)** (305cf2a)

### Chore
- **chore: release v0.43.0 (#2360)** (654567e)
- **refactor!: replace NonEmpty<T> with Vec<T>, check empty turns at the request boundary (#2640)** (063bcf0)
- **refactor(rig-core)!: the driver alone writes provider, request id and raw (#2626)** (b1b29ce)
- **refactor!: archimpro — one typed decoder and one fold per wire (#2617)** (49ad361)
- **refactor(rig-core)!: a smaller model layer (Operation, Fold, Wire, Decoder, Transport) (#2613)** (54fdadb)
- **refactor!: provider clients own their transport; conversations use plain values (#2611)** (5fe9269)
- **chore: faster local iteration (lean dev profile, local nextest profile) (#2610)** (3e40553)
- **refactor!: remove duplicated tool and error surface from rig-core (#2589)** (60a4766)
- **refactor(rig-core)!: classify every request-building failure as a request error (#2586)** (6800e97)
- **refactor(rig-core)!: standardize modality request builders and unify GenAI spans (#2583)** (8d7852a)
- **refactor(rig-core)!: unify provider operation errors (#2582)** (f4e7086)
- **refactor(tests): stop comparing effect logs across runtimes in the ECS parity harness (#2571)** (86595ee)
- **refactor(providers): converge leftover provider mirrors onto shared owners (#2569)** (4c099fe)
- **refactor!: establish host-owned assembly and execution lifetimes (#2567)** (2856082)
- **refactor(ecs)!: use one reflected content payload component (#2559)** (60a638e)
- **refactor!: remove backwards-compatibility shims and rename aliases (#2557)** (a5624f3)
- **refactor!: consolidate record/replay in rig-cassette (#2552)** (63596db)
- **refactor(tests): one raw-capture execution layer, one contract per wire format (#2551)** (0e88f66)
- **refactor(tests): one cassette response-header reader, one raw-capture harness (#2549)** (3cc566d)
- **refactor!: retire five clippy heuristics and unbox everything they made us write (#2536)** (6389a3b)
- **refactor: delete the reflect and replay features and the source-shape guards (#2523)** (2355e09)
- **refactor(rig-ecs): delete duplicated scaffolding, lists and wrappers (#2522)** (9da5b33)
- **ci: the slow lanes run off the queue and on main; the ECS parity goldens as a named lane (#2508)** (6a6d63f)
- **chore(cassette): make rig-cassette publishable (#2497)** (dc52ec5)
- **refactor!: collapse the client machinery to Provider + Has* (#2441)** (d9ed455)
- **refactor!: provider types default to the erased transport; delete the alias tree (#2440)** (931559e)
- **refactor!: one run type in rig-agent (#2438)** (8c261a9)
- **refactor!: one response hook and one post-turn body in rig-agent (#2436)** (3e86e63)
- **chore: freeze CHANGELOG.md and MIGRATING.md outside release PRs (#2435)** (fae643b)
- **chore: forbid inline test modules via cargo xtask check-test-layout (#2434)** (0f38b3e)
- **chore: move every inline test module to a sibling file (#2433)** (066804a)
- **refactor!: dissolve rig-run — the run vocabulary is rig-core's, AgentRun is rig_agent::run (#2432)** (270bda4)
- **refactor: ownership audit themes 2–7 — 'static precision and clone hygiene; themes 3/5/6/7 dispositioned (#2431)** (61535f6)
- **refactor: bound hygiene — raw Send/Sync in wasm-built code becomes precise (#2430)** (9353be5)
- **refactor!: remove every backwards-compatibility shim (#2429)** (36eebad)
- **refactor!: rig-reqwest API and hygiene cleanups (#2428)** (0e9d01b)
- **refactor: generate the provider alias tree from rig-core's rustdoc output (#2427)** (ee86a21)
- **refactor!: make websockets transport-agnostic — protocol to rig-core, socket to rig-tungstenite (#2426)** (cfb848b)
- **refactor!: move the Discord integration out of the workspace (#2418)** (7fd476a)
- **refactor: ownership sweep round 4 — avoidable clones, dead public items, is_false dedup (#2416)** (235e383)
- **refactor: idiomatic Rust sweep, round 3 (#2411)** (b5dafc0)
- **refactor: idiomatic Rust sweep, round 2 (#2410)** (f3cdef4)
- **refactor: idiomatic Rust sweep across the workspace (#2409)** (a48b7d3)
- **refactor!: confine reqwest to one transport module; auth flows go through HttpClientExt (#2396)** (ce2652e)
- **refactor!: purge reqwest types from rig-core's public error surface (#2395)** (9d32de0)
- **refactor!: kill direct tokio sync coupling in hot paths (#2394)** (0e08d9d)
- **refactor!: ownership audit round 2 — borrow-shaped telemetry getters, slice-shaped embed seams, Copy usage types, dead Default/Debug transport bounds (#2392)** (abe338a)
- **refactor!: ownership audit — borrow-shaped signatures, dead clones, clone_from in accumulators, minimal bounds (#2391)** (7df37d1)
- **chore(release): set release_always back to false (#2372)** (8844096)

_Recap by [Repo Wrapped](https://repowrapped.com/gh/0xPlaygrounds/rig?utm_source=github-action)._