hve-squad

Проекты, которые следуют приведенным ниже лучшим практикам, могут добровольно и самостоятельно оценить себя и продемонстрировать, что они получили значок Open Source Security Foundation (OpenSSF).

Не существует набора практик, гарантирующего, что у программного обеспечения никогда не будет недостатков или уязвимостей; даже формальные методы могут не помочь, если спецификации или допущения ошибочны. Также не существует какой-либо практики, которая могла бы гарантировать, что проект будет поддерживать здоровое и хорошо функционирующее сообщество разработчиков. Однако следующие хорошие правила могут помочь улучшить результаты проектов. Например, некоторые правила описывают ревью несколькими участниками перед выпуском, что может помочь найти технические уязвимости, которые было бы сложно найти другим способом, и помочь построить доверие и желание дальнейшего взаимодействия между разработчиками из разных компаний. Чтобы получить значок, нужно выполнить все критерии с ключевыми словами "НЕОБХОДИМО"/"ОБЯЗАН"/"НЕДОПУСТИМО", все критерии со словом "СЛЕДУЕТ" либо должны удовлетворяться, либо должно быть приведено обоснование их невыполнения, и все критерии со словом "ЖЕЛАТЕЛЬНО" могут быть удовлетворены ИЛИ неудовлетворены (желательно, чтобы они были хотя бы рассмотрены). Если вы хотите ввести общий комментарий вместо объяснения, почему текущая ситуация приемлема, начните текст с '//' и пробела. Приветствуется обратная связь через сайт на GitHub в виде issues или pull requests. Существует также список рассылки для общих вопросов.

