---
type: JS Module
title: main.mjs
resource: npm/rules/changelog/consistency/main.mjs
docgen:
  crc: 34cd0c0a
  model: omlx/gemma-4-e4b-it-OptiQ-4bit
  score: 75
  issues: internal-name:checkPublishedWorkspace,internal-name:runLocalOnlyChecks,anchor-miss:(n-changelog.mdc),judge:inaccurate:0.99
---

## Огляд

Огляд:
Цей файл гарантує готовність пакетів у монорепозиторії до публікації. Він сканує кореневі директорії, визначає локальні та зареєстровані пакети, використовуючи інформацію з конфігураційного файлу res.json. Далі він порівнює версію кожного пакета з даними, опублікованими на https://pypi.org/pypi/, та виконує локальні перевірки змін за допомогою Git.

Поведінка:
Ініціалізує процес перевірки, який аналізує кореневі директорії проєктів монорепозиторію. Проходиться по знайдених директоріях, визначаючись пакети з реєстру та локальні. Для кожного пакета, які можуть бути опубліковані в реєстрі, здійснюється перевірка відповідності `CHANGELOG.md` та порівняння версії з опублікованою через звернення до мережі. Якщо пакети не є опублікованими, виконується перевірка локальних змін на основі інформації з Git. Якщо виявлені зміни, і пакет не має файлу `.changes/CHANGELOG.md`, створюється цей файл з дефолтними даними. При виявленні розбіжностей версій виводиться повідомлення про заборону. Усі операції перехоплюють помилки (fail-safe), не генеруючи зовнішніх винятків, і повертають порожнє значення замість них за певних умов. Фінальний код виходу визначається на основі результатів перевірок.

## Поведінка

Поведінка:

1. Викликається `main`.
2. Merge пропускається цілком: і готовий merge-коміт (HEAD із другим предком), і merge У ПРОЦЕСІ (маркер `MERGE_HEAD` під час `git commit` у pre-commit hook, коли `HEAD^2` ще не існує) — changeset документують feature-коміти, autofix шумного «Merge…»-changeset не створює.
3. Знаходяться кореневі директорії проєктів монорепо.
4. Проходиться по знайдених директоріях, визначаються пакети з реєстру та ті, що є локальними.
5. База порівняння feature-гілки — НОВІШИЙ merge-base серед локальної та `origin/`-версії базової гілки (dev/main): застарілий локальний `main` не видає реліз-коміти, вже інтегровані в origin, за «ручний bump поза CI»; локальний main попереду origin так само валідний; репо без remote працює на локальних гілках.
6. Для кожного пакета, які можуть бути опубліковані в реєстрі, викликається `checkPublishedWorkspace`.
7. `checkPublishedWorkspace` перевіряє наявність та відповідність `CHANGELOG.md`, а також порівнює версію пакета з опублікованою версією через мережевий запит до https://pypi.org/pypi/.
8. Якщо пакети не є опублікованими, викликається `runLocalOnlyChecks` для перевірки змін.
9. `runLocalOnlyChecks` використовує інформацію з Git для порівняння поточного стану з базою гілки.
10. Якщо виявлені зміни, і пакет не має файлу `.changes/CHANGELOG.md`, то в режимі автоматичного виправлення створюється цей файл з дефолтними даними.
11. При виявленні різниці версій, яка свідчить про ручний збій (version вищий, ніж опублікований), виводиться повідомлення про заборону.
12. `main` повертає код виходу на основі результатів перевірок.

## Гарантії поведінки

- Read-only: не виконує операцій запису (ФС/БД).
- Перехоплює помилки і не пропускає винятків назовні (fail-safe).
- За певних помилок повертає порожнє значення (напр. `null`) замість винятку.
