DigitableCourses

Formal Type Surface · open source

Бизнес-правило, которое можно прочитать, выполнить и проверить.

FTS — отступный язык исполняемых спецификаций. Вы описываете предметные данные, правила и примеры без скобок; один .fts становится работающей утилитой, тестами, TypeScript-кодом, UI-описанием или проверяемым допуском команды.

232
прикладных кейса
16
модулей курса
2
языка записи
0
runtime-зависимостей
discount.fts
категория «Продажи»

  объект Покупка
    сумма является деньгами

  утилита «Рассчитать скидку»
    принимает Покупка
    возвращает деньги
    начинает с 0

    правило «Большая покупка»
      если сумма не меньше 10000
      то добавить 10 процентов от поля сумма

    пример «Двадцать тысяч»
      дано сумма равна 20000
      ожидается результат равен 2000
✓ fts test1/1 passed

Зачем ещё один язык

Он убирает разрыв между фразой в задаче и кодом в проде.

Обычная спецификация объясняет намерение, а реализация живёт отдельно. FTS делает проверяемую часть правила единым исходником для людей, приложения, тестов и агентов.

  1. 01Пишем предметное правилоНа русском или английском, с отступами и читаемыми именами.
  2. 02Компилятор строит модельПроверяет типы, поля, ссылки, композицию и примеры.
  3. 03Выбираем выходИсполнить, тестировать, сгенерировать TS, форму, таблицу или сертификат.
  4. 04Хост выполняет эффектNode, React, Python, CI или агент используют один канонический JSON-контракт.
Граница честности

FTS хорошо описывает чистые вычисления и проверяемые допуски. Он не генерирует оплату, SQL-транзакцию или HTTP-вызов: приложение выполняет внешний эффект только после результата FTS.

Одна модель — разные уровни работы

Что получает каждый разработчик.

Junior

Описывает данные и примеры

Пишет структуру формы или таблицы и проверяет ожидаемые результаты как новые предметные unit-тесты.

fts test order.fts
Middle

Встраивает утилиту

Вызывает FTS из Node.js или генерирует TypeScript, оставляя HTTP, БД и очереди в обычном коде.

fts generate order.fts
Senior

Фиксирует инварианты

Отделяет чистую бизнес-политику от эффектов, вводит command guards, свойства и версионируемые контракты.

fts certify policy.fts
Lead

Синхронизирует язык команды

Связывает DDD-контекст, код, CI и архитектурные решения одним проверяемым артефактом.

fts pipeline domain.fts
AI agent

Предлагает, но не решает сам

Агент пишет FTS и вызывает MCP. Компилятор, тесты и verifier принимают детерминированное решение.

fts_verify → verified

Один смысл · две записи

Русский и English без скобок.

Обе поверхности исполняются одним парсером и нормализуются в одну каноническую модель. Имена с пробелами пишутся в кавычках; обычные кавычки и «ёлочки» поддерживаются.

discount.ru.fts
категория «Продажи»

  объект Покупка
    сумма является деньгами
    «постоянный клиент» является признаком

  утилита «Рассчитать скидку»
    принимает Покупка
    возвращает деньги
    начинает с 0

    правило «Большая покупка»
      если сумма не меньше 10000
      то добавить 10 процентов от поля сумма

    свойство «Скидка ограничена»
      результат не больше 20 процентов от поля сумма

    пример «Покупка на двадцать тысяч»
      дано сумма равна 20000
      дано «постоянный клиент» равен нет
      ожидается результат равен 2000

Интеграция

FTS не заменяет React, Node.js или Python. Он отдаёт им проверенное решение.

Node.jsИсполнить напрямую
import { compile, executeUtility } from "@digitable/fts"

const model = compile(source)
const discount = executeUtility(
  model,
  "Рассчитать скидку",
  { сумма: 20_000, "постоянный клиент": true }
)

Node отвечает за HTTP и базу; FTS — только за детерминированное правило.

ReactПолучить форму
import { compile } from "@digitable/fts/browser"
import { FtsForm } from "@digitable-lol/ui-components"

const document = compile(source)
return <FtsForm
  document={document}
  objectName="Покупка"
  value={value}
  onChange={setValue}
/>

Компонент берёт поля из той же модели, которую проверяет backend.

Любой языкГраница через JSON
fts run discount.fts \
  --utility "Рассчитать скидку" \
  --input purchase.json

