RS.Transmeet
История версий
1.2.7 — 2026-10-09 — Общая лента: кнопки Descriptor больше нет
Причина: автор встроил RS.Descriptor в RS.Exporter вкладкой «Export Model» и убрал Descriptor как отдельное решение. Каталог общей ленты одинаков во всех плагинах линейки, поэтому меняется у всех.
Канон SRC/SuiteRibbon/RsSuiteRibbon.cs (байт-в-байт во всех решениях линейки): удалена строка каталога RS.Descriptor / RS_Descriptor_Btn / «Descriptor» панели Tools. Кнопки самого плагина это не меняет.
Проверено: синтаксис RsSuiteRibbon.cs (tree-sitter); md5 канона совпадает во всех решениях. Сборки .NET в этом прогоне не было — SDK и Revit API есть только на машине сборки.
Файлы: SRC/SuiteRibbon/RsSuiteRibbon.cs, SRC/Installer/version.txt, CHANGELOG.md.
1.2.6 — 2026-10-09 — Общая лента: RS.Exporter вместо RS.DxfExport
Причина: автор объединил RS.DxfExport и RS.ScheduleExport в одно решение RS.Exporter (кнопка «Export» во вкладке RS-Systems, панель Tools). Каталог общей ленты одинаков во всех плагинах линейки, поэтому меняется у всех.
Канон SRC/SuiteRibbon/RsSuiteRibbon.cs (байт-в-байт во всех 15 решениях): строка каталога RS.DxfExport / RsDxfExport / «DFX» заменена на RS.Exporter / RsExporter / «Export» на том же месте панели Tools. Кнопки самого плагина это не меняет.
Проверено: синтаксис RsSuiteRibbon.cs (tree-sitter); md5 канона совпадает во всех решениях. Сборки .NET в этом прогоне не было — SDK и Revit API есть только на машине сборки.
Файлы: SRC/SuiteRibbon/RsSuiteRibbon.cs, SRC/Installer/version.txt, CHANGELOG.md.
1.2.5 — 2026-10-09 — Телеметрия v3: только «работают ли сейчас» и рабочее время
Причина: автор попросил переделать телеметрию во всех плагинах — нужно знать только, работают ли с плагином сейчас и сколько времени с ним работают; установки и конкретные действия не интересуют. Время — по реальной работе с плагином, так же как в оплате по времени.
Канонная папка Telemetry\ (формат rs-systems-telemetry-v3, байт-в-байт во всех 15 плагинах): уходят только продукт, случайный id сеанса (новый на каждый запуск Revit, нигде не хранится), накопленные за сеанс рабочие минуты и признак конца сеанса. Убраны идентификатор установки (отпечаток машины), версии, состояние лицензии и триала, счётчики действий. Первая рабочая минута уходит сразу, дальше — не чаще раза в 2 минуты и только при приросте,…
Рабочее время считается подсистемой лицензирования по тем же признакам, что и оплата по времени, но в любом режиме лицензии: ввод в окнах и панелях плагина (окна активации/оплаты не в счёт), разрешённый запуск команды, LicenseGate.Busy(), фоновая работа (TryBackgroundUse). Минута с активностью — рабочая целиком; простаивающее окно — не работа. Канон Licensing\: WalletMeter.cs (MarkWork, WorkMinutes), LicenseGate.cs (отметка при разрешённом д…
Телеметрия подключена впервые: канонная папка Telemetry\ (4 файла), символ RS_TELEMETRY в коммерческой сборке (SRC/Directory.Build.props), Telemetry.Launch в OnStartup и Telemetry.Shutdown в OnShutdown. Personal телеметрию не компилирует.
1.2.4 — 2026-10-09 — MSI: Product key и Product ID для сайта
Причина: автор попросил, чтобы при выборе дистрибутива в карточке решения на сайте Product key считывался из самого MSI и подставлялся автоматически. До этого в MSI не было ни ключа каталога, ни идентификатора лицензирования: сайту нечего было читать, и карточке можно было назначить чужой дистрибутив.
SRC/Installer/Product.wxs: в таблицу Property пишутся RS_PRODUCT_KEY (ключ каталога сайта) и RS_PRODUCT_ID (идентификатор лицензирования). Без переданных значений WiX останавливает сборку с понятной ошибкой.
msi.bat: значения берутся из UpdateProduct.cs (SiteProductKey, LicenseProductId) — не набираются вручную; если их не удалось прочитать, msi.bat останавливается с ошибкой, а не собирает MSI без ключа; строка [RS] Product key: … Product ID: … в выводе сборки.
Сайт читает RS_PRODUCT_KEY при выборе MSI, подставляет его в новую карточку и отклоняет MSI с другим ключом.
1.2.3 — 2026-10-09 — Канон лицензирования линейки: офлайн — только триал или лицензия, онлайн — оплата по времени; устранены уязвимости, усилена защита
Причина: автор попросил канонизировать линейку лицензирования — офлайн плагин работает только в пробном периоде или по полной лицензии, оплата по времени допустима только онлайн, — проверить и устранить известные уязвимости, поднять надёжность и максимально затруднить взлом. Канонная папка Licensing\ обновлена во всех 15 решениях байт-в-байт (29 файлов: добавлен LicenseVault.cs), меняется только она плюс одна строка импорта в .csproj.
Найденные и закрытые уязвимости:
Снимок кошелька state.dat лежал открытым JSON. Подделка ("p":"2099…", "r":1) при заблокированном сервере давала бессрочную оплату по времени офлайн. Теперь снимок запечатан (LicenseVault.Seal: HMAC-SHA256 + привязка к MachineGuid/тому) и принимается только в рамках: не из будущего, не старше 10 минут, оплаченная минута ≤ 61 с от момента получения.
Перевод часов назад продлевал право «по времени». Все сроки счётчика (WalletMeter) переведены на монотонные часы процесса (Stopwatch); оплаченная минута и «свежесть» ответа сервера не зависят от системного времени.
1.2.2 — 2026-10-06 — Сборка без предупреждений
Причина: сборка 1.2.1 выдавала 4 предупреждения CS0649 (по 2 раза — в
основном и во временном WPF-проекте) на каждый год.
Из контракта переноса (Transfer\Dto2.cs) убраны поля, которые нигде не
заполнялись: CompoundDto.EndCapInterior, CompoundDto.EndCapExterior,
1.2.1 — 2026-10-06 — Лицензия с оплатой по времени (канон Licensing\ из 28 файлов)
Причина: автор прислал решение-донор RS.SmartSelect с актуальным каноном
подсистемы активации — с кошельком учётной записи (RS-WALLET).
Licensing\ — 28 файлов из RS.SmartSelect байт-в-байт, кроме своего
LicensingConstants.cs (ProductId revittransmeet, «RS Transmeet»). Новые:
1.2.0 — 2026-10-06 — Перенос всего, кроме загружаемых семейств; сверка, отчёт XLSX, новые значки
Причина: автор попросил довести лицензию, значки и весь вспомогательный
функционал, а загружаемые семейства оставить на следующий этап как самый
сложный и долгий. Объём согласован с автором: «всё, кроме семейств» — системные
типы и элементы, помещения, виды, шаблоны, фильтры, спецификации, листы,
1.1.0 — 2026-10-06 — Перенос модели в младшую версию Revit (этап 1) и приведение к канону линейки
Причина: автор поставил задачу воссоздавать модель, которую ведут в Revit 2025,
в Revit 2023 для полноценного продолжения проектирования — без ручного
перестроения. Решения автора и план работ — в документе проекта
claude/RS-TRANSMEET.md. Это первая выдача по нему: этап 1 плюс перевод решения
История составлена по CHANGELOG.md из предоставленного архива исходников. Показаны последние 12 записей.