# orchestrator.mjs

## Огляд

Файл `convergence-loop` є автономним оркестратором для n-fix, який забезпечує перевірку та виправлення коду без участі LLM. Він ініціює детерміністичні перевірки, regex-парсинг та ітеративні процеси з використанням LLM для вирішення складних проблем. Цей компонент є ключовим елементом системи, що автоматизує процес забезпечення коректності коду n-fix.

## Поведінка

1.  **Ініціалізація:** Запускається оркестратор, визначаються максимальна кількість ітерацій (за замовчуванням 3) та порогове значення для ескалації LLM (за замовчуванням 2 невдачі).
2.  **Первинна перевірка:** Виконується детермінована перевірка (T0) на основі заданих правил, без залучення LLM. Результат перевірки записується.
3.  **Автоматичний фікс (T0-auto):** Якщо перевірка виявила порушення, запускається автоматичний фікс, який використовує regex для виявлення та виправлення проблем.
4.  **Ітерація:** Програма повторює наступні кроки до досягнення максимальної кількості ітерацій:
    - **Перевірка (T0):** Виконується детермінована перевірка (T0) на основі поточного стану.
    - **Автоматичний фікс (T0-auto):** Якщо перевірка виявила порушення, запускається автоматичний фікс.
    - **Виклик LLM (T1):** Для кожного порушення, яке не було виправлено автоматичним фіксом, викликається LLM (haiku або sonnet, залежно від кількості попередніх невдач) для генерації рішення.
    - **Оцінка рішення LLM:** LLM генерує рішення, яке оцінюється на предмет успіху.
    - **Оновлення стану:** Якщо рішення LLM успішне, порушення виправляється, і кількість невдалих спроб LLM для цього правила встановлюється на нуль.
5.  **Фінальна перевірка:** Після завершення всіх ітерацій виконується остаточна перевірка, щоб визначити, чи були виправлені всі порушення.
6.  **Повернення результату:** Оркестратор повертає код 0, якщо всі правила були виправлені, і код 1, якщо хоча б одне правило залишилося не виправленим. У випадку помилки парсингу JSON, повертається null.

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

- Оркестратор запускається при виклику `runOrchestratorCli`.
- Програма виконує цикл з перевірок, поки не буде досягнуто максимальну кількість ітерацій (`maxIter`).
- Після кожної ітерації (`T0`, `T0-auto`, `T1`) виконується перевірка.
- `T0` виконується детерміновано без використання LLM.
- `T0-auto` виконує regex-парсинг та застосовує програмний фікс у разі виявлення порушення.
- `T1` використовує LLM через `pi` (ескалація до `haiku` та `sonnet`).
- `check-gate` повторно запускає `T0` після кожної ітерації.
- У разі помилки програма повертає `false` або `null`.
- Програма кешує результати для оптимізації роботи в межах одного запуску.
- Програма не взаємодіє з мережею.
