Skip to content

v0.12.0

Latest

Choose a tag to compare

@github-actions github-actions released this 16 Aug 14:08
· 4 commits to main since this release
6f2acb2

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