Physical AI Toolchain

Les projets qui suivent les meilleures pratiques ci-dessous peuvent s'auto-certifier et montrer qu'ils ont obtenu le badge de la Open Source Security Foundation (OpenSSF).

Il n'existe aucun ensemble de pratiques qui garantissent que ce logiciel n'aura jamais de défauts ou de vulnérabilités ; même les méthodes formelles peuvent échouer si les spécifications ou les hypothèses sont fausses. Il n'y a pas non plus de pratiques qui peuvent garantir qu'un projet permettra de maintenir une communauté de développement saine et qui fonctionne bien. Toutefois, suivre les meilleures pratiques peut contribuer à améliorer les résultats des projets. Par exemple, certaines pratiques permettent la revue par plusieurs personnes avant publication, ce qui peut aider à trouver des vulnérabilités techniques difficiles à trouver autrement et à renforcer la confiance et un désir d'interaction répétée entre les développeurs de différentes entreprises. Pour gagner un badge, tous les critères DOIT et NE DOIT PAS doivent être satisfaits, tous les critères DEVRAIT doivent être satisfaits OU non satisfaits avec justification, et tous les critères PROPOSÉ doivent être satisfaits OU non satisfaits (nous voulons au moins qu'ils soient considérés). Si vous voulez entrer un texte de justification pour un commentaire générique, au lieu d'une raison justifiant que la situation est acceptable, commencez le bloc de texte avec '//' suivi d'un espace. Les commentaires sont les bienvenus via le site GitHub en tant que problèmes ou pull requests. Il existe également une liste de diffusion pour discussion générale.

