Révision et correction

VérifiéSûr

Analyse approfondie et correction itérative d'un fichier Rust. Détecte erreurs logiques, problèmes de concurrence et simplifications, corrige jusqu'à propreté.

Spar Skills Guide Bot
DeveloppementIntermédiaire
27/07/2026
Claude CodeCursorCodex
#rust#code-review#refactoring#concurrency#bug-fixing

Recommandé pour

Synthèse automatique

Analyse de façon itérative un fichier source Rust et corrige les erreurs de logique, les problèmes de verrous en contexte async et les nommages trompeurs, tout en supprimant les tests et commentaires redondants jusqu'à ce qu'il ne reste plus rien à corriger.

Points forts

  • Checklist ordonnée par priorité (erreurs de logique, puis verrous, puis simplification) au lieu d'une revue ouverte
  • Repère des pièges Rust concrets : gardes DashMap/RwLock conservées à travers un .await, add/remove asymétriques sur les index, perte de messages sur la sémantique offset/commit
  • Traite les tests comme quelque chose à fusionner et à supprimer, pas seulement à ajouter, ce qui contrecarre l'inflation habituelle des tests
  • Une section « ce qu'il ne faut pas faire » explicite empêche la boucle de dériver vers une réécriture non demandée

Limites

  • Boucle jusqu'à « plus rien à corriger » sans limite dure : le critère d'arrêt repose sur le jugement du modèle, qui peut s'acharner
  • Portée limitée à un fichier à la fois ; les problèmes inter-fichiers ou d'architecture ne sont abordés qu'à travers les appelants lus
  • Suppose un projet Rust vérifiable via `cargo check` et ne décrit aucune étape de vérification automatisée des correctifs eux-mêmes
Quand l'utiliser

À utiliser lorsqu'un fichier Rust est suspect (structure de données de type bucket, code async saturé de verrous) et que l'on veut une chasse ciblée aux bugs avec nettoyage, plutôt qu'une revue de PR large.

Quand l'éviter

À éviter sur des fichiers qu'on ne souhaite pas voir modifiés sur place, ou lorsqu'il faut une revue de crate ou d'architecture plutôt qu'une passe sur un seul fichier.

Analyse de sécurité

Sûr
Score qualité92/100

The skill instructs an AI agent to read, analyze, and fix Rust source files, including running cargo check and relevant unit tests. It does not contain destructive commands, exfiltration, obfuscated payloads, or instructions to disable safety. The actions are standard development workflow operations on user-provided code.

Aucun point d'attention détecté

Comment cette analyse est faite

Exemples

Audit a bucket file
/review-and-fix src/mqtt-broker/src/subscribe/buckets.rs
Hunt lock-across-await bugs
Run /review-and-fix on src/mqtt-broker/src/subscribe/directly_push.rs — I suspect a DashMap guard is held across an .await in the push path.
Trim test bloat
/review-and-fix src/store/src/offset.rs — pay extra attention to the test module, it probably has too many near-duplicate cases.

name: review-and-fix description: Deep analysis and iterative fixing of a Rust source file. Finds logic errors, lock/concurrency issues, and simplification opportunities, then fixes them one by one until the file is clean.

review-and-fix

Deep-analyze the specified file, find logic errors, memory/lock issues, and simplification opportunities, and fix them iteratively until no problems remain.

Usage

/review-and-fix <file_path>

Examples

/review-and-fix src/mqtt-broker/src/subscribe/buckets.rs
/review-and-fix src/mqtt-broker/src/subscribe/directly_push.rs

Execution Flow

Each round follows this sequence until nothing left to fix:

1. Read

Fully read the target file. Read related files as needed (callers, struct definitions it depends on) to understand context.

2. Analyze

Check in priority order:

Logic Errors (must fix)

  • Asymmetric data structure operations: add writes N indexes, remove only cleans N-1
  • offset/commit semantics: committing after push failure causes message loss
  • Key collisions: separator choice produces identical keys for different inputs

Concurrency/Lock Issues (must fix)

  • DashMap entry(), get(), get_mut() return Ref/RefMut that hold shard locks — not released during .await
  • RwLock read lock held during .await blocks write lock
  • Fix: .clone() the data to drop the guard before awaiting; or store Arc<T>

