axum-code-review — independently scanned and version-tracked by SaferSkills.
SaferSkills independently audited axum-code-review (Agent Skill) and scored it 100/100 (green). The audit ran 55 deterministic rules across Security, Supply Chain, Maintenance, Transparency, and Community; it found 0 high-severity and 0 lower-severity findings. The full rule-by-rule trace and per-finding evidence are below. Free, methodology-open.
Findings & checks · 0 flagged
Every scanned point with the score it earned and what moved between them.
First recorded scan — no prior version to compare against.
The primary manifest — the file an agent reads to learn what this artifact does.
async-trait in custom extractors.State<T>, not global mutable stateIntoResponse implementations, error typesRun in order. Do not write a finding until the step that applies has passed.
Cargo.toml (crate or workspace root) and can state axum (and related tower/tower-http) versions and Rust edition. Then apply 0.6 vs 0.7+ or Edition 2024–specific checklist items only when that file supports them.[FILE:LINE] from the current tree for the handler, router, layer, or type under review (not from memory, docs-only, or another branch).Report findings as:
[FILE:LINE] ISSUE_TITLE
Severity: Critical | Major | Minor | Informational
Description of the issue and why it matters.| Issue Type | Reference |
|---|---|
| Route definitions, nesting, method routing | references/routing.md |
| State, Path, Query, Json, body extractors | references/extractors.md |
| Tower middleware, layers, error handling | references/middleware.md |
/api/users, /api/orders).get(), .post(), not .route() with manual method matching)Json, Form, Bytes) are the LAST parameterState<T> requires T: Clone — typically Arc<AppState> or direct Clone derivePath<T> parameter types match the route definitionQuery<T> fields are Option for optional query params with #[serde(default)]FromRequestParts (not body) or FromRequest (body)async fn in trait impls (no #[async_trait] needed for FromRequest/FromRequestParts)State<T>, not global mutable staticsClone derived or manually implemented on state typeLazyLock from std (not once_cell::sync::Lazy or lazy_static!)IntoResponse for proper HTTP error codesResult<impl IntoResponse, AppError> pattern used for handlers-> impl IntoResponse capture all in-scope lifetimes by default; use + use<> to opt out of capturing request lifetimes when returning owned datatower-http used for common concerns (CORS, compression, tracing, timeout)#[async_trait] can migrate to native async fn in trait implsState<T> (race conditions)sqlx::Error returned to client)async-trait still used for FromRequest/FromRequestParts when native async fn works.get(), .post()tower-http::trace for request loggingonce_cell::sync::Lazy or lazy_static! used where std::sync::LazyLock workstower-http layers for common concernsutoipa or aideasync-trait crate no longer needed (stable since Rust 1.75)once_cell/lazy_static (stable since Rust 1.80)Complete Gates (before reporting findings) and load the review-verification-protocol skill for category-specific checks before any issue is final.
~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.