Как считается балл
Шесть категорий дают вместе 100 баллов. Пороги не зависят от дня: одно состояние проекта всегда даёт один и тот же балл.
Из чего складывается 100
вклад категории = её вес × доля набранного внутри- 20Документация и лучшие практики
- 20Активность проекта
- 20Безопасность
- 15CI/CD
- 15Задачи
- 10Здоровье кода
Три правила, которые защищают от несправедливой оценки
Если категорию негде спросить, балл за неё не снижается. Её вес делится между остальными. Так же не штрафуем зеркало с GitHub за отсутствие политик веток и ревью: настроить их здесь нельзя. Настроенную политику учитываем как есть. Зеркало — это включённое зеркалирование площадки. Импортированный с GitHub репозиторий, зеркалирование которого остановлено, считается как обычный.
Мы спросили, а ответа нет. Тогда балл становится интервалом «от и до», а не нулём.
Самая тяжёлая категория весит 20 из 100. Зрелый проект остаётся высоко даже при редких коммитах.
Шесть категорий
коснитесь категории, чтобы увидеть её метрики и шкалыоткройте категорию, чтобы увидеть её метрики и шкалыЧто смотрим: дерево репозитория и настройки площадки. Если площадка отдала дерево не целиком, ненайденный файл получает «не проверено», а не «нет». За отсутствие политик веток и ревью зеркало с GitHub не штрафуем: метрика выбывает.
Окно наблюдения — 365 дней.
Что смотрим: коммиты, авторов, релизы и pull request'ы за окно. Отклик считаем по первой странице списка и только при достаточном числе объектов. По одному-двум судить рано, и метрика выбывает.
Публично не видно ничего: отчёты сканера площадка отдаёт только участникам репозитория (403 по правам, замер 15.09.2026). Поэтому у публичной строки категория — «нет данных», а её вес уходит остальным. Разбор находок по важности и состоянию включается при входе в свой репозиторий.
«прогоны CI» считается только в приватном анализе, токеном владельца: окно — 90 дней, не больше 50 последних наблюдений; меньше 5 — метрика не применяется и вес уходит соседям. Ступени шкалы — норматив от 23 сентября 2026 г., а не калибровка по корпусу.
Что смотрим: файл сборки и его триггеры, а в приватном анализе — ещё и итоги прогонов (доля успешных среди завершившихся). Чего не видим публично: итоги прогонов — площадка отдаёт их только участникам репозитория (403 по правам, замер 15.09.2026). Поэтому у публичной строки метрика прогонов всегда «сбор отказал» — закрыто площадкой, — а категория «оценено частично». Если сам конфиг прочитать не удалось, категория — «сбор отказал». Смотрим только конфиг площадки (.sourcecraft/ci.yaml); внешний CI (GitHub Actions и др.) не проверяется.
Отклик по «время закрытия задач» считаем по выборке до 50. Нужно не меньше 3 подходящих объектов: по одному-двум судить рано, и метрика выбывает. «возраст открытых задач» — пороги — квантили каталога: 609 репозиториев, замер 15 сентября 2026 г. «время закрытия задач» — пороги — квантили каталога: 240 репозиториев, замер 15 сентября 2026 г.
Что смотрим: задачи в трекере и время ответа на них. Трекер включён не у всех: у 97,5 % публичного каталога он пуст (замер по полному каталогу 15.09.2026). Тогда спрашивать нечего, и категория уходит в «нет данных», а не в ноль.
«плотность пометок TODO/FIXME» — пороги — квантили 372 ненулевых наблюдений из 13 766 репозиториев каталога, замер 17 сентября 2026 г.
Что смотрим: все файлы кода из собранного дерева, без усечения выборки. Пометок долга нет почти у всех репозиториев замера. Поэтому середина шкалы стоит на квантилях тех, у кого они есть: иначе шкала мерила бы редкое исключение.
Грейды
нижняя граница балла- A85+отлично
- B70+хорошо
- C55+неплохо
- D40+есть куда расти
- Fниже 40начало пути
Балл-интервал показываем парой букв: грейд нижней и верхней границы, например C–B. Цвет берём по нижней.
Интервал и покрытие
интервал честнее точки- оценено84
- оценено частично61–78
- не оценено—
Если метрику не удалось измерить, балл становится интервалом: от «всё потеряно» до «всё набрано». Покрытие — доля веса рубрики, которую удалось применить. Ниже 60 % оценка считается частичной, даже если границы интервала совпали. Пустой репозиторий не оцениваем вовсе. Репозиторий с давно не обновлёнными данными тоже: вместо устаревшего балла стоит «не оценено».
Столько веса удаётся применить к публичному репозиторию. Безопасность и Задачи спросить негде, их вес переходит остальным 4 категориям. Полной оценки на публичных данных не бывает: статусы прогонов CI закрыты. Поэтому вместо «оценено / частично» мы показываем покрытие числом.
Интервал честнее точки: он показывает, сколько мы не смогли измерить, и не рисует точку там, где её нет. Место в рейтинге считаем по нижней границе интервала, то есть только по доказанному. Середину не берём: иначе репозиторий, у которого площадка отдала меньше данных, стоял бы в рейтинге выше, чем показывают измеренные данные. У крупных репозиториев диапазон обычно шире: площадка чаще отдаёт их данные не целиком — дерево файлов, длинная история, большой трекер, — и неизмеренного веса у них больше.
Что сознательно не входит в балл
Калибровка порогов
Середины шкал стоят на квартилях выборки, края заданы вручную: «30 дней — ещё свежо», «год — уже давно».
Дата и выборка выше — только для шкал без своей подписи; у остальных свой замер (4 метрики), он назван в строке метрики.
Как складывается балл
четыре шага от значения метрики до буквы грейда- Значение метрики переводим в 0–100 по её шкале. Между узлами — линейно, за крайними узлами — плато.
- Баллы метрик внутри категории усредняем по их весам: сумму «балл × вес» делим на сумму весов.
- Долю категории умножаем на её вес. Вклады шести категорий складываем в число от 0 до 100.
- По этому числу берём грейд по границам грейдов. У интервала буква считается для каждой границы, и рядом с баллом стоит пара.
Категория без данных и метрика без ответа считаются иначе. Оба случая описаны выше, в трёх правилах.
Отклик и трекер: что считается ответом
определения по текущему коду сбора- Ответ
- Первый комментарий человека, чей автор известен и не совпадает с автором pull request или задачи. Комментарии код-ассистента и удалённые комментарии не считаются.
- Кто не попадает в знаменатель
- Объекты, которые не удалось прочитать целиком, и объекты с неизвестным автором комментария. Про них нельзя сказать ни «ответили», ни «нет».
- Минимальный знаменатель
- Порог виден в подписи раскрытой категории, из того же ответа, что и шкалы. На меньшей выборке доля «без ответа» скачет, и балл мерил бы выборку, а не проект. Если выборка меньше порога потому, что её не дочитали — прогон остановлен или площадка отказала по части целей, — метрика уходит в «недоступно» с интервалом, а не выбывает из счёта.
Как часто пересчитывается
Сервис рассчитан на суточный пересчёт каталога. Обновляются репозитории, которые изменились с последнего удачного сбора. Остальные остаются в снимке с прежними данными и прежним временем анализа.
Четыре состояния категории
чип состояния стоит в строке категории на карточке репозитория- оценено
- Все применимые метрики измерены. Вклад категории посчитан целиком.
- частично
- Часть метрик измерить не удалось. Вес категории остаётся полным, а неполноту показывает покрытие числом.
- нет данных
- У этого репозитория спросить негде: ни одной применимой метрики, например трекер выключен или поверхность закрыта. Вес уходит остальным категориям, штрафа нет.
- сбор отказал
- Метрики применимы, но измерить не удалось ни одной. Вес учтён по нижней границе, и балл становится интервалом.