# hc-yaml.mjs

## Огляд

Модуль валідує перший рядок-modeline у файлах `hc.yaml` для правила abie. Мета — гарантувати, що файл декларує очікувану `$schema` Kubernetes-ресурсу `HealthCheckPolicy`, аби редактор давав коректні автодоповнення й валідацію за CRD-каталогом. Структурна (per-document) перевірка самого вмісту політики виконується окремо в Rego-політиці `policy/health_check_policy/health_check_policy.rego`, не тут.

## Поведінка

1. З вмісту файла прибирається BOM, текст розбивається на рядки.
2. Перевіряється лише перший рядок:
   - якщо файл порожній або перший рядок порожній — повертається помилка про відсутній modeline;
   - якщо перший рядок не відповідає формату modeline `# yaml-language-server: $schema=…` — повертається помилка про обов'язковий modeline;
   - якщо modeline присутній, але URL `$schema` не збігається з очікуваним — повертається помилка з правильним URL для підказки.
3. Якщо перший рядок коректний — повертається `null` (валідація пройдена).

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

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

Кожне повідомлення про помилку починається з відносного шляху до файла й завершується маркером `(abie.mdc)`.

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

Викликається в `npm/rules/abie/js/hc_pairing.mjs`: для кожного знайденого `hc.yaml` перевіряється modeline і репортиться `modeline OK` при `null` або відповідний текст помилки інакше. Константа з очікуваним URL також слугує єдиним джерелом істини для тестів і повідомлень.

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

- Read-only: аналізує лише переданий рядок-вміст, не виконує жодного I/O й не змінює вхідних даних.
- Не кидає винятків на штатних рядкових даних; на порожньому чи некоректному вмісті повертає описову помилку замість збою.
- Працює з сирим текстом без повного YAML-парсингу — перевіряється виключно перший рядок.
- Результат завжди детермінований: або точний текст помилки, або `null`.
