1.2.0 - проверка навыков живой платформой, гарды инвариантов
Выпуск про проверку фактами. Навыки впервые сверены не с собственными эталонами, а с живой платформой: конфигурация собирается навыками, загружается в пустую базу и выгружается обратно, после чего разбирается, что платформа исправила. Прогон нашел три дефекта, которые снапшот-тесты поймать не могли - они сверяли вывод с эталоном, а эталон повторял ту же ошибку.
Что показал прогон через платформу
Константа без указанного типа значения выходила нерабочей. В тип значения подставлялось слово Constant - имя типа метаданных вместо типа данных. Платформа отвечала "Неизвестное имя типа" и отказывалась грузить конфигурацию. Теперь без valueType берется строка, как и задумано.
Планы видов характеристик выходили с неверным префиксом порождаемого типа. Для категории Characteristic писалось ChartOfCharacteristicTypesCharacteristic, тогда как платформа пишет просто Characteristic. Ошибка сидела и в коде, и в десяти эталонах тестов сразу.
Заимствование в расширение теряло часть порождаемых типов. У 1c-cfe-borrow в наборах не хватало девяти пар - разделителя субконто у плана счетов, перерасчетов у регистра расчета, точки маршрута у бизнес-процесса и других; четырех типов не было вовсе. Заимствованная оболочка с неполным набором платформу не устраивает.
Замерено на 8.3.27.2214: 36 объектов 35 типов метаданных прошли круг целиком. По наборам порождаемых типов расхождение с платформой осталось одно из двадцати одного - то самое, что и было исправлено.
Диапазон версий формата больше не расползается
1c-form-validate принимал только 2.17 и 2.20, тогда как остальные валидаторы - весь диапазон 2.17-2.21. Форма, созданная соседним навыком, получала предупреждение о неизвестной версии. Теперь границы диапазона объявлены явно в двенадцати файлах и сверяются с лестницей версий в спецификации.
Сама лестница тоже перестала быть предположением: 2.17, 2.20 и 2.21 замерены на платформах 8.3.24, 8.3.27 и 8.5.1. Заодно опровергнуто давнее утверждение спецификации, будто плотная запись пустого элемента появилась в 2.20 - платформа пишет плотно во всех замеренных версиях.
Гарды инвариантов заработали
Пять проверок, которые сверяют не вывод навыков, а согласованность исходников между собой. Раньше работала одна: остальные искали файлы в чужой раскладке каталогов и молча падали, а после починки путей упирались в требования, которых у нас нет. Теперь проходят все пять и включены в CI.
Появилась таблица наборов GeneratedType в спецификации (раздел 2.5) - эталон, построенный по выгрузке платформы. И храповик общих реализаций: одноименные функции размножены копиями по навыкам, и гард следит, чтобы разброс копий не рос.
Прочее
- Навык
dehumanize-ai-textпереименован вhumanize-ai-text- прежнее имя означало обратное тому, что навык делает. Содержание дополнено: разбор ложных срабатываний, признаки живого текста, калибровка по авторскому образцу, двенадцать языковых антипаттернов. - Заведен CI: снапшот-тесты и гарды на каждый push и pull request, бейдж состояния в README.
- Каталог навыков в README перестал разъезжаться, темы и описание репозитория записаны в
.github/repo-settings.md- на стороне GitHub они не версионируются.