# env_dns.mjs

## Огляд

Перевірка-чек правила `abie.mdc`: сканує env-файли abie й гарантує, що внутрішньокластерні URL у них вказують на правильний GKE-кластер відповідно до імені файла. Це захист від типової помилки, коли `dev`-конфіг випадково посилається на `ua`-кластер (або навпаки). Якщо в репозиторії немає abie env-файлів, перевірка мовчки проходить.

## Поведінка

1. Завантажує перелік ігнорованих шляхів із cursor-конфігу й збирає всі abie env-файли в репозиторії. abie env-файлом вважається файл із basename `dev.env` або `ua.env` (опційно з провідною крапкою — `.dev.env`, `.ua.env`).
2. Локальний `.env` без імені кластера (файл розробника) та інші env-файли (наприклад `production.env`) під перевірку не підпадають.
3. Якщо жодного abie env-файла не знайдено — фіксує `pass` із поясненням, що перевірку пропущено, і завершується успішно.
4. Для кожного знайденого файла визначає очікуваний кластер за іменем:
   - `dev.env` → кластер `abie-dev.internal`, namespace мусить починатися з `dev-`.
   - `ua.env` → кластер `abie-ua.internal`, namespace мусить починатися з `ua-`.
5. Читає вміст файла. Якщо файл не читається — фіксує `fail` із текстом помилки й переходить до наступного.
6. У вмісті шукає всі URL виду `http://<svc>.<ns>.svc.<dns>` (з опційним портом і шляхом) і для кожного перевіряє: частина `<dns>` збігається з очікуваним DNS кластера, а namespace `<ns>` починається з очікуваного префікса.
7. Один невідповідний URL може дати дві окремі скарги (невірний DNS і невірний namespace). Той самий URL, що трапився у двох змінних, рахується двічі.
8. Якщо у файлі немає невідповідностей — `pass`; інакше кожне порушення стає окремим `fail` із зазначенням файла, проблемного URL і очікуваного значення.

Приклад порушення для `dev.env`: URL `http://api.ua-core.svc.abie-ua.internal` дасть скарги, бо очікувався DNS `abie-dev.internal` і namespace-префікс `dev-`.

## Публічний API

`check(cwd)` — запускає перевірку від кореня репозиторію (за замовчуванням поточна робоча директорія) і повертає код виходу: `0`, якщо порушень немає, інакше ненульовий. Це стандартна точка інтеграції чек-механізму правил.

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

- Read-only: файли лише читаються, нічого не змінюється й не створюється.
- Fail-safe за відсутності даних: репозиторій без abie env-файлів — це успіх, а не помилка.
- Нечитабельний файл не валить весь прогон: він стає окремою скаргою, решта файлів перевіряються далі.
- Файли без розпізнаного імені кластера пропускаються без помилки.
- Файли обробляються в детермінованому (відсортованому) порядку, тож вивід стабільний між запусками.