Simplification (apply judiciously)

  • Repeated get_mut + else { insert } → entry().or_default()
  • Redundant else { return x } → remove the else
  • Two-step let x = ...; let x = match x { Some(v) => v, None => return } → let Some(x) = ... else { return }
  • Nested if !condition { ... } → if condition { continue }
  • Duplicate import lines → merge
  • Temporary flag variables (let mut failed = false; ... if !failed { commit() }) → early return

Comments (keep lean)

  • Remove redundant or obvious comments; the code should speak for itself
  • Keep only comments that explain a non-obvious why (an invariant, a subtle ordering, a footgun)
  • Do not over-comment — fewer, higher-signal comments beat many noisy ones

Test Cases (deep review, then trim — do not just add)

  • Deep-review every existing test before adding anything: does it assert a real behavior, or just re-exercise the happy path another test already covers? Does the assertion actually fail if the logic under test is broken (mutate the code mentally and check)?
  • Default action is consolidation, not addition: merge near-duplicate tests into one parametrized/table-driven case, delete tests that assert trivial defaults or that duplicate coverage another test already provides
  • Only add a new test when a real gap exists: a pure decision function or bug-prone branch with zero coverage. One targeted case per gap — do not pad with variations that don't exercise a new path
  • Prefer testing the pure/extractable logic directly over standing up heavy mocks for orchestration glue; if a path can only be tested by mocking a large dependency, that's usually a sign to extract the pure logic rather than write the mock
  • Keep the total test count as small as possible while still covering every distinct branch/outcome once — "few, focused, high-signal" beats "thorough-looking"

Naming (align names with behavior)

  • Function names: does the name describe what the function actually does? Rename misleading or vague names (e.g. a get_* that mutates, a *_switch that only computes)
  • File / module names: does the file name match its content and responsibility? Flag/rename when it has drifted
  • When renaming, update every reference (callers, imports, mod declarations) and re-run cargo check. Be conservative with widely-used public names — only rename when the current name is genuinely misleading, not for taste

What NOT to do

  • Do not refactor correct code just to be "more Rusty"
  • Do not introduce new abstractions or traits
  • Do not change public API signatures (unless there is a bug, or a name is genuinely misleading — then rename and update all call sites)
  • Do not add unnecessary comments

3. Fix

  • Only fix issues you are certain about — do not guess
  • After each fix, run cargo check -p <crate> to verify compilation
  • For core logic changes, run the relevant unit tests

4. Loop

After each round of fixes, re-analyze the file to confirm nothing was missed. Stop only when you can clearly state: "no logic errors, no lock issues, no worthwhile simplification remaining, names match behavior, test coverage adequate and focused, comments lean."

Output Format

  • Start each round by stating what problems were found
  • After fixing, explain what changed and why
  • On the final round, explicitly state "no issues, stopping"
  • Do not output meaningless progress descriptions

Du fichier au premier essai

Le téléchargement contient exactement le contenu affiché sur cette fiche. Cette copie peut différer de la dernière version du dépôt source.

Consulter la source et ses fichiers annexes

Ce téléchargement contient uniquement SKILL.md. Les scripts, références, modèles et dépendances éventuels ne sont pas inclus. Récupérez les fichiers nécessaires depuis la source en conservant leur arborescence avant de poursuivre.

1. Télécharger le fichier

Télécharger SKILL.md

Depuis la racine d’un projet de test, enregistrez le fichier sous .skill-downloads/review-and-fix-ms2s7bcm/SKILL.md, ou utilisez la commande suivante. Ce dossier sert à examiner la skill avant son installation.

Commande pour macOS/Linux ou WSL : un shell POSIX et curl sont nécessaires. Sous Windows sans WSL, utilisez le bouton de téléchargement et créez le dossier manuellement.

