Repo Health

Как считается оценка

v1.4 · 18 октября 2026

Оценка отвечает на один вопрос: можно ли положиться на этот проект. Одно число от 0 до 100 вместо получаса листания коммитов, README и задач.

  • Складывается из шести категорий, у каждой свой вес.
  • Пороги постоянные: оценка не зависит от того, что происходит в соседних репозиториях.
  • Пустая категория не ставит ноль: она выходит из расчёта, её вес уходит собранным.

до 50низкая50–69удовлетворительно70–84хорошоот 85отлично

Шесть категорий, в сумме 100

Ширина — вес категории в итоге.

считаются у любого открытого репозиториятолько в своём репозитории

Больше всего весит Security: этот сигнал труднее всего подделать, и он прямо задевает тех, кто берёт проект к себе. Меньше всего Code health: число пометок TODO зависит от привычек команды и не должно решать итог.

Свой репозиторий

После входа и личного токена считаются все шесть категорий. Сумма весов 100.

Чужой открытый

SourceCraft показывает сканы AppSec и прогоны CI только участникам репозитория. Остаются четыре категории, сумма весов 55.

Делим не на 100, а на сумму весов тех категорий, по которым данные есть. Поэтому максимум остаётся 100, а не 55: вес Security и CI/CD расходится по оставшимся. В публичном итоге у активности, документации и issues получается по 15/55, то есть 27%, у Code health 10/55, то есть 18%.

Формула на живом примере

Оценку каждой категории умножаем на её вес, складываем и делим на сумму весов собранных категорий. Потом ограничения, потом округление до целого.

gravity-ui/uikitданные отчёта · 12 дней назад
Активность · вес 1515 × 74
Документация · вес 1515 × 87
Issues · вес 1515 × 47слабое место
Code health · вес 1010 × 98
÷ 55 = 74,675
Security и CI/CD: нет данных, их вес 45 не участвует.Оценки категорий показаны округлёнными, в расчёт идут точные.

1. Метрика

Каждый факт переводится в баллы от 0 до 100 по постоянному порогу. Ответили на задачу за сутки: 100 баллов. Ответили за месяц: 25.

2. Категория

Среднее её метрик с учётом их весов. Считаются только метрики с данными. Если данных меньше половины веса, категории нет совсем.

3. Итог

Взвешенное среднее категорий, как в примере выше. В отчёте видно оба числа: итог и расчёт до ограничения.

Что меряем и как поднять

Главные метрики каждой категории с порогами. Полный список — по раскрытию.

Security

вес 25
только в своём репозитории
  • Открытые уязвимости в зависимостяхпо критичности
  • Находки SAST и секретыоткрытые
  • Как закрывают находкиисправлены, а не скрыты

Как поднять

  • Обновить уязвимые зависимости
  • Разобрать находки SAST, не закрывая их как ложные

CI/CD

вес 20
только в своём репозитории
  • Доля успешных прогоновпоследние 20
  • Конфиг .sourcecraft/ci.yamlесть или нет
  • Сборка и тесты в пайплайнезаглушка ≤ 75%

Как поднять

  • Починить падающие шаги
  • Добавить в пайплайн сборку и тесты

Активность

вес 15
  • Давность последнего коммита½ за 21 дн
  • Регулярностьнедели с коммитом из 13
  • Авторы за 90 днейпервый ≥ 80% → 20
  • Релизыза 180 дн → 100
Все метрики (7)
  • Merge requestsвлитые за 180 дн
  • Contributors≥ 3 → 100
  • Динамика за 30 днейне меньше половины

Как поднять

  • Публиковать релизы с описанием
  • Коммитить регулярно, а не рывками

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

вес 15
  • Полнота README7 проверок
  • Инструкция запускавес 16
  • История измененийCHANGELOG
  • ЛицензияLICENSE в корне
Все метрики (8)
  • Описание тестоввес 12
  • Описание сборкивес 7
  • Тесты в проектекаталог tests/
  • CONTRIBUTING, CODEOWNERS, SECURITY.mdесть файл

Как поднять

  • Описать в README запуск, сборку и тесты
  • Добавить LICENSE и CHANGELOG

Issues

вес 15
  • Зависшие> 30 дн без обновлений
  • Доля закрытыхmin(1, p / 0,7)
  • Время до первого ответамедиана ≤ 24 ч → 100
  • Время до закрытиямедиана ≤ 7 дн → 100
Все метрики (5)
  • Создано и закрыто за 30 днейзакрыто ≥ создано → 100

Как поднять

  • Разобрать зависшие issues
  • Отвечать на новые в первые сутки

Code health

вес 10
  • TODO/FIXME на 1000 строк0 → 100 · 2 → 0
  • Старые TODO на 1000 строкстарше 180 дн
  • Наличие тестов≥ 10% файлов → 100
Все метрики (5)
  • Динамика за 90 днейрост < 5 — норма
  • FIXMEпо числу или на 1000 строк

Как поднять

  • Превратить старые TODO в задачи
  • Добавить тесты

