Aller au contenu
Publié

Dernière revue: 2026-09-08

Portes de qualité

Configurez des seuils qui avertissent ou interdisent les dépendances si mainteneurs, activité, sécurité ou licences échouent.

À quoi servent les portes de qualité

Les portes de qualité sont des politiques d'organisation composées de règles. Une règle se déclenche quand une dépendance échoue un ou plusieurs seuils. Elle émet alors un avertissement ou interdit le package. Il n'y a pas d'action Autoriser : un package qui respecte tous les seuils renseignés passe simplement.

Les portes de qualité sont distinctes de la gouvernance par catégories et des politiques de licence.

Ce ne sont pas non plus les seuils de sévérité PR / API (prCheckSeverityThreshold, apiGateSeverityThreshold). Ces champs pilotent les contrôles PR GitHub / External Status Checks MR GitLab (vulns / secrets / SAST) et l’attente API publique / CLI --wait / MCP, et ne sont pas liés aux règles Quality Gates. Voir Contrôles PR et API scans.

Configuration dans les paramètres

Ouvrez Paramètres → Portes de qualité. Créez une politique, puis des règles.

Chaque règle a :

  1. Action — Avertissement (signal / score) ou Interdire (non conforme ; peut faire échouer les contrôles PR).
  2. Périmètre — Écosystèmes (aucun coché = tous : npm, PyPI, RubyGems, Maven, Cargo, Composer, Go/gomod) et catégories de dépendances optionnelles.
  3. Mode — Seuils (formulaire) ou Expressions (faits package + opérateurs allowlistés). Un seul mode par règle.

Seuils opérationnels

SeuilComportementLimites
Mainteneurs minimumÉchoue si le nombre de mainteneurs est inférieurCouverture plus faible sur Maven
Jours max depuis la dernière releaseÉchoue si une date de release connue dépasse N jours—
Respecter les politiques de licence orgÉchoue si la licence ne satisfait pas les politiques activesCorrespondance SPDX / alias exacte (même moteur que la politique de licences) ; MIT-0 ≠ MIT
Licences autorisées / interditesListe blanche / noire sur la chaîne de licence—
Doit être marqué maintenuÉchoue seulement si explicitement non maintenuDonnées manquantes ≠ échec
Doit être marqué populaireÉchoue seulement si explicitement non populaireDonnées manquantes ≠ échec
Stars, forks, issues, commits GitHubComparés aux facts GitHub synchronisésRepo GitHub lié requis
Téléchargements min (30 jours)Comparés aux facts de téléchargementPlus fiable pour npm ; ailleurs souvent 0
Téléchargements totaux minimumComparés au total lifetimenpm : somme en fenêtres ≤18 mois depuis la création du package
Vulnérabilités connues maximumÉchoue si le compte d’advisories OSV dépasse le seuilRempli à la sync des facts (niveau package ; latest si connu)
Fréquence minimale de releasesÉchoue si les releases/an estimées sont sous le seuilHeuristique d’historique registry
Taille max du package (octets)Échoue si la taille syncée dépasse le seuilTaille registry quand disponible
Dépendances directes maximumÉchoue si le nombre de dépendances directes dépasse le seuil—

Expressions (policy 1.1.0)

Le mode expressions construit des règles en lignes { fact, operator, value } avec correspondance all ou any. Opérateurs allowlistés (eq, neq, gt, gte, lt, lte, in, not_in, is_true, is_null) — pas de scripts libres. Les facts sont ceux de la sync package (ex. vulnerabilityCount, maintainersCount, daysSinceLastRelease). Les facts manquants suivent toujours factsSync.onMissingFact. Listes de licences et « respecter les politiques de licence » restent en mode Seuils uniquement.

Facts manquants

Le comportement est défini dans Paramètres → Dependency Advisor (factsSync.onMissingFact), pas par règle :

RéglageEffet sur les règles qui ont besoin du fact manquant
Autoriser (défaut)Ignore ce seuil — les facts manquants ne font pas échouer la règle
AvertissementLa règle est considérée comme matchée (warning / impact score)
InterdireLa règle est considérée comme matchée (non conforme)

Une valeur synchronisée à 0 (par ex. zéro mainteneur après sync réussie) est une donnée réelle et reste évaluée. Les stats packages se remplissent progressivement sur la semaine ; les premiers scans ont souvent des facts en attente. Le compteur de vulnérabilités est omis tant que la sync OSV n’a pas réussi (null en cas d’échec), donc les réglages de facts manquants s’appliquent.

Gérer via MCP / LLM

Avec un service token package-finder:read et policy:read (policy:write pour importer), vous pouvez demander à un client MCP :

  • « Évalue lodash sur npm contre nos politiques. » → evaluate_package
  • « Exporte nos portes de qualité en policy bundle. » → export_policy_bundle avec kind=quality
  • « Valide ce bundle quality, puis dry-run import. » → validate_policy_bundle / import_policy_bundle avec dryRun=true
  • « Ajoute une règle qui interdit les packages avec plus de 0 vulnérabilités connues. » → exporter le bundle quality, éditer conditions.maxVulns: 0 (ou une expression sur vulnerabilityCount), valider, puis importer. Les bundles utilisent apiVersion: codecleared.io/policy/1.1.0.

Documentation liée