Перейти к содержимому
Elemctl
Русский
Esc
navigateopen⌘Jpreview
На этой странице

История изменений

Что менялось в elemctl от версии к версии, с разбивкой по дням.

Заметные изменения elemctl, свежие сверху. Записи сгруппированы по дням; версии, вышедшие в этот день, перечислены в заголовке. Формат основан на Keep a Changelog, проект следует семантическому версионированию.

06.09.2026 – 0.35.0

Добавлено

  • projects list --name и --include-deleted; те же фильтры принимает инструмент MCP list_projects. Платформа держит удалённые проекты в перечне с признаком, и стенд, живущий не первый месяц, отвечал на проверку имени проекта сотней с лишним карточек, почти сплошь удалённых. Теперь удалённые скрыты, пока их не попросят, а name сужает перечень по подстроке без учёта регистра на клиенте – так, как это давно делает apps list.

05.09.2026 – 0.34.0

Исправлено

  • Приложение адресуется и позиционно, и ключом --app-id. Команды apps get, apply, delete, start, stop и debug принимали только позицию, а deploy и apps ensure – только ключ, и вызов, написанный не в той форме, отвечал справкой вместо работы. Две РАЗНЫЕ ссылки в одной команде отвергаются: молчаливое предпочтение одной отправило бы команду в чужое приложение.

31.08.2026 – 0.33.0

Добавлено

  • Сторож схемы видит измерения регистра. По ним ключуются записи, поэтому смена типа измерения – или его удаление – заставляет платформу конвертировать записи, значения схлопываются, и применение падает на неуникальности ключей, а следом идёт тихий откат. Пробник этого не предскажет: в пустом приложении конвертировать нечего.
  • Описание клиента SOAP-сервиса попадает в сборку. <ИмяКлиента>.Wsdl.<n> и <ИмяКлиента>.Xsd лежат рядом с элементом проекта, а не в Ресурсы, и их расширения вне списка разрешённых – архив терял их молча. Клиент, у которого описания нет, называется до загрузки.
  • apps list --status running (несколько статусов через запятую). На стенде, живущем не первый месяц, приложений сотни, а живых единицы, и вопрос “что здесь работает” не должен стоить полного перечня.
  • Отчёт деплоя несёт отказ построчно. В problems-lines лежит текст платформы, разобранный на строки: JSON экранирует многострочный отказ в и ровно там, где его надо читать, – какой объект, какие ключи стали неуникальными.

Исправлено

  • Применение пережидает занятое приложение вместо отказа. Деплой сразу после предыдущего падал с “приложение занято” уже ПОСЛЕ загрузки сборки; ожидание короткое и включается только на этой формулировке, так что несуществующее приложение по-прежнему отказывает сразу.
  • Пробник обрывается на непринятом режиме совместимости. Стенд старше проекта отказывает проекту целиком, а следом жалуется на типы и свойства этого режима в файлах, которых правка не касалась, – сотни строк, читающихся как приговор коду. Теперь отказ назван тем, чем он является, а производное от него считается, а не разбирается.

30.08.2026 – 0.32.3

Изменено

  • Описание пакета называет пробник. Сводка на карточке PyPI и описания сайта перечисляли приложения, сборки и деплой, но молчали про проверку компиляции на сервере без риска для рабочего приложения – а это отдельная причина ставить elemctl.

27.08.2026 – 0.32.2

Добавлено

  • Релиз оставляет карточку на GitHub. После успешной публикации на PyPI конвейер создаёт GitHub-релиз, телом которого становится раздел этой истории изменений за выпущенные версии, – подписчики репозитория видят в ленте, что нового, а не голый тег.

26.08.2026 – 0.32.1

Изменено

  • Пример локального облака в документации указывает на домен-плацедержатель в зарезервированной зоне .example: пример конфигурации не должен называть настоящий сервер.
  • Журнал изменений сокращён до двух-четырёх строк на запись: что изменилось и почему это важно; история находок остаётся в коммитах и документации.

24.08.2026 – 0.32.0