mkdir -p '.skill-downloads/review-and-fix-ms2s7bcm' && curl --fail --show-error --location 'https://skills-guides.com/api/skills/review-and-fix-ms2s7bcm/download' --output '.skill-downloads/review-and-fix-ms2s7bcm/SKILL.md.part' && mv '.skill-downloads/review-and-fix-ms2s7bcm/SKILL.md.part' '.skill-downloads/review-and-fix-ms2s7bcm/SKILL.md'

2. Vérifier les prérequis

Lisez SKILL.md avant de l’utiliser. Si le fichier cite des scripts ou services externes, examinez-les et préparez les accès nécessaires dans votre environnement de test.

Aucune section de prérequis reconnue dans ce fichier. Cela ne signifie pas qu’il est autonome : les bibliothèques, outils et accès peuvent être cités ailleurs dans le contenu ou dans le dépôt source.

Les plateformes de la fiche sont des indications du catalogue. Les chemins ci-dessous suivent la documentation des outils ; ils ne prouvent pas que cette skill y a été exécutée. Aucune version minimale de ces outils n’est attestée pour cette fiche.

3. Charger la skill

Après vérification, copiez le dossier complet dans le projet avec l’une des commandes ci-dessous, puis ouvrez une nouvelle session de l’outil. La commande s’arrête si un dossier du même nom existe déjà : comparez les fichiers avant de le remplacer.

Claude Code
test -f '.skill-downloads/review-and-fix-ms2s7bcm/SKILL.md' && test -s '.skill-downloads/review-and-fix-ms2s7bcm/SKILL.md' && mkdir -p '.claude/skills' && test ! -e '.claude/skills/review-and-fix' && cp -R '.skill-downloads/review-and-fix-ms2s7bcm' '.claude/skills/review-and-fix'

Cursor
test -f '.skill-downloads/review-and-fix-ms2s7bcm/SKILL.md' && test -s '.skill-downloads/review-and-fix-ms2s7bcm/SKILL.md' && mkdir -p '.cursor/skills' && test ! -e '.cursor/skills/review-and-fix' && cp -R '.skill-downloads/review-and-fix-ms2s7bcm' '.cursor/skills/review-and-fix'

Codex
test -f '.skill-downloads/review-and-fix-ms2s7bcm/SKILL.md' && test -s '.skill-downloads/review-and-fix-ms2s7bcm/SKILL.md' && mkdir -p '.agents/skills' && test ! -e '.agents/skills/review-and-fix' && cp -R '.skill-downloads/review-and-fix-ms2s7bcm' '.agents/skills/review-and-fix'

OpenSkills

OpenSkills doit déjà être installé. La procédure locale install/read est contrôlée avec OpenSkills 1.5.0, qui exige Node.js ≥ 20.6.0. Aucun slug du catalogue n’est résolu automatiquement.

Installation officielle d’OpenSkills
openskills install './.skill-downloads/review-and-fix-ms2s7bcm'

openskills read 'review-and-fix-ms2s7bcm'

La lecture doit afficher le contenu du fichier installé et son dossier de base. Elle ne lance ni la skill ni ses dépendances.

Pour un agent qui lit AGENTS.md, synchronisez ensuite l’index. Cette commande modifie AGENTS.md : relisez le diff avant de l’utiliser.

openskills sync

Mode manuel ou autre outil : joignez SKILL.md à une conversation, ou ouvrez-le dans un agent capable de lire les fichiers. Ajoutez les ressources annexes nécessaires. Il n’existe pas de dossier universel reconnu par tous les outils.

4. Faire un premier essai

Utilisez une entrée courte et fictive : un endpoint d’API, un petit document ou un brief d’interface. Dans une nouvelle conversation, joignez le fichier ou donnez son chemin à l’agent, puis adaptez cette demande :

Lis .skill-downloads/review-and-fix-ms2s7bcm/SKILL.md et applique ses instructions à cet exemple : [décrire une entrée de test]. Indique les fichiers, dépendances ou accès qui manquent. Produis le résultat demandé par la skill sans inventer de données ni exécuter de script non examiné.

Résultat attendu : une sortie correspondant aux instructions de la skill, ou une liste précise des prérequis manquants. Une simple confirmation de lecture ne valide pas le premier usage. Si une ressource externe est indisponible, ce parcours reste à tester.

Skills similaires