# stdout: JSON
# failure: non-zero exit code

Python, Go, Java, Rust и shell используют CLI или каноническую JSON-схему.

AI / DigitПроверить до действия
fts_check
fts_test
fts_execute
fts_certify
fts_verify  # status must be verified

Модель может написать текст, но допуск consequential-команды решает verifier.

Каталог применимости

232 real-world кейса: вход → FTS → результат.

Это не 232 обещаний «можно автоматизировать». Каждый кейс называет входные факты, роль FTS, выходной артефакт и место интеграции.

Показано 24 из 232
РитейлMiddle

Рассчитать скидку корзины

Retail: deterministic calculation

  1. ВходСумма корзины, сегмент и промокод
  2. FTSСложить применимые проценты и проверить верхний предел
  3. На выходеЧисловая скидка без скрытых веток
Node.jsFTS runtimeTypeScriptnode:test
РитейлSenior

Разрешить возврат товара

Retail: command eligibility

  1. ВходПокупка, срок и состояние товара
  2. FTSВывести право на возврат из проверяемых фактов
  3. На выходеКоманда «Оформить возврат» разрешена или отклонена
DDDcommand guardcertificateJSON
РитейлQA / Middle

Проверить бесплатную доставку

Retail: executable examples

  1. ВходСумма, регион и вес
  2. FTSВыполнить примеры на границах тарифа
  3. На выходеРегрессия тарифа блокирует сборку
CI/CDfts testpropertyCI gate
РитейлJunior

Собрать форму товарной карточки

Retail: generated form

  1. ВходСтруктура товара и обязательность полей
  2. FTSСкомпилировать поля в каноническую модель
  3. На выходеОписание React-формы
Reactcanonical JSONform descriptorReact
РитейлJunior / Middle

Собрать таблицу остатков

Retail: generated table

  1. ВходSKU, склад, остаток и резерв
  2. FTSПревратить типы полей в колонки
  3. На выходеКонфигурация таблицы без ручного дублирования
React / Webcanonical JSONtable columnsfrontend
РитейлSenior / Lead

Доказать готовность заказа к выдаче

Retail: verified transition

  1. ВходОплата и факт комплектации
  2. FTSСкомпозировать состояния в разрешение выдачи
  3. На выходеПроверяемый сертификат перехода
ArchitecturemorphismcertificateMermaid
РитейлAI agent

Дать агенту расчёт цены

Retail: agent tool

  1. ВходЗапрос покупателя и снимок корзины
  2. FTSВызвать детерминированную FTS-утилиту через MCP
  3. На выходеСтруктурированный ответ с диагностикой
Digit / MCPMCPstructured resultdiagnostics
РитейлTeam

Защитить правила промокодов

Retail: regression gate

  1. ВходНабор граничных примеров
  2. FTSЗапустить примеры и свойства в CI
  3. На выходеНенулевой exit code при расхождении
CI/CDgenerated testsexit codebuild gate
МаркетплейсыMiddle

Рассчитать комиссию продавца

Marketplaces: deterministic calculation

  1. ВходКатегория, оборот и тариф
  2. FTSПрименить последовательность комиссионных правил
  3. На выходеСумма комиссии и сгенерированный тест
Node.jsFTS runtimeTypeScriptnode:test
МаркетплейсыSenior

Разрешить публикацию товара

Marketplaces: command eligibility

  1. ВходКарточка, документы и ограничения
  2. FTSПроверить свидетельства допуска
  3. На выходеКоманда публикации с объяснимым guard
DDDcommand guardcertificateJSON
МаркетплейсыQA / Middle

Проверить SLA отгрузки

Marketplaces: executable examples

  1. ВходДедлайн, статус и схема FBO/FBS
  2. FTSЗафиксировать примеры нарушения SLA
  3. На выходеВоспроизводимый тест бизнес-сроков
CI/CDfts testpropertyCI gate
МаркетплейсыJunior

Собрать форму нового SKU

Marketplaces: generated form

  1. ВходАтрибуты категории товара
  2. FTSПолучить поля из одной структуры FTS
  3. На выходеДинамическая форма кабинета
Reactcanonical JSONform descriptorReact
МаркетплейсыJunior / Middle

Собрать таблицу выплат

Marketplaces: generated table

  1. ВходПериод, продажи, удержания, итог
  2. FTSСопоставить типы с форматтерами колонок
  3. На выходеТаблица сверки выплат
