---
type: JS Module
title: normalize-pipeline.mjs
resource: npm/scripts/lib/adr/normalize-pipeline.mjs
docgen:
  crc: 9c2cbb81
  model: omlx/gemma-4-e4b-it-OptiQ-4bit
---

Реалізує локально-орієнтований конвеєр для нормалізації ADR. У цій системі JavaScript виконує оркестрацію, тоді як LLM відповідає виключно на вузькі, верифіковані питання. Процес включає відбір кандидатів на основі лексичної схожості (Stage 0: retrieval), бінарне судження між записами (Stage 1: edge-judge) та класифікацію драфтів (Stage 1b: kind-judge). Система об'єднує підтверджені ребра через алгоритм Union-Find (Stage 1c: cluster) для вибору опорного елемента (anchor) та призначення операцій. Далі, LLM вилучає секції в JSON (Stage 2: gen-MADR), після чого JS збирає канон. На фінальній стадії, LLM створює прозу про змін (Stage 3: gen-merge), яку JS додає до документа з відповідним заголовком.

## Поведінка

Поведінка
tokenize токенізує назву чи слаг, повертаючи множину значущих токенів, фільтруючи стоп-слова та занадто короткі елементи.
jaccard обчислює коефіцієнт Jaccard між двома множинами токенів.
draftTitle витягує заголовок з тіла чернетки, використовуючи специфічні шаблони або шукаючи перший заголовок H1, не класифікований як секція MADR.
isNoDecision перевіряє тіло чернетки на наявність маркерів, що свідчать про те, що рішення не було прийняте, без використання LLM.
buildEdges будує пари (ребра) між чернетками та між чернетками і список чистих ADR, виходячи з лексичної схожості.
validateMadr перевіряє згенерований текст MADR на відповідність формату OKF (наприклад, наявність YAML frontmatter, заголовок, статуси та секції).
madrDate визначає стандартну ISO-дату для ADR, використовуючи або поле `captured` з чернетки, або префікс імені файлу.
normalizeSections перетворює сирий JSON-вивід моделі на структурований об'єкт, нормалізуючи типи даних (наприклад, рядок у масив).
assembleMadr збирає канонічний текст MADR, комбінуючи наданий заголовок, ISO-дату та нормалізовані секції, створюючи кінцевий markdown.
genMadr викликає LLM для вилучення змісту ADR із чернетки, а потім конструює та валідує повний MADR за допомогою `assembleMadr` та `validateMadr`.
normalizePipeline виконує повний конвеєр: ідентифікує кластери чернеток, визначає операції (delete, rewrite, merge-anchor тощо) та ініціює виклики LLM для генерації контенту та додатків.

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

Here is the rewritten list as concise bullet points:

* tokenize — Перетворює назву чи слаг у набір значущих слів, розділених пробілами та дефісами.
* jaccard — Обчислює ступінь схожості між двома наборами слів.
* draftTitle — Знаходить основний заголовок чернетки, починаючи з ADR-рядка; якщо його немає, шукає перший H1, інакше бере назву файлу.
* isNoDecision — Автоматично виявляє чернетки, де рішення відсутнє (наприклад, через переривання транскрипту), щоб їх не обробляти LLM.
* buildEdges — Створює потенційні зв'язки між елементами на основі схожості слів.
* validateMadr — Перевіряє якість згенерованого документа MADR автоматично.
* madrDate — Визначає дату документа у форматі ISO, використовуючи дані з метаданих чернетки або дату створення файлу.
* normalizeSections — Стандартизує вивід генеративної моделі в чітку структуру секцій, виправляючи невеликі помилки формату.
* assembleMadr — Збирає повний документ MADR у версії 4.0.0, використовуючи фіксовану структуру та контент від інших частин.
* genMadr — Генерує чернетку документа MADR на основі заданих даних.
* normalizePipeline — Виконує послідовність усіх кроків обробки даних, повертаючи список виконаних операцій та статистику.

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

- (специфічних машинно-виведених гарантій немає)