Мы с удовольствием предоставляем информацию на нескольких языках, однако, если есть какой-либо конфликт или несоответствие между переводами, английская версия является авторитетной.
Если это ваш проект, пожалуйста, покажите свой значок на странице проекта! Статус значка выглядит следующим образом: Уровень значка для проекта 14231 - passing Вот как вставить его:
Вы можете показать свой статус значка, вставив его в файл с разметкой Markdown:
[![OpenSSF Best Practices](https://www.bestpractices.dev/projects/14231/badge)](https://www.bestpractices.dev/projects/14231)
- или HTML:
<a href="https://www.bestpractices.dev/projects/14231"><img src="https://www.bestpractices.dev/projects/14231/badge"></a>


Это критерии уровня Passing. Вы также можете просмотреть критерии уровня Silver или Gold.

Baseline Series: Базовый уровень 1 Базовый Уровень 2 Базовый Уровень 3

        

 Основы 13/13 ●

  • Общая

    Обратите внимание, что другие проекты могут использовать то же имя.

    APM package that assembles HVE Core agents, prompts, instructions, and skills into one installable bundle for Copilot target environments, and ships a Squad Coordinator that routes your request to a cast of agents in parallel.

    Используйте формат выражения лицензии SPDX; примеры включают «Apache-2.0», «BSD-2-Clause», «BSD-3-Clause», «GPL-2.0+», «LGPL-3.0+», «MIT» и «(BSD-2-Clause OR Ruby)».
    Если используется более одного языка, перечислите их через запятую (пробелы необязательны), и отсортируйте их от наиболее до наименее используемого. Если список длинный, пожалуйста, перечислите по крайней мере три наиболее распространенных. Если языка нет (например, это проект только для документации или только для тестирования), используйте один символ «-» (минус). Для каждого языка используйте общепринятую капитализацию названия, например «JavaScript».
    Common Platform Enumeration (CPE) - это структурированная схема именования для информационных систем, программного обеспечения и пакетов. Она используется в ряде систем и баз данных для отчетов об уязвимостях.
  • Основная информация на веб-сайте проекта


    Веб-сайт проекта ОБЯЗАН кратко описывать, что делает программное обеспечение (какую проблему решает?). [description_good]
    Описание ОБЯЗАНО быть на языке, который могут понять потенциальные пользователи (например, с минимумом жаргона).

    In order not to have a really large readme. The documentation of the product and description were kept under a github pages site. Note that access to this documentation is linked to the github repo.

    https://peter-n91.github.io/hve-squad/index.html



    Веб-сайт проекта ОБЯЗАН предоставлять информацию о том, как: получать и предоставлять обратную связь (например, отчеты об ошибках или улучшения) и вносить свой вклад в программное обеспечение. [interact]

    There is a contributing page in the documentation website of the package that includes everything. Note that access to this documentation is linked to the github repo.

    https://peter-n91.github.io/hve-squad/contributing.html



    В описании того, как сделать вклад, НЕОБХОДИМО объяснить процесс внесения вклада (например, используются ли pull request'ы). (Требуется URL) [contribution]
    Мы предполагаем, что проекты на GitHub используют issues и pull requests, если не указано иное. Описание может быть кратким, например, указывать, что проект использует pull requests, issue tracker или сообщения в список рассылки (какой?).

    Non-trivial contribution file in repository: https://github.com/Peter-N91/hve-squad/blob/main/CONTRIBUTING.md.



    В информацию о том, как внести вклад, СЛЕДУЕТ включать требования к приемлемым взносам (например, ссылку на любой требуемый стандарт кодирования). (Требуется URL) [contribution_requirements]

    The contributing URLs will guide the user on how to properly contribute and we already have some examples where contributors followed the steps to apply their changes.

    https://github.com/Peter-N91/hve-squad/blob/main/CONTRIBUTING.md
    https://peter-n91.github.io/hve-squad/contributing.html


  • Свободная лицензия


    ПО, создаваемое проектом, ОБЯЗАНО быть выпущено под свободной лицензией. [floss_license]
    Свободное ПО (далее СПО) - это программное обеспечение, которое соответствует Определению Открытого ПО (официальный текст на англ.) или Определению Свободного Программного Обеспечения. Примеры таких лицензий включают CC0, MIT, BSD 2-Clause, BSD 3-Clause, Apache 2.0, Меньшая стандартная общественная лицензия GNU (LGPL) и Стандартная общественная лицензия GNU (GPL). Для наших целей это означает, что лицензия ОБЯЗАНА быть: ПО МОЖЕТ одновременно лицензироваться на других условиях (например, приемлема комбинация «GPLv2 или закрытая лицензия»).

    The MIT license is approved by the Open Source Initiative (OSI).



    ЖЕЛАТЕЛЬНО, чтобы все лицензии для ПО, создаваемого проектом, были одобрены Open Source Initiative (OSI). [floss_license_osi]
    Для одобрения OSI используется строгий процесс, чтобы определить, какие лицензии соответствуют Открытому ПО.

    The MIT license is approved by the Open Source Initiative (OSI).



    Проект ОБЯЗАН публиковать лицензию или лицензии своих результатов в стандартном расположении в своем репозитории исходного кода. (Требуется URL) [license_location]
    Например, в качестве файла верхнего уровня с именем LICENSE или COPYING. Имена файлов лицензии МОГУТ сопровождаться расширением, таким как «.txt» или «.md». Другим соглашением может быть наличие каталога с именем LICENSES, содержащего файлы лицензий; имена этих файлов обычно соответствуют SPDX-идентификатору лицензии, за которым следует соответствующее расширение файла, как описано в спецификации REUSE . Обратите внимание, что этот критерий является обязательным только для репозитория с исходным кодом. Вам НЕ нужно включать файл лицензии при генерации чего-либо из исходного кода (например, исполняемого файла, пакета или контейнера). Например, при создании пакета R для Comprehensive R Archive Network (CRAN) рекомендуется следовать стандартной практике CRAN: если лицензия является стандартной, используйте стандартную короткую спецификацию лицензии (чтобы избежать установки еще одной копии текста) и добавьте файл LICENSE в списке исключений, например .Rbuildignore. Аналогично, при создании пакета Debian вы можете поместить в файл copyright ссылку на текст лицензии в /usr/share/common-licenses и исключить файл лицензии из созданного пакета (например, удаляя файл после вызова dh_auto_install). Мы рекомендуем включать машиночитаемую информацию о лицензии в сгенерированных форматах, где это возможно.

    Non-trivial license location file in repository: https://github.com/Peter-N91/hve-squad/blob/main/LICENSE.


  • Документация


    Проект ОБЯЗАН предоставлять базовую документацию для программного обеспечения, создаваемого проектом. [documentation_basics]
    Эта документация должна быть в некоторых формах (таких как текст или видео), которые включают в себя: как установить программное обеспечение, как его запустить, как его использовать (возможно, с помощью учебника с примерами) и как использовать его безопасно (например, что делать и чего не делать), если эти темы применимы для данного программного обеспечения. Документация по безопасности не обязательно должна быть длинной. Проект МОЖЕТ использовать гипертекстовые ссылки для не-проектных материалов в качестве документации. Если проект не создает программное обеспечение, выберите «неприменимо» (N/A).

    Some documentation basics file contents found.



    Проект ОБЯЗАН предоставлять справочную документацию, описывающую внешний интерфейс (как входной, так и выходной) программного обеспечения, создаваемого проектом. [documentation_interface]
    Документация внешнего интерфейса объясняет конечному пользователю или разработчику, как его использовать. Это может включать в себя интерфейс прикладного программирования (API), если программное обеспечение его имеет. Если это библиотека, документируйте основные классы/типы и методы/функции, которые можно вызвать. Если это веб-приложение, определите его URL-интерфейс (часто его интерфейс REST). Если это интерфейс командной строки, документируйте параметры и настройки, которые он поддерживает. Во многих случаях лучше всего, если большая часть этой документации будет автоматически сгенерирована, чтобы эта документация была синхронизирована с программным обеспечением по мере его изменения, но это не требуется. Проект МОЖЕТ использовать гипертекстовые ссылки для не-проектных материалов в качестве документации. Документация МОЖЕТ быть автоматически сгенерирована (там, где это применимо, это часто наилучший способ создания документации). Документация интерфейса REST может быть сгенерирована с использованием Swagger/OpenAPI. Документация по интерфейсу кода МОЖЕТ быть сгенерирована с использованием таких инструментов, как JSDoc (JavaScript), ESDoc (JavaScript), pydoc (Python), devtools (R), pkgdown (R) и Doxygen (многие языки). Просто иметь комментарии в коде реализации недостаточно для выполнения этого критерия; должен быть простой способ увидеть информацию без чтения всего исходного кода. Если проект не создает программное обеспечение, выберите «неприменимо» (N/A).

    A usage screen with some validated scenarios is present on the github pages documentation. Explanatory videos are also available for users. Note that access to this documentation is linked to the github repo.

    https://peter-n91.github.io/hve-squad/usage.html


  • Другое


    Сайты проекта (веб-сайт, репозиторий и URL-адреса для загрузки) ОБЯЗАНЫ поддерживать HTTPS с использованием TLS. [sites_https]
    Для выполнения этого критерия требуется, чтобы URL домашней страницы проекта начинался с "https:", а не "http:". Вы можете получить бесплатные сертификаты от проекта Let's Encrypt. Проекты МОГУТ выполнить этот критерий, используя (например) GitHub Pages, GitLab Pages или проектные страницы SourceForge. Если вы поддерживаете HTTP, мы настоятельно рекомендуем перенаправить HTTP-трафик на HTTPS.

    Given only https: URLs.



    Проект ОБЯЗАН иметь один или несколько механизмов для обсуждения (включая предлагаемые изменения и проблемы), которые доступны для поиска, позволяют ссылаться на сообщения и темы по URL, позволяют новым людям участвовать в некоторых обсуждениях и не требуют установки на стороне клиента проприетарного программного обеспечения. [discussion]
    Примерами приемлемых механизмов являются архивируемые списки рассылки, обсуждения в GitHub issues и pull requests, Bugzilla, Mantis и Trac. Асинхронные механизмы обсуждения (например, IRC) приемлемы, если они отвечают этим критериям; убедитесь, что есть механизм архивирования URL-адресов. Разрешено, хотя и не рекомендуется, использовать проприетарный JavaScript.

    GitHub supports discussions on issues and pull requests.



    Проекту СЛЕДУЕТ предоставлять документацию на английском языке и иметь возможность принимать отчеты об ошибках и комментарии о коде на английском языке. [english]
    Английский в настоящее время является лингва франка компьютерной техники; Поддержка английского языка увеличивает число потенциальных разработчиков и рецензентов во всем мире. Проект может соответствовать этому критерию, даже если английский не является основным языком его ключевых разработчиков.

    The full documentation is under Github pages and in english

    https://peter-n91.github.io/hve-squad



    НЕОБХОДИМО, чтобы проект поддерживался. [maintained]
    Как минимум, проект должен пытаться реагировать на сообщения о серьезных проблемах и уязвимостях. Проект, который активно добивается получения значка, вероятно, и поддерживается тоже. Ресурсы любого проекта и человека ограничены, и обычно проекты будут отклонять некоторые предлагаемые изменения; поэтому ограниченность ресурсов и отклонение предложений сами по себе не указывают на то, что проект не поддерживается.

    Если известно, что проект больше не будет поддерживаться, следует установить для этого критерия значение «Не соответствует» и использовать подходящие механизмы, чтобы указать другим, что он не поддерживается. Например, используйте “DEPRECATED” («УСТАРЕЛ») в качестве первого заголовка в файле README, добавьте “DEPRECATED” в начале его домашней страницы, добавьте “DEPRECATED” в начало описания проекта репозитория кода, добавьте значок об отсутствии поддержки в README проекта и/или домашнюю страницу, пометьте его как устаревший в любых репозиториях пакетов (напр., npm deprecate ) и/или используйте механизм, предоставленный репозиторием кода для его архивирования (например, параметр "archive" у GitHub или пометка "archive" у GitLab, статус «только для чтения» у Gerrit или статус «брошенного» проекта у SourceForge). Дополнительное обсуждение можно найти здесь .

    There are several workflows used to make sure everything is maintained even some testing workflows that validate that what is being implemented and merged didn't break anything (Always called before official release)

    https://github.com/Peter-N91/hve-squad/actions


 Управление изменениями 9/9 ●

  • Публичное хранилище исходного кода с поддержкой версий


    Проект ОБЯЗАН иметь репозиторий (хранилище) исходного кода с управлением версиями, который является общедоступным и имеет URL. [repo_public]
    URL МОЖЕТ быть таким же, как URL проекта. Проект МОЖЕТ использовать частные (непубличные) ветви в конкретных случаях, когда изменение не выпускается публично (например, для устранения уязвимости до того, как она будет открыта для публики).

    Repository on GitHub, which provides public git repositories with URLs.



    Проектный репозиторий исходного кода ОБЯЗАН отслеживать, какие изменения были внесены, кто внес изменения и когда изменения были сделаны. [repo_track]

    Repository on GitHub, which uses git. git can track the changes, who made them, and when they were made.



    Чтобы обеспечить возможность для проверки другими участниками, проектный репозиторий исходного кода ОБЯЗАН включать промежуточные версии для проверки между релизами; НЕДОПУСТИМО хранить в репозитории лишь финальные версии. [repo_interim]
    Проекты МОГУТ опускать отдельные промежуточные версии из своих публичных репозиториев (например, те, которые фиксируют отдельные не обнародованные уязвимости, никогда не будут публично выпущены или включают материалы, которые не могут быть опубликованы на законных основаниях и не находятся в финальной версии).

    There is a pre-release process that creates a pre-release tag of what is being merged to main but the official release stays intact. Like the current situation, we are at v0.16.1 but the pre-release is at v0.16.2-pre
    Users can always use the pre-release if they wish to but it is always better to use the latest one as it is tested.

    https://github.com/Peter-N91/hve-squad/tags
    https://github.com/Peter-N91/hve-squad/releases



    Для хранилища проектного исходного кода ЖЕЛАТЕЛЬНО использовать типовое ПО для распределенного управления версиями (например, git). [repo_distributed]
    Не требуется именно git, и проекты могут использовать централизованное программное обеспечение для управления версиями (например, Subversion) с обоснованием.

    Repository on GitHub, which uses git. git is distributed.


  • Уникальная нумерация версий


    Результаты проекта ОБЯЗАНЫ иметь уникальный идентификатор версии для каждой версии, предназначенной для конечных пользователей. [version_unique]
    Это МОЖНО выполнить различными способами, включая идентификаторы коммита (например, идентификатор коммита git или идентификатор набора изменений mercurial) или номер версии (включая номера версий, которые используют семантическое версионирование или схемы на основе даты, такие как YYYYMMDD).

    Для выпусков ЖЕЛАТЕЛЬНО использовать семантическую либо календарную нумерацию версий. При использовании календарной нумерации к версии ЖЕЛАТЕЛЬНО добавлять микро-компоненту. [version_semver]
    МОЖНО использовать в качестве номеров версий другие схемы нумерации версий, такие как идентификаторы коммитов (например, идентификатор коммита в git или идентификатор набора изменений в mercurial) или схемы на основе даты, такие как YYYYMMDD, поскольку они уникальны. Некоторые альтернативы могут вызвать трудности, поскольку пользователи могут быть не в состоянии легко определить, используют ли они последнюю версию. SemVer может оказаться менее полезным для идентификации версий программного обеспечения, если все получатели используют только последнюю версию (например, это код для одного веб-сайта или интернет-сервиса, который постоянно обновляется с помощью непрерывной доставки).


    Проектам ЖЕЛАТЕЛЬНО идентифицировать каждый выпуск в своей системе управления версиями. Например, при использовании git ЖЕЛАТЕЛЬНО идентифицировать каждую версию, используя теги git. [version_tags]
  • Примечания к выпуску


    Проект ОБЯЗАН предоставлять с каждой выпускаемой версией замечания к выпуску - удобочитаемые человеком сведения об основных изменениях в этом выпуске, помогающие пользователям определить, должны ли они обновляться и какими будут последствия обновления. НЕДОПУСТИМО делать замечания к выпуску сырым выводом журнала управления версиями (например, результаты команды «git log» не являются замечаниями к выпуску). Проекты, результаты которых не предназначены для повторного использования в нескольких местах (например, программное обеспечение для одного веб-сайта или службы) И выдаются через непрерывную доставку (continuous delivery) МОГУТ выбрать «неприменимо» (N/A). (Требуется URL) [release_notes]
    Замечания к выпуску МОГУТ быть реализованы различными способами. Многие проекты предоставляют их в файле с именем «NEWS», «CHANGELOG» или «ChangeLog», возможно с расширениями, такими как «.txt», «.md» или «.html». Исторически термин «журнал изменений» означал журнал для каждого изменения, но для соответствия этим критериям требуется человекочитаемая сводка. Замечания к выпуску МОГУТ вместо этого быть предоставлены механизмами системы контроля версий, такими как процесс GitHub Releases.

    Non-trivial release notes file in repository: https://github.com/Peter-N91/hve-squad/blob/main/CHANGELOG.md.



    В замечаниях о выпуске НЕОБХОДИМО упоминать каждую общеизвестную уязвимость, исправленную ​​в каждой новой версии, для которой существует CVE или аналогичная публичная запись. Критерий может быть отмечен как неприменимый (N/A), если у пользователей обычно нет практической возможности обновить данное ПО самостоятельно (это часто относится к, например, обновлениям ядра операционной системы). Если замечаний о выпуске не публиковалось или не было обнародованных уязвимостей, отвечайте "неприменимо". [release_notes_vulns]
    Этот критерий помогает пользователям определить, исправит ли данное обновление общеизвестную уязвимость, чтобы помочь пользователям принять обоснованное решение об обновлении. Если пользователи обычно не могут практически самостоятельно обновлять программное обеспечение на своих компьютерах, а вместо этого должны полагаться на одного или нескольких посредников для выполнения обновления (как это часто бывает с ядром и низкоуровневым программным обеспечением, которое взаимосвязано с ядром), проект вместо этого можно выбрать «Неприменимо», поскольку эта дополнительная информация будет бесполезна для таких пользователей. Аналогично, проект может выбрать «неприменимо» (N/A), если все получатели используют только последнюю версию (например, это код для одного веб-сайта или интернет-службы, который постоянно обновлен при помощи непрерывной доставки). Этот критерий применим только к результатам проекта, а не к его зависимостям. Перечисление уязвимостей всех транзитивных зависимостей проекта становится громоздким, поскольку зависимости увеличиваются и изменяются; и в этом нет необходимости, поскольку инструменты, которые исследуют и отслеживают зависимости, могут делать это более масштабируемым способом.

 Отчеты о проблемах 8/8 ●

  • Процесс сообщения об ошибках


    Проект ОБЯЗАН предоставить пользователям возможность отправлять сообщения об ошибках (например, используя систему отслеживания ошибок или список рассылки). (Требуется URL) [report_process]

    Bug reports are submitted through the GitHub issue tracker at https://github.com/Peter-N91/hve-squad/issues, which is open to the public and requires only a GitHub account. A structured Bug report form at .github/ISSUE_TEMPLATE/bug-report.yml collects the installed version, the Copilot host, expected against actual behaviour, reproduction steps, and optional squad state. The "Reporting a bug" section of CONTRIBUTING.md documents the process and the two exceptions: security vulnerabilities go privately through GitHub Security Advisories as described in SECURITY.md, and defects in upstream microsoft/hve-core assets are directed to that repository. .github/ISSUE_TEMPLATE/config.yml surfaces both routes directly in the issue-creation chooser.



    СЛЕДУЕТ использовать трекер вопросов (issue tracker) для отслеживания отдельных вопросов. [report_tracker]

    Some of the issues can be labeled to squad/auto and have the squad itself handle them. The history of the squad member will be saved under .copilot-tracking



    Проект ОБЯЗАН подтверждать получение большинства сообщений об ошибках, отправленных за последние 2-12 месяцев (включительно); подтверждение не обязательно включает исправление. [report_responses]


    Проекту СЛЕДУЕТ реагировать на большинство (>50%) запросов на улучшения в течение последних 2-12 месяцев (включительно). [enhancement_responses]
    В качестве ответа МОЖЕТ быть «нет» или обсуждение выгод от данного улучшения. Цель состоит в том, чтобы по крайней мере на некоторые запросы был какой-то ответ, что указывает на то, что проект все еще жив. Для целей этого критерия не нужно учитывать поддельные запросы (например, от спамеров или автоматизированных систем). Если проект больше не принимает улучшения, выберите «не соответствует» и укажите URL, проясняющий ситуацию для пользователей. Если проект большую часть времени перегружен количеством запросов на улучшения, выберите «не cоответствует» и объясните.


    Проект ОБЯЗАН иметь общедоступный архив для отчетов и ответов для последующего поиска. (Требуется URL) [report_archive]

    Reports and responses are archived publicly in the GitHub issue tracker at https://github.com/Peter-N91/hve-squad/issues?q=is%3Aissue, which lists open and closed issues together. The archive is readable without a GitHub account, is indexed by GitHub's full-text search across titles, bodies, and comments, and every issue and comment has a stable, permanently addressable URL. It currently holds 16 issues, 15 of them closed with the discussion and resolution intact, alongside 82 pull requests at https://github.com/Peter-N91/hve-squad/pulls?q=is%3Apr, where most defect fixes are discussed and linked back to the issue they close. Nothing is deleted on closure, so the reasoning behind a past fix stays retrievable.


  • Процесс отчета об уязвимостях


    Проект ОБЯЗАН публиковать процесс уведомления об уязвимостях на сайте проекта. (Требуется URL) [vulnerability_report_process]
    Например, четко обозначенный почтовый адрес на https://PROJECTSITE/security, часто в форме security@example.org. Процесс МОЖЕТ быть таким же, как и процесс для отчетов об ошибках. Отчеты об уязвимостях МОГУТ быть всегда общедоступными, но многие проекты имеют приватный механизм для отправки отчетов об уязвимостях.

    All vulnerabilities will be shown under this tab and handled by contributors

    https://github.com/Peter-N91/hve-squad/security/code-scanning



    Если поддерживаются приватные отчеты об уязвимости, проект ОБЯЗАН включить описание того, как отправлять сведения конфиденциальным способом. (Требуется URL) [vulnerability_report_private]
    Примеры включают приватный отчет о дефектах, отправленный в Интернете с использованием HTTPS (TLS) или электронной почты, зашифрованной с использованием OpenPGP. Если отчеты об уязвимостях всегда являются общедоступными (поэтому нет приватных отчетов об уязвимостях), выберите «неприменимо» (N/A).

    Private vulnerability reports are supported through GitHub Security Advisories at https://github.com/Peter-N91/hve-squad/security/advisories/new. Private vulnerability reporting is enabled on the repository, so any GitHub user can open a report that is visible only to the reporter and the maintainer until an advisory is published. Submission is over HTTPS. The process is documented in SECURITY.md, which states explicitly that vulnerabilities must not be filed as public issues, lists what to include (affected version or commit, component, reproduction steps, observed impact, suggested mitigation), and commits to acknowledgement within 5 business days and a status update within 10. The same private route is surfaced in the issue-creation chooser through .github/ISSUE_TEMPLATE/config.yml and in the Bug report template, so a reporter who starts down the public path is redirected before disclosing anything.



    Проект ОБЯЗАН обеспечивать время первоначального отклика на любой отчет об уязвимости, полученный за последние 6 месяцев, в пределах 14 дней или меньше. [vulnerability_report_response]
    Если за последние 6 месяцев не было обнаружено никаких уязвимостей, выберите «неприменимо» (N/A).

    All vulnerabilities were treated in a single day.


 Качество 13/13 ●

  • Рабочая система сборки


    Если программное обеспечение, создаваемое проектом, требует сборки для использования, проект ОБЯЗАН предоставить рабочую систему сборки, которая может автоматически пересобирать программное обеспечение из исходного кода. [build]
    Система сборки определяет, какие действия необходимо предпринять для пересборки программного обеспечения (и в каком порядке), а затем выполняет эти действия. Например, она может вызывать компилятор для компиляции исходного кода. Если исполняемый файл создается из исходного кода, должна иметься возможность изменить исходный код проекта, а затем сгенерировать обновленный исполняемый файл с этими изменениями. Если программное обеспечение, создаваемое проектом, зависит от внешних библиотек, система сборки не обязана пересобирать эти внешние библиотеки. Если для использования программного обеспечения после изменения его исходного кода пересборка не требуется, выберите «неприменимо» (N/A).

    The build is automated in PowerShell and driven from CI. scripts/Build-SquadPlugin.ps1 deterministically assembles the distributable Copilot CLI plugin from the squad-src/ tree and is invoked by .github/workflows/publish-plugin.yml on every release tag; it can also be run locally as a manual fallback. scripts/Update-ApmDependencies.ps1 regenerates the apm.yml dependency manifest and apm.lock.yaml from source, and .github/workflows/pr-validation.yml re-runs it on every pull request to verify the checked-in manifest matches what the build produces. Modifying source under squad-src/ and re-running either script yields updated artifacts with no manual steps. External dependencies (microsoft/hve-core) are fetched at install time by APM and are not rebuilt here.



    ЖЕЛАТЕЛЬНО использовать общеупотребительные инструменты для сборки программного обеспечения. [build_common_tools]
    Например, Maven, Ant, cmake, autotools, make, rake или devtools (R).

    The build uses PowerShell 7 (pwsh), a widely adopted cross-platform build and automation tool, rather than a project-specific build system. Named build targets are declared in the scripts: section of apm.yml (sync-deps, install-sync, change, release-prep), which serves the same role as make targets and gives contributors a single documented entry point per task. The APM CLI performs dependency resolution and installation, and GitHub Actions orchestrates the build in CI. All of these are standard, off-the-shelf tools; the project defines no custom build engine or DSL.



    Для сборки проекта СЛЕДУЕТ использовать только инструменты со свободными лицензиями. [build_floss_tools]

    Every tool in the build chain is FLOSS. The build scripts run on PowerShell 7 (MIT), dependency resolution and installation use the APM CLI (microsoft/apm, MIT), source and ref handling uses Git (GPL-2.0), the plugin packaging path uses Node.js and npm (MIT / Artistic-2.0), and release automation uses the GitHub CLI (MIT). No proprietary compiler, SDK, or build tool is required. The build is not Windows-dependent: PowerShell 7 is cross-platform and CI executes the same scripts on Ubuntu runners, so a contributor can reproduce the full build on a Linux machine using only free/libre software.


  • Набор автотестов


    Проект ОБЯЗАН использовать по крайней мере один автоматизированный набор тестов, опубликованный как свободное ПО (этот набор тестов может поддерживаться как отдельный проект свободного ПО). Проект ОБЯЗАН ясно показывать или иметь документацию о том, как запускать наборы тестов (например, через непрерывную интеграцию (CI) или используя файлы документации, такие как BUILD.md, README.md или CONTRIBUTING.md). [test]
    Проект МОЖЕТ использовать несколько автоматизированных наборов тестов (например, один, который работает быстро, а другой - более тщательный, но требует специального оборудования). Существует множество каркасов (frameworks) и систем поддержки тестирования, включая Selenium (автоматизация веб-браузера), Junit (JVM, Java), RUnit (R), testthat (R).

    The project uses Pester 5.7.1 (Apache-2.0), a FLOSS test framework for PowerShell, across three automated suites in tests/: Tier 0 conformance (tests/tier0/) validates the package manifest and shipped asset structure, Tier 1 behavior (tests/tier1/) validates the squad state contract and coordinator assertions against recorded scenarios, and Tier 2 semantic (tests/tier2/) compares live squad runs against stored baselines. Each tier has a runner script (Invoke-Tier0Tests.ps1, Invoke-Tier1Tests.ps1, Invoke-Tier2Tests.ps1) that can be executed locally with pwsh. All three run in CI on every pull request via .github/workflows/tier0-conformance.yml, tier1-behavior.yml, and tier2-semantic.yml, which document the exact install and invocation steps. The test suites and their fixtures are MIT-licensed as part of this repository.



    Запуск набора тестов СЛЕДУЕТ реализовывать стандартным способом для этого языка. [test_invocation]
    Например, «make check», «mvn test» или «rake test» (Ruby).

    Tests are invoked in the standard way for PowerShell. Each suite is executed through Invoke-Pester with New-PesterConfiguration, the conventional Pester entry point, wrapped in a per-tier runner script (tests/tier0/Invoke-Tier0Tests.ps1 and equivalents for Tier 1 and Tier 2). The wrappers are required because the suites are parameterised through New-PesterContainer -Data, so they cannot be discovered by a bare Invoke-Pester call. A single-command entry point is also declared as the test target in the scripts: section of apm.yml, so apm run test runs the fast conformance suite in the same way make check would. CI invokes the same runner scripts, so local and CI invocation are identical.



    ЖЕЛАТЕЛЬНО охватывать набором тестов большинство (а в идеале все) ветви кода, поля ввода и функциональные возможности. [test_most]

    Coverage is substantial for the shipped asset package but not yet comprehensive, and it is not measured. The suite implements 122 assertions across three tiers, each traced to a numbered case in tests/squad-behavior-contract.md that cites the source file stating the rule, spanning package conformance, routing, gates, state contract, governance, and semantic comparison. Two known gaps remain and are documented in that contract rather than glossed over: no Tier 1 scenario exercises autopilot mode, and the PowerShell build and release scripts under scripts/ have no unit tests. Code coverage is not currently instrumented via Pester's CodeCoverage configuration, so no percentage can be cited. Planned improvements are an autopilot scenario, Pester unit tests for the build scripts, and enabling coverage reporting in CI.



    ЖЕЛАТЕЛЬНО реализовать непрерывную интеграцию (Continuous Integration - частая интеграция нового или измененного кода в центральное хранилище кода, и запуск автоматических тестов на получившейся базе кода). [test_continuous_integration]

    The project practises continuous integration against a single central repository. All changes land on main through squash-merged pull requests, with 103 commits integrated in the last 30 days, and branches are short-lived. Every pull request triggers automated validation in GitHub Actions: .github/workflows/tier0-conformance.yml installs the package the branch would deliver and runs the Pester static conformance suite against it, and .github/workflows/pr-validation.yml verifies release state and change-fragment hygiene. Security analysis runs on the same trigger through CodeQL, Zizmor, Checkov, and OpenSSF Scorecard. The same Tier 0 workflow is reused as the release gate via workflow_call, so the check that guards a merge is the check that guards a tag. Merged work is rebuilt onto a rolling pre-release tag within minutes, keeping the integrated state continuously installable and testable.


  • Тестирование новых функций


    Проект ОБЯЗАН иметь общую политику (формальную или нет), обязывающую добавлять тесты в набор автоматических тестов по мере добавления новых функциональных возможностей к программному обеспечению, создаваемому проектом. [test_policy]
    Если есть действующая политика, хотя бы «из уст в уста», которая говорит, что разработчики должны добавлять тесты в набор автотестов для новой функциональности, указывайте «соответствует».

    The policy is documented in the "Automated tests" section of CONTRIBUTING.md: major new functionality must come with tests. A pull request adding a new agent, routing rule, gate, or any consumer-observable behavior is expected to add or extend a case in the automated suite. Documentation, wording fixes, and behavior-preserving refactors are exempt, and a maintainer may waive the requirement for behavior that cannot be asserted without a live model run, stating so on the pull request. The policy is enforced at review time through a Tests checklist in the pull request template, which asks the contributor to confirm the case was added, declared in tests/squad-behavior-contract.md with a citation to the source file stating the rule, and that apm run test passed locally.



    Проект ОБЯЗАН иметь доказательства того, что критерий test_policy о добавлении тестов соблюдался при недавних крупных изменениях ПО, создаваемого проектом. [tests_are_added]
    Крупная функциональность обычно упоминается в замечаниях к выпуску. Совершенство не требуется, просто доказательство того, что на практике тесты обычно добавляются в набор автотестов, когда к ПО, создаваемому проектом, добавляются новые крупные функции.

    The automated suite was introduced on 2026-08-20 and the policy has been followed since. Of the sixteen changes merged after that date, ten added or extended test cases. Every change to squad behavior shipped a regression case traced to a numbered entry in tests/squad-behavior-contract.md: PR #79 (state records survive on every host, 5 test files), #81 (Scribe line-number leakage, 3), #82 (Deliverable Root binding, 5), #83 (deliverable path truncation, 4), #84 and #85 (ledger arithmetic and turn accumulation, 3 and 4), #87 (Init floor record, 2), and #89 (dispatch-backed ledger rows, 3). The most recent feature work, PR #86, added four test files alongside the behavior change. Changes merged without tests are confined to build and release workflow fixes (#92, #93, #94), which sit outside the suite's scope of asserting the shipped asset package.



    ЖЕЛАТЕЛЬНО задокументировать эту политику добавления тестов (см. критерий test_policy) в инструкции к предложениям об изменениях. [tests_documented_added]
    Однако даже неформальное правило приемлемо, если тесты добавляются на практике.

    The policy is documented in the instructions for change proposals in two places. CONTRIBUTING.md carries an "Automated tests" section stating that major new functionality must come with tests, naming the exemptions (documentation, wording fixes, behavior-preserving refactors) and the maintainer waiver for behavior that cannot be asserted without a live model run. It also explains the three test tiers, how to run each locally, and the required Pester version. The pull request template at .github/pull_request_template.md is injected into every pull request description and includes a Tests checklist asking the contributor to confirm that a case was added or extended, that it was declared in tests/squad-behavior-contract.md with a citation to the source file stating the rule, and that apm run test passed locally. Contributors therefore see the policy both before and during change proposal.


  • Флаги предупреждений


    Проект ОБЯЗАН включать один или несколько предупреждающих флагов компилятора, «безопасный» языковой режим или использовать отдельный инструмент «linter» для поиска ошибок качества кода или типовых простых ошибок, если есть хотя бы один инструмент на свободном ПО, который может реализовать этот критерий на выбранном языке. [warnings]
    Примером предупреждающего флага компилятора может служить "-Wall" для gcc/clang. Примеры «безопасного» языкового режима включают «use strict» в JavaScript и «use warnings» в perl5. Отдельный инструмент «linter» - это просто инструмент, который исследует исходный код для поиска ошибок качества кода или типовых простых ошибок. Всё это обычно включается в исходный код или инструкции сборки.

    The project uses PSScriptAnalyzer, the standard FLOSS linter for PowerShell, over scripts/ and tests/, which together contain all executable code the repository authors. It runs on every pull request and push to main via .github/workflows/lint-powershell.yml, blocks the build on Error-severity findings, and publishes all findings as SARIF to the GitHub Security tab. Rule configuration lives in PSScriptAnalyzerSettings.psd1 at the repository root, so contributors get identical results in VS Code and in CI; the two excluded rules each carry a written justification in that file. In addition, the build scripts and test runners set Set-StrictMode -Version Latest and $ErrorActionPreference = 'Stop', PowerShell's equivalent of a safe language mode. Three further FLOSS analysers run on the same trigger: CodeQL for Python, Zizmor for GitHub Actions workflows, and Checkov for infrastructure-as-code.



    Проект ОБЯЗАН обращать внимание на предупреждения. [warnings_fixed]
    Речь о предупреждениях, найденных при выполнении критерия warnings. Проект должен исправлять предупреждения или отмечать их в исходном коде как ложные срабатывания. В идеале не должно быть никаких предупреждений, но проект МОЖЕТ принимать существование каких-то предупреждений (обычно менее 1 предупреждения на 100 строк или менее 10 предупреждений).

    All PSScriptAnalyzer findings are addressed. Actionable findings were fixed rather than suppressed: five empty catch blocks now record why the failure is deliberately ignored, seven inconsistent pipeline continuations were realigned, and a line-numbering loop that relied on a cross-scriptblock counter was rewritten. Findings that are genuine false positives are marked in the source with [Diagnostics.CodeAnalysis.SuppressMessageAttribute] carrying a written justification; these cover parameters PSScriptAnalyzer cannot resolve across Pester's separate discovery and run scopes, and a parameter-set selector consumed through $PSCmdlet.ParameterSetName. Two rules are excluded repository-wide in PSScriptAnalyzerSettings.psd1, each with a documented reason: PSAvoidUsingWriteHost, because these are interactive CLI scripts whose console output is the intended behaviour, and PSUseBOMForUnicodeEncodedFile, because every script begins with a #!/usr/bin/env pwsh shebang that a byte-order mark would break on the Linux runners CI uses. The remaining 22 findings are all Warning or Information severity across 5,506 lines of PowerShell, a rate of 0.40 per 100 lines, and none is Error severity. The CI gate blocks the build on Error severity.



    ЖЕЛАТЕЛЬНО, чтобы проекты использовали самый строгий режим предупреждений в производимом ПО, где это целесообразно. [warnings_strict]
    Некоторые предупреждения не могут быть эффективно задействованы в некоторых проектах. Что необходимо в этом критерии - это доказательства того, что проект стремится включать флаги предупреждений там, где это возможно, чтобы ошибки обнаруживались на ранней стадии.

    The project enables strict checking wherever it is practical. PSScriptAnalyzer runs with IncludeDefaultRules = $true and reports at all three severities (Error, Warning, Information) rather than errors alone, so nothing is filtered out before a human sees it. Only two rules are excluded repository-wide, each with a written justification in PSScriptAnalyzerSettings.psd1, and individual false positives are marked at the call site rather than by broadening those exclusions. Every script and module additionally runs under Set-StrictMode -Version Latest, PowerShell's strictest language mode, which turns references to uninitialized variables, non-existent properties, and malformed method calls into terminating errors, combined with $ErrorActionPreference = 'Stop' so no error is silently swallowed. Three further analysers run at their default full rule sets on every pull request: CodeQL for Python, Zizmor for GitHub Actions workflows, and Checkov for infrastructure-as-code, with Checkov configured as blocking and accepted findings requiring a justified inline checkov:skip.


 Безопасность 16/16 ●

  • Знание безопасной разработки


    По крайней мере один основной разработчик на проекте ОБЯЗАН знать, как проектировать безопасное программное обеспечение (точные требования описаны в подробностях к критерию). [know_secure_design]
    Это требует понимания следующих принципов проектирования, в том числе 8 принципов из Saltzer and Schroeder:
    • экономичность механизма (поддерживать дизайн ПО настолько простым и компактным, насколько практически возможно, например, с помощью массовых упрощений)
    • отказобезопасные значения по умолчанию (доступ по умолчанию должен быть запрещен, а установка проектов по умолчанию должна быть в защищенной конфигурации)
    • полное разграничение (любой доступ, который может быть ограничен, должен проверяться на достаточность прав доступа и не иметь обходных путей)
    • открытый дизайн (механизмы безопасности должны полагаться не на незнание их злоумышленником, а на данные типа ключей и паролей, которые проще защищать и менять)
    • разделение привилегий (в идеале доступ к важным объектам должен зависеть от более чем одного условия, так чтобы взлом одной системы защиты не приводил к полному доступу; напр., многофакторная аутентификация с требованием и пароля, и аппаратного токена сильнее однофакторной)
    • минимальные привилегии (процессы должны работать с минимальными привилегиями, необходимыми для выполнения ими своих функций)
    • наименьший общий механизм (дизайн должен минимизировать механизмы, общие для нескольких пользователей и следовательно зависящие от всех этих пользователей, например, каталоги для временных файлов)
    • психологическая приемлемость (интерфейс для человека должен быть спроектирован с учетом удобства использования - может быть полезным проектирование для «наименьшего удивления»)
    • ограничение периметра атаки (периметр атаки - множество разных точек, в которых злоумышленник может попытаться ввести или извлечь данные - должен быть ограничен)
    • проверка входных данных с помощью списков на допуск (входы обычно должны проверяться на корректность до их принятия; эта проверка должна использовать списки на допуск, содержащие только заведомо хорошие значения, а не списки на запрет, пытающиеся перечислить заведомо плохие значения).
    «Основной разработчик» в проекте - это любой, кто знаком с базой кода проекта, без затруднений может вносить в него изменения и признан таковым большинством других участников проекта. Основной разработчик, как правило, неоднократно вносит вклад в течение последнего года (через код, документацию или ответы на вопросы). Разработчики обычно считаются основными разработчиками, если это они начали проект (и не покинули проект более трех лет назад), имеют возможность получать информацию по закрытому каналу для отчетов об уязвимостях (если он есть), могут принимать коммиты от имени проекта или делать финальные выпуски программного обеспечения проекта. Если есть только один разработчик, этот человек является основным разработчиком. Есть много книг и курсов, помогающих понять, как разрабатывать более безопасное ПО, с обсуждением вопросов проектирования. Например, Secure Software Development Fundamentals - это бесплатный набор из трех курсов, объясняющих, как разрабатывать более безопасное ПО (бесплатный для обучения; за отдельную плату вы можете получить сертификат для подтверждения, что вы освоили материал).

    The project has a single primary developer, who initiated it, authors its releases, and receives private vulnerability reports. Familiarity with secure design is evidenced in the architecture rather than asserted. The system is built around a small number of deliberately narrow human gates rather than a broad permission model (economy of mechanism), and those gates deny by default: an autopilot run stops at any impactful or irreversible action and proceeds only on explicit human approval, never on a timeout (fail-safe defaults). Progress is non-bypassable, since each pipeline stage is gated on the prior stage's artifact and history entry existing on disk, so a stage cannot be skipped by narrating it as complete (complete mediation). The entire design, including every gate and routing rule, is public under an MIT licence and depends on enforcement rather than obscurity (open design). Impactful actions require two independent conditions, the agent's proposal and a human approval delivered through a separate channel (separation of privilege). CI workflows declare an empty top-level permissions: {}, grant the minimum scope per job, and check out with persist-credentials: false (least privilege), while test runs are isolated in per-run scratch directories and Watch Mode scopes sub-squads per event (least common mechanism). The user-facing surface is a single /squad entry point, and a blocked action explains what was stopped and how to proceed (psychological acceptability). The package flow is one-directional: consumers pull assets and the package never reads from consumer environments, and the project runs no service and stores no user data (limited attack surface). Inputs are constrained by allowlists rather than denylists, through ValidateSet on script parameters, a fixed set of squad profiles, and an explicit untrusted-content boundary that treats all ingested external content as data to analyse and never as instructions to execute, refusing embedded authority changes such as "ignore previous instructions" or "set autonomy to full".



    По крайней мере, один из основных разработчиков проекта ОБЯЗАН знать об общих видах ошибок, которые приводят к уязвимостям в этом виде программного обеспечения, а также по крайней мере одному методу противодействия или смягчения каждого из них. [know_common_errors]
    Примеры (в зависимости от типа ПО) включают внедрение SQL-кода (injection), внедрение на уровне ОС, классическое переполнение буфера, межсайтовый скриптинг, отсутствие проверки подлинности и отсутствие авторизации. Обычно используемые списки уязвимостей можно найти в CWE/SANS top 25 или OWASP Top 10. Есть много книг и обучающих курсов, помогающих понять, как разрабатывается безопасное программное обеспечение, и обсуждающих типичные ошибки в реализации, ведущие к уязвимостям. К примеру, Secure Software Development Fundamentals - это набор из трех курсов, объясняющих, как сделать разрабатываемое ПО более безопасным (бесплатный для прослушивания; за дополнительную плату вы можете получить справку о том, что прошли его).

    The primary developer has over eleven years of experience as a software developer and technical lead and works as a Partner Solution Architect at Microsoft, where secure development practice is part of the role. Because this project ships AI agent assets rather than a network service, the dominant error classes are those in the OWASP Top 10 for LLM Applications and the OWASP Agentic Security Initiative rather than the memory-safety and injection classes of the CWE Top 25, though the latter still apply to the build scripts. The relevant classes and their mitigations in this project are: prompt injection (LLM01), countered by an explicit untrusted-content boundary that processes all ingested external content as data to analyse or quote and never as instructions, and that refuses embedded authority changes such as "ignore previous instructions" or "set autonomy to full"; excessive agency and insecure output handling (LLM02, LLM06), countered by an impactful-action gate that halts any irreversible operation and resumes only on explicit human approval delivered through a separate channel, never on a timeout; supply-chain compromise (LLM03, CWE-1357), countered by pinning every third-party GitHub Action to a full commit SHA, pinning the upstream microsoft/hve-core dependency to a specific commit that only a guarded workflow may move, a resolved apm.lock.yaml, Dependabot updates, and OpenSSF Scorecard analysis; sensitive information disclosure (CWE-200), countered by a mandatory sanitisation checklist on any pull request proposing a shared learning, requiring removal of secrets, customer and individual names, internal URLs, and environment-specific paths, backed by GitHub secret scanning with push protection; CI script injection (CWE-94, CWE-78), countered by Zizmor static analysis of every workflow and by passing untrusted inputs through environment variables rather than interpolating them into shell blocks; path traversal (CWE-22), countered by consistent use of -LiteralPath in file operations; and missing authorization (CWE-862), countered by gates that persist in state.json and advance only on an authorised approval. Familiarity with these classes is further evidenced by the assessment tooling the project ships: security-review-llm.prompt.md drives owasp-llm and owasp-agentic assessments, and the package includes dedicated CVE analysis, dependency review, supply-chain review, and VEX generation agents.


  • Основы правильного использования криптографии

    Обратите внимание, что некоторое ПО не нуждается в использовании криптографических механизмов.

    Программное обеспечение, созданное проектом, ОБЯЗАНО использовать по умолчанию только публикуемые криптографические протоколы и алгоритмы, которые анализируются экспертами (если используются криптографические протоколы и алгоритмы). [crypto_published]
    Эти криптографические критерии не всегда применяются, поскольку некоторые программы не нуждаются в прямом использовании криптографических возможностей.


    Если программное обеспечение, создаваемое проектом, является приложением или библиотекой, и его основной целью является не внедрение криптографии, тогда для реализации криптографических функций СЛЕДУЕТ обращаться к программному обеспечению, специально предназначенному для этого; НЕ СЛЕДУЕТ повторно реализовывать свои собственные функции. [crypto_call]


    Вся функциональность программного обеспечения, создаваемого проектом, которая зависит от криптографии, ОБЯЗАНА быть реализована с использованием свободного ПО. [crypto_floss]


    Механизмы безопасности в программном обеспечении, создаваемом проектом, ОБЯЗАНЫ использовать стандартные длины криптографических ключей, которые, по крайней мере, соответствуют минимальным требованиям NIST до 2030 года (как указано в 2012 году). Проект ОБЯЗАН предоставлять возможность настройки ПО таким образом, чтобы уменьшенные длины ключей были полностью отключены. [crypto_keylength]
    Эти минимальные длины в битах перечислены далее: симметричный ключ - 112, модуль факторизации - 2048, дискретный логарифмический ключ - 224, дискретная логарифмическая группа - 2048, эллиптическая кривая - 224 и хеш - 224 (хеширование пароля не покрывается этой длиной, больше информации о хешировании пароля можно найти в описании критерия crypto_password_storage). См. http://www.keylength.com для сравнения рекомендаций по длинам криптографических ключей от различных организаций. Программное обеспечение МОЖЕТ допускать меньшие длины ключей в некоторых конфигурациях (в идеале не должно, поскольку это позволяет атаки через понижение длины ключа, но иногда требуется более короткая длина ключа для обеспечения взаимодействия с другими системами).


    Механизмы безопасности по умолчанию в программном обеспечении, создаваемом проектом, НЕДОПУСТИМО делать зависимыми от взломанных криптографических алгоритмов (например, MD4, MD5, single DES, RC4, Dual_EC_DRBG) или использовать режимы шифрования, которые не подходят для контекста, если только они не требуются для интероперабельности протокола (поддерживающего самую новую версию стандарта на этот протокол, широко распространенного в сетевой экосистеме, причем эта экосистема требует использования данного алгоритма или режима, не предлагая более безопасных альтернатив). В документации НЕОБХОДИМО описать все связанные с этим риски безопасности и все известные способы смягчения рисков, если данные алгоритмы или режимы действительно нужны для совместимости с другими реализациями этого протокола. [crypto_working]
    Режим ECB почти никогда не подходит, потому что внутри зашифрованного ECB текста обнаруживаются идентичные блоки, как можно видеть на примере «пингвина ECB», а режим CTR часто неприемлем, поскольку не выполняет аутентификацию и приводит к дубликатам, контекста, если состояние ввода повторяется. Во многих случаях лучше всего выбирать режим алгоритма с блочным шифром, предназначенный для сочетания секретности и аутентификации, например, Galois / Counter Mode (GCM) и EAX. Проекты МОГУТ разрешать пользователям включать сломанные механизмы, где это необходимо для совместимости, но в таких случаях пользователи знают, что они это делают.


    Механизмы безопасности по умолчанию в программном обеспечении, создаваемом проектом, НЕ СЛЕДУЕТ делать зависимыми от криптографических алгоритмов или режимов с известными серьезными слабостями (например, криптографический алгоритм хеширования SHA-1 или режим CBC в SSH). [crypto_weaknesses]
    Проблемы, связанные с режимом CBC в SSH, обсуждаются в описании уязвимости CERT: SSH CBC.


    В механизмах безопасности в программном обеспечении, создаваемом проектом, СЛЕДУЕТ реализовать совершенную прямую секретность для протоколов соглашений о ключах, чтобы ключ сеанса, произведенный из набора долгосрочных ключей, не мог быть скомпрометирован, если один из долгосрочных ключей скомпрометирован в будущем. [crypto_pfs]


    Если ПО, создаваемое проектом, требует хранить пароли для аутентификации внешних пользователей, НЕОБХОДИМО хранить пароли как итерированные хеши с солью для каждого пользователя с использованием алгоритма (итерированного) растяжения ключа (например, PBKDF2, Bcrypt или Scrypt). См. также: OWASP Password Storage Cheat Sheet (на англ.). [crypto_password_storage]
    Этот критерий применяется только тогда, когда программное обеспечение требует проверки внешних пользователей с использованием паролей (так называемая входящая аутентификация), таких как серверные веб-приложения. Он не применяется в тех случаях, когда программное обеспечение хранит пароли для аутентификации в других системах (исходящая аутентификация; например, программное обеспечение реализует клиент для какой-либо другой системы), поскольку по крайней мере части этого программного обеспечения должны часто обращаться к нехешированному паролю.


    Механизмы безопасности в программном обеспечении, создаваемом проектом, ОБЯЗАНЫ генерировать все криптографические ключи и временные значения с использованием криптографически безопасного генератора случайных чисел; НЕДОПУСТИМО делать это с использованием генераторов, которые криптографически небезопасны. [crypto_random]
    Криптографически безопасный генератор случайных чисел может быть аппаратным генератором случайных чисел или криптографически безопасным генератором псевдослучайных чисел (CSPRNG), использующим такие алгоритмы как Hash_DRBG, HMAC_DRBG, CTR_DRBG, Yarrow или Fortuna. Примеры вызовов защищенных генераторов случайных чисел включают java.security.SecureRandom в Java и window.crypto.getRandomValues в JavaScript. Примеры вызовов небезопасных генераторов случайных чисел включают java.util.Random в Java и Math.random в JavaScript.

  • Доставка, защищенная от атак посредника (MITM)


    Проект ОБЯЗАН использовать механизм доставки, устойчивый против атак посредника (MITM). Приемлемо использование https или ssh + scp. [delivery_mitm]
    Еще более сильным механизмом является выпуск программного обеспечения в виде пакетов, подписанных цифровой подписью, поскольку это смягчает атаки на систему распространения, но это работает только в том случае, если пользователи могут быть уверены, что открытые ключи для подписей верны и если пользователи действительно проверяют подпись.

    Distribution channels use HTTPS exclusively. [osps_br_03_02]



    НЕДОПУСТИМО получать криптографические контрольные суммы (например, sha1sum) по HTTP и использовать их без проверки криптографической подписи. [delivery_unsigned]
    Эти хеши могут быть изменены при передаче.

    The project never retrieves a cryptographic hash, over HTTP or otherwise, so there is no hash whose integrity could depend on an unauthenticated channel. No file in the repository contains an http:// URL, and no build script or workflow invokes curl, wget, Invoke-WebRequest, Invoke-RestMethod, or any other direct download mechanism. All external content is fetched by established tools over HTTPS: git for source, the APM CLI for package dependencies, npm for the Copilot CLI, and the GitHub CLI for release automation. Integrity is enforced through immutable identifiers rather than separately published checksums. Every third-party GitHub Action is pinned to a full commit SHA, the upstream microsoft/hve-core dependency is pinned to a specific commit that only a guarded workflow is permitted to advance, apm.lock.yaml records the resolved dependency set, and build-time tooling such as Pester and PSScriptAnalyzer is installed at an exact -RequiredVersion.


  • Исправление обнародованных уязвимостей


    НЕДОПУСТИМО оставлять незакрытыми уязвимости со степенью серьезности средней или выше, опубликованные более 60 дней назад. [vulnerabilities_fixed_60_days]
    Уязвимость должна быть исправлена ​​и выпущена самим проектом (патчи могут быть разработаны в другом месте). Уязвимость считается опубликованной (для цели данного критерия) после того, как она имеет CVE с описанием, бесплатно доступным для общественности, (например, в National Vulnerability Database) или когда проект был проинформирован, и информация была опубликована для общественности (возможно, самим проектом). Уязвимость имеет среднюю и высокую степень серьезности, если ее базовая оценка по CVSS 2.0 равна 4 или выше. Примечание. Это означает, что пользователи могут оставаться уязвимыми для всех злоумышленников по всему миру на срок до 60 дней. Этот критерий часто намного легче выполнить, чем рекомендует Google в Rebooting responsible disclosure, поскольку Google рекомендует, чтобы 60-дневный период начинался, когда проект был уведомлен, даже если отчет не является общедоступным.

    The project has never had a vulnerability reported against it. There are no published GitHub security advisories, no open Dependabot alerts, and no known CVEs affecting the software this project produces. Dependabot alerts, Dependabot security updates, secret scanning, and push protection are enabled on the repository, and CodeQL, Zizmor, Checkov, and OpenSSF Scorecard run on every pull request with findings published to the GitHub Security tab. One code-scanning alert is currently open, a zizmor/artipacked warning raised on 2026-08-24 against a workflow. It is a static-analysis hygiene finding rather than a disclosed vulnerability, it carries no CVE or CVSS score, and it has been open for less than 60 days.



    Проектам СЛЕДУЕТ оперативно исправлять критические уязвимости после сообщения о них. [vulnerabilities_critical_fixed]

    No critical or high-severity vulnerabilities have been reported against this project, and none are outstanding. The project is nonetheless set up to ship a fix quickly rather than relying on a promise to do so. SECURITY.md commits to acknowledging a report within 5 business days and providing a status update within 10, with the fix shipping in the next release and the advisory published once it is available. Releases are cut on demand when pending work is judged ready rather than on a fixed schedule, so a fix does not wait for a release window. CONTRIBUTING.md documents a hotfix procedure for the case where the default branch holds work that must not ship yet: a hotfix branch is cut from the last release tag, the fix is applied there, and Release Prep assembles and tags a patch release from that branch alone, leaving unshippable pending work untouched. The hotfix is then merged back so the fix survives the next release. Separately, every merge rebuilds a rolling pre-release tag within minutes, so a fix is installable for verification as soon as it lands, before a formal release is cut. Automated detection runs continuously through Dependabot alerts and security updates, CodeQL, Zizmor, Checkov, and OpenSSF Scorecard, with findings published to the GitHub Security tab.


  • Другие вопросы безопасности


    НЕДОПУСТИМА утечка действующих частных учетных данных (например, рабочий пароль или закрытый ключ), предназначенных для ограничения общего доступа, из публичных репозиториев. [no_leaked_credentials]
    Проект МОЖЕТ пропускать «шаблонные» учетные данные для тестирования и несущественные базы данных, при условии что они не предназначены для ограничения общего доступа.

    The repository contains no credentials. All secrets consumed by CI are referenced exclusively through the GitHub Actions secrets context (GITHUB_TOKEN, COPILOT_GITHUB_TOKEN, HVE_SQUAD_PLUGIN_PUSH_TOKEN, SYNC_DEPS_TOKEN) and are stored as encrypted repository secrets, never as literals in tracked files. No private key material, keystore, or .env file is tracked. A pattern scan for GitHub tokens, AWS access keys, PEM private key blocks, Slack tokens, OpenAI keys, and JWTs found nothing across the 184 tracked files, and the same scan across the full 305-commit history on all branches likewise found nothing, so no credential was committed and later removed. GitHub secret scanning is enabled with push protection, currently reporting zero open alerts, which blocks a supported credential type from being pushed in the first place. The project runs no service and provisions no accounts, so there is no credential intended to limit public access that could be leaked.


 Анализ 8/8 ●

  • Статический анализ кода


    НЕОБХОДИМО применять по крайней мере, один инструмент анализа статического кода (помимо предупреждений компилятора и "безопасных" режимов языка) к любой предлагаемой основной версии создаваемого ПО до ее выпуска, если есть хотя бы один инструмент на свободном ПО, который реализует этот критерий на выбранном языке. [static_analysis]
    Средство анализа статического кода анализирует программный код (как исходный код, промежуточный код или исполняемый файл), не выполняя его с конкретными входами. Для целей этого критерия предупреждения компилятора и «безопасные» языковые режимы не считаются инструментами анализа статического кода (они обычно избегают глубокого анализа, поскольку скорость имеет жизненно важное значение). Примеры таких статических инструментов анализа кода включают cppcheck (C, C++), статический анализатор Clang (C, C++), SpotBugs (Java), FindBugs (Java; включая FindSecurityBugs), PMD (Java), Brakeman (Ruby on Rails), lintr (R), goodpractice (R), Анализатор качества Coverity, SonarQube, Codacy и статический анализатор кода HP Enterprise Fortify. Более крупные списки инструментов можно найти в таких местах, как Wikipedia list of tools for static code analysis, OWASP information on static code analysis, NIST list of source code security analyzers и Wheeler's list of static analysis tools. Если для используемого языка(ов) реализации нет доступных инструментов статического анализа на свободном ПО, выберите «неприменимо» (N/A).

    Four FLOSS static analysis tools run in CI, all beyond compiler warnings and safe language modes. Checkov 3.2.533 scans infrastructure-as-code and workflow definitions and is configured as blocking, with any accepted finding requiring a justified inline checkov:skip. Zizmor 1.29.0 performs security analysis of GitHub Actions workflows, targeting supply-chain and privilege weaknesses such as credential persistence and template injection. CodeQL analyses the Python surface. PSScriptAnalyzer 1.25.0 analyses the PowerShell build scripts and test suites. All four publish SARIF results to the GitHub Security tab under distinct categories. Checkov and Zizmor are triggered on every pull request targeting the default branch with no path filter, and pull requests are the only route by which a change can reach that branch. Because a release is a tag cut from the head of the default branch, the tree that is released is exactly the tree those analysers have already passed, so static analysis is applied to every proposed release by construction rather than as a separate step that could be omitted. CodeQL additionally runs on a weekly schedule, and Zizmor on a weekly schedule, so newly published rules are applied to released code even when no change is proposed.



    ЖЕЛАТЕЛЬНО включать по крайней мере в один из инструментов статического анализа, используемых для критерия static_analysis, правила или подходы для поиска распространенных уязвимостей в анализируемом языке или среде. [static_analysis_common_vulnerabilities]
    Инструменты статического анализа, специально предназначенные для поиска распространенных уязвимостей, с большей вероятностью найдут их. Тем не менее, использование любых статических инструментов обычно помогает найти какие-то проблемы, поэтому мы предлагаем, но не требуем этого для получения базового значка.

    Three of the four static analysis tools are purpose-built vulnerability scanners rather than general-purpose quality linters. Zizmor exists specifically to find security vulnerabilities in GitHub Actions workflows, covering template injection, credential persistence, artifact poisoning, and excessive token permissions, which is the dominant vulnerability class for a project whose executable surface is largely CI automation. CodeQL applies semantic queries mapped to CWE categories such as injection, path traversal, and unsafe deserialization against the Python surface. Checkov scans infrastructure-as-code and workflow definitions for security misconfiguration and runs in blocking mode, with any accepted finding requiring a justified inline checkov:skip annotation. PSScriptAnalyzer additionally carries security-specific rules including PSAvoidUsingPlainTextForPassword, PSAvoidUsingConvertToSecureStringWithPlainText, PSAvoidUsingInvokeExpression, and PSUsePSCredentialType. All four publish SARIF to the GitHub Security tab under distinct categories. These tools find real issues rather than hypothetical ones: Zizmor currently reports an open artipacked finding against a workflow that persists a repository push token into the git configuration for the remainder of a job, which is being tracked for remediation.



    Все уязвимости со средней и высокой степенью серьезности, обнаруженные при статическом анализе кода, НЕОБХОДИМО своевременно исправлять после их подтверждения. [static_analysis_fixed]
    Уязвимость имеет среднюю и высокую степень серьезности, если ее оценка по CVSS 2.0 - 4 или выше.

    No medium or higher severity exploitable vulnerability has been discovered by static analysis. CodeQL and Checkov currently report zero open alerts. PSScriptAnalyzer reports 22 findings, all Warning or Information severity and all code-quality in nature (naming conventions, comment-based help, ShouldProcess on internal helper functions), with no Error-severity findings and none carrying security impact; the CI gate blocks the build on Error severity. One Zizmor finding is open, artipacked, which reports that a checkout step in publish-plugin.yml persists a repository token into the git configuration for the remainder of the job. It was assessed and is not exploitable: that workflow is triggered solely by workflow_dispatch, which requires write access to the repository, and has no pull_request, pull_request_target, or fork-triggered path, so injecting a step to read the persisted credential requires privileges that already confer access to the token. Zizmor rates it Warning and GitHub assigns it no security severity level, placing it below the medium threshold. It is nonetheless tracked as a hardening item and will be addressed rather than dismissed. Findings that are accepted rather than fixed carry a justified inline annotation (# zizmor: ignore[...] or # checkov:skip=...) recording the reasoning, so no finding is silently suppressed.



    ЖЕЛАТЕЛЬНО выполнять анализ статического исходного кода при каждом коммите или по крайней мере ежедневно. [static_analysis_often]

    Static analysis runs on every commit. Checkov and Zizmor are both triggered on every pull request targeting the default branch with no path filter, and pull requests are the only route by which a change can reach that branch, so no commit lands without being analysed regardless of which files it touches. Checkov additionally runs on every push to the default branch. CodeQL analyses the Python surface and PSScriptAnalyzer the PowerShell surface on any pull request or push touching those file types. Beyond change-triggered runs, three scheduled scans re-analyse the released code so that newly published rules are applied even when nothing has changed: Zizmor weekly on Mondays, OpenSSF Scorecard weekly on Tuesdays, and CodeQL weekly on Thursdays. All results are published to the GitHub Security tab under distinct categories, so a finding introduced by a rule update surfaces without a code change.


  • Динамический анализ кода


    ЖЕЛАТЕЛЬНО применять по крайней мере один инструмент динамического анализа к любой предлагаемой основной (major) версии программного обеспечения перед ее выпуском . [dynamic_analysis]
    Инструмент динамического анализа проверяет программное обеспечение, выполняя его с конкретными входными данными. Например, проект МОЖЕТ использовать инструмент фаззинг-тестирования (например, American Fuzzy Lop) или сканер веб-приложений (например, OWASP ZAP или w3af). В некоторых случаях проект OSS-Fuzz может быть готов применить фаззинг-тестирование к вашему проекту. Для целей этого критерия инструмент динамического анализа должен каким-то образом варьировать исходные данные, чтобы искать проблемы разного рода или быть автоматическим набором тестов с покрытием веток исполнения не менее 80%. Страница Википедии о динамическом анализе и cтраница OWASP о фаззинг-тестировании указывают некоторые инструменты динамического анализа. Использование инструмента/ов анализа МОЖЕТ, но не обязано быть сосредоточено на поиске уязвимостей в безопасности.

    The project applies automated testing before release but does not currently meet the specific bar this criterion sets. The release gate is the Tier 0 conformance suite, which installs the package exactly as a consumer receives it and executes 575 Pester assertions against the installed tree. Tier 1 additionally performs live behavioural runs against fixture repositories, executing the squad end to end and asserting on the state artifacts left on disk, and Tier 2 compares a live run against stored semantic baselines. However, none of these vary their inputs in the manner of a fuzzer or scanner: Tier 1 exercises a fixed set of recorded scenarios. Branch coverage is also not instrumented, since none of the tier runners enable Pester's CodeCoverage configuration, so the project cannot demonstrate the 80% threshold this criterion offers as an alternative. Coverage of the PowerShell build scripts would in any case be low, because Tier 0 asserts against an installed package tree rather than executing those scripts. Planned improvements are to enable Pester code coverage reporting in CI to establish a measured baseline, and to add unit tests for the build and release scripts, which are currently the least-covered executable surface.



    ЖЕЛАТЕЛЬНО регулярно использовать по меньшей мере один динамический инструмент (например, fuzzer или сканер веб-приложения) в сочетании с механизмом для обнаружения проблем безопасности памяти, таких как перезапись буфера, если программное обеспечение, создаваемое проектом, включает части, написанные на небезопасном языке (например, C или C++). Если проект не создает программное обеспечение, написанное на небезопасном языке, выберите «неприменимо» (N/A). [dynamic_analysis_unsafe]
    Примерами механизмов обнаружения проблем безопасности памяти являются Address Sanitizer (ASAN) (доступен в GCC и LLVM), Memory Sanitizer и valgrind. Другие потенциально используемые инструменты включают Thread Sanitizer и Undefined Behavior Sanitizer. Достаточно широкое использование утверждений (assertions) тоже может быть приемлемо.

    The project produces no software written in a memory-unsafe language. Its output is a package of markdown assets (agents, prompts, instructions, and skills) together with PowerShell 7 build scripts, Pester test suites, and YAML workflow definitions. There is no C, C++, or unsafe Rust in the repository and nothing is compiled to native code, so there is no memory-safety surface for a sanitizer or memory-error detector to examine. PowerShell runs on the .NET managed runtime, which provides memory safety by construction.



    ЖЕЛАТЕЛЬНО включать в ПО, создаваемое проектом, достаточно много утверждений (assertions) времени выполнения, проверяемых при динамическом анализе. Во многих случаях эти утверждения не должны попадать в сборки под эксплуатацию (production). [dynamic_analysis_enable_assertions]
    Этот критерий не предполагает включения утверждений на этапе эксплуатации; решение об этом полностью лежит на проекте и его пользователях. Вместо этого критерий направлен на улучшение обнаружения ошибок во время динамического анализа перед развертыванием. Использование утверждений при эксплуатации полностью отличается от такового во время динамического анализа (например, при тестировании). В некоторых случаях включать утверждения при эксплуатации крайне неразумно (особенно в компонентах с высокой степенью целостности). Существует множество аргументов против включения утверждений в выпускаемых сборках: например, библиотеки не должны вызывать сбой при вызове, присутствие утверждений может привести к отклонению магазинами приложений и/или активация их при рабочем использовании может привести к раскрытию частных данных, таких как закрытые ключи. Помните, что во многих дистрибутивах Linux NDEBUG не определен, поэтому C/C++assert() в таких рабочих средах по умолчанию будет включен. Может быть важно использовать другой механизм утверждений или определить NDEBUG для эксплуатации в этих средах.

    The test configuration deliberately enables more assertions than a normal run. The suites are assertion-based throughout, with 575 Pester assertions executing in the Tier 0 conformance run alone, and every case traces to a numbered entry in tests/squad-behavior-contract.md. Two switches exist specifically to widen assertion coverage during analysis. Tier 1's -Strict promotes consumption findings, which are advisory during a live run, to blocking during the self-check, on the reasoning that a mutation the contract merely mentions is a mutation it does not catch. Tier 0's -IncludeAdvisory enables additional assertion cases that are otherwise reported without gating. Tier 1 also ships mutation controls invoked with -SelfCheck, where each case breaks exactly one rule and requires the contract to detect it, which is the evidence that the assertions can fail rather than passing vacuously. All PowerShell scripts, modules, and test runners execute under Set-StrictMode -Version Latest with $ErrorActionPreference = 'Stop', turning uninitialised variable references, non-existent property access, and malformed method calls into terminating errors during analysis. Tier 0 additionally treats a run that produces zero tests as a failure, so a discovery error cannot be mistaken for success. None of this carries into what consumers receive: the shipped package is markdown assets with no runtime assertion machinery, so there is no production assertion cost or disclosure risk.



    Проект ОБЯЗАН своевременно исправлять все уязвимости средней и выше степени серьезности, обнаруженные при динамическом анализе кода, после их подтверждения. [dynamic_analysis_fixed]
    Если вы не используете динамический анализ кода и, следовательно, не обнаружили уязвимостей таким способом, выберите «неприменимо» (N/A). Степень серьезности уязвимости считается средней или выше, если уязвимость имеет среднюю или выше базовую оценку по Common Vulnerability Scoring System (CVSS). В версиях CVSS с 2.0 по 3.1 это соответствует оценке 4.0 и выше. Проекты могут использовать оценку CVSS опубликованную в любой широко используемой базе данных по уязвимостям (такой как National Vulnerability Database) используя самую новую версию CVSS доступную в этой базе данных. Вместо этого проекты могут сами вычислять серьезность используя последнюю версию CVSS на момент раскрытия уязвимости, если вводные для вычисления раскрываются вместе с публикацией уязвимости.

    The project does not perform dynamic code analysis as this criterion defines it, consistent with the answer given for dynamic_analysis: it uses no fuzzer or scanner that varies inputs, and branch coverage is not instrumented, so the 80% alternative threshold cannot be demonstrated. No vulnerability has therefore been discovered by dynamic analysis, and none is outstanding. The project does run automated Pester test suites across three tiers, including live behavioural runs against fixture repositories, and these have found functional defects that were fixed and covered by regression cases, but they have surfaced no security vulnerability. Should dynamic analysis be introduced and a medium or higher severity exploitable vulnerability be confirmed, it would be handled under the process documented in SECURITY.md, which commits to acknowledgement within 5 business days, a status update within 10, and a fix in the next release, with a hotfix path documented in CONTRIBUTING.md for shipping a patch without releasing unrelated pending work.



Вы можете использовать инструменты и системы ИИ для предложения изменений через простой URL, например https://www.bestpractices.dev/ru/projects/14231/choose/edit?osps_ac_01_01_status=Met&osps_ac_01_01_justification=GitHub+enforced. Смотрите нашу систему автоматизированных предложений о том, как это сделать. Эти данные доступны по лицензии Community Data License Agreement – Permissive, Version 2.0 (CDLA-Permissive-2.0). Это означает, что получатель данных может распространять данные с изменениями или без них, при условии, что получатель данных предоставляет текст данного соглашения вместе с распространяемыми данными. Пожалуйста, укажите в качестве источника Peter Nehme и участников OpenSSF Best Practices badge.

Владелец анкеты на значок проекта: Peter Nehme.
2026-08-25 06:53:21 UTC, последнее изменение сделано 2026-10-19 21:45:30 UTC. Последний раз условия для получения значка были выполнены 2026-08-25 08:33:58 UTC.