Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 4 additions & 4 deletions .claude-plugin/marketplace.json
Original file line number Diff line number Diff line change
Expand Up @@ -6,14 +6,14 @@
},
"metadata": {
"description": "Professional Rust development plugin: specialist agents with LSP integration, team orchestration, and peer-to-peer communication",
"version": "1.48.0"
"version": "1.49.0"
},
"plugins": [
{
"name": "rust-agents",
"source": "./rust-code",
"description": "Rust development agents and skills for Claude Code: 15 specialist agents (architect, developer, testing, performance, security, reviewer, CI/CD, debugger, critic, SDD, live-tester, tech-writer, researcher, architecture and security analysts), team-develop and team-debug agent-team orchestration, a read-only continuous-improvement cycle that also runs headless, Rust 1.89-1.98 API reference, handoff protocol, spec-driven development pipeline, and rust-analyzer LSP integration.",
"version": "1.48.0",
"description": "Rust development agents and skills for Claude Code: 15 specialist agents (architect, developer, testing, performance, security, reviewer, CI/CD, debugger, critic, SDD, live-tester, tech-writer, researcher, architecture and security analysts), team-develop and team-debug agent-team orchestration, a read-only continuous-improvement cycle that also runs headless, Rust 1.89-1.99 API reference, handoff protocol, spec-driven development pipeline, and rust-analyzer LSP integration.",
"version": "1.49.0",
"author": {
"name": "Andrei G",
"email": "andrei.g@my.com"
Expand Down Expand Up @@ -56,7 +56,7 @@
"spec-driven-development",
"modern-apis",
"rust-1-89",
"rust-1-98"
"rust-1-99"
],
"category": "development",
"tags": [
Expand Down
4 changes: 2 additions & 2 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ This repository contains plugins that extend Claude Code's capabilities with spe

### Rust Agents Plugin (`rust-code`)

[![Version](https://img.shields.io/badge/version-1.48.0-blue)](./rust-code)
[![Version](https://img.shields.io/badge/version-1.49.0-blue)](./rust-code)
[![License](https://img.shields.io/badge/license-MIT-green)](./rust-code/LICENSE)

A comprehensive collection of specialized Rust development agents covering the entire Rust development lifecycle.
Expand Down Expand Up @@ -38,7 +38,7 @@ A comprehensive collection of specialized Rust development agents covering the e
- **sdd** — Spec-Driven Development workflow
- **spec-from-stream** — Business requirements from stream-of-consciousness (BRD/SRS/NFR)
- **fast-yaml** — YAML validation, formatting, and conversion
- **rust-modern-apis** — Lookup table for stable Rust APIs added in 1.89–1.98
- **rust-modern-apis** — Lookup table for stable Rust APIs added in 1.89–1.99
- rust-analyzer LSP integration for real-time code intelligence
- Proactive triggers for automatic agent selection
- Rust Edition 2024 support
Expand Down
6 changes: 3 additions & 3 deletions rust-code/.claude-plugin/plugin.json
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
{
"name": "rust-agents",
"version": "1.48.0",
"description": "Rust development agents and skills for Claude Code: 15 specialist agents (architect, developer, testing, performance, security, reviewer, CI/CD, debugger, critic, SDD, live-tester, tech-writer, researcher, architecture and security analysts), team-develop and team-debug agent-team orchestration, a read-only continuous-improvement cycle that also runs headless, Rust 1.89-1.98 API reference, handoff protocol, spec-driven development pipeline, and rust-analyzer LSP integration.",
"version": "1.49.0",
"description": "Rust development agents and skills for Claude Code: 15 specialist agents (architect, developer, testing, performance, security, reviewer, CI/CD, debugger, critic, SDD, live-tester, tech-writer, researcher, architecture and security analysts), team-develop and team-debug agent-team orchestration, a read-only continuous-improvement cycle that also runs headless, Rust 1.89-1.99 API reference, handoff protocol, spec-driven development pipeline, and rust-analyzer LSP integration.",
"author": {
"name": "Andrei G",
"email": "andrei.g@my.com"
Expand Down Expand Up @@ -44,6 +44,6 @@
"spec-driven-development",
"modern-apis",
"rust-1-89",
"rust-1-98"
"rust-1-99"
]
}
10 changes: 10 additions & 0 deletions rust-code/CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,16 @@ All notable changes to this project will be documented in this file.
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).

## [1.49.0] - 2026-10-01

### Added

- `rust-modern-apis`: Rust 1.99 coverage — changelog section, trigger-table and MSRV-gate entries, and reference entries for `String::from_utf8_lossy_owned`/`into_utf8_lossy`, `fs::set_times`, `Box::into_non_null`, `Vec::into_parts`, `VecDeque::retain_back`, `IntoIterator for Box<[T; N]>`, raw-pointer layout queries, and 1.99 Cargo changes. (#12)

### Changed

- Skill coverage range extended to 1.89–1.99 across README badges, `rust-arch-analyst` startup protocol, plugin and marketplace manifests; version bumped to `1.49.0`. (#12)

## [1.48.0] - 2026-09-29

### Changed
Expand Down
6 changes: 3 additions & 3 deletions rust-code/README.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
# Rust Agents Plugin

[![Version](https://img.shields.io/badge/version-1.48.0-blue)](https://github.com/bug-ops/claude-plugins)
[![Version](https://img.shields.io/badge/version-1.49.0-blue)](https://github.com/bug-ops/claude-plugins)
[![License](https://img.shields.io/badge/license-MIT-green)](LICENSE)
[![Rust Edition](https://img.shields.io/badge/rust-Edition%202024-orange)](https://doc.rust-lang.org/edition-guide/rust-2024/)

Expand Down Expand Up @@ -28,7 +28,7 @@ A comprehensive collection of specialized Rust development agents for Claude Cod
- **sdd** — Full-cycle Spec-Driven Development: BRD/SRS/NFR → spec/plan/tasks
- **spec-from-stream** — Business requirements from stream-of-consciousness input
- **fast-yaml** — YAML validation, formatting, and conversion
- **rust-modern-apis** — Lookup table for stable Rust APIs added in 1.89–1.98; loaded explicitly at session startup by rust-developer and rust-code-reviewer
- **rust-modern-apis** — Lookup table for stable Rust APIs added in 1.89–1.99; loaded explicitly at session startup by rust-developer and rust-code-reviewer
- **rust-analyzer LSP integration** for real-time code intelligence with Claude
- **Proactive triggers** — agents are suggested automatically based on your task
- **Rust Edition 2024** support with modern tooling
Expand Down Expand Up @@ -554,7 +554,7 @@ YAML validation, formatting, linting, and JSON↔YAML conversion via the `fy` CL

### rust-modern-apis

Reference lookup table for stable Rust APIs added in versions 1.89–1.98 (August 2025 – August 2026).
Reference lookup table for stable Rust APIs added in versions 1.89–1.99 (August 2025 – October 2026).

**Active by default in**: `rust-developer`, `rust-code-reviewer`

Expand Down
2 changes: 1 addition & 1 deletion rust-code/agents/15-rust-arch-analyst.md
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@ You are not designing new architecture — you are auditing what exists. Every f

# Startup Protocol (MANDATORY)

1. Call `Skill(skill: "rust-agents:rust-modern-apis")` to load awareness of stable Rust APIs added in 1.89–1.98.
1. Call `Skill(skill: "rust-agents:rust-modern-apis")` to load awareness of stable Rust APIs added in 1.89–1.99.
2. Call `Skill(skill: "rust-agents:rust-agent-handoff")` and follow the protocol (your suffix: `arch-analyst`).
3. Call `Skill(skill: "rust-agents:arch-inspect")` to load the audit checklist and follow it.

Expand Down
16 changes: 12 additions & 4 deletions rust-code/skills/rust-modern-apis/SKILL.md
Original file line number Diff line number Diff line change
@@ -1,10 +1,10 @@
---
name: rust-modern-apis
description: Reference for stable Rust APIs added in versions 1.89 through 1.98 (August 2025 - August 2026). Use whenever writing, reviewing, or refactoring Rust code when MSRV allows, to replace patterns that were verbose before newer APIs existed.
when_to_use: Modernizing Rust code, upgrading MSRV, "the latest Rust features", "can this be simpler in modern Rust?", or seeing manual UTF-8 truncation, path extension manipulation, advisory file locking via external crates, ignored `retain` removal results, `try_into().unwrap()` for fixed arrays, `compare_exchange` loops for atomic update, `cfg_if` crate usage, matching `0`/`1` to `bool`, `assert!(matches!(...))` in tests, hand-rolled bit-manipulation idioms, chained `strip_prefix`/`strip_suffix`, `.map(f).unwrap_or_default()`, the `itoa` crate, or manual UTF-16LE/BE decoding.
description: Reference for stable Rust APIs added in versions 1.89 through 1.99 (August 2025 - October 2026). Use whenever writing, reviewing, or refactoring Rust code when MSRV allows, to replace patterns that were verbose before newer APIs existed.
when_to_use: Modernizing Rust code, upgrading MSRV, "the latest Rust features", "can this be simpler in modern Rust?", or seeing manual UTF-8 truncation, path extension manipulation, advisory file locking via external crates, ignored `retain` removal results, `try_into().unwrap()` for fixed arrays, `compare_exchange` loops for atomic update, `cfg_if` crate usage, matching `0`/`1` to `bool`, `assert!(matches!(...))` in tests, hand-rolled bit-manipulation idioms, chained `strip_prefix`/`strip_suffix`, `.map(f).unwrap_or_default()`, the `itoa` crate, manual UTF-16LE/BE decoding, the `filetime` crate, `from_utf8_lossy(&v).into_owned()`, or `Box::into_raw` + `NonNull::new_unchecked` pairs.
---

# Modern Rust APIs (1.89 – 1.98)
# Modern Rust APIs (1.89 – 1.99)

This skill is a lookup table for stable Rust APIs added after 1.88. Use it when writing or reviewing Rust code — replace older verbose patterns with newer concise ones where the project's MSRV allows.

Expand Down Expand Up @@ -79,6 +79,13 @@ Scan for these code shapes first. Each points to a concrete API that replaces it
| `pb.into_os_string().into_string().map_err(PathBuf::from)` | `pb.into_string()` | 1.98 | [paths.md](references/paths.md) |
| Fast-math reassociation hacks (nightly `fadd_fast`, manual reordering) | `f32/f64::algebraic_add/sub/mul/div/rem` | 1.98 | [arithmetic.md](references/arithmetic.md) |
| `u32::from_str_radix(s, 16)` then `NonZero::new(..).ok_or(..)` | `NonZero::from_str_radix(s, 16)` | 1.98 | [arithmetic.md](references/arithmetic.md) |
| `String::from_utf8_lossy(&vec).into_owned()` (always copies) | `String::from_utf8_lossy_owned(vec)` (reuses the buffer) | 1.99 | [strings.md](references/strings.md) |
| `from_utf8(v)` + separate lossy fallback re-reading the bytes | `String::from_utf8(v).unwrap_or_else(\|e\| e.into_utf8_lossy())` | 1.99 | [strings.md](references/strings.md) |
| `filetime` crate, or opening a `File` just to `set_times` | `std::fs::set_times(path, times)` / `set_times_nofollow` | 1.99 | [io-files.md](references/io-files.md) |
| `Box::into_raw(b)` + `NonNull::new_unchecked(p)` pair | `Box::into_non_null(b)` / `Box::from_non_null(p)` | 1.99 | [sync.md](references/sync.md) |
| `Vec::into_raw_parts` + `NonNull::new_unchecked` for FFI handles | `Vec::into_parts()` / `Vec::from_parts(..)` (NonNull-based) | 1.99 | [collections.md](references/collections.md) |
| `boxed_array.into_vec().into_iter()` or `.iter().cloned()` to consume `Box<[T; N]>` | `boxed_array.into_iter()` (`IntoIterator` for `Box<[T; N]>`) | 1.99 | [collections.md](references/collections.md) |
| Reverse `retain` loop with `swap_remove_back` / index math on `VecDeque` tail | `VecDeque::retain_back(\|x\| ..)` | 1.99 | [collections.md](references/collections.md) |

## Version → MSRV gate

Expand All @@ -96,6 +103,7 @@ When suggesting an API, check MSRV first. Quick reference:
- **MSRV 1.96+**: `assert_matches!` / `debug_assert_matches!`, `From<T>` for `LazyCell<T>` / `LazyLock<T>` / `AssertUnwindSafe<T>`, `core::range::Range`/`RangeFrom`/`RangeToInclusive` (+ matching `*Iter`), `NonZero` range iteration
- **MSRV 1.97+**: integer bit-manipulation methods `isolate_highest_one`/`isolate_lowest_one`/`highest_one`/`lowest_one`/`bit_width` (all integer types + `NonZero` equivalents, all `const fn`), `char::is_control` const
- **MSRV 1.98+**: `str::substr_range`/`slice::subslice_range`, `strip_circumfix` (str + slices), `String::from_utf16le`/`from_utf16be` (+ `_lossy`), integer `format_into` + `core::fmt::NumBuffer`, float `algebraic_*` ops (const), `NonZero::from_str_radix` (const), `Option/Result::map_or_default`, `bool::ok_or`/`ok_or_else`, atomic `from_mut`/`get_mut_slice`/`from_mut_slice`, `Box::as_ptr`/`as_mut_ptr`, `PathBuf::into_string`, `Path::is_empty`
- **MSRV 1.99+**: `String::from_utf8_lossy_owned`, `FromUtf8Error::into_utf8_lossy`, `fs::set_times`/`set_times_nofollow`, `Box::into_non_null`/`from_non_null`, `Vec::into_parts`/`from_parts`, `IntoIterator for Box<[T; N]>`, `VecDeque::retain_back`, `FusedIterator for StepBy`, `mem::size_of_val_raw`/`align_of_val_raw`, `Layout::for_value_raw`, `core::ffi::VaList` + C-variadic fn definitions

Full changelog by version lives in [references/changelog.md](references/changelog.md) if you need to explain a release to the user or find something not in the trigger table.

Expand Down Expand Up @@ -127,7 +135,7 @@ Don't produce walls of diffs for trivial cosmetic changes. Batch suggestions log

Read these only when you need the details. Each file covers one domain across all versions:

- [references/changelog.md](references/changelog.md) — full release notes by version (1.89-1.98) — use when the user asks about a specific release
- [references/changelog.md](references/changelog.md) — full release notes by version (1.89-1.99) — use when the user asks about a specific release
- [references/paths.md](references/paths.md) — `Path`/`PathBuf` API additions (1.91 mainly)
- [references/strings.md](references/strings.md) — `str` and `char` additions
- [references/time.md](references/time.md) — `Duration` additions
Expand Down
71 changes: 70 additions & 1 deletion rust-code/skills/rust-modern-apis/references/changelog.md
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
# Rust release changelog (1.89 – 1.98)
# Rust release changelog (1.89 – 1.99)

Consolidated changes relevant to application code. For the full release notes, see [doc.rust-lang.org/stable/releases.html](https://doc.rust-lang.org/stable/releases.html).

Expand Down Expand Up @@ -654,6 +654,75 @@ New lints: `unnecessary_unwrap_unchecked` (complexity), `chunks_exact_to_as_chun

---

## Rust 1.99 (2026-10-01)

Source: [releases.rs/docs/1.99.0/](https://releases.rs/docs/1.99.0/) and [blog.rust-lang.org/2026/10/01/Rust-1.99.0](https://blog.rust-lang.org/2026/10/01/Rust-1.99.0/).

### Language

- **C-variadic function definitions stabilized** for the `C` and `C-unwind` ABIs — Rust code can now *define* (not just call) `extern "C" fn f(x: i32, ...)` using `core::ffi::VaList`, with arguments constrained by the `VaArgSafe` trait. `#[unsafe(naked)]` is also allowed on C-variadic functions.
- Stabilized custom attributes on outlined modules: `#[my_macro] mod foo;` now works (macro expansion on module declarations).
- 128-bit integers can be passed in vector registers in x86 `asm!`.
- Trait methods now resolve on the adjusted never type; coercion from inference variables to trait objects improved.
- New allow-by-default `raw_borrows_via_references` lint; `unconditional_panic` extended to zero-sized `chunks`/`windows`; unused `#[path]` attributes on inline modules are now linted; POSIX symbols added to the runtime-symbol-definition lints (see 1.98).
- Documented guarantees: allocation growth behavior, and access to `UnsafeCell` contents without `get()`.

### Stabilized APIs

**Box / Vec raw-handle round-trips** (NonNull-based, complement the raw-pointer forms):
- `Box::into_non_null`, `Box::from_non_null`
- `Vec::into_parts` → `(NonNull<T>, usize, usize)`, `Vec::from_parts`

**Collections / iterators**:
- `impl IntoIterator for Box<[T; N]>` (and `&Box<[T; N]>`, `&mut Box<[T; N]>`) — iterate a boxed array by value
- `VecDeque::retain_back` — like `retain`, but walks from the back and stops at the first kept element
- `impl FusedIterator for StepBy<I>`

**Strings**:
- `String::from_utf8_lossy_owned(Vec<u8>) -> String` — lossy conversion that reuses the allocation when the input is valid UTF-8
- `string::FromUtf8Error::into_utf8_lossy(self) -> String` — lossy recovery after a failed `String::from_utf8`

**Filesystem**:
- `std::fs::set_times(path, FileTimes)`, `std::fs::set_times_nofollow` — set file timestamps by path, without opening a `File` (std replacement for the `filetime` crate)

**Layout from raw pointers** (all `unsafe`):
- `core::mem::size_of_val_raw`, `core::mem::align_of_val_raw`
- `core::alloc::Layout::for_value_raw`

**FFI**:
- `core::ffi::VaList` (see Language above)

### Compiler

- LLVM 23.
- Static position-independent executables enabled on GNU/musl targets.
- `riscv64-unknown-linux-musl` promoted to Tier 2 with host tools.
- Method suggestions prefer exact doc-alias matches over similarity matching.

### Cargo

- **New built-in `debug` profile** — currently an alias for `dev`, preparation for renaming the default profile.
- Edition 2024+ workspace members can override an inherited dependency's `default-features`.
- **Incremental compilation is disabled by default in CI environments** (detected via `CI` env var) — speeds up cold CI builds and shrinks caches; set `CARGO_INCREMENTAL=1` to restore.

### Rustdoc

- New `unused_footnote_definition` lint.
- Trait-impl filtering optimized — 20% average (up to 40%) faster doc builds.

### Compatibility notes

- **Legacy numeric modules fully deprecated** — `std::i32::MAX` etc. now warn everywhere; use the associated consts (`i32::MAX`).
- `no_mangle_generic_items` upgraded to a hard error.
- References to extern statics are no longer promoted.
- `#[repr(simd)]` on macro invocations no longer accepted on stable (accidental stabilization fixed).
- Anonymous lifetimes in associated consts now inferred as `'static`.
- `Pin::new_unchecked` safety docs tightened; `Box::leak` docs now recommend `Box::into_non_null` over leak-then-free round-trips.
- Doc-comment code-block attributes that don't apply now generate errors; `doc(cfg())` is ignored when filtering doctests.
- Macros expanding to semicolons now warn even when the macro comes from another crate.

---

## How to use this changelog

- **Looking up when an API stabilized**: skim the "Stabilized APIs" section under each version.
Expand Down
Loading
Loading