Unica v0.12.0
v0.12.0 — крупнейший на сегодня релиз Unica: публичная MCP-поверхность пересобрана вокруг типизированных операций и логической адресации, появился поиск по документации платформы, поиск и диагностика кода стали провайдер-нейтральными и наблюдаемыми, добавлены домены XDTO, прав ролей и готовности проекта, прикладной слой навыков и новое поколение поставки RLM.
В релиз вошло 109 pull request из диапазона v0.11.0..v0.12.0.
Главное
- Поверхность метаданных пересобрана в четыре предметных инструмента —
unica.meta.info,unica.meta.add,unica.meta.edit,unica.meta.remove— с закрытым набором типизированных операций, preview по умолчанию и атомарным применением (#309).meta.infoполучил полную типизированную модель чтения для всех 23 видов метаданных (#430) и работает на реальных вендорских конфигурациях, где прежний профиль отказывал почти на каждом объекте (#370, #427). - Новый домен документации:
unica.documentation.searchищет по справке установленной платформы (контейнеры*.hbk, точно по версии установки — 26 933 страницы у 8.3.27), по руководствам вендораkb-1ci, стандартамv8stdи встроенной справке самой конфигурации;unica.documentation.getвозвращает полный текст документа, сетевой доступ управляется политикой вunica.toml(#393, #397). Поиск понимает естественные формулировки: морфология русского и английского, устойчивость к опечаткам, ранжирование BM25F (#416). Навыкplatform-helpвпервые отвечает из доказательного источника, а неcontract gap. - Логическая адресация
sourceSet + metadataPathвместо знания физической раскладки каталогов: новые инструментыunica.source.resolve,unica.source.children,unica.source.resources,unica.source.read(#266), логическая адресация объектов метаданных (#285) и приём логического адреса тринадцатью читателями и валидаторами (#434). unica.code.search— единый наблюдаемый оркестратор: роли semantic, symbol и lexical работают параллельно, каждая с честным статусом, полнотой и ранжированием, MCP-прогресс показывает работу вместо тишины, а тёплый неизменившийся workspace переиспользует RLM-индекс без полного обхода дерева (#231, #478).unica.code.diagnosticsперешёл на такой же провайдер-нейтральный логический контракт (#475).- Новые предметные домены: чтение и правка XDTO-пакетов
unica.xdto.info/unica.xdto.edit(#287), типизированная правка прав ролейunica.role.editи предопределённых элементов (#325), диагностика готовности проекта и Git-репозиторияunica.project.status(#486). - Прикладной слой навыков: восемь направляющих навыков о том, какой объект создавать и как он должен себя вести — моделирование метаданных, выбор регистров, проведение документов, события объектов и форм, размещение модулей, транзакции и блокировки (#392). Всего добавлено 12 новых навыков, включая
xdto,role-editиsource-access. - Новое поколение поставки инструментов: RLM v1.33 с индексом нового поколения и Nuitka standalone runtime — повторные запуски больше не платят за распаковку встроенного Python (#499, #507); bsl-analyzer обновлён до
v0.2.67(#471); упавшая частичная сборка один раз автоматически повторяется полной (#483).
Несовместимые изменения
Поверхность unica.meta.* пересобрана без алиасов
Удалены unica.meta.compile, unica.meta.profile, unica.meta.validate и Meta JSON DSL вместе с физическими селекторами ObjectPath, ConfigDir + Object и DefinitionFile; существующий объект адресуется только sourceSet + metadataPath (#309, #285).
Из 97 возможностей снятого DSL 58 имеют доказанный типизированный маршрут, 39 сняты намеренно с записанным последствием миграции — сверяйтесь с ведомостью возможностей и гидом миграции. Данные прежнего профиля находятся в meta.info.usage и meta.info.predefinedItems; секции modules больше нет — модули объекта видны через unica.source.children и unica.code.search. Валидация выполняется автоматически при каждой мутации. Навыки meta-compile и meta-validate сняты, добавлен meta-add.
unica.code.diagnostics перешёл на логические цели
Старые mode, sourceDir, path, входной providers, codes[], rangeStart/rangeEnd и config/format/detail/maxFiles удалены. Новый контракт: action (analyze | findings | status | catalog) + sourceSet, для findings — логический metadataPath; фильтр — filter.codes[{provider, code}]; результат провайдер-нейтрален и сообщает происхождение и полноту по провайдерам (#475). Имя source set даёт unica.project.map. Точные замены — в гиде миграции.
Читатели принимают только работающие аргументы, результат — типизированный
- Аргумент
dryRunснят с 38 читающих инструментов; вызов читателя сdryRun— ошибка, а не placeholder-успех. Контракт 36 мутаций не менялся (#428). - Прикладной результат читателей приходит типизированным
OperationResultвstructuredContent, а не прозой вstdout(#285, #265). - Сняты селекторы, выбиравшие проекцию печати, а не состав данных:
Mode,Section,Limit,Offset,Name,Raw,ShowDenied,Expand,SrcDir(#285, #431), и 13 аргументов, которых не читал ни один обработчик (#451). Передача снятого имени отклоняется, а не игнорируется молча.
Удалён unica.code.grep
Literal-поиск остался секцией lexical внутри единого unica.code.search (#231).
unica.runtime.execute не выполняет применённые вызовы
Вызов без dryRun: true отклоняется стабильной ошибкой runtime_operation_unbounded: текущий контур не может доказать терминальный ответ и владение деревом процессов. Предпросмотр dryRun остаётся; реальное выполнение — через поверхность unica.runtime.job.* (#498).
Строже на входе
meta.addиmeta.editотклоняют объекты, которые платформа приняла бы как документ, но отвергла как объект конфигурации; шаблоны больше не дописывают выдуманный ресурс регистрам бухгалтерии и расчёта (#390).- Подписка на событие валидируется полной связкой Source–Event–Handler по профилю платформы: примитивы, ссылки и
ValueStorageбольше не принимаются как источники, для констант обязателенsourceClass(#422). meta.editотклоняет файлы со смешанными окончаниями строк вместо молчаливой классификации по первому переводу строки (#395).- Учётные данные внутри строки подключения (
Usr=/Pwd=) отклоняются ранней понятной ошибкой с указанием перенести их вinfobase.user/infobase.password; раньше они молча терялись (#452). unica.project.mapзанимается только маппингом исходников; инспекция здоровья Git переехала вunica.project.status(#486).
Код и диагностика
unica.code.patchработает по логическому адресу;insertбез селектора дописывает в конец модуля и создаёт отсутствующий*.bsl, когда роль модуля допустима для вида метаданных (#266, #307).unica.code.definitionне подставляет ложные значения — несообщённое поле теперьnull; неготовый индекс — явноеindex_pending, а не пустой успех (#431, #425).- Строящийся индекс поиска отображается как повторяемое
dependencyPending, а не окончательное «провайдер недоступен» (#469);unica.code.graphпри не скачанных инструментах отвечает типизированнымprovider_unavailable(#441). - Операционные тайм-ауты поиска, определений, структуры и диагностики настраиваются в
unica.toml/unica.local.toml(#398). - Отказ по неизвестному аргументу перечисляет принимаемые аргументы и подсказывает исправление опечатки (#282).
Метаданные и подсистемы
- Точный платформенный гейт 8.3.27 доведён до зелёного:
meta.addперестал терять объявленные свойства и пустой<ChildObjects/>больше не пишется видам, у которых его не бывает, — созданное реально импортируется платформой (#394, #385). - Источник подписки на событие редактируется типизированным отношением
editRelationsи читается тем же представлением изmeta.info(#352). - Новое поле регистра наследует
Indexing,FullTextSearchиDataHistoryот согласных между собой соседей (#444); автогенерируемый синоним отделяет цифры от слов (#362); между дочерними объектами больше не появляется XML-сущность CR (#365). - Новые предупреждения валидации: представление списка, дословно повторяющее синоним (#316), и текст командного интерфейса длиннее рекомендованных 30 символов (#317).
unica.subsystem.infoвозвращает дерево структуры подсистем, аunica.meta.info— членства объекта в функциональных и интерфейсных подсистемах (#386).- Состояние поддержки читается по логической цели через типизированный порт: EDT-выгрузка и недоказанное свидетельство — явная ошибка вместо ложного
notSupported(#468);unica.support.editдо записи требует parent.cfкаждого поставщика, безопасный round-trip подтверждён на живой базе с реальным профилем поддержки (#459).
Формы, СКД и расширения
form.editсоздаёт корневую секциюChildItems, когда её ещё нет, — цикл «создать форму → наполнить» заработал (#446); контекст формы определяется по владельцу, а не по каталогу выше (#449);form.compileкомпилирует документированный элементlabel(#450).dcs.compileкомпилирует таблицу и диаграмму в структуре варианта настроек и больше не теряет имя параметра данных из shorthand-формы; неподдержанное теперь называется ошибкой, а не пропадает молча (#443, #442).mxl.decompileпринимает каталог макета вTemplatePath(#437).- Повторное
cfe.borrowидемпотентно: идентичность заимствованного описателя выдаётся один раз и не меняется (#440).
Runtime и сборка
unica.build.makeстало возможно вызвать: схема публикует обязательныйoutputиextension, а описание честно называет операцию выгрузкой артефакта из информационной базы (#447).- Объявленный
client_mcp.cfeпроверяется до сборки с прямым указанием наtools-download(#456); рецепт скачивания client-mcp больше не уводит на EDT-маршрут без.cfe(#501). - Зависший
active.lockосвобождается, когда задание доказуемо не породило потомка (#503), а восстановление не снимает блокировку под живым процессом (#509). - Windows умеет проверенную синхронную полную выгрузку конфигурации и расширения (#284); закреплённый v8-runner обновлён (#419).
Надёжность Windows
- Code intelligence запускается на больших конфигурациях: скрытый workspace-сервис становится готов до обхода дерева в 20 000 каталогов (#454).
- Транзакционный откат больше не оставляет изменённые файлы на месте из-за sharing violation — устранены 63 падения (#476).
- Смешение обычного и verbatim-написания
\\?\C:\…одного пути не даёт ложныйcontainment_denied(#470); публикация внешней обработки закреплена контрактным тестом (#461); кириллические пути диагностик зафиксированы регрессионным тестом (#466).
Быстродействие и кеши вне исходников
- Инструмент перестал спотыкаться о собственные кеши: базы bsl-analyzer больше не создаются внутри
src/cfиsrc/cfe/*(#473), состояние RLM-индекса хранится вне корня исходников (#495), лексический поиск не читает гигабайтные индексы в.build(#504), а барьер ревизии не считает свои записи изменениями исходников (#511). - Индексные чтения не возвращают устаревшие результаты между ветками linked worktree (#326); постоянная сессия анализатора не удерживает рабочее дерево —
git worktree removeбольше не отказывает (#457); префиксный поиск разрешает source set один раз на вызов (#453).
Упаковка, marketplace и CI
- Поставка плагина похудела с 2.3 МБ до 1.8 МБ: внутренние материалы сопровождения исключены из пакета (#257).
- Пакет несёт полный набор лицензий bsl-analyzer — MIT, Apache, LGPL, GPL — с регрессионным тестом на состав (#480); имена и SHA-256 release assets закреплены контрактом упаковки (#500).
- Релизные и publish-workflow выполняются только в каноническом репозитории — форки больше не краснеют каждые 20 минут (#314).
- Release smoke проверяет имя MCP-сервера и реальные UTF-8 байты канала (#438); в релизный контур добавлена длительная оценка runtime на конфигурации класса БСП (#469).
Обновление
Codex
codex plugin marketplace upgrade unica
codex plugin remove unica@unica
codex plugin add unica@unicaПосле обновления откройте новую задачу Codex.
Claude Code
claude plugin marketplace update unica
claude plugin update unica@unicaЗатем выполните /reload-plugins.
Версии 0.7.5 и новее обновляются обычным способом. Для установок 0.3.0–0.7.4 сначала используйте замороженный migration-мост v0.7.8.
Проверка
Релиз прошёл:
- Rust-тесты на macOS, Linux и Windows, интеграционный прогон поиска, полный CI и гейт архитектурных инвариантов;
- сборку toolchain для macOS arm64, Linux x64 и Windows x64;
- длительную оценку runtime на конфигурации класса БСП;
- публикацию, повторное скачивание и SHA-256-проверку всех runtime-артефактов;
- smoke опубликованного thin-плагина на всех трёх платформах;
- в marketplace — контрактную проверку, fresh install, обновление с предыдущей стабильной версии и smoke staged-пакета на всех трёх платформах.
Source release workflow и marketplace post-publish CI завершились успешно.
Благодарности
Спасибо @korolevpavel за провайдер-нейтральный фундамент code intelligence и единый поиск, домен XDTO, типизированные предопределённые элементы и unica.role.edit, редактирование источников подписок, детерминизм EOL и identity-safe публикацию, открытие полного dump на Windows, автоматический fallback частичной сборки и безопасный отказ runtime.execute.
Спасибо @Oxotka за практические проверки метаданных — представление списка и длину командного интерфейса, за дерево подсистем с членствами объекта и за тишину релизных workflow в форках.
Спасибо @Agrajaga за свежесть RLM-индекса между ветками, готовность Windows-workspace на больших конфигурациях, переносимые Windows-тесты и закреплённые кириллические пути диагностик.
Спасибо @APonkratov за первый вклад в проект: базы bsl-analyzer больше не создаются внутри исходников. Добро пожаловать!
Спасибо @zeegin за пересборку meta-поверхности и типизированные контракты читателей, логическую адресацию исходников, поиск документации платформы, наблюдаемый поиск и провайдер-нейтральную диагностику, прикладной слой навыков, новое поколение поставки RLM и bsl-analyzer, надёжность Windows и доведение выпуска до проверенной публикации.
Полный список изменений:
v0.11.0...v0.12.0