Пиков / КАПО
Как читать авторский курс и нормативные материалы

Это учебные материалы, а не заключение о соответствии конкретного продукта. Организационные модели курса отделяйте от терминов стандарта: ППК в опубликованном проекте — машиночитаемый перечень, а живой реестр его версий является практикой сопровождения. Термин OSA в разных материалах имеет разный охват. Статус и обязательность нормативного документа проверяются отдельно; проект КАПО опубликован как проект первой редакции.

Архитектурный кейс: генератор фактов и сервис вердиктов

Идея

В большом проекте полезно разделять две системы ответственности:

Почему это правильно

Генератор фактов не должен решать, безопасна ли лицензия или допустима ли уязвимость: он отвечает за полноту и качество фактов о составе C/C++-поставки. Сервис аудита/вердиктов не должен угадывать C/C++-зависимости из воздуха: он отвечает за процесс, вердикты, исключения, evidence и готовность поставки. Разделение делает оба контура заменяемыми и проверяемыми по отдельности.

Контракт между контурами Связкой служит единый machine-readable артефакт (CycloneDX bom.json): генератор фактов его производит, сервис вердиктов потребляет. Контракт — это схема и набор минимальных элементов, а не общий код или общая БД.

Как разделяется ответственность

Аспект Генератор фактов Сервис аудита/вердиктов
Вопрос «что входит в поставку?» «можно ли это принять?»
Вход SBOM, ELF, apt/Conan metadata, build logs bom.json + политики
Выход обогащённый CycloneDX вердикт, исключения, отчёт readiness
Критерий качества полнота и доказанность фактов прослеживаемость решения
Чего НЕ делает не выносит вердиктов не доопределяет состав «из воздуха»

Где проходит граница

Антипаттерн: смешение контуров Если генератор начинает «прятать» неудобные компоненты или сам решать, что уязвимость не важна, факты перестают быть фактами. Если сервис вердиктов дописывает недостающие компоненты вручную — теряется воспроизводимость SBOM. Граница между фактом и решением должна совпадать с границей между системами.

Спорные и недоказанные записи генератор отдаёт с пониженным confidence и в worklist доразметки — но не удаляет; решение об их судьбе принимает контур вердиктов по политике.

Учебный вывод

Это хороший пример defense-in-depth в DevSecOps: факты, политики, решения и отчёты разделены, но связаны через единый machine-readable artifact. Та же логика разводит ролевую модель «факт vs решение», что и пара VDR/VEX, и позволяет менять инструмент генерации, не трогая процесс приёмки.

Связь