Перейти к основному содержимому

Что нового

Что изменилось в TDC из того, что видно вам, — новая команда или флаг, новая проверка, что-то, что теперь работает иначе, — новое сверху, и у каждого пункта ссылка на раздел документации, где это теперь описано. Изменения внутри движка, которые не меняют ничего из того, что вы пишете или читаете, здесь не упоминаются; все изменения — в журнале изменений.

25 октября 2026 — версия 0.3.6​

  • <line each="Pool"> печатает пул запись за записью. Строка на каждую запись, каждое поле читается как ${{Pool.field}} — справочная таблица выходит из того же конфига, что и строки, которые на неё ссылаются. Позиции Pool._first, Pool._last и Pool._item считают реально напечатанные строки: так запятая встаёт между объектами JSON, а не после последнего. → Весь пул, запись за записью
  • <group> держит несколько строк вместе. <group each="Depts"> печатает свои строки для каждого отделения, а группа внутри неё — врачей этого отделения: вложенный JSON из одного конфига. Без each её if= оставляет или убирает все её строки разом. → Несколько строк на элемент
  • Фильтр json. ${{Name | json}} пишет строку JSON с экранированием или null для пустого значения; ${{Tags | json:;}} пишет список как массив JSON. На список без его разделителя — предупреждение TDC312. → json
  • plus= читает расстояние из столбца. <gen type="date" of="Start" plus="Length m"> заканчивает каждый приём через его собственную длительность после начала. → Расстояние из другого столбца
  • if= у строки с each решает для каждого элемента. <line each="Orders" if="Orders > 5000"> печатает только крупные заказы; раньше условие оставляло или убирало всю строку. → Что видно внутри строки с each
  • Строки фикстур проверяются, и их if= читается. Опечатка в ${{Name}} внутри <before> — ошибка в check, а не текст, который попадает в файл как есть. → Фикстуры
  • Медицинские номера с настоящими контрольными цифрами: американский NPI, немецкие KVNR и LANR, французские RPPS и FINESS, бразильский CNS. → Национальные налоговые номера и номера документов
  • Телефоны США и Канады берут любой действующий код зоны и номера от 555-0100 до 555-0199, отведённые для вымысла. Раньше каждый номер в США начинался с +1 202 555. → Телефоны
  • В реестре пакетов 294 наборов. Теперь можно скачать традиционный китайский, узбекский, черногорский, бретонский, синдхи, ещё четыре языка и 46 стран, а tdcv2 pack list называет страны по-человечески: United States, а не «Usa». → pack list
  • Rust и C#: пакет, чья проверка <valid> отбраковывает значение, теперь перетягивает его так же, как остальные три. Одиннадцать встроенных пакетов, среди них код контейнера ISO 6346 и почтовые индексы Словении, давали там другие значения. → <valid>
  • ИИ-агенты. Claude Code, Codex, Cursor, VS Code и Gemini CLI могут писать и запускать конфиги TDC за вас — через скилл и MCP-сервер. → ИИ-агенты

17 октября 2026 — версия 0.3.5​

  • check говорит, какой движок будет выполнять конфиг и почему. Вторая строка после «is valid», например runs on engine 1 (in memory): uniq="true" on "Code", — от этого зависит, сколько памяти уйдёт. С --brief этой строки нет. → tdcv2 check
  • --engine 3 сообщает, когда конфиг выполняет движок 1. На running-сумме, статистике или колонке с uniq="true" он всегда отдавал прогон движку в памяти; теперь печатает заметку, и замер памяти больше не оказывается молча замером движка 1. → Какой движок запустит ваш конфиг
  • Исправлено: поиск в пуле или формула, читающие участника <uniq>, видели значение до перестановки группы — напечатанный день и найденный день расходились почти в каждой строке. → <uniq> — по отдельным последовательностям
  • Исправлено: <assert> и if= читают поле на глубине двух и более пулов, например D.room.dept.dep_id. → Насколько глубоко это идёт
  • Исправлено: фильтр внутри пула читает поля рядом с собой. filter="dept_no == want", где want — поле того же пула, отклонялся как фильтр, который никогда не совпадёт. → Что означает имя внутри filter
  • Исправлено: каждый элемент repeat= — отдельный выбор. Повторённый e-mail больше не повторяет один домен, а распределение, параметр которого называет другую колонку, читает значение своей строки. → Несколько значений в ячейке
  • Исправлено: 29 февраля остаётся 29 февраля. В пакете npm дата с границей 2024-02-29 или отсчитанная от неё превращалась в 1 марта. → Случайная дата из диапазона
  • Python, Rust, Java и C#: <switch> по полю записи пула, дата, отсчитанная от такого поля, и repeat= внутри ветки <switch> или <mix> работают так же, как в пакете npm. → Два имени и точка

16 октября 2026 — версия 0.3.4​

  • init может не создавать примеры. tdcv2 init --yes --no-examples пишет конфиг и папку пакетов — и больше ничего. Это для скрипта или ИИ-агента, который настраивает проект за человека. → --no-examples

  • check предупреждает о трёх ошибках, которые раньше проходили молча. Каждая запускалась без единого слова и давала не те данные:

    • у <env> нет seed=: каждый запуск даёт другой файл → seed
    • mm в формате даты — это минуты, поэтому YYYY-mm-DD печатал месяц 00; месяц — это MM → Форматирование вывода
    • &quot; или другая XML-сущность в <data> печатается как написана → <data> — сырой текст

    Это предупреждения: check по-прежнему завершается с кодом 0. Запуску с --seed предупреждать не о чем, а запуск без него вместо этого печатает зерно, которое вытянул. → tdcv2 check, коды TDC309–TDC311 в справочнике диагностик

  • У даты, отсчитанной от другой даты, теперь проверяется формат. format="YYY" у даты с of=/plus= печатал 25Y в каждой строке; теперь check его отклоняет, как и у любой другой даты. → Дата, отсчитанная от другой даты

  • Пакет npm: init --locale без значения отклоняется. Раньше он молча записывал конфиг с en; остальные четыре реализации это уже отклоняли. → --locale