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

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

П17. OSA controlled repository policy

Контекст практики Controlled repository — это управляемая прокладка между разработчиком и публичным реестром (npm registry, PyPI), через которую идут все скачивания. Эта практика — проектная, без запуска инструмента: вы пишете политику приёма пакетов для одной экосистемы. Контролируемый результат — не «настроенный Nexus», а документ, по которому любой пакет получает однозначный вердикт allow / warn / quarantine / block с владельцем и SLA.

Цель

Получить политику controlled repository на 1 страницу для одной экосистемы (npm или PyPI), в которой: - описан жизненный цикл контура: warmup → monitoring → blocking (с критериями перехода между фазами); - задана таблица правил «условие → действие» из четырёх вердиктов (allow, warn, quarantine, block); - для quarantine указан SLA (сколько держим «молодую» версию и кто разбирает); - описана процедура исключения (кто, на каком основании, на какой срок) и состав audit trail.

Проверяемый результат: по политике можно «прогнать» 3 тестовых кейса и для каждого получить один вердикт без обращения к автору документа.

Команда или действие

Действие — заполнить шаблон политики. Каркас (Markdown, кладётся в репозиторий регламентов):

## Область
Экосистема: npm. Контур: все раннеры CI + dev-машины через прокси.

## Фазы внедрения
| Фаза       | Что делает контур                          | Критерий перехода к следующей фазе |
|------------|--------------------------------------------|------------------------------------|
| warmup     | пропускает всё, строит baseline-список     | собрано N дней статистики, baseline согласован |
| monitoring | пропускает, но помечает нарушения (warn)   | < X ложных block/нед на ревью      |
| blocking   | физически не отдаёт пакеты из block-правил | —                                  |

## Правила (объединяются по приоритету сверху вниз)
| Условие срабатывания                                  | Вердикт     | Владелец / SLA            |
|-------------------------------------------------------|-------------|---------------------------|
| Пакет в stop-list или классифицирован как malware     | block       | 3-я линия, разбор 1 день  |
| Имя похоже на внутренний scope (dependency confusion) | block       | 3-я линия, разбор 1 день  |
| Версия выпущена < 14 дней назад («молодая»)           | quarantine  | AppSec, релиз из карантина по SLA |
| Лицензия из стоп-листа                                 | warn→block  | юристы + владелец продукта |
| Всё прочее, прошедшее baseline                        | allow       | —                         |

## Карантин (SLA)
Срок выдержки: 14 дней с даты публикации версии. Досрочный релиз — по ручному ревью AppSec.
Просроченный карантин без решения эскалируется владельцу продукта.

## Исключения
Кто запрашивает / кто утверждает / основание / срок пересмотра / запись в реестр исключений.

## Audit trail
Лог: timestamp, пакет@версия, инициатор, вердикт, правило, кто утвердил исключение.

Что вы должны увидеть

Готовая политика проходит тест на однозначность — три кейса дают ровно один вердикт:

Тестовый кейс Ожидаемый вердикт Сработавшее правило
event-stream@3.3.6 (известная компрометация в фиде) block malware / stop-list
internal-ui-kit@9.9.9 из публичного npm при наличии приватного @org/ui-kit block dependency confusion
left-pad@1.4.0, версия опубликована 3 дня назад quarantine «молодая» версия, SLA 14 дней

Признак, что политика готова: коллега, не писавший её, проходит те же 3 кейса и получает те же вердикты. Для каждого block/quarantine в audit trail появляется запись с правилом и владельцем.

Карантин без SLA убивает политику Самая частая ошибка — поставить quarantine на «молодые» версии и не описать, кто и за сколько их выпускает. Через неделю разработка встаёт (нужная версия висит в карантине бессрочно), и контур переводят обратно в monitoring административно. SLA и владелец для карантина так же обязательны, как само правило.

Если не получилось

Критерий зачёта

Показать преподавателю: (1) политику на 1 страницу с фазами warmup/monitoring/blocking и критериями перехода; (2) таблицу правил с четырьмя вердиктами, приоритетом и владельцами; (3) пройденные 3 тестовых кейса с однозначным вердиктом по каждому; (4) описанный SLA карантина и процедуру исключений. Устно — почему blocking-режим даёт реальный отказ, а scanning-режим только видимость (мост к П18. OSA Proxy режимы и ограничения).

Нормативная связка