# hc_pairing.mjs

## Огляд

Перевірка правила abie: для кожного каталогу в дереві `k8s/`, що містить маніфест `kind: Deployment`, поруч обовʼязково має лежати файл `hc.yaml` із коректним modeline `$schema`. Файл — JS-частина правила: він відповідає лише за FS-парність (Deployment ↔ hc.yaml) та перший рядок-modeline. Структурну валідацію самого `HealthCheckPolicy` (apiVersion, requestPath, port, targetRef із суфіксом `-hl`) виконує окремий Rego-механізм через CLI і тут не дублюється.

## Поведінка

1. Завантажує перелік ігнорованих шляхів із конфігурації cursor і збирає всі `.yaml`/`.yml` файли під сегментом `k8s/`.
2. Визначає множину каталогів, де серед цих файлів зустрічається хоча б один `kind: Deployment`.
3. Якщо Deployment-каталогів немає — перевірку повністю пропускає з повідомленням-pass і завершується успішно.
4. Інакше для кожного Deployment-каталогу (у відсортованому порядку) перевіряє сусідній `hc.yaml`:
   - файлу немає поруч → fail з вимогою додати `HealthCheckPolicy`;
   - файл не вдалося прочитати → fail із текстом помилки читання;
   - файл є → перевіряє його modeline.
5. Modeline валідний лише тоді, коли перший рядок файлу — `# yaml-language-server: $schema=…` із точним очікуваним URL CRD-схеми (`networking.gke.io/healthcheckpolicy_v1.json`). Порожній перший рядок, відсутність modeline або інший URL → fail.
6. Підсумковий exit-код формується з накопичених pass/fail: 0, якщо всіх правил дотримано.

Очікуваний перший рядок `hc.yaml`:

```
# yaml-language-server: $schema=https://datreeio.github.io/CRDs-catalog/networking.gke.io/healthcheckpolicy_v1.json
```

## Де використовується

Це check-модуль правила abie (`abie.mdc`) у складі lint-набору cursor. Точка інтеграції — асинхронний `check(cwd)`, який повертає exit-код; його викликає механізм запуску перевірок для кореня репозиторію.

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

- Read-only: модуль лише читає файлову систему й нічого не змінює.
- Fail-safe для порожнього дерева: відсутність Deployment-маніфестів трактується як успіх, а не помилка.
- Помилка читання конкретного `hc.yaml` не зупиняє прогон — вона фіксується як окремий fail, а перевірка решти каталогів триває.
- Каталог `.github/` свідомо виключений зі збору YAML (належить іншому правилу), як і шляхи з cursor-ignore.
- Зіставлення modeline точне: будь-яке відхилення URL чи формату першого рядка дає зрозуміле повідомлення з посиланням на `abie.mdc`.