Добавлено

  • apps apply [APP_ID] VERSION_ID – применить загруженную сборку и проверить результат. Прежде применение было доступно только инструментом MCP, а долгие операции просят запускать CLI фоном. При сбое платформа молча откатывает приложение на прежнюю сборку и запускает его, поэтому команда сверяет применённое и отвечает кодом возврата 1, если сборка не встала.
  • apps ensure отвечает и про сборку. Флаги создания действуют только при создании, поэтому --version-id существующему приложению не применялся – молча. Теперь в ответе есть applied и applied-version-id, stderr называет команду, доводящую приложение до нужной сборки, а флаг --apply делает это сразу; то же поле получил MCP-инструмент ensure_app.

Исправлено

  • builds upload больше не отвергает сборку своего проекта. Сверялись разные вещи: техническое Имя из манифеста и Представление, под которым проект показан в панели, – совпасть они могли только случайно, и правильная загрузка выглядела переименованием. Теперь сравнивается представление проекта из дескриптора внутри архива; чужая сборка отвергается по-прежнему.
  • Отказ загрузки объясняет --new-project. Формулировка “заведёт отдельный проект” отпугивала от рабочего пути: платформа опознаёт проект по паре поставщик плюс имя из манифеста, поэтому сборка своего проекта попадает в существующий проект.

18.08.2026 – 0.31.0, 0.31.1