Ограничения: когда итог срезается сверху

В среднем по категориям серьёзная проблема теряется: отличная документация перекрывает открытую дыру. Поэтому поверх расчёта есть два потолка. Срабатывает тот, что ниже, и только если расчёт вышел выше него.

не выше 65

Открыта critical-уязвимость или в коде найден секрет.

Как снять: исправить уязвимость, отозвать и убрать ключ из кода.

не выше 75

Последний запуск CI в SourceCraft закончился ошибкой.

Как снять: починить сборку.

В публичном рейтинге потолки не срабатывают: данных о CI и безопасности чужих проектов у нас нет.

Особые случаи

Поправки, которые защищают оценку от перекосов. Раскройте строку, чтобы прочитать правило.

Давность коммита≥ 20 после 90 дн

Балл уменьшается вдвое каждые 21 день: 100 · exp(−ln2 · дни / 21). Сегодняшний коммит даёт 100, недельный 79, трёхнедельный 50. После 90 дней балл не опускается ниже 20: заброшенный репозиторий не обнуляется одним этим числом.

Разработку ведут в другом месте10+ авторов

10 и больше авторов за 90 дней, но в SourceCraft нет ни merge requests за полгода, ни релизов, а участников не больше двух. Значит, код сюда синхронизируют. Contributors, merge requests и релизы для такого проекта не считаются, их вес уходит остальным метрикам.

Трекер задач пустой35 · 50 · ≤ 60

Небольшая живая команда до 6 человек, которая просто не ведёт задачи, получает 35. Зеркало и проект с разработкой вне площадки получают нейтральные 50. Если задач меньше 10, репозиторию нет 45 дней или почти вся работа уместилась в две недели, категория не поднимается выше 60: по трём задачам рано судить.

Кода слишком мало или он слишком молодой< 300 строк

Code health не считается, если исходного кода меньше 300 строк. Если репозиторию нет 45 дней или была вспышка коммитов, а пометок не больше пяти, категория тоже пропускается: долг ещё не успел накопиться. Вес уходит собранным категориям.

Плотность TODO и FIXME0 → 100 · 2 → 0

Считается не число пометок, а их плотность: 0 на 1000 строк даёт 100 баллов, 2 на 1000 даёт 0, между ними линейно. Поэтому крупный зрелый проект не наказан за размер. Пометкой считается TODO или FIXME в начале комментария; то же слово в обычном тексте не в счёт.

Накрутка не работаетпо дням, а не коммитам

Регулярность считается по дням и неделям с работой: сотня пустых коммитов за день даёт столько же, сколько один. Пайплайн, который в среднем идёт меньше 20 секунд, считается заглушкой и теряет четверть веса CI. Находки, массово закрытые как ложные, снижают оценку сильнее, чем честно исправленные.

Место в рейтинге

Место получает репозиторий, у которого выполнены три условия:

  1. оценка посчитана;
  2. собрано не меньше 60% данных по доступным категориям;
  3. проект самостоятельный: не форк, не зеркало, не шаблон и не копия без своей работы.

Место равно числу репозиториев с более высокой оценкой плюс один и считается по всему рейтингу, а не по текущему фильтру. При равной оценке место общее и показывается диапазоном: 5–7.

Остальные собраны на вкладке «Вне рейтинга» с указанной причиной: пустой, копия или форк, меньше 60% данных, ещё не проверен. Отчёт у них открыт, просто без места. Форки и зеркала называет сам SourceCraft; копии мы находим по одинаковому содержимому или общему первому коммиту. Как только автор начинает дорабатывать проект, он становится самостоятельным.

Что не влияет на оценку

  • лайки и звёздыпо ним можно отсортировать таблицу, на место они не влияют
  • внешний CI без конфига SourceCraftего запусков мы не видим
  • число сопровождающихуказанных в профиле
  • частота запусков CIсама по себе
  • авторы коммитовотдельной строкой: они уже внутри «Активности»

Карточка «Если сделать» в отчёте считает обратную задачу: насколько вырастет итог, если довести одну метрику до 100, а остальное оставить как есть. Прирост считается той же формулой, что и сама оценка, поэтому обещание сходится с результатом.

Версии методики

  1. v1.418 октября 2026

    Пустой трекер: 35 у небольших команд, 50 у зеркал и внешней разработки. Молодой трекер и вспышка коммитов — Issues не выше 60. Давность коммита не ниже 20 после 90 дней.

  2. v1.317 октября 2026

    Code health с поправкой на размер кода: старые TODO на 1000 строк, FIXME лучшим из двух способов. Разработка вне площадки больше не снижает «Активность».

  3. Правила рейтинга28 сентября 2026

    Форки, зеркала, шаблоны и копии без своей работы не получают места. Формула не менялась.

  4. v1.226 сентября 2026

    CI/CD: доля успешных прогонов по последним 20, а не за 90 дней.

  5. v1.126 сентября 2026

    Security учитывает находки, исчезнувшие из сканов основной ветки. TODO/FIXME считаются только как метки в комментариях.