FTS — исполняемые спецификации FTS generation и CI: TypeScript без drift
0%

FTS generation и CI: TypeScript без drift

FTS generation и CI: TypeScript без drift

Генератор создаёт два файла:

fts generate policies/discount.fts --out src/generated
src/generated/
  fts.utilities.ts
  fts.utilities.test.ts

Generated source детерминирован: одинаковый документ даёт одинаковое содержимое.

Рекомендуемый pipeline

fts check policies/discount.fts
fts test policies/discount.fts
fts generate policies/discount.fts --out src/generated
npm run typecheck
npm test

Если артефакты коммитятся, CI после generation проверяет git diff --exit-code. Если не коммитятся, build обязан генерировать их до tsc.

GitHub Actions

- uses: actions/setup-node@v4
  with:
    node-version: 22
- run: npm ci
- run: npx fts check policies/discount.fts
- run: npx fts test policies/discount.fts
- run: npx fts generate policies/discount.fts --out src/generated
- run: npm run typecheck
- run: npm test

Review policy

Изменение .fts должно отвечать на четыре вопроса:

  1. Какой предметный термин или закон изменился?
  2. Какой пример добавлен на новую границу?
  3. Какие generated functions или UI descriptors изменились?
  4. Есть ли migration для потребителей canonical JSON?

Не принимайте большой generated diff без небольшого и читаемого diff исходной модели.

Работа агента

Агент может вызвать fts_generate без --out: файлы возвращаются structured content и ничего не записывают. Это удобно для preview. Запись и commit должны происходить отдельным контролируемым шагом после проверки.

Упражнение

Добавьте generation в CI своего учебного проекта. Измените .fts, но не обновляйте generated files. Pipeline должен поймать drift. Затем выберите одну из двух политик — commit artifacts или build-time generation — и зафиксируйте её в README.

Дальше: performance

Нашли неточность? Выделите фрагмент текста — рядом появится жучок.

Нужен разбор именно вашей ситуации?

Статья описывает общий случай. Если у вас частный — можно разобрать его отдельно, платно. А если не хватает целого материала, предложите тему: её оплачивают вскладчину, и она выходит открытой для всех.

Доска запросов