Добавлено

  • Подключение с отключённой проверкой TLS предупреждает о себе на каждом запуске. ELEMENT_TLS_VERIFY=false прописывают в .env однажды, а вызов без проверки выглядит ровно как прошедший её. Предупреждение идёт в stderr, поэтому вывод JSON по конвейеру не портится.
  • TLS настраивается: частный CA и строгость проверок. Строгий профиль RFC 5280, включённый в Python 3.13, отверг внутренний CA частного облака. ELEMENT_CA_FILE добавляет PEM-файл к хранилищу доверия, ELEMENT_TLS_STRICT=false снимает только строгий профиль, а ELEMENT_TLS_VERIFY=false остаётся крайней мерой; опечатка в значении даёт ошибку конфигурации, а не молча ослабленный TLS. Вклад @dvkuchin (запрос на слияние #4).

14.08.2026 – 0.30.0

Изменено

  • builds list отвечает десятью свежими сборками. У давнего проекта их накапливаются тысячи, и вопрос “из какого коммита применённая сборка” решался усечением полного списка. Срез задаёт --limit (0 – все), stderr называет, сколько из скольких показано, а --brief оставляет ид, версии, дату, ветку и коммит; те же параметры получил MCP-инструмент list_builds.

Исправлено

  • Сборка пробника больше не может победить в выборе последней. Случайный токен её версии примерно раз в сорок розыгрышей выпадает целиком числовым, и такая версия читается огромным счётчиком – --latest-build выбрал бы пробную сборку вместо настоящей. Числовой токен теперь перевыбирается; поймано вживую в CI.

11.08.2026 – 0.29.0

Изменено

  • Отсутствующий .env-файл называется абсолютным путём и текущим каталогом. Относительный --env-file разрешается от текущего каталога, а не от --project-dir, и в фоновом запуске отказ читался как недоступный стенд.
  • probe описывает требование к раскладке проекта. Каталог обязан лежать по схеме {репозиторий}/{Поставщик}/{Имя}/Проект.yaml – прежде об этом узнавали из ошибки постфактум.

10.08.2026 – 0.28.0

Документация

  • Перечень инструментов MCP полон. Семь из двадцати четырёх не были названы нигде, кроме исходников: страница обходилась фразой “и другие”.
  • Переменные окружения описаны полностью – вместе с ELEMCTL_NO_PLUGINS, переменными CI, из которых сборка берёт номер прогона, и системными LC_ALL/LANG.
  • Устаревшие утверждения исправлены: общие флаги принимаются в любой позиции, .htm входит в расширения архива, а внутри каталога Ресурсы отбора по расширению нет вовсе.
  • Один источник на текст. Разделы README, повторяющие страницы сайта, разошлись в обе стороны; теперь источник – страница, а scripts/sync-docs.mjs вставляет её раздел в README между маркерами.
  • Схема устройства docs/architecture.svg – поверхности, движок, цикл деплоя с молчаливым откатом и пробник; палитра следует теме читателя.
  • Сторож scripts/docsguard.py и джоба docs в CI. Он судит проверяемое механически: инструмент без строки в таблице, переменную окружения, которую код читает и никто не описал, протухшее зеркало чейнджлога. Каждый класс находки провоцируется тестом.

Добавлено

  • deploy принимает имя приложения наравне с ид – как это давно делают apps get, apps start, apps stop и apps debug.

Изменено

  • Расширение VS Code уехало из этого репозитория. Отладка приложений 1С:Элемент – часть расширения XBSL с его версии 0.57.0, вместе с кнопкой деплоя: из-за разделения путь к elemctl и ид приложения приходилось задавать дважды. Здесь осталась сторона elemctl – apps debug, debug-adapter и точка расширения elemctl.debug_adapter.

07.08.2026 – 0.26.0, 0.27.0

Добавлено

  • Проекты с английскими артефактами собираются и деплоятся. build, deploy и probe находят дескриптор Project.yaml наравне с Проект.yaml, разбор архива читает английские ключи и значения, а страж схемы знает, что два написания имени примитивного типа – один тип: перевод описания не выглядит изменением, разрушающим данные.

Изменено

  • Загрузка сборки не отправляет коммит и ветку. Документированный метод их не принимает, а отправленные сервер игнорирует: коммит в карточке сборки проставляется только связью проекта с репозиторием. Внутри архива ветка и коммит едут по-прежнему – сборка пишет их в манифест.
  • Пропущенная сверка схемы названа в отчёте. Поле schema-check отвечает clean, allowed или skipped:<причина>: пропущенная проверка не должна читаться как пройденная.

03.08.2026 – 0.25.0

Изменено

  • Сборка с чужим именем отвергается, а не сопровождается предупреждением. Панель показывает проект под именем последней залитой сборки, и удаление сборки прежнее имя не возвращает. Выходы названы в самом сообщении: --force-rename, если так и задумано, --new-project, если сборка чужая.

31.07.2026 – 0.23.0, 0.24.0

Исправлено

  • self-update сразу после релиза больше не пропускает его. Список файлов брался из JSON-метаданных PyPI, а они догоняют публикацию минутами: в этом окне команда отвечала “уже актуально”. Теперь список берётся из simple-индекса (PEP 691), а версии ранжируются численно.

Изменено

  • MCP-сервер работает с обоими мажорами пакета mcp, пин снят. В mcp 2.0.0 класс сервера переехал, не оставив псевдонима, и свежая установка не поднималась вовсе. Импорт пробует оба расположения, разницу в чтении ответов прячут две функции, а CI гоняет набор тестов на обоих мажорах.
  • serverInfo называет версию самого elemctl, а не версию пакета mcp.

30.07.2026 – 0.22.0

Добавлено

  • Сборка приложения забирает библиотечные проекты, лежащие рядом, включая транзитивные зависимости; объявленная библиотека без локального проекта остаётся внешней зависимостью платформы. Вклад @dvkuchin (запрос на слияние #3).

Исправлено

  • Прокси в окружении больше не выдаёт живой стенд за мёртвый. Прокси, которому до стенда не дотянуться, отказывает ровно так же, как отказал бы лежащий стенд. Заведомо бесполезный прокси теперь обходится, ELEMCTL_NO_PROXY=1 обходит его везде, а неудавшийся вызов через прокси называет его.
  • self-update --stop-holders больше не снимает собственное дерево процессов. Команда работает потомком лаунчера, по имени неотличимым от держателя, и предлагала снять саму себя, обрывая обновление на полпути.

28.07.2026 – 0.20.0, 0.21.1

Добавлено

  • Создание приложения заканчивается способом в него войти. У apps create и apps ensure (и у их двойников в MCP) появилось поле sign-in. Новое приложение получает свой пустой список пользователей, поэтому учётные записи, которыми входят в другие приложения, здесь не работают: войти можно учётной записью панели управления. Перебирать нельзя – у пользователя есть счётчик неудачных попыток входа.

Изменено

  • self-update больше не меняет рабочую установку на пустое место. pip install --upgrade упёрся в занятый живой сессией файл, удалил пакет, не распаковал новый и промолчал. Теперь установленный пакет сначала переименовывается, держатели называются по имени и pid, а прежняя установка возвращается на место, пока новая не докажет, что импортируется.

27.07.2026 – 0.19.0

Добавлено

  • user-lists calculation-rules – переприменить правила, по которым из ответа провайдера собирается пользователь. Пересоздание сервиса входа их сбрасывает, а чтение не возвращает, поэтому отчёт говорит прямо: что отправлено, что запрос принят и что подтвердить значение через API нельзя – это отвечает панель управления или живой вход.

Исправлено

  • Сборка, сделанная на раннере CI, записывала ветку HEAD. Раннер выкладывает коммит, а не ветку. Имя теперь берётся из окружения CI, а если ветку не называет никто, поле остаётся пустым: честный пробел лучше слова, похожего на имя ветки.

26.07.2026 – 0.15.0, 0.16.0, 0.17.0, 0.18.0

Добавлено

  • deploy называет цель и то, откуда она взялась. В отчёте появились app-name, app-id-source и project-id-source, а цель объявляется первой строкой прогресса – до сборки, пока деплой не в то приложение ещё можно прервать.
  • Сборка называет файлы, которые в неё не вошли (skipped-files и предупреждение). Файл с расширением вне списка разрешённых попадает в архив, только если лежит в каталоге Ресурсы; в любом другом месте он теряется молча, и платформа сообщает об этом лишь на применении.
  • Страж разрушающих изменений схемы. Сужение длины реквизита и смена его типа пересоздают данные объекта, поэтому deploy сверяет исходники с состоянием на коммите применённой сборки и отказывается работать до сборки; пропустить – флагом --allow-data-loss. Сравнить нечем – страж говорит об этом и деплою не мешает: невозможность сравнить не есть доказательство опасности.
  • user-lists – настройки входа списка пользователей, за которыми обычно ходят в панель: list, get, self-registration и password-login. Без флага обе команды-настройки только читают состояние; со стороны MCP – list_user_lists и configure_user_list.
  • Точки расширения elemctl.commands – пакет-плагин приносит собственные команды, и одно объявление становится сразу подкомандой CLI и инструментом MCP. Там место команде, которая знает про чужое окружение и потому в публичном ядре жить не может.
  • elemctl probe – изолированная проверка компиляции. Компиляция у платформы серверная и происходит на применении сборки, поэтому пробник собирает архив, создаёт из него одноразовое приложение и убирает созданное за собой. Ошибки приходят разобранными: файл, строка, колонка, окружение и текст.

Исправлено

  • Глобальная опция принимается и после подкомандыelemctl deploy --env-file .env больше не падает argparse-фразой “unrecognized arguments”.
  • Отвергнутый сервером токен больше не живёт в кэше. Негодный токен этот сервер отвергает 400, а не 401, называя причину в error_description; такой отказ теперь сбрасывает файл кэша и повторяет запрос один раз.
  • Сборка удаляется после того, как исчезло приложение. Платформа отклоняет удаление, пока живо созданное из этой сборки приложение, поэтому пробник сначала дожидается его исчезновения.

Документация

  • Контракт Console API пополнился списками пользователей (п. 4.7) и тем, чего в API нет вовсе: состава форм аутентификации и настройки автоматического подключения пользователей.
  • Проект платформы опознаётся парой Vendor плюс Name манифеста, а не Ид из Проект.yaml: второй проект под ту же пару отклоняется с 409 ALREADY_EXISTS.

25.07.2026 – 0.14.0

Добавлено

  • Суффикс версии берётся из номера прогона CI (CI_PIPELINE_IID, GITHUB_RUN_NUMBER, BUILD_NUMBER), когда нет ни явной версии, ни прежней сборки: чистый рабочий каталог CI больше не даёт -1 на каждом прогоне.
  • build и deploy --dry-run выводят состав сборкиname, vendor, version, version-source, kind, branch, commit и dirty, – и CI больше не выковыривает версию из имени файла.
  • apps get/delete/start/stop/debug принимают точное имя приложения наравне с ид (в MCP тоже); несколько совпадений – ошибка с перечнем ид, разрушающие команды не угадывают.
  • apps list --brief – краткие карточки: вопрос “жив ли acme-crm-dev” решается парой сотен байт вместо десятков килобайт.
  • Незакоммиченные изменения каталога проекта видны в отчёте (dirty, dirty-files), а флаг --require-clean прерывает работу до сборки.

Изменено

  • apps list --name фильтрует на клиенте: платформа query-параметр игнорирует, поэтому прежний сквозной фильтр не фильтровал ничего.
  • Ключи дескриптора Проект.yaml читаются в обоих написаниях – двуязычие исходников заявлено платформой, и раньше такой проект отвергался.
  • Ожидания статусов считают Error терминальным: деплой падает сразу с ошибками компиляции, а не ждёт полный таймаут.

Исправлено

  • --lang en теперь английский везде. Около сорока строк, обращённых к пользователю, были зашиты русскими литералами мимо каталога сообщений; тест обходит модули и не даёт им появиться снова.

24.07.2026 – 0.12.0, 0.13.0, 0.13.1

Исправлено

  • Файлы каталогов Ресурсы попадают в архив независимо от расширения. Прежде на них действовал общий список разрешённых расширений, файлы молча выпадали из сборки, и применение падало с ошибкой “Неизвестный ресурс”. Вне каталогов ресурсов список действует по-прежнему и пополнился .htm.

Изменено

  • MCP: list_projects по умолчанию отдаёт краткие карточки – как list_apps; полные карточки возвращает brief=false.

Добавлено

  • builds upload сообщает цель загрузки (project-id и project-id-source): раньше сборка молча ложилась в проект из окружения, когда задумывался новый.
  • builds upload --new-project загружает сборку новым проектом, игнорируя ELEMENT_PROJECT_ID.
  • builds upload предупреждает о чужом имени сборки: панель показывает проект под именем последней залитой сборки.
  • Справочник команд и его генератор под тестами (tests/test_cli_docs.py): каждая команда отвечает на --help и покрыта разделом справочника, а две языковые версии действительно различаются.

22.07.2026 – 0.11.0

Добавлено

  • Сайт документации (docs.keyfire.ru/elemctl), полный справочник команд и справка – целиком на русском и английском.

21.07.2026 – 0.10.0

Изменено

  • MCP: окружение задаётся на вызов, apps list по умолчанию краткий.
  • Ошибка “нет источника приложения” подсказывает, как завести проект.

Исправлено

  • Справка CLI переводится: язык определяется до построения парсера аргументов.
  • apps create показывает собственные ошибки задачи компиляции вместо обобщённого “Неизвестная ошибка. Обратитесь к администратору”.

19.07.2026 – 0.9.1

Изменено

  • Раздел команд в справке назван “команды”, а версия читается из одного источника.

17.07.2026 – 0.9.0

Добавлено

  • inspect – разбор готового архива сборки.
  • builds get и builds delete принимают версию сборки и резолвят её в id.

15.07.2026 – 0.5.0, 0.6.0, 0.7.0, 0.8.0

Добавлено

  • self-update – обновление распаковкой колеса, безопасно даже когда запущенный исполняемый файл занят (0.7.0).
  • Система плагинов: адаптер отладки платформы подключается через точки расширения (0.5.0).

Изменено

  • verify подтверждает деплой по id применённой сборки, а не по строке версии (0.8.0).
  • Подсказка MCP отмечает, что долгие операции асинхронны – гонять CLI в фоне (0.5.0).
  • Ссылки проекта на PyPI (Homepage / Repository / Issues) в метаданных пакета (0.6.0).

Исправлено

  • MCP-сервер учитывает глобальные аргументы конфигурации (--env-file и прочие) (0.7.0).

12.07.2026 – 0.4.0, 0.4.1

Добавлено

  • Полное двуязычие ru/en: i18n рантайма (--lang / ELEMCTL_LANG), README и спецификация на двух языках.
  • apps debug – данные для сессии отладки платформы (POST /actions/debug).

Изменено

  • Релизы публикуются на PyPI по тегу v* через Trusted Publishing, с подписанными аттестациями происхождения; теги vscode-v* при этом не задеваются.

10.07.2026 – 0.2.0, 0.2.1, 0.3.0

Добавлено

  • Первый релиз: клиент документированного Console API v2, сборка .xasm/.xlib из исходников, деплой одной командой с честной проверкой, что изменение применилось, CLI и MCP-сервер – написано clean-room, по спецификации в docs/SPEC.md (0.2.0).
  • apps ensure – создать приложение только если его нет (0.3.0).

Изменено

  • apps find пропускает удалённые приложения; --include-deleted возвращает прежнее поведение (0.3.0).

Исправлено

  • apps find возвращает 0, когда приложение отсутствует, вместо ошибки (0.2.1).

Последнее обновление 6 сентября 2026 г.

Эта страница была полезной?