---
type: JS Module
title: main.mjs
resource: npm/rules/doc-files/docgen-prompts/main.mjs
docgen:
  crc: 4c6c92d5
  model: omlx/gemma-4-e2b-it-4bit
  tier: local-min-retry
  score: 55
  issues: no-overview,short-behavior,best-of-2:retry-lost
---

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

- STYLE — Спільний system-стиль для всіх docgen-промптів: вимагає лаконічну поведінкову
українську документацію, забороняє сигнатури/типи й мета-фрази перед відповіддю
(профілактика «озвучування завдання» малими моделями).
- sectionMessages — Секційні набори messages з МІНІМАЛЬНИМ контекстом під кожну секцію.
Код потрапляє лише в `behavior`; «Огляд» генерується окремо ОСТАННІМ
(`overviewMessages`) з уже написаної Поведінки — тут його немає. «Публічний
API» сюди більше не входить (Stage 1/3, гібрид doc-files ADR 260719-2155):
покриті JSDoc-описом експорти рендеряться дослівно без LLM (`renderApiLine`),
LLM викликається лише на прогалини (`apiGapMessages`) — див. `isApiGap`.
- isApiGap — Stage 2 (gap-детект, 0 токенів): чи є опис експорту прогалиною — відсутній
або JSDoc-заглушка без сенсу.
- renderApiLine — Stage 1 (скриптовий рендер, 0 токенів, 0 галюцинацій): дослівний рядок
«Публічного API» з покритого JSDoc-описом експорту — без перефразування LLM.
- apiGapMessages — Stage 3: messages ЛИШЕ для експортів-прогалин (без desc) — вужчий промпт,
ніж попередній «переписати весь список своїми словами» (жодного контакту з
уже покритими JSDoc експортами, 0 ризику спотворити авторський текст).
- overviewMessages — R3 — «Огляд» ОСТАННІМ: узагальнення вже написаної Поведінки, а не здогад із
голого факт-листа. Лікує generic/хибний Огляд на складних файлах.
Анкор-блок сюди НЕ підставляється (№8, бенч gemma-4): секції — окремі
LLM-виклики, і коли анкори бачили обидва, кожен чесно вставляв «рівно один
раз» → у документі виходило двічі (незграбні «посилаючись на…» в Огляді).
Анкори живуть лише в Behavior-промпті; скорер R5 перевіряє документ цілком.
- criticMessages — E2-step 1 — критик. Перевіряє чорнетку секції на конкретні дефекти.
Повертає messages для LLM-запиту: вихід має бути СПИСКОМ issues або словом NONE.
- refineMessages — E2-step 2 — refine. Переписує чорнетку, виправляючи перелічені issues.
- guaranteesFromMarkers — E3 — детермінований шаблон секції «Гарантії поведінки» з facts.markers.
НЕ використовує LLM: 0 запитів, 0 галюцинацій, 0 generic-фраз.
- oneShotMessages — One-shot messages (база для порівняння).
- UNIT_DIGEST_TOKENS — Поріг (у токенах, ~4 байти/токен), після якого сирий src замінюється юніт-дайджестом.
- buildUnitDigest — №5 (бенч gemma-4): стислий юніт-дайджест великого файлу замість сирого src у
Behavior-промпті. На ~6k токенів сирцю мала модель втрачає фокус (водянисті
формулювання); дайджест подає структуру — імʼя, JSDoc, call-graph, тіло лише
для непокритих JSDoc юнітів (перші рядки) — і тримає промпт компактним.
- judgeRefineMessages — №6 — judge-refine: один локальний refine-прохід за конкретними зауваженнями
LLM-судді (замість лише маркування degraded). Суддя вже сформулював, ЩО саме
хибне (`reason`) — мала модель добре виправляє точкові твердження, коли їй
сказано, які саме.

## Сценарії використання

- `npm/rules/doc-files/docgen-prompts/tests/docgen-prompts.test.mjs` (sectionMessages — Огляд більше не тут (R3); guaranteesFromMarkers — лише file-local твердження) — не повертає секцію overview; Поведінка обмежена експортованими іменами (R6); Поведінка не отримує test evidence: сценарії рендерить JS окремою секцією; гібридний режим просить доповнити comments лише відсутнім потоком; fail-safe маркер не обіцяє, що всі помилки лишаються всередині модуля; ще 10

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

- Власних операцій запису (ФС/БД) у файлі немає; виклики імпортованих модулів можуть писати.
- Кешує результати в межах одного прогону.