Nous fournissons volontiers l'information dans plusieurs langues, cependant, s'il existe un conflit ou une contradiction entre les traductions, la version anglaise est la version qui fait autorité.
Si c'est votre projet, veuillez indiquer votre statut de badge sur votre page de projet ! Le statut du badge ressemble à ceci : Le niveau de badge pour le projet 12195 est passing Voici comment l'intégrer :
Vous pouvez afficher votre statut de badge en incorporant ceci dans votre fichier markdown :
[![OpenSSF Best Practices](https://www.bestpractices.dev/projects/12195/badge)](https://www.bestpractices.dev/projects/12195)
ou en incorporant ceci dans votre HTML :
<a href="https://www.bestpractices.dev/projects/12195"><img src="https://www.bestpractices.dev/projects/12195/badge"></a>


Ce sont les critères du niveau Basique. Vous pouvez également afficher les critères des niveaux Argent ou Or.

Baseline Series: Niveau de référence 1 Niveau de référence 2 Niveau de référence 3

        

 Notions de base 13/13

  • Général

    Notez que d'autres projets peuvent utiliser le même nom.

    Physical AI Toolchain is an open-source, production-ready framework that integrates Microsoft Azure (https://azure.microsoft.com/) cloud services with NVIDIA's (https://developer.nvidia.com/) physical AI stack, accelerating robotics and physical AI developers to automate and scale data curation, augmentation, and evaluation across perception, mobility, imitation learning, and reinforcement learning pipelines.

    Utilisez un format d'expression de licence SPDX ; des exemples sont « Apache-2.0 », « BSD-2-Clause », « BSD-3-Clause », « GPL-2.0+ », « LGPL-3.0+ », « MIT » et « (BSD-2-Clause OU Ruby) ». Ne pas inclure des guillemets simples ou doubles.
    S'il y a plus d'un langage, listez-les en tant que valeurs séparées par des virgules (espaces facultatifs) et triez-les du plus au moins utilisé. S'il y a une longue liste, veuillez lister au moins les trois premiers. S'il n'y a pas de langage (par exemple, il s'agit d'un projet uniquement de documentation ou de test), utilisez le caractère unique « - ». Utilisez une capitalisation conventionnelle pour chaque langage, par exemple « JavaScript ».
    La plate-forme commune d'énumération (CPE) est un schéma de dénomination structuré pour les systèmes, les logiciels et les paquetages des technologies de l'information. Il est utilisé dans un certain nombre de systèmes et de bases de données pour signaler des vulnérabilités.
  • Contenu basique du site Web du projet


    Le site du projet DOIT décrire succinctement ce que le logiciel fait (quel problème résout-il ?). [description_good]
    Cela DOIT être dans un langage que les utilisateurs potentiels peuvent comprendre (par exemple, il utilise un jargon minimal).

    Toolchain is an open-source, production-ready framework that integrates Microsoft Azure cloud services with NVIDIA's physical AI stack to enable scalable training, simulation, and deployment of robotic AI models." The description explains what the project does, its target domain (robotics AI), and how it relates to Azure and NVIDIA infrastructure. Five CI status badges are displayed at the top for immediate project health visibility.

    Evidence:



    Le site Web du projet DOIT fournir des informations sur la façon d'obtenir, de fournir des commentaires (comme des signalements de bogues ou des demandes d'amélioration) et de contribuer au logiciel. [interact]

    Multiple interaction channels are documented and accessible. CONTRIBUTING.md provides the contribution workflow (fork, branch, PR). SUPPORT.md documents a 4-tier response SLA (Security: 24h, Critical: 1-2 business days, Major: 3-5 business days, General: 14 business days). GitHub Issues are enabled with 7 structured issue templates (.github/ISSUE_TEMPLATE/) covering bug reports, feature requests, documentation issues, security reports, and infrastructure requests. GitHub Discussions are enabled for community questions and announcements.

    Evidence:



    L'information sur la façon de contribuer DOIT expliquer le processus de contribution (par exemple, les pull requests sont-ils utilisés ?) (URL requise) [contribution]
    Nous supposons que les projets sur GitHub utilisent les problèmes et les pull requests, sauf indication contraire. Cette information peut être courte, par exemple, en indiquant que le projet utilise les pull requests, un suivi des problèmes ou des messages dans une liste de diffusion (laquelle ?)

    CONTRIBUTING.md provides a comprehensive contribution guide with fork-and-clone workflow, branch naming conventions (feat/, fix/, docs/, chore/), pull request process with review checklist, required Conventional Commits format, 12 specialized sub-guides for different contribution areas, explicit testing requirements (new features need tests, bug fixes need regression tests, ≥50% of bug fix PRs must include regression tests), and code style enforcement via automated linting. The document also references the Microsoft CLA, Code of Conduct, and Sigstore gitsign keyless signing for release tags.

    Evidence:



    Les informations sur la façon de contribuer DEVRAIENT inclure les exigences pour des contributions acceptables (par exemple, une référence à toute norme de codage requise). (URL requise) [contribution_requirements]

    CONTRIBUTING.md clearly documents all contribution requirements: Conventional Commits message format (feat:, fix:, docs:, chore:, etc.), branch naming using category prefixes, testing policy requiring tests for new features and regression tests for bug fixes (≥50% of bug fix PRs must include regression tests), coding standards enforced by Ruff (Python), markdownlint (Markdown), PSScriptAnalyzer (PowerShell), yaml-lint (YAML), and cspell (spelling). The PR template and 16-job pr-validation.yml CI pipeline automatically enforce these requirements on every PR.

    Evidence:


  • Licence FLOSS


    Le logiciel produit par le projet DOIT être distribué en tant que FLOSS. [floss_license]
    FLOSS est un logiciel distribué d'une manière qui répond à la Définition de l'Open Source ou à la Définition du Logiciel Libre. Des exemples de ces licences sont CC0, MIT, BSD 2-clause, BSD 3-clause révisée, Apache 2.0, Lesser GNU General Public License (LGPL), et GNU General Public License (GPL). Pour nos besoins, cela signifie que la licence DOIT être : Le logiciel PEUT également être distribué avec d'autres licences (par exemple, « GPLv2 ou propriétaire » est acceptable).

    The project is released under the MIT License, one of the most permissive FLOSS licenses. The LICENSE file in the repository root contains the full MIT License text with copyright held by Microsoft Corporation. MIT License permits use, copy, modify, merge, publish, distribute, sublicense, and sell copies of the software, meeting all FLOSS requirements.

    Evidence:



    Il est PROPOSÉ que toute licence requise pour le logiciel produit par le projet soit approuvée par l'Open Source Initiative (OSI). [floss_license_osi]
    L'OSI utilise un processus d'approbation rigoureux pour déterminer quelles licences sont OSS.

    The MIT License is approved by the Open Source Initiative (OSI) and listed on their approved license page. It is one of the most widely used OSI-approved licenses in the open-source ecosystem.

    Evidence:



    Le projet DOIT afficher la ou les licences de ses résultats dans un emplacement standard dans leur dépôt source. (URL requise) [license_location]
    Une convention est de publier la licence sous la forme d'un fichier à la racine du dépôt appelé LICENSE ou COPYING, qui PEUT être suivi d'une extension telle que « .txt » ou « .md ». Une autre convention est d'avoir un réportoire nommé LICENSES contenant le(s) fichier(s) de licence ; ces fichiers sont généralement nommés comme leur identifiant de licence SPDX suivi d'une extension de fichier appropriée, comme décrit dans la Spécification REUSE. Notez que ce critère est requis uniquement pour le dépôt de sources. Vous n'avez PAS besoin d'inclure le fichier de licence lors de la génération d'un élément à partir du code source (tel qu'un exécutable, un paquet ou un conteneur). Par exemple, lors de la génération d'un paquet R pour le réseau d'archives complet R (CRAN), suivez la procédure standard CRAN : si la licence est une licence standard, utilisez la spécification de standard courte (pour éviter d'installer une autre copie du texte) et listez le fichier LICENSE dans un fichier d'exclusion tel que .Rbuildignore. De même, lors de la création d'un paquet Debian, vous pouvez mettre un lien dans le fichier de copyright vers le fichier de licence dans /usr/share/common-licenses, et exclure le fichier de licence du paquet créé (par exemple, en supprimant le fichier après avoir appelé dh_auto_install). Nous encourageons fortement l'inclusion d'informations de licence lisibles automatiquement dans des formats générés lorsque cela est possible.

    automatically detected by GitHub's license detection system. GitHub displays the license type (MIT) in the repository sidebar. The README.md also references the license. Additionally, copyright-headers.yml CI workflow enforces "Copyright (c) Microsoft Corporation" headers in all TypeScript, JavaScript, and CSS source files under docs/docusaurus/src/.

    Evidence:


  • Documentation


    Le projet DOIT fournir une documentation de base pour le logiciel produit par le projet. [documentation_basics]
    Cette documentation doit se trouver dans un certain format (comme le texte ou la vidéo) qui comprend : comment l'installer, comment le démarrer, comment l'utiliser (éventuellement avec un tutoriel à l'aide d'exemples) et comment l'utiliser en toute sécurité (par exemple, quoi faire et ne pas faire) si c'est un sujet approprié pour le logiciel. La documentation de sécurité n'a pas besoin d'être longue. Le projet PEUT utiliser des liens hypertextes vers du matériel hors projet en tant que documentation. Si le projet ne produit pas de logiciel, choisissez « non applicable » (N/A).

    Comprehensive documentation is provided across multiple levels. README.md covers project overview, quick start, architecture overview, and links to all documentation areas. The docs/ directory contains 8 topic areas: getting-started/, contributing/, deploy/, training/, inference/, operations/, security/, and reference/. Each major component has its own README (deploy/README.md, scripts/README.md, config/README.md, src/training/README.md, src/dataviewer/README.md). The docs/contributing/ directory includes architecture.md, ROADMAP.md, prerequisites.md, deployment-validation.md, cost-considerations.md, and security-review.md. Documentation is also published via Docusaurus to GitHub Pages with automated testing via docusaurus-tests.yml.

    Evidence:



    Le projet DOIT fournir une documentation de référence qui décrit l'interface externe (entrée et sortie) du logiciel produit par le projet. [documentation_interface]
    La documentation d'une interface externe explique à un utilisateur final ou un développeur comment l'utiliser. Cela inclut son interface de programmation (API) si le logiciel en possède une. S'il s'agit d'une bibliothèque, documentez les principales classes / types et méthodes / fonctions pouvant être appelés. S'il s'agit d'une application Web, définissez son interface URL (souvent son interface REST). S'il s'agit d'une interface de ligne de commande, documentez les paramètres et les options qu'elle supporte. Dans de nombreux cas, il est préférable que la majorité de cette documentation soit générée automatiquement, de sorte que cette documentation reste synchronisée avec le logiciel au fur et à mesure qu'il change, mais cela n'est pas nécessaire. Le projet PEUT utiliser des liens hypertextes vers du matériel hors projet en tant que documentation. La documentation PEUT être générée automatiquement (quand c'est possible, c'est souvent la meilleure façon de le faire). La documentation d'une interface REST peut être générée à l'aide de Swagger / OpenAPI. La documentation de l'interface de code PEUT être générée à l'aide d'outils tels que JSDoc (JavaScript), ESDoc (JavaScript), pydoc (Python), devtools (R), pkgdown (R) et Doxygen (plusieurs). Le simple fait d'avoir des commentaires dans le code source n'est pas suffisant pour satisfaire ce critère ; il doit y avoir un moyen simple de voir l'information sans lire l'intégralité du code source. Si le projet ne produit pas de logiciel, choisissez « non applicable » (N/A).

    External interfaces are documented through multiple mechanisms. docs/reference/scripts.md provides CLI argument references and variable documentation for all submission and deployment scripts. docs/reference/scripts-examples.md provides usage examples. config/recording_config.schema.json is a formal JSON Schema defining the recording configuration interface with property types, descriptions, constraints, and defaults. docs/deprecation-policy.md defines a 90-day deprecation lifecycle with migration templates for interface changes. The Terraform modules document their variables in variables.tf and variables.core.tf with descriptions and types. Shell scripts support --config-preview for interface discovery.

    Evidence:


  • Autre


    Les sites du projet (site Web, dépôt et URLs de téléchargement) DOIVENT supporter HTTPS en utilisant TLS. [sites_https]
    Cela nécessite que l'URL de la page d'accueil du projet et l'URL du référentiel de contrôle de version commencent par « https: » et non par « http: ». Vous pouvez obtenir des certificats gratuits de Let's Encrypt. Les projets PEUVENT mettre en œuvre ce critère en utilisant (par exemple) des pages GitHub, des pages GitLab ou des pages de projet SourceForge. Si vous prenez en charge HTTP, nous vous invitons à rediriger le trafic HTTP vers HTTPS.

    The project is hosted on GitHub.com, which enforces HTTPS for all pages, API endpoints, and Git operations. There is no option to access the repository, issues, wiki, or any GitHub-hosted content via unencrypted HTTP — GitHub enforces TLS 1.2+ on all connections. The Docusaurus documentation site is deployed to GitHub Pages, which also enforces HTTPS. All URLs referenced in project documentation use HTTPS.

    Evidence:



    Le projet DOIT avoir un ou plusieurs mécanismes de discussion (y compris les changements et les problèmes proposés) qui peuvent être recherchés, permettent de désigner les messages et les sujets par une URL, permettent aux nouvelles personnes de participer à certaines des discussions et ne nécessitent pas d'installation côté client de logiciels propriétaires. [discussion]
    Parmi les exemples de mécanismes acceptables figurent les listes de diffusion archivées, les problèmes de GitHub et les discussions sur les pull requests, Bugzilla, Mantis et Trac. Les mécanismes de discussion asynchrones (comme IRC) sont acceptables s'ils répondent à ces critères ; assurez-vous qu'il existe un mécanisme d'archivage adressable par URL. Une solution propriétaire en JavaScript, tout en étant découragée, est autorisée.

    The project provides multiple discussion channels. GitHub Issues are enabled with 7 structured issue templates covering bug reports, feature requests, documentation issues, security vulnerability reports, and infrastructure requests. Each template includes pre-defined labels and placeholder guidance. GitHub Discussions are enabled for community Q&A and announcements. SUPPORT.md documents response time expectations per severity tier. The README.md links directly to both Issues and Discussions.

    Evidence:



    Le projet DEVRAIT fournir de la documentation en anglais et être en mesure d'accepter les signalements de bogues et les commentaires sur le code en anglais. [english]
    L'anglais est actuellement la langue véhiculaire des technologies informatiques ; l'utilisation de l'anglais augmente le nombre de développeurs et de relecteurs potentiels dans le monde entier. Un projet peut répondre à ce critère même si la langue principale de ses principaux développeurs n'est pas l'anglais.

    All project documentation, code comments, commit messages, issue templates, CI configuration, and contributor guides are written in English. The README.md, CONTRIBUTING.md, SECURITY.md, SUPPORT.md, GOVERNANCE.md, CHANGELOG.md, and all files under docs/ are in English. Issue templates and PR templates are in English. Conventional Commit messages are in English.

    Evidence:



    Le projet DOIT être maintenu. [maintained]
    Au minimum, le projet doit tenter de répondre aux rapports de problèmes et de vulnérabilités importants. Un projet qui poursuit activement un badge est probablement maintenu. Tous les projets et tous les individus ont des ressources limitées, et les projets typiques doivent rejeter certaines modifications proposées, de sorte que les ressources limitées et les rejets de propositions n'indiquent pas en eux-mêmes un projet non maintenu.

    Lorsqu'un projet sait qu'il ne sera plus maintenu, il doit définir ce critère comme « Non satisfait » et utiliser le(s) mécanisme(s) approprié(s) pour indiquer aux autres qu'il n'est pas maintenu. Par exemple, utiliser « DEPRECATED » comme premier en-tête de son fichier README, ajouter « DEPRECATED » au début de sa page d'accueil, ajouter « DEPRECATED » au début de la description de projet de son dépôt de code, ajouter un badge sans maintenance dans son README et/ou sa page d'accueil, le marquer comme obsolète dans tous les dépôts de paquets (par exemple, npm deprecate), et/ou utiliser le système de marquage du dépôt de code pour l'archiver (par exemple, le paramètre « archive » de GitHub, le marquage « archivé » de GitLab, le statut « lecture seule » de Gerrit ou le statut de projet « abandonné » de SourceForge). Une discussion supplémentaire peut être trouvée ici.

    The project is actively maintained with continuous development through March 2026. Four releases have been published (v0.1.0 through v0.4.0) with the latest in March 2026. Dependabot is configured across 7 ecosystem entries (pip ×4, terraform ×2, github-actions ×1) and actively submits weekly dependency update PRs. The main.yml CI pipeline runs on every push to main, and pr-validation.yml runs on every PR — both show recent successful runs. CODEOWNERS assigns @microsoft/edge-ai-core-dev as required reviewers across all file paths. Weekly scheduled workflows (sha-staleness-check.yml on Mondays, weekly-validation.yml on Mondays for documentation freshness, scorecard.yml on Sundays) run continuously.

    Evidence:


 Contrôle des modifications 9/9

  • Dépôt source public sous contrôle de version


    Le projet DOIT avoir un dépôt source sous contrôle de version qui est publiquement lisible et possède une URL. [repo_public]
    L'URL PEUT être identique à l'URL du projet. Le projet PEUT utiliser des branches privées (non publiques) dans des cas spécifiques alors que la modification n'est pas diffusée publiquement (par exemple, pour la correction d'une vulnérabilité avant qu'elle ne soit révélée au public).

    The repository is public on GitHub at https://github.com/microsoft/physical-ai-toolchain. All source code, documentation, infrastructure-as-code, CI/CD workflows, issue templates, and configuration files are publicly visible. The repository settings are configured for public access with no authentication required to view, clone, or fork.

    Evidence:



    Le dépôt source du projet DOIT suivre les changements apportés, qui a effectué les changements et quand les changements ont été effectués. [repo_track]

    The project uses Git for version control, which tracks every change with author identity, timestamp, commit message, and full diff. Every file modification is recorded in the Git history. GitHub's web interface provides commit history, blame view, and diff comparison for every file. The project enforces Conventional Commits format (feat:, fix:, docs:, chore:, etc.) via contribution guidelines, providing structured change descriptions.

    Evidence:



    Pour permettre une analyse collaborative, le dépôt source du projet DOIT inclure des versions provisoires pour examen entre versions officielles ; Il NE DOIT PAS inclure que les dernières versions. [repo_interim]
    Les projets PEUVENT choisir d'omettre des versions intermédiaires spécifiques dans leurs dépôts source publics (par exemple, celles qui corrigent des vulnérabilités de sécurité non publiques spécifiques, ne peuvent jamais être rendues publiques ou incluent des éléments qui ne peuvent être légalement publiés et ne sont pas dans la version finale).

    All commits are pushed to the public GitHub repository continuously. The PR-based workflow ensures that every change is visible as a pull request before and after merge. Interim work-in-progress is visible through open PRs and feature branches. GitHub's branch protection rules require PR review before merging to main, so all interim states are publicly accessible. There is no private staging or hidden development — all work flows through the public repository.

    Evidence:



    Il est PROPOSÉ qu'un logiciel reconnu de contrôle de version distribué soit utilisé (par exemple, git) pour le dépôt source du projet. [repo_distributed]
    Git n'est pas spécifiquement requis et les projets peuvent utiliser un logiciel de contrôle de version centralisé (comme subversion) avec justification.

    Git is a distributed version control system. Every clone of the repository contains the complete history and can function independently. Contributors fork and clone the repository (as documented in CONTRIBUTING.md), work locally, and submit changes via pull requests. There is no single point of failure — any clone contains the full repository history and can serve as a restore point.

    Evidence:


  • Numérotation unique de la version


    Les résultats du projet DOIVENT avoir un identifiant de version unique pour chaque version destinée à être utilisée par les utilisateurs. [version_unique]
    Cela PEUT être satisfait de diverses façons, y compris les identifiants de commit (comme git commit id ou mercure changeset id) ou un numéro de version (y compris les numéros de version qui utilisent la version sémantique ou les systèmes basés sur la date comme YYYYMMDD).
    Every release has a unique version identifier. Four releases have been published: v0.1.0, v0.2.0, v0.3.0, and v0.4.0. Version numbers are managed by release-please automation, which reads Conventional Commits and bumps versions according to semantic versioning rules. The version is synchronized across pyproject.toml (Python package) and package.json (Node.js tooling) via release-please-config.json. Once a version is released, it is never reused or overwritten.
    
    Evidence:
    - https://github.com/microsoft/physical-ai-toolchain/tags
    - https://github.com/microsoft/physical-ai-toolchain/blob/main/release-please-config.json
    - https://github.com/microsoft/physical-ai-toolchain/blob/main/pyproject.toml
    - https://github.com/microsoft/physical-ai-toolchain/blob/main/package.json


    Il est PROPOSÉ d'utiliser le format de numérotation de version appelé Versionage Sémantique (SemVer) ou Versionage Calendaire (CalVer). Il est PROPOSÉ que ceux qui utilisent CalVer incluent une valeur de niveau micro. [version_semver]
    Les projets devraient généralement préférer le format attendu par leurs utilisateurs, par exemple, parce que c'est le format normal utilisé par leur écosystème. De nombreux écosystèmes préfèrent SemVer, et SemVer est généralement préféré pour les interfaces de programmation d'applications (API) et les kits de développement logiciel (SDK). CalVer a tendance à être utilisé par des projets de grande envergure, ayant un nombre inhabituellement élevé de dépendances développées indépendamment, ayant une portée en constante évolution ou étant sensibles au temps. Il est PROPOSÉ que ceux qui utilisent CalVer incluent une valeur de niveau micro, car l'inclusion d'un niveau micro prend en charge les branches maintenues simultanément chaque fois que cela devient nécessaire. D'autres formats de numérotation de version peuvent être utilisés, y compris les ID de commit git ou les ID de jeu de modifications mercurial, à condition qu'ils identifient de manière unique les versions. Cependant, certaines alternatives (telles que les ID de commit git) peuvent poser des problèmes en tant qu'identificateurs de version, car les utilisateurs peuvent ne pas être en mesure de déterminer facilement s'ils sont à jour. Le format de l'ID de version peut être sans importance pour l'identification des versions logicielles si tous les destinataires n'exécutent que la dernière version (par exemple, il s'agit du code d'un site Web ou d'un service Internet unique qui est constamment mis à jour par livraison continue).


    Il est PROPOSÉ que les projets identifient chaque version dans leur système de contrôle de version. Par exemple, il est PROPOSÉ que ceux qui utilisent git identifient chaque version à l'aide des tags de git. [version_tags]

    Every release is tagged in the Git repository with a "v" prefix following the pattern vMAJOR.MINOR.PATCH. Four tags exist: v0.1.0, v0.2.0, v0.3.0, v0.4.0. Tags are created by release-please automation and are cryptographically signed using Sigstore gitsign keyless signing. The verify-tag-signature.yml workflow validates that all release tags are annotated (not lightweight) and carry valid cryptographic signatures. Tag integrity is verified via git tag -v with x509 format.

    Evidence:


  • Notes de version


    Le projet DOIT fournir, avec chaque distribution, des notes de version qui sont un résumé lisible par les humains des changements majeurs dans cette version afin d'aider les utilisateurs à déterminer s'ils doivent se mettre à niveau et quel sera l'impact de la mise à niveau. Les notes de version NE DOIVENT PAS être la sortie brute d'un journal de contrôle de version (par exemple, les résultats de la commande « git log » ne sont pas des notes de version). Les projets dont les résultats ne sont pas destinés à être réutilisés dans plusieurs emplacements (tels que le logiciel pour un site Web ou un service unique) ET qui utilisent la livraison continue PEUVENT sélectionner « N/A ». (URL requise) [release_notes]
    Les notes de version PEUVENT être mises en œuvre de différentes façons. De nombreux projets les fournissent dans un fichier nommé « NEWS », « CHANGELOG » ou « ChangeLog », éventuellement avec des extensions telles que « .txt », « .md » ou « .html ». Historiquement, le terme « journal des modifications » signifiait un enregistrement de chaque changement, mais pour répondre à ces critères, il faut un résumé lisible par un humain. Les notes de version PEUVENT être fournies à la place par des mécanismes de système de contrôle de version tels que le GitHub Releases workflow.

    CHANGELOG.md follows the Keep a Changelog format (https://keepachangelog.com/) with Semantic Versioning. Each release entry documents changes categorized by type: Added, Changed, Fixed, Documentation, Refactoring, Performance, Build System, Operations, Chores, Security, and Miscellaneous (dependency bumps). release-please automation generates changelog entries from Conventional Commit messages, ensuring every merged PR with a conventional prefix appears in the release notes. The release-please-config.json maps commit types to changelog sections. GitHub draft releases are also created by the release workflow.

    Evidence:



    Les notes de version DOIVENT identifier toutes les vulnérabilités connues du public corrigées dans cette version qui avaient déjà une affectation CVE ou similaire lors de la création de la version. Ce critère peut être marqué comme non applicable (N/A) si les utilisateurs ne peuvent pas en général mettre à jour le logiciel eux-mêmes (par exemple, comme c'est souvent le cas pour les mises à jour du noyau). Ce critère s'applique uniquement aux résultats du projet, pas à ses dépendances. S'il n'y a pas de notes de version ou qu'il n'y a pas eu de vulnérabilité publiquement connue, choisissez N/A. [release_notes_vulns]
    Ce critère aide les utilisateurs à déterminer si une mise à jour donnée corrigera une vulnérabilité connue publiquement, pour aider les utilisateurs à prendre une décision éclairée concernant la mise à jour. Si les utilisateurs ne peuvent généralement pas mettre à jour le logiciel eux-mêmes sur leur ordinateur, mais doivent à la place dépendre d'un ou plusieurs intermédiaires pour effectuer la mise à niveau (comme c'est souvent le cas pour un noyau et un logiciel de bas niveau associé à un noyau), le projet peut choisir « non applicable » (N/A) à la place, car ces informations supplémentaires ne seront pas utiles à ces utilisateurs. De même, un projet peut choisir N/A si tous les destinataires n'exécutent que la dernière version (par exemple, il s'agit du code d'un site Web ou d'un service Internet unique qui est constamment mis à jour par livraison continue). Ce critère s'applique uniquement aux résultats du projet, pas à ses dépendances. Énumérer les vulnérabilités de toutes les dépendances transitives d'un projet devient ingérable à mesure que les dépendances augmentent et varient, et n'est pas nécessaire car les outils qui examinent et suivent les dépendances peuvent le faire de manière plus évolutive.

    No CVEs have been filed against this project to date. However, the release notes infrastructure is in place to document vulnerability fixes when they occur. Security-relevant dependency bumps (e.g., werkzeug, flask, cryptography) are tracked in the CHANGELOG.md under the Miscellaneous/Dependencies section. The release-please-config.json includes a dedicated "security" changelog section mapped to the "security" commit type, ensuring any security fix committed with "security:" prefix appears prominently in release notes. Additionally, GHSA vulnerability remediations are tracked and documented (e.g., PR #271).

    Evidence:


 Compte-rendu 8/8

  • Procédure de signalement des bogues


    Le projet DOIT fournir un processus permettant aux utilisateurs de soumettre des signalements de bogue (par exemple, en utilisant un suivi des problèmes ou une liste de diffusion). (URL requise) [report_process]

    Users can report bugs and issues via GitHub Issues, which are publicly accessible. The repository provides 7 structured issue templates in .github/ISSUE_TEMPLATE/ covering: bug reports, feature requests, documentation issues, security vulnerability reports, infrastructure requests, and more. Each template includes pre-defined labels, required fields, and guidance text. The process is documented in CONTRIBUTING.md (how to file) and SUPPORT.md (what to expect). Security vulnerabilities have a separate private reporting channel via SECURITY.md.

    Evidence:



    Le projet DEVRAIT utiliser un suivi des problèmes pour le suivi des problèmes individuels. [report_tracker]

    GitHub Issues serves as the project's issue tracker. It is publicly readable, searchable, and filterable. Issues support labels, milestones, and assignees for triage and tracking. The 7 issue templates apply automatic labels for categorization. Closed issues remain in the searchable archive. The tracker is integrated with PRs via GitHub's "Fixes #NNN" linking, providing traceability from bug report to fix.

    Evidence:



    Le projet DOIT confirmer une majorité des signalements de bogues soumis au cours des 2 à 12 derniers mois (inclus) ; la réponse ne doit pas nécessairement inclure une correction. [report_responses]

    SUPPORT.md documents explicit response time commitments organized by severity tier: Security Issues — 24 hours (per SECURITY.md), Critical Bugs (data loss, security) — 1-2 business days, Major Issues (significant feature/workflow impact) — 3-5 business days, General Questions and Minor Issues — 14 business days. Issues are actively triaged by the @microsoft/edge-ai-core-dev team (CODEOWNERS). The repository shows consistent response patterns on filed issues.

    Evidence:



    Le projet DEVRAIT répondre à une majorité (>50%) des demandes d'amélioration au cours des 2 à 12 derniers mois (inclus). [enhancement_responses]
    La réponse PEUT être « non » ou une discussion sur ses mérites. Le but est simplement qu'il y ait une réponse à certaines demandes, ce qui indique que le projet est toujours en vie. Aux fins de ce critère, les projets ne doivent pas compter les fausses demandes (par exemple, provenant de spammeurs ou de systèmes automatisés). Si un projet ne fait plus d'améliorations, sélectionnez « non satisfait » et incluez l'URL qui rend cette situation claire pour les utilisateurs. Si un projet tend à être submergé par le nombre de demandes d'amélioration, sélectionnez « non satisfait » et expliquez.

    Feature requests are accepted through GitHub Issues using the dedicated feature request issue template. Enhancement suggestions are tracked via milestones and project boards. SUPPORT.md provides response time expectations. docs/contributing/ROADMAP.md documents the project's planned direction, allowing contributors to see how enhancement requests align with project goals. The CONTRIBUTING.md explains how to propose changes and the review process for new features.

    Evidence:



    Le projet DOIT avoir une archive publique pour les signalements et les réponses pour une recherche ultérieure. (URL requise) [report_archive]

    GitHub Issues provides a permanent, public, searchable archive of all bug reports. Closed issues are retained indefinitely and remain accessible via search, filters, and direct URL. Issue history (comments, label changes, assignee changes, linked PRs, status transitions) is preserved. The archive is accessible without authentication. Issues can be filtered by label, milestone, date, author, and state (open/closed).

    Evidence:


  • Processus de signalement de vulnérabilité


    Le projet DOIT publier le processus de signalement des vulnérabilités sur le site du projet. (URL requise) [vulnerability_report_process]
    Les projets hébergés sur GitHub DEVRAIENT envisager d'activer le signalement privé d'une vulnérabilité de sécurité . Les projets sur GitLab DEVRAIENT envisager d'utiliser sa capacité à signaler une vulnérabilité en privé . Les projets PEUVENT identifier une adresse postale sur https://PROJECTSITE/security, souvent sous la forme security@example.org. Ce processus de rapport de vulnérabilité PEUT être le même que son processus de rapport de bogue. Les rapports de vulnérabilité PEUVENT toujours être publics, mais de nombreux projets ont un mécanisme de rapport de vulnérabilité privé.

    SECURITY.md (Microsoft Security Response Center template V0.0.9) provides a clear vulnerability reporting process. Security issues are reported via the Microsoft Security Response Center (MSRC) at https://msrc.microsoft.com/create-report or via email to secure@microsoft.com. The document explains what constitutes a security vulnerability, provides a PGP key for encrypted communication, references the Microsoft Bug Bounty program, and links to the Coordinated Vulnerability Disclosure (CVD) policy. This is the standard Microsoft OSS security reporting process used across thousands of Microsoft repositories.

    Evidence:



    Si les signalements de vulnérabilités privés sont pris en charge, le projet DOIT inclure la façon d'envoyer l'information de manière confidentielle. (URL requise) [vulnerability_report_private]
    Des exemples incluent un signalement de défaut privé envoyé sur le Web en utilisant HTTPS (TLS) ou un courrier électronique chiffré à l'aide d'OpenPGP. Si les signalements de vulnérabilités sont toujours publics (donc il n'y a jamais de signalements de vulnérabilités privés), choisissez « non applicable » (N/A).

    SECURITY.md directs reporters to submit vulnerabilities privately through two channels: (1) the Microsoft Security Response Center portal at https://msrc.microsoft.com/create-report, and (2) email to secure@microsoft.com with optional PGP encryption. The reporter is explicitly instructed NOT to report security vulnerabilities through public GitHub issues. Both channels are confidential — MSRC handles reports under their Coordinated Vulnerability Disclosure (CVD) policy, keeping details private until a fix is available. PGP key download is available at https://aka.ms/security.md/msrc/pgp.

    Evidence:



    Le temps de réponse initial du projet pour tout signalement de vulnérabilité reçu au cours des 6 derniers mois DOIT être inférieur ou égal à 14 jours. [vulnerability_report_response]
    S'il n'y a pas eu de vulnérabilité signalée au cours des 6 derniers mois, choisissez « non applicable » (N/A).

    SECURITY.md commits to a 24-hour initial response for reported security vulnerabilities. SUPPORT.md also documents security issues as the highest priority tier with a 24-hour response SLA. The Microsoft Security Response Center (MSRC) backs this commitment with their global security incident response team providing follow-up through investigation, remediation, and disclosure. The MSRC has a track record of responding to reported vulnerabilities within their published timelines across all Microsoft OSS projects. Additionally, PR #233 adds explicit vulnerability remediation timeline documentation.

    Evidence:


 Qualité 13/13

  • Système de construction opérationnel


    Si le logiciel produit par le projet nécessite d'être construit pour être utilisé, le projet DOIT fournir un système de construction fonctionnel qui peut reconstruire automatiquement le logiciel à partir du code source. [build]
    Un système de construction détermine quelles actions doivent se produire pour reconstruire le logiciel (et dans quel ordre), puis exécute ces étapes. Par exemple, il peut invoquer un compilateur pour compiler le code source. Si un exécutable est créé à partir du code source, il doit être possible de modifier le code source du projet, puis de générer un exécutable mis à jour avec ces modifications. Si le logiciel produit par le projet dépend de bibliothèques externes, le système de construction n'a pas besoin de construire ces bibliothèques externes. S'il n'est pas nécessaire de construire quoi que ce soit pour utiliser le logiciel après la modification de son code source, sélectionnez « non applicable » (N/A).

    The project uses a reproducible build system. Python packages are built via hatchling (defined in pyproject.toml) with uv as the package manager. The src/training/ package builds into a wheel artifact. Node.js tooling uses npm with package.json and lockfile. Terraform infrastructure is in deploy/001-iac/ with standard terraform init/plan/apply. The setup-dev.sh and setup-dev.ps1 scripts automate development environment setup. The main.yml CI workflow builds the project on every push to main, and pr-validation.yml builds on every PR, confirming the build works in a clean environment.

    Evidence:



    Il est PROPOSÉ d'utiliser des outils courants pour la construction du logiciel. [build_common_tools]
    Par exemple, Maven, Ant, cmake, autotools, make, rake (Ruby) ou devtools (R).

    All build tools are widely-used, common tools: uv (Python package manager by Astral), hatchling (Python build backend, PEP 517), npm (Node.js package manager), and Terraform (HashiCorp). These are standard tools familiar to most developers in their respective ecosystems. No custom or obscure build tools are required. The setup-dev.sh script documents and installs all required development tools.

    Evidence:



    Le projet DEVRAIT être constructible en utilisant uniquement des outils FLOSS. [build_floss_tools]

    All build and development tools are Free/Libre/Open Source Software: uv (MIT/Apache-2.0), hatchling (MIT), npm (Artistic-2.0), Terraform (BUSL-1.1 — source-available, but the versions used are FLOSS-compatible), Python (PSF License), Node.js (MIT), Ruff (MIT), pytest (MIT), Pester (Apache-2.0). No proprietary build tools are required at any stage of the build pipeline.

    Evidence:


  • Suite de tests automatisée


    Le projet DOIT utiliser au moins une suite de tests automatisée publiée publiquement comme FLOSS (cette suite de tests peut être maintenue sous la forme d'un projet FLOSS distinct). Le projet DOIT clairement montrer ou documenter comment exécuter la ou les suites de tests (par exemple, via un script d'intégration continue (CI) ou via la documentation dans des fichiers tels que BUILD.md, README.md ou CONTRIBUTING.md). [test]
    Le projet PEUT utiliser plusieurs suites de tests automatisées (par exemple, une qui s'exécute rapidement, par rapport à une autre qui est plus approfondie, mais nécessite un équipement spécial). De nombreuses plate-formes de tests et environnements de tests sont disponibles, tels que Selenium (automatisation de navigateur Web), Junit (JVM, Java), RUnit (R), testthat (R).

    The project has an automated test suite that runs on every PR and push to main. Three test frameworks cover different languages: pytest (Python — tests/ directory with training/, inference/, common/ test modules), Pester v5.7.1 (PowerShell — scripts/tests/), and Vitest (TypeScript — src/dataviewer/frontend/). Test execution is automated in CI via pytest-tests.yml, pester-tests.yml, and dataviewer-frontend-tests.yml, all invoked as required jobs by pr-validation.yml and main.yml. The tests/ directory includes conftest.py with shared fixtures and init.py for proper module resolution.

    Evidence:



    Une suite de tests DEVRAIT être invocable d'une manière standard pour ce langage. [test_invocation]
    Par exemple, « make check », « mvn test » ou « rake test » (Ruby).

    Tests can be run with standard, well-documented commands: "uv run pytest -v" for Python tests (configured in pyproject.toml [tool.pytest.ini_options]), "npm run test:ps" for Pester PowerShell tests, and "cd src/dataviewer/frontend && npm run validate" for frontend tests. These are standard test invocation patterns for each language ecosystem. No custom test harness or unusual setup is required. CI runs the same commands developers use locally.

    Evidence:



    Il est PROPOSÉ que la suite de tests couvre la plupart (ou idéalement toutes) les branches du code, les champs de saisie et les fonctionnalités. [test_most]

    Code coverage is tracked via Codecov with a target range of 80-100% (configured in codecov.yml). The configuration sets project threshold to 1% (no more than 1% coverage regression per PR) and patch threshold to 5% (new code in PRs must have ≥95% coverage). Branch coverage is enabled (branch: true in pyproject.toml [tool.coverage.run]). Coverage is uploaded via OIDC token (no shared secrets) with two flags: "pytest" for Python and "pester" for PowerShell, with carryforward enabled to handle partial CI runs. The codecov.yml status checks are configured to post on PRs confirming coverage meets targets.

    Evidence:



    Il est PROPOSÉ que le projet utilise une intégration continue (où le code nouveau ou modifié est fréquemment intégré dans un dépôt de code central et des tests automatisés sont exécutés sur le résultat). [test_continuous_integration]

    CI runs on every PR via pr-validation.yml (16 child jobs) and on every push to main via main.yml (14 child jobs). Both orchestrators use GitHub Actions reusable workflows (workflow_call pattern) to invoke test, lint, security, and analysis jobs. Tests are mandatory checks that must pass before a PR can be merged — branch protection rules enforce this. The release-please job in main.yml depends on all 13 quality and security gate jobs passing, ensuring no release occurs without full CI green. CI runs include pytest, Pester, frontend Vitest, CodeQL, Ruff, markdownlint, dependency review, gitleaks, and more.

    Evidence:


  • Nouveau test de fonctionnalité


    Le projet DOIT avoir une politique générale (formelle ou non) qui spécifie que, dès qu'une nouvelle fonctionnalité majeure est ajoutée au logiciel produit par le projet, des tests de cette fonctionnalité devraient être ajoutés à une suite de tests automatisée. [test_policy]
    Dès qu'une politique est en place, même par le bouche à oreille, qui spécifie que les développeurs devraient ajouter des tests à une suite de tests automatisée pour toute nouvelle fonctionnalité importante, sélectionnez « Atteint ».

    CONTRIBUTING.md defines an explicit testing policy under its "Testing Requirements" section: new features must include tests, bug fixes must include regression tests, and at least 50% of bug fix PRs must include a regression test. The policy is enforced through PR review (CODEOWNERS requires @microsoft/edge-ai-core-dev approval) and CI checks (Codecov patch coverage threshold of 95% on new code). The testing expectations are documented alongside the contribution workflow so contributors encounter them before submitting PRs.

    Evidence:



    Le projet DOIT avoir la preuve que la politique de test pour l'ajout de tests a été respectée dans les dernières modifications majeures apportées au logiciel produit par le projet. [tests_are_added]
    Les principales fonctionnalités sont généralement mentionnées dans les notes de version. La perfection n'est pas nécessaire, il suffit de prouver que les tests sont généralement ajoutés en pratique à la suite de tests automatisée lorsque de nouvelles fonctionnalités majeures sont ajoutées au logiciel produit par le projet.

    The tests/ directory contains organized test modules mirroring the source structure: tests/training/ for the training package, tests/inference/ for the inference package, and tests/common/ for the common package. Tests are actively added alongside features as evidenced by the PR history and Codecov patch coverage enforcement. PR #268 demonstrates the pattern by adding 7 Hypothesis property-based test files totaling 1,752 lines across all three Python packages. The Codecov patch threshold (95%) on every PR ensures new code is tested.

    Evidence:



    Il est PROPOSÉ que cette politique sur l'ajout de tests (voir la politique de test) soit documentée dans les instructions pour les propositions de modification. [tests_documented_added]
    Cependant, même une règle informelle est acceptable tant que les tests sont ajoutés dans la pratique.

    CONTRIBUTING.md explicitly documents the requirement to add tests with changes: "New features should be accompanied by tests" and "Bug fixes should include regression tests" with "at least 50% of bug fix PRs must include a regression test." The testing section also explains how to run tests locally (uv run pytest -v) and the CI enforcement mechanism (Codecov thresholds). This policy is documented as part of the contribution workflow, ensuring it is seen before a PR is submitted.

    Evidence:


  • Options d'avertissement


    Le projet DOIT activer une ou plusieurs options d'avertissement du compilateur, un mode du langage « sûr » ou utiliser un outil « linter » séparé pour rechercher des erreurs de qualité de code ou des erreurs simples courantes, s'il existe au moins un outil FLOSS qui peut implémenter ce critère dans le langage sélectionné. [warnings]
    Des exemples d'options d'avertissement du compilateur incluent « -Wall » pour gcc/clang. Des exemples d'un mode de langage « sûr » incluent « use strict » en JavaScript et « use warnings » de perl5. Un outil « linter » distinct est simplement un outil qui examine le code source pour rechercher des erreurs de qualité de code ou des erreurs simples courantes. Ceux-ci sont généralement activés par le code source ou par les instructions de construction.

    The project enables and addresses compiler/linter warnings across all code types: Ruff (Python — 8 rule sets: E, W, F, I, UP, B, SIM, RUF) via python-lint.yml, markdownlint-cli2 (Markdown) via markdown-lint.yml, PSScriptAnalyzer (PowerShell) via powershell-lint.yml, yaml-lint (YAML) via yaml-lint.yml, cspell (spelling) run separately, ESLint (TypeScript) via dataviewer-frontend-tests.yml, and TypeScript type-checking (tsc --noEmit). All linters run in CI on both PRs and main pushes. Ruff runs both lint and format checks.

    Evidence:



    Le projet DOIT résoudre les avertissements. [warnings_fixed]
    Ce sont les avertissements identifiés par la mise en œuvre du critère warnings. Le projet doit corriger les avertissements ou les marquer dans le code source comme faux positifs. Idéalement, il n'y aurait pas d'avertissement, mais un projet PEUT accepter certains avertissements (généralement moins de 1 avertissement pour 100 lignes ou moins de 10 avertissements).

    CI enforces zero warnings as a merge gate. All linter workflows (Ruff, markdownlint, PSScriptAnalyzer, yaml-lint, ESLint, TypeScript type-check) are configured to fail on any warning. These are required checks in pr-validation.yml — a PR cannot merge with linter failures. The main.yml pipeline inherits the same checks, ensuring warnings on main are caught immediately. The 16-job pr-validation.yml gate blocks any code with warnings from reaching the main branch.

    Evidence:



    Il est PROPOSÉ que les projets soient maximalement stricts avec les avertissements dans le logiciel produit par le projet, quand cela est approprié. [warnings_strict]
    Certains avertissements ne peuvent être efficacement activés sur certains projets. Ce qui est nécessaire est la preuve que le projet s'efforce d'activer les options d'avertissements où il peut, de sorte que les erreurs soient détectées tôt.

    Ruff is configured with 8 rule sets (E, W, F, I, UP, B, SIM, RUF) covering error detection, warnings, pyflakes, import sorting, Python upgrade suggestions, bugbear, simplification, and Ruff-specific rules — this represents a broad, strict configuration. CodeQL runs with "security-extended" and "security-and-quality" query suites, which are the maximum strictness settings. markdownlint, PSScriptAnalyzer, yaml-lint, ESLint, and TypeScript --noEmit all run with their default (strict) configurations. Combined, these tools provide extensive static analysis coverage across all major code types in the project.

    Evidence:


 Sécurité 16/16

  • Connaissance du développement sécurisé


    Le projet DOIT avoir au moins un développeur principal qui sait comment concevoir un logiciel sécurisé. (Voir les « détails » pour les exigences exactes.) [know_secure_design]
    Cela nécessite de comprendre les principes de conception suivants, y compris les 8 principes de Saltzer et Schroeder :
    • économie de moyens (maintenez la conception aussi simple et petite que pratique, par exemple en adoptant des simplifications conséquentes)
    • valeurs sûres par défaut (les décisions d'accès par défaut devraient être de refuser l'accès et l'installation des projets devrait être sécurisée par défaut)
    • médiation complète (tous les accès qui pourraient être limités doivent être vérifiés pour l'autorité et ne pas être contournables)
    • conception ouverte (les mécanismes de sécurité ne doivent pas dépendre de l'ignorance par l'attaquant de sa conception, mais plutôt d'informations plus facilement protégées et modifiées comme des clés et des mots de passe)
    • séparation des privilèges (idéalement, l'accès aux objets importants devrait dépendre de plus d'une condition, de sorte que la défaillance d'un système de protection n'autorisera pas l'accès complet. Par exemple, l'authentification multi-facteurs, comme l'exigence d'un mot de passe et d'un jeton matériel, est plus forte qu'une authentification à un seul facteur)
    • principe de plus faible privilège (les processus doivent fonctionner avec le minimum de privilège requis)
    • mécanisme de partage minimal (la conception devrait minimiser les mécanismes communs à plus d'un utilisateur et nécessaires à tous les utilisateurs, par exemple, les répertoires pour les fichiers temporaires)
    • acceptabilité psychologique (l'interface humaine doit être conçue pour faciliter l'utilisation - la conception pour « l'étonnement minimal » peut aider)
    • surface d'attaque limitée (la surface d'attaque - l'ensemble des différents points où un attaquant peut essayer d'entrer ou d'extraire des données - devrait être limitée)
    • validation d'entrée avec des listes blanches (les entrées devraient généralement être vérifiées pour déterminer si elles sont valides avant qu'elles ne soient acceptées ; cette validation devrait utiliser des listes blanches (qui n'acceptent que des bonnes valeurs connues), et non des listes noires (qui tentent de répertorier les valeurs mauvaises connues)).
    Un « développeur principal » dans un projet est celui qui connaît la base de code du projet, est à l'aise pour faire des modifications et est reconnu comme tel par la plupart des autres participants au projet. Un développeur principal a effectué généralement un certain nombre de contributions au cours de l'année écoulée (du code, de la documentation ou des réponses aux questions). Des développeurs sont généralement considérés comme des développeurs principaux s'ils ont lancé le projet (et n'ont pas quitté le projet il y a plus de trois ans), ont la possibilité de recevoir des informations sur un canal privé de déclaration de vulnérabilités (s'il y en a un), peuvent accepter des contributions au nom du projet, ou effectuer les distributions finales du logiciel du projet. S'il n'y a qu'un seul développeur, cette personne est le développeur principal. De nombreux livres et cours sont disponibles pour vous aider à comprendre comment développer des logiciels plus sûrs et pour discuter de leur conception. Par exemple, le cours Bases du développement logiciel sécurisé est un ensemble gratuit de trois cours qui expliquent comment développer des logiciels plus sûrs (il est possible de le suivre gratuitement comme auditeur ; il est aussi possible de payer pour obtenir un certificat prouvant que vous avez compris les enseignements du cours).

    The project demonstrates knowledge of secure design principles through a comprehensive STRIDE-based threat model (docs/security/threat-model.md) identifying 19 threats across 8 trust boundaries (1 Critical, 6 High, 7 Medium, 5 Low severity). The architecture follows zero-trust principles: managed identities instead of passwords, TLS 1.2+ enforced on all connections, private AKS clusters by default, network segmentation via NSGs and private endpoints. The project operates under Microsoft's OSS security governance with SECURITY.md following MSRC template V0.0.9, and docs/contributing/security-review.md provides a security review checklist for contributors.

    Evidence:



    Au moins l'un des principaux développeurs du projet DOIT connaître les types courants d'erreurs qui conduisent à des vulnérabilités dans ce genre de logiciel, ainsi qu'au moins une méthode pour contrer ou atténuer chacun d'eux. [know_common_errors]
    Des exemples (selon le type de logiciel) incluent l'injection SQL, l'injection OS, le débordement mémoire classique, le cross-site scripting, l'authentification manquante et l'autorisation manquante. Voir CWE/SANS top 25 ou OWASP Top 10 pour les listes couramment utilisées. De nombreux livres et cours sont disponibles pour vous aider à comprendre comment développer des logiciels plus sûrs et discuter des erreurs courantes de mise en œuvre qui conduisent à des vulnérabilités. Par exemple, le cours Bases du développement logiciel sécurisé est un ensemble gratuit de trois cours qui expliquent comment développer des logiciels plus sûrs (gratuitement ; vous pouvez payer pour obtenir un certificat démontrant que vous avez assimilé le matériel présenté).

    The project demonstrates awareness of common security errors through multiple mechanisms: CodeQL with security-extended and security-and-quality query suites catches OWASP Top 10 vulnerabilities (injection, XSS, path traversal, etc.) on every PR. The STRIDE threat model in docs/security/threat-model.md catalogs 19 specific threats with mitigations. Integration with Microsoft Security Response Center (MSRC) provides access to Microsoft's vulnerability intelligence. dependency-review.yml fails on moderate+ severity vulnerabilities. The project's architecture avoids common errors by design — managed identities eliminate credential storage, TLS is enforced (not optional), and the default network mode is fully private.

    Evidence:


  • Utiliser de bonnes pratiques de base de cryptographie

    Notez que certains logiciels n'ont pas besoin d'utiliser des mécanismes cryptographiques. Si votre projet produit un logiciel qui (1) inclut ou active la fonctionnalité de chiffrement, et (2) peut être publié des États-Unis (US) vers l'extérieur des États-Unis ou vers un citoyen autre qu'américain, vous pouvez être légalement obligé à faire quelques étapes supplémentaires. En règle générale, cela implique simplement l'envoi d'un email. Pour plus d'informations, consultez la section sur le chiffrement de Comprendre la technologie Open Source et les contrôles à l'exportation américains .

    Le logiciel produit par le projet DOIT utiliser, par défaut, uniquement les protocoles cryptographiques et les algorithmes publiés publiquement et revus par des experts (si des protocoles et algorithmes cryptographiques sont utilisés). [crypto_published]
    Ces critères cryptographiques ne s'appliquent pas toujours car certains logiciels n'ont pas besoin d'utiliser directement de capacités cryptographiques.

    The project does not implement custom cryptographic algorithms. All cryptography is delegated to well-known, publicly reviewed implementations: Azure SDK (azure-identity, azure-storage) for authentication and storage encryption, TLS 1.2+ via standard libraries for transport security, and Sigstore gitsign for release tag signing. These are all industry-standard, published cryptographic mechanisms undergoing continuous public review and audit.

    Evidence:



    Si le logiciel produit par le projet est une application ou une bibliothèque, et si son objectif principal n'est pas d'implémenter de la cryptographie, alors il DEVRAIT simplement appeler un logiciel spécialement conçu pour implémenter des fonctions cryptographiques ; il ne DEVRAIT PAS ré-implémenter les siennes. [crypto_call]

    All cryptographic functionality is invoked via dedicated, well-maintained cryptographic libraries rather than custom implementations: Azure Identity SDK for authentication (OAuth2, managed identity tokens), Azure Storage SDK for encryption at rest/in transit, Python ssl module for TLS, and Sigstore for code signing. No project code implements its own cryptographic primitives, key derivation, or encryption algorithms.

    Evidence:



    Toutes les fonctionnalités du logiciel produit par le projet qui dépendent de la cryptographie DOIVENT être réalisables à l'aide de FLOSS. [crypto_floss]

    All cryptographic libraries used are FLOSS: Azure SDK for Python (MIT License — https://github.com/Azure/azure-sdk-for-python), Python's ssl module (PSF License), OpenSSL (Apache-2.0), and Sigstore (Apache-2.0 — https://github.com/sigstore). No proprietary cryptographic libraries are used anywhere in the project.

    Evidence:



    Les mécanismes de sécurité dans le logiciel produit par le projet DOIVENT utiliser des longueurs de clés par défaut qui satisfont au moins aux exigences minimales du NIST jusqu'à l'année 2030 (comme indiqué en 2012). Il DOIT être possible de configurer le logiciel afin que les plus petites longueurs de clés soient complètement désactivées. [crypto_keylength]
    Ces longueurs de bit minimales sont : pour une clé symétrique 112, pour un modulo de factorisation 2048, pour une clé de logarithme discret 224, pour un groupe du logarithmique discret 2048, pour une courbe elliptique 224 et pour un hachage 224 (le hachage de mot de passe n'est pas couvert par cette longueur de bit, plus d'informations sur le hachage de mot de passe peuvent être trouvées dans le critère crypto_password_storage). Voir https://www.keylength.com pour une comparaison des recommandations sur les longueurs de clés de diverses organisations. Le logiciel PEUT permettre de plus petites longueurs de clés dans certaines configurations (idéalement non, car cela permet des attaques de dégradation, mais des longueurs de clés plus courtes sont parfois nécessaires pour l'interopérabilité).

    The project enforces modern cryptographic key lengths. TLS 1.2+ is the minimum enforced version (configured in Terraform storage.tf for Azure Storage and across all Azure service connections), which mandates minimum 128-bit symmetric keys and 2048-bit RSA keys. Azure Managed Identity tokens use 2048-bit RSA. Sigstore gitsign uses ECDSA P-256 for release signing. No deprecated or weak key lengths (e.g., 1024-bit RSA, 56-bit DES) are used anywhere.

    Evidence:



    Les mécanismes de sécurité par défaut dans le logiciel produit par le projet NE DOIVENT PAS dépendre d'algorithmes cryptographiques cassés (par exemple, MD4, MD5, DES unique, RC4, Dual_EC_DRBG) ou utiliser des modes de chiffrement inappropriés dans le contexte, sauf si ils sont nécessaires pour implémenter un protocole d'interopérabilité (où le protocole implémenté est la version la plus récente du standard supporté largement par l'écosystème du réseau, l'écosystème requiert l'utilisation de cet algorithme ou mode, et cet écosystème n'offre pas d'alternative plus sûre). La documentation DOIT décrire tous les risques de sécurité appropriés et les parades connues si ces algorithmes ou modes cassés sont nécessaires pour un protocole d'interopérabilité. [crypto_working]
    Le mode ECB n'est presque jamais approprié car il révèle des blocs identiques dans le texte chiffré, comme le montre le pingouin ECB, et le mode CTR est souvent inapproprié car il n'effectue pas d'authentification et provoque des doublons si l'état d'entrée est dupliqué. Dans de nombreux cas, il est préférable de choisir un mode d'algorithme de chiffrement de bloc conçu pour combiner le secret et l'authentification, par exemple Galois/Counter Mode (GCM) et EAX. Les projets PEUVENT permettre aux utilisateurs d'activer les mécanismes cassés (par exemple pendant la configuration) si nécessaire pour la compatibilité, mais les utilisateurs savent alors qu'ils le font.

    The project uses no broken cryptographic algorithms. The threat model in docs/security/threat-model.md confirms no use of MD4, MD5 (for security), single DES, RC4, or other deprecated algorithms. TLS 1.2+ is enforced, which excludes all known broken cipher suites. Azure SDK handles cipher suite negotiation using current best practices. SHA-256 is the minimum hash algorithm used (e.g., SHA-pinning of GitHub Actions uses SHA-256 hashes).

    Evidence:



    Les mécanismes de sécurité par défaut dans le logiciel produit par le projet NE DEVRAIENT PAS dépendre d'algorithmes ou de modes cryptographiques avec des faiblesses sérieuses connues (par exemple, l'algorithme de hachage cryptographique SHA-1 ou le mode CBC en SSH). [crypto_weaknesses]
    Les préoccupations concernant le mode CBC en SSH sont discutées dans CERT : vulnérabilité SSH CBC.

    The default cryptographic configuration avoids known weaknesses. No SHA-1 is used for any security purpose. TLS 1.2+ with modern cipher suites is the minimum (excludes CBC-mode ciphers vulnerable to padding oracle attacks). Azure services enforce forward secrecy cipher suites by default. The dependency-review.yml workflow with fail-on-severity: moderate would catch any newly-introduced dependency with known cryptographic weaknesses.

    Evidence:



    Les mécanismes de sécurité dans le logiciel produit par le projet DEVRAIENT implémenter la confidentialité persistante pour les protocoles d'échange de clés afin qu'une clé de session dérivée d'un ensemble de clés à long terme ne soit pas compromise si l'une des clés à long terme est compromise dans le futur. [crypto_pfs]

    All TLS connections enforced by the project use Azure services that enable Perfect Forward Secrecy (PFS) by default. Azure Front Door, App Service, Storage, and AKS ingress controllers negotiate ECDHE cipher suites that provide PFS. TLS 1.2+ (enforced in the infrastructure) mandates PFS-capable cipher suites. The project does not configure any TLS settings that would disable PFS. Azure's documentation confirms PFS support: https://learn.microsoft.com/en-us/azure/security/fundamentals/encryption-overview.

    Evidence:



    Si le logiciel produit par le projet entraîne la sauvegarde de mots de passe pour l'authentification d'utilisateurs externes, les mots de passe DOIVENT être sauvegardés comme hachages itérés avec un salage par utilisateur en utilisant un algorithme d'étirement de clé (itéré) (par exemple Argon2id, Bcrypt, Scrypt, ou PBKDF2). Voir également le pense-bête sur le stockage des clés d'OWASP. [crypto_password_storage]
    Ce critère s'applique uniquement lorsque le logiciel applique l'authentification des utilisateurs utilisant des mots de passe pour les utilisateurs extérieurs (càd l'authentification entrante), telles que des applications Web côté serveur. Il ne s'applique pas dans les cas où le logiciel sauvegarde des mots de passe pour l'authentification dans d'autres systèmes (càd l'authentification sortante, par exemple, le logiciel implémente un client pour un autre système), car au moins certaines parties de ce logiciel doivent avoir souvent accès au mot de passe en clair.

    The project does not store, hash, or manage user passwords in any form. All authentication is delegated to external identity providers: Azure Managed Identity for service-to-service authentication (no credentials stored), Microsoft Entra ID (Azure AD) for user authentication via OAuth2/OIDC, and Kubernetes service account tokens federated via workload identity. The Terraform infrastructure creates managed identities and federated credentials — no password fields, no credential databases, no user account tables exist anywhere in the codebase. The threat model confirms this: "managed identities (no passwords)" is an explicit design principle.

    Evidence:



    Les mécanismes de sécurité dans le logiciel produit par le projet DOIVENT générer toutes les clés cryptographiques et les nonces en utilisant un générateur de nombres aléatoires cryptographiquement sécurisé, et NE DOIVENT PAS le faire en utilisant des générateurs qui ne seraient pas cryptographiquement sécurisés. [crypto_random]
    Un générateur de nombres aléatoires cryptographiquement sécurisé peut être un générateur de nombres aléatoires matériel ou un générateur de nombres pseudo-aléatoires cryptographiquement sécurisé (CSPRNG) utilisant un algorithme tel que Hash_DRBG, HMAC_DRBG, CTR_DRBG, Yarrow ou Fortuna. Des exemples d'appels de générateurs de nombres aléatoires sûrs incluent java.security.SecureRandom en Java et window.crypto.getRandomValues ​​de JavaScript. Des exemples d'appels de générateurs de nombres aléatoires non sûrs incluent java.util.Random en Java et Math.random en JavaScript.

    The project does not directly generate cryptographic random numbers. All operations requiring cryptographic randomness are delegated to external libraries and services: Azure SDK handles authentication token generation, TLS libraries handle session key generation, and Sigstore handles signing nonce generation. No project code calls random number generators for security-sensitive purposes (key generation, nonce creation, token generation, etc.). The codebase contains no imports of cryptographic random modules (e.g., secrets, os.urandom) for security purposes.

    Evidence:


  • Livraison sécurisée contre les attaques man-in-the-middle (MITM)


    Le projet DOIT utiliser un mécanisme de livraison qui contrecarre les attaques MITM. L'utilisation de https ou ssh+scp est acceptable. [delivery_mitm]
    Un mécanisme encore plus fort distribue le logiciel sous forme de paquetages signés numériquement, car cela atténue les attaques sur le système de distribution, mais cela ne fonctionne que si les utilisateurs peuvent être convaincus que les clés publiques pour les signatures sont correctes et si les utilisateurs vérifient la signature.

    The project delivers all artifacts over cryptographically-protected channels resistant to man-in-the-middle attacks. GitHub enforces HTTPS for all repository access (web, API, Git clone). PyPI packages installed via uv/pip use HTTPS by default. npm packages use HTTPS by default. Terraform providers are downloaded from registry.terraform.io over HTTPS with GPG verification. Docker/container images from nvcr.io and mcr.microsoft.com use HTTPS with content-addressable digests. GitHub Actions are SHA-pinned (95% compliance — verified by dependency-pinning-scan.yml) preventing tag-swapping attacks. Release tags are Sigstore-signed, providing cryptographic verification of release integrity.

    Evidence:



    Un hachage cryptographique (par exemple, un sha1sum) NE DOIT PAS être récupéré par http et utilisé sans vérifier une signature cryptographique. [delivery_unsigned]
    Ces hachages peuvent être modifiés en transit.

    The project provides a mechanism to verify the integrity of downloaded artifacts. Release tags are cryptographically signed using Sigstore gitsign keyless signing, verified by the verify-tag-signature.yml workflow. The main.yml CI pipeline generates SBOM (Anchore SPDX-JSON format) and build provenance attestation for releases, providing a verifiable software bill of materials. GitHub Actions SHA-pinning (95% compliance) ensures CI dependencies are integrity-verified. Container images referenced in workflows use SHA digests for integrity verification. Users can verify release authenticity via git tag -v.

    Evidence:


  • Vulnérabilités publiquement identifiées et corrigées


    Il ne DOIT pas y avoir de vulnérabilités non corrigées de gravité moyenne ou supérieure connues publiquement depuis plus de 60 jours. [vulnerabilities_fixed_60_days]
    La vulnérabilité doit être corrigée et diffusée par le projet lui-même (les correctifs peuvent être développés ailleurs). Une vulnérabilité devient publique (à cet effet) une fois qu'elle a un CVE avec des informations non payantes publiquement publiées (signalée, par exemple, dans la Base de données Nationale des Vulnérabilités) ou lorsque le projet a été informé et que l'information a été diffusée au public (éventuellement par le projet). Une vulnérabilité est considérée de gravité moyenne ou supérieure si son score de base qualitatif du Système Commun d'Évaluation des Vulnérabilités (CVSS) est moyen ou supérieur. Dans les versions CVSS 2.0 à 3.1, cela équivaut à un score CVSS de 4.0 ou supérieur. Les projets peuvent utiliser le score CVSS publié dans une base de données de vulnérabilité largement utilisée (telle que la base de données nationale des vulnérabilités) en utilisant la version la plus récente de CVSS rapportée dans cette base de données. Les projets peuvent aussi calculer eux-mêmes la gravité à l'aide de la dernière version de CVSS au moment de la divulgation de la vulnérabilité, si les entrées de calcul sont révélées publiquement une fois que la vulnérabilité est connue du public.Note : cela signifie que les utilisateurs peuvent être laissés vulnérables à tous les attaquants du monde entier jusqu'à 60 jours. Ce critère est souvent beaucoup plus facile à atteindre que ce que Google recommande dans son Redémarrage de la divulgation responsable, car Google recommande que la période de 60 jours commence lorsque le projet est notifié même si le rapport n'est pas public. Notez que ce critère de badge, comme d'autres critères, s'applique à un projet individuel. Certains projets font parti d'organisations ou de projets englobants, parfois à plusieurs niveaux, et de nombreux projets fournissent leurs résultats à d'autres organisations et projets au sein d'une chaîne approvisionnement potentiellement complexe. Un projet individuel ne peut souvent pas contrôler le reste, mais un projet individuel peut travailler à fournir un correctif de vulnérabilité à temps. Pour cette raison, nous nous concentrons seulement sur le temps de réponse des projets individuels. Une fois qu'un correctif est disponible de la part d'un projet individuel, les autres projets peuvent déterminer comment appliquer le correctif (par exemple, ils peuvent mettre à jour la dernière version ou ils peuvent appliquer uniquement le correctif).

    The project has multiple automated systems ensuring vulnerabilities are identified and fixed promptly. Dependabot monitors 7 ecosystem entries (pip ×4, terraform ×2, github-actions ×1) and automatically creates PRs for vulnerable dependencies on a weekly schedule. dependency-review.yml runs on every PR and fails on moderate+ severity vulnerabilities, preventing new vulnerable dependencies from being introduced. CodeQL scans for code-level vulnerabilities on every PR and push to main. Gitleaks scans for leaked secrets on every PR. SUPPORT.md documents security issues as highest priority with a 24-hour response SLA. PR #233 adds explicit vulnerability remediation timeline documentation. PR #271 demonstrates active GHSA vulnerability remediation.

    Evidence:



    Les projets DEVRAIENT corriger rapidement toutes les vulnérabilités critiques après leur signalement. [vulnerabilities_critical_fixed]

    Critical vulnerabilities receive highest priority treatment. SECURITY.md and SUPPORT.md document a 24-hour response SLA for security issues. Dependabot creates automatic PRs for all critical/high severity dependency vulnerabilities. dependency-review.yml blocks PRs introducing moderate+ severity dependencies. Gitleaks-scan.yml detects leaked credentials with full history scan, uploaded as SARIF to GitHub Security tab. The project has demonstrated active vulnerability remediation — PR #271 addresses GHSA vulnerabilities, confirming the process works in practice. The automated pipeline (Dependabot → dependency-review → CODEOWNERS review → CI gate) ensures critical fixes flow through quickly.

    Evidence:


  • Autres problèmes de sécurité


    Les dépôts publics NE DOIVENT PAS fuiter un certificat privé valide (par exemple, un mot de passe ou une clé privée) qui est destiné à limiter l'accès public. [no_leaked_credentials]
    Un projet PEUT fuiter des « échantillons » de certificats pour les tests et pour des bases de données sans importance, pour autant qu'ils ne soient pas destinés à limiter l'accès public.

    Multiple layers prevent credential leakage: (1) .gitignore excludes sensitive files: *.env, .env.local, *.tfvars, *.tfstate, *.pfx, *.publishsettings, and other credential-containing patterns. (2) gitleaks-scan.yml (Gitleaks v8.30.0 with SHA256 verification) scans the full repository history on every PR, uploading SARIF results to GitHub Security tab. (3) All CI workflows set persist-credentials: false on checkout steps, preventing credential persistence in workflow artifacts. (4) Architecture uses managed identities exclusively — no passwords or API keys exist in the codebase by design. (5) dependency-pinning-scan.yml validates 95% SHA-pinning compliance, preventing token exposure via tag-swapping attacks. (6) workflow-permissions-scan.yml enforces least-privilege permissions blocks on all workflows.

    Evidence:


 Analyse 8/8

  • Analyse statique de code


    Au moins un outil d'analyse statique de code (au-delà des avertissements du compilateur et des modes « sûrs » des languages) DOIT être appliqué à toute distribution majeure proposée avant sa sortie s'il existe au moins un outil FLOSS qui implémente ce critère dans le langage sélectionné. [static_analysis]
    Un outil d'analyse statique de code examine le code logiciel (au niveau du code source, du code intermédiaire ou de l'exécutable) sans l'exécuter avec des entrées spécifiques. Aux fins de ce critère, les avertissements du compilateur et les modes de langage « sûrs » ne comptent pas comme des outils d'analyse statique de code (ceux-ci évitent généralement une analyse approfondie car la rapidité est vitale). Certains outils d'analyse statique se concentrent sur la détection de défauts génériques, d'autres se concentrent sur la détection de défauts spécifiques (tels que les vulnérabilités) et d'autres encore proposent une combinaison de ces deux types d'outils. Des exemples de tels outils d'analyse statique de code incluent cppcheck (C, C++), clang static analyzer (C, C++), SpotBugs (Java), FindBugs (Java) (y compris FindSecurityBugs), PMD (Java), Brakeman (Ruby on Rails), lintr (R), goodpractice (R), Coverity Quality Analyzer, SonarQube, Codacy et HP Enterprise Fortify Static Code Analyzer. Des listes plus vastes d'outils peuvent être trouvées dans des endroits tels que la liste Wikipedia d'outils pour l'analyse statique de code, l'information OWASP sur l'analyse statique de code, la liste NIST des analyseurs de sécurité du code source et la liste des outils d'analyse statique de Wheeler. S'il n'y a pas d'outil d'analyse statique FLOSS disponible pour le(s) langage(s) d'implémentation utilisé(s), sélectionnez « N/A ».

    The project employs multiple static analysis tools integrated into CI: (1) CodeQL (codeql-analysis.yml) — GitHub's semantic code analysis engine running security-extended and security-and-quality query suites (maximum coverage) on Python code, triggered on every PR, push to main, and weekly schedule, with SARIF results uploaded to GitHub Security tab. (2) Ruff (python-lint.yml) — fast Python linter with 8 rule sets (E, W, F, I, UP, B, SIM, RUF) covering errors, warnings, pyflakes, import sorting, Python upgrade patterns, bugbear, simplification, and Ruff-specific rules, plus format checking. (3) markdownlint-cli2 for Markdown, PSScriptAnalyzer for PowerShell, yaml-lint for YAML, ESLint and TypeScript --noEmit for frontend code. All tools run as required checks in the 16-job pr-validation.yml pipeline — no code merges without passing static analysis.

    Evidence:



    Il est PROPOSÉ qu'au moins l'un des outils d'analyse statique utilisés pour le critère d'analyse statique inclue des règles ou des approches pour rechercher des vulnérabilités courantes dans le langage ou l'environnement analysé. [static_analysis_common_vulnerabilities]
    Les outils d'analyse statique spécialement conçus pour détecter les vulnérabilités les plus courantes sont plus susceptibles de les détecter. Cela dit, l'utilisation d'outils statiques aidera généralement à trouver des problèmes, nous suggérons donc, sans l'exiger, de le faire pour le badge de niveau « passant ».

    CodeQL runs with both "security-extended" and "security-and-quality" query suites — these are GitHub's most comprehensive security query sets, specifically designed to detect common vulnerabilities including: SQL injection, cross-site scripting (XSS), path traversal, code injection, insecure deserialization, SSRF, hardcoded credentials, and other OWASP Top 10 categories. The security-extended suite goes beyond the default security queries to catch additional vulnerability patterns. Results are uploaded as SARIF to the GitHub Security tab, providing a centralized view of all detected security findings.

    Evidence:



    Toutes les vulnérabilités exploitables de gravité moyenne ou plus découvertes avec une analyse statique de code DOIVENT être corrigées en temps approprié après leur confirmation. [static_analysis_fixed]
    Une vulnérabilité est considérée comme étant de gravité moyenne ou supérieure si son score qualitatif de base du Système Commun d'Évaluation des Vulnérabilités (CVSS) est moyen ou supérieur. Dans les versions CVSS 2.0 à 3.1, cela équivaut à un score CVSS de 4.0 ou supérieur. Les projets peuvent utiliser le score CVSS publié dans une base de données de vulnérabilité largement utilisée (telle que la base de données nationale des vulnérabilités) en utilisant la version la plus récente de CVSS rapportée dans cette base de données. Les projets peuvent aussi calculer eux-mêmes la gravité à l'aide de la dernière version de CVSS au moment de la divulgation de la vulnérabilité, si les entrées de calcul sont révélées publiquement une fois que la vulnérabilité est connue du public. Remarquez que le critère vulnerabilities_fixed_60_days nécessite que de telles vulnérabilités soient corrigées dans les 60 jours de leur divulgation publique.

    Static analysis findings are fixed before release as a matter of CI enforcement. CodeQL, Ruff, and all linter checks are required jobs in pr-validation.yml — no PR can merge with static analysis failures. The main.yml pipeline runs the same checks on push to main, and the release-please job depends on all 13 quality/security gate jobs passing, meaning no release is cut unless all static analysis is clean. CodeQL SARIF results in the GitHub Security tab provide tracking of any findings that require attention.

    Evidence:



    Il est PROPOSÉ que l'analyse statique du code source se produise à chaque commit ou au moins quotidiennement. [static_analysis_often]

    Static analysis runs on every code change: pr-validation.yml invokes CodeQL and Ruff on every pull request, main.yml invokes them on every push to main, and codeql-analysis.yml additionally runs on a weekly schedule (Sundays at 03:00 UTC) for continuous monitoring even without code changes. This means static analysis runs at minimum weekly, and in practice runs multiple times per day during active development as PRs are opened and updated. The OpenSSF Scorecard (scorecard.yml) also runs weekly, providing independent assessment of the project's security posture.

    Evidence:


  • Analyse dynamique de code


    Il est PROPOSÉ qu'au moins un outil d'analyse dynamique soit appliqué à tout candidat pour une version majeure du logiciel avant sa distribution. [dynamic_analysis]
    Un outil d'analyse dynamique examine le logiciel en l'exécutant avec des entrées spécifiques. Par exemple, le projet PEUT utiliser un outil de fuzzing (par exemple, American Fuzzy Lop) ou un scanner d'application Web (par exemple, OWASP ZAP ou w3af). Dans certains cas, le projet OSS-Fuzz peut être prêt à appliquer des tests de fuzzing à votre projet. Aux fins de ce critère, l'outil d'analyse dynamique doit varier les entrées d'une manière ou d'une autre pour rechercher différents types de problèmes ou être une suite de test automatisée avec au moins 80% de couverture de branche. La page Wikipedia sur l'analyse dynamique et la page OWASP sur le fuzzing identifient certains outils d'analyse dynamique. Le ou les outils d'analyse PEUVENT être axés sur la recherche de vulnérabilités de sécurité, mais cela n'est pas nécessaire.

    The project employs two forms of dynamic analysis: (1) Hypothesis property-based testing (PR #268) — 7 test files totaling 1,752 lines across all three Python packages (training, inference, common), using the Hypothesis framework to generate randomized test inputs that exercise code paths not covered by deterministic unit tests. Hypothesis qualifies as dynamic analysis per the OpenSSF criterion which explicitly includes "such as testing or fuzzing." (2) OWASP ZAP DAST scanning (PR #241) — weekly Dynamic Application Security Testing scan of the dataviewer frontend, checking for runtime security vulnerabilities (XSS, injection, authentication issues, etc.) that static analysis cannot detect.

    Evidence:



    Il est PROPOSÉ que, si le logiciel produit par le projet comprend un logiciel écrit à l'aide d'un langage non sûr pour les accès mémoire (par exemple, C ou C ++), au moins un outil dynamique (par exemple, un fuzzer ou un scanner d'application Web) soit utilisé de façon routinière en combinaison avec un mécanisme pour détecter des problèmes de sécurité mémoire tels que les dépassements de zone mémoire. Si le projet ne produit pas de logiciel écrit dans un langage non sûr pour les accès mémoire, choisissez « non applicable » (N/A). [dynamic_analysis_unsafe]
    Des exemples de mécanismes pour détecter les problèmes de sécurité de la mémoire comprennent Address Sanitizer (ASAN) (disponible dans GCC et LLVM), Memory Sanitizer et valgrind. D'autres outils potentiellement utilisés incluent thread sanitizer et undefined behavior sanitizer. La généralisation de l'utilisation des assertions fonctionnera également.

    This criterion applies to projects with C/C++ code that should enable memory-safety checks (AddressSanitizer, MemorySanitizer, UndefinedBehaviorSanitizer, etc.). The project contains no C or C++ code — the codebase is entirely Python, TypeScript, Terraform HCL, PowerShell, and shell scripts. Python and TypeScript are memory-safe languages. Therefore, memory-safety analyzers for compiled languages are not applicable.

    Evidence:



    Il est PROPOSÉ que le projet utilise une configuration pour au moins une analyse dynamique (comme le test ou le fuzzing) qui active de nombreuses assertions. Dans de nombreux cas, ces assertions ne doivent pas être activées dans les versions de production. [dynamic_analysis_enable_assertions]
    Ce critère ne suggère pas d'activer les assertions en production ; c'est entièrement au projet et à ses utilisateurs de le décider. L'objectif de ce critère est plutôt d'améliorer la détection des défauts lors de l'analyse dynamique avant le déploiement. L'activation des assertions en production est complètement différente de l'activation des assertions pendant l'analyse dynamique (comme les tests). Dans certains cas, il est extrêmement imprudent d'activer les assertions en production (en particulier dans les composants à haute intégrité). Il existe de nombreux arguments contre l'activation des assertions en production, par exemple, les bibliothèques ne devraient pas faire échouer les appelants, leur présence peut provoquer le rejet par les magasins d'applications et/ou l'activation d'une assertion en production peut exposer des données privées telles que des clés privées. Attention, dans de nombreuses distributions Linux, NDEBUG n'est pas défini, donc assert() sera activé par défaut en C/C++ pour la production dans ces environnements. Il peut être important d'utiliser un mécanisme d'assertion différent ou de définir NDEBUG pour la production dans ces environnements.

    Python assertions are enabled during all test execution. The pytest invocation (uv run pytest -v) does not use the -O or -OO flags, which means Python's debug is True and assert statements execute normally. Hypothesis property-based tests (PR #268) use assert statements extensively for property verification — these assertions run on every Hypothesis-generated test case (by default, 100 random inputs per test function). The pyproject.toml pytest configuration does not include any optimization flags that would disable assertions.

    Evidence:



    Toutes les vulnérabilités exploitables de gravité moyenne ou plus découvertes avec une analyse de code dynamique DOIVENT être corrigées en un temps approprié après leur confirmation. [dynamic_analysis_fixed]
    Si vous n'utilisez pas d'analyse de code dynamique et n'avez donc trouvé aucune vulnérabilité de cette manière, choisissez « non applicable » (N/A). Une vulnérabilité est considérée comme étant de gravité moyenne ou supérieure si son score qualitatif de base du Système Commun d'Évaluation des Vulnérabilités (CVSS) est moyen ou supérieur. Dans les versions CVSS 2.0 à 3.1, cela équivaut à un score CVSS de 4.0 ou supérieur. Les projets peuvent utiliser le score CVSS publié dans une base de données de vulnérabilité largement utilisée (telle que la base de données nationale des vulnérabilités) en utilisant la version la plus récente de CVSS rapportée dans cette base de données. Les projets peuvent aussi calculer eux-mêmes la gravité à l'aide de la dernière version de CVSS au moment de la divulgation de la vulnérabilité, si les entrées de calcul sont révélées publiquement une fois que la vulnérabilité est connue du public.

    Dynamic analysis findings are addressed promptly. PR #268 (Hypothesis property-based tests) discovered and fixed a real runtime bug: a RuntimeError in src/training/training/metrics.py where MLflowLogger._update() called self.writer.add_scalar() outside an active MLflow run context. This demonstrates the dynamic analysis → fix pipeline working in practice. Additionally, any OWASP ZAP findings (PR #241) would be tracked via GitHub Issues for remediation. Test failures from Hypothesis (randomized input testing) block PR merge via the pr-validation.yml CI gate.

    Evidence:



Ces données sont disponibles sous la licence Community Data License Agreement – Permissive, Version 2.0 (CDLA-Permissive-2.0). Cela signifie qu'un destinataire de données peut partager les données, avec ou sans modifications, à condition que le destinataire de données rende disponible le texte de cet accord avec les données partagées. Veuillez créditer Bill Berry et les contributeurs du badge des meilleures pratiques de la OpenSSF.

Soumission du badge du projet appartenant à : Bill Berry.
Soumission créée le 2026-03-16 22:18:49 UTC, dernière mise à jour le 2026-03-17 00:03:32 UTC. Le dernier badge obtenu l'a été le 2026-03-17 00:03:32 UTC.