When to reach for the new skills

Updated Jul 18, 2026

The recent catalogue extensions cover verification, supply chain, decision records, and Polonius migration. The short versions:

`nll-to-polonius` — migrate beyond NLL constraints

Use this skill when adopting -Zpolonius=next, auditing code for confirmed NLL workarounds, or redesigning internal lookup and caching APIs around returned borrows. It distinguishes lifetime limitations that Polonius can remove from aliasing, async, and thread-boundary constraints that still require ownership. Routine borrow errors continue to route to rust-memory-and-state.

`rust-verification` — pick the right adversarial tool

Use this skill when you need to prove or disprove a property and are unsure whether to reach for Miri, sanitizers, property tests, cargo-mutants, loom, shuttle, turmoil, Kani, or Verus. The skill's selection table maps failure modes to tools. From there it routes into the proptest, kani, and verus deep dives.

`proptest` — property-based testing

Use this skill when a pure function has a property (round-trip, idempotence, ordering, conservation) that is easier to state than to enumerate, or when a parser or codec must round-trip across all valid inputs. The skill covers strategy design with prop_compose!, the filtering trap and its fix, regression-file discipline, state-machine tests via proptest-state-machine, and the proptest-derive vs test-strategy choice.

`rust-unit-testing` — unit-test shape and assertions

Use this skill when ordinary Rust unit tests need clearer structure: rstest fixtures and parameterized cases, fallible setup helpers, serial_test for genuine global-state isolation, rich matcher assertions with googletest, diff-friendly equality with pretty_assertions, and snapshot tests with insta. It also carries a worked example for splitting one mixed assertion helper into extraction, pure comparison, and a thin assertion wrapper.

`kani` — bounded model checking

Use this skill when writing a harness for a small, well-bounded property: an arithmetic invariant, a parser corner case, or a state machine with a small alphabet. Kani is unwind-bounded by default; the skill describes how to set #[kani::unwind(n)], when to use kani::any and kani::assume, and when to escalate to Verus instead.

`verus` — deductive verification

Use this skill when the property must hold for unbounded inputs, when the bounded loop in Kani times out, or when the proof composes several lemmas. The skill covers spec/proof/exec mode discipline, trigger heuristics for the underlying Z3 solver, the broadcast use pattern for sequence axioms, and the layout of a proof project that mirrors a production module.

`arch-supply-chain` — dependency hygiene and audits

Use this skill when adding a dependency, tightening a lockfile policy, configuring cargo-vet or cargo-deny, or wiring SemVer guardrails (cargo-semver-checks, cargo-public-api) into release. The references describe a decentralized audit setup with imports from the Bytecode Alliance and Mozilla, plus a deny.toml policy template.

`arch-decision-records` — Y-Statement ADRs

Use this skill when capturing a decision that is hard to reverse — a typestate, an unsafe invariant, a verification-tool choice, a public API shape. The skill gives the six-clause Y-Statement template and three worked Rust examples, and explains how to supersede an earlier ADR cleanly.