React / Webcanonical JSONtable columnsfrontend
МаркетплейсыSenior / Lead

Доказать право на выплату

Marketplaces: verified transition

  1. ВходДоставка, период спора и KYC
  2. FTSСвязать факты морфизмами допуска
  3. На выходеСертификат разрешения выплаты
ArchitecturemorphismcertificateMermaid
МаркетплейсыAI agent

Дать агенту проверку листинга

Marketplaces: agent tool

  1. ВходТекст карточки и факты продавца
  2. FTSПередать исходник в fts_check и fts_execute
  3. На выходеРешение агента, ограниченное валидатором
Digit / MCPMCPstructured resultdiagnostics
МаркетплейсыTeam

Защитить сетку комиссий

Marketplaces: regression gate

  1. ВходПримеры по категориям и порогам
  2. FTSГенерировать node:test из FTS
  3. На выходеСтабильный релиз тарификации
CI/CDgenerated testsexit codebuild gate
БанкингMiddle

Рассчитать кредитный лимит

Banking: deterministic calculation

  1. ВходДоход, нагрузка и риск-класс
  2. FTSВычислить лимит и проверить максимум
  3. На выходеДетерминированный лимит
Node.jsFTS runtimeTypeScriptnode:test
БанкингSenior

Разрешить выдачу кредита

Banking: command eligibility

  1. ВходKYC, скоринг и риск-проверка
  2. FTSСкомпозировать свидетельства допуска
  3. На выходеGuard команды выдачи
DDDcommand guardcertificateJSON
БанкингQA / Middle

Проверить пороги скоринга

Banking: executable examples

  1. ВходГраничные баллы и ожидаемые классы
  2. FTSИсполнить предметные примеры
  3. На выходеТесты скоринговой политики
CI/CDfts testpropertyCI gate
БанкингJunior

Собрать форму заявки

Banking: generated form

  1. ВходПоля клиента и финансов
  2. FTSСкомпилировать структуру заявки
  3. На выходеReact-форма с типами
Reactcanonical JSONform descriptorReact
БанкингJunior / Middle

Собрать таблицу просрочек

Banking: generated table

  1. ВходДоговор, DPD и остаток долга
  2. FTSПолучить колонки из структуры
  3. На выходеОперационная таблица коллекшна
React / Webcanonical JSONtable columnsfrontend
БанкингSenior / Lead

Доказать допустимость операции

Banking: verified transition

  1. ВходЛимит, санкционный контроль и MFA
  2. FTSПровести типизированную цепочку морфизмов
  3. На выходеПроверяемый сертификат операции
ArchitecturemorphismcertificateMermaid
БанкингAI agent

Дать агенту pre-check заявки

Banking: agent tool

  1. ВходАнкета без сетевых секретов
  2. FTSВызвать read-only MCP-инструменты FTS
  3. На выходеСтруктурированный pre-check
Digit / MCPMCPstructured resultdiagnostics
БанкингTeam

Защитить риск-политику

Banking: regression gate

  1. ВходНабор одобренных и отказных заявок
  2. FTSПроверить свойства и примеры в CI
  3. На выходеЗапрет мержа при изменении решения
CI/CDgenerated testsexit codebuild gate

Цена интеграции

FTS-проход измеряется миллисекундами, но общий build нужно мерить в вашем проекте.

Baseline: Apple M1 Max, Node.js 24.6.0. Это microbenchmark рантайма FTS, а не обещание времени Vite, webpack или полного tsc.

Операция10 элементов1001000
Compile0.0511 ms0.3937 ms4.3608 ms
Validate0.0102 ms0.0883 ms1.0154 ms
Execute0.0010 ms0.0021 ms0.0157 ms
Generate TypeScript0.0065 ms0.0392 ms0.3704 ms
Transpile generated TS1.8410 ms3.6606 ms22.9837 ms

При масштабе 1000 compile + validate занимает около 5.38 ms на этой машине. В курсе есть воспроизводимый harness и методика сравнения before/after.

Новый полный курс

От первого правила до production-интеграции и проверяемых сертификатов.

16 последовательных модулей: синтаксис, утилиты, новые unit-тесты, Node.js, React, DDD, AI/MCP, CI, benchmark и научные границы доказательства.

  1. Язык и модель
  2. Утилиты и тесты
  3. Интеграции
  4. DDD и агенты
  5. Proofs и benchmark
Открыть курс