ARMANOS

Журнал изменений

Что нового

Каждая выложенная сборка, что в ней изменилось и что мы сами считаем недоделанным. Числа на этой странице сняты с файлов, которые уезжают людям, а не вписаны руками.
0.1.0
Версия программы
ARMANOS Browser 153.0.7978.0
Движок
6 файлов, 3 системы
Файлов для скачивания
6 сентября 2026
Последняя выкладка

Нынешняя сборка это 0.1.0, а браузер внутри неё 153.0.7978.0

ARMANOS это одна программа, внутри которой лежит браузер. Программа версии 0.1.0. Браузер называется ARMANOS Browser 153.0.7978.0: это Chromium нашей сборки, где работа над отпечатком сделана в исходниках, а не в странице.

Ни одно из этих чисел не вписано в страницу рукой. Версия программы живёт в apps/desktop/package.json, и скрипт выкладки читает её оттуда. Версия движка объявлена в packages/shared/src/index.js как ARMANOS_BROWSER_VERSION, и каждый экран, который её называет, берёт эту величину.

Проверка открывает тот движок, который лежит в apps/desktop/engines для нужной системы, читает из него версию и имя продукта, не запуская его, и краснеет при любом расхождении. Версию говорят вслух ещё два места: сервер для ИИ-помощников и ответ на --version в командной строке. Там число вписано, потому что после упаковки package.json рядом с ними нет, и отдельная проверка требует, чтобы все числа совпали.

Версия программы
0.1.0
Движок
ARMANOS Browser 153.0.7978.0
Запасной движок
Chrome 130, тот, что внутри программы
Поколение отпечатка
4
Объявленных умений движка
9
Проверок в дереве
2233: сервер 440, программа 1602, сайт 191

Снято из packages/shared/src/index.js, apps/desktop/package.json и описи умений armanos-engine.json, которая лежит рядом с каждым собранным движком.

Выпуск это шесть файлов, и вес у каждой кнопки измерен

У macOS два образа: под Apple Silicon и под Intel. Образ arm64 на Intel-маке не открывается вовсе, поэтому вторая сборка тут не роскошь. У Windows установщик и портативная сборка. У Linux AppImage и архив tar.gz для тех, кто распаковывает в /opt сам.

Имена закреплены: страница загрузки собирает из них каждую ссылку. Сторож выводит список ожидаемых файлов из самой страницы, поэтому пропажа файла останавливает выкладку целиком, а не кладёт пять из шести. Контрольные суммы едут рядом файлом SHA256SUMS.txt.

Веса ниже это те самые, что напечатаны под кнопками на 22 языках. Проверка сверяет каждый с настоящим собранным файлом на диске, а когда файлов нет, говорит об этом вслух, а не проходит молча. Она появилась после случая, когда страница обещала установщик на 261 МБ, а он весил 217: число осталось от августовской сборки.

ФайлВесСобраноРаботает на
macOS, Apple Siliconarmanos-mac.dmg~248 МБ6 сентября 2026macOS 13 и новее
macOS, Intelarmanos-mac-intel.dmg~268 МБ6 сентября 2026macOS 13 и новее
Windows, установщикarmanos-win.exe~228 МБ2 сентября 2026Windows 10 и 11, 64 бита
Windows, портативнаяarmanos-win-portable.exe~228 МБ2 сентября 2026Windows 10 и 11, 64 бита
Linux, AppImagearmanos-linux.AppImage~300 МБ1 сентября 2026Ubuntu 22.04 и новее, 64 бита
Linux, архивarmanos-linux.tar.gz~293 МБ1 сентября 2026Ubuntu 22.04 и новее, 64 бита

Сентябрь 2026, запись за записью

Две недели работы лежали на сборочной машине и не доходили ни до кого. Живой сайт был от 20 августа, живой сервер от 22 августа, а все четыре кнопки скачивания отвечали 404: выкладка делалась руками, и её никто не звал. Почти все записи месяца о том, как собранный движок доехал до всех систем, а потом наружу.

Даты ниже это день, когда работа легла, а не день, на который её планировали. Где сборка и её проверка случились в разные дни, названы оба.

  • 1 сентября 2026: собраны сборки под Linux

    AppImage и tar.gz сделаны и прошли преграду упаковки, движок под Linux был собран 31 августа. Скачивать их нарочно не предлагали: ни разу и ничем они не запускались на живой машине с Linux.

  • 2 сентября 2026: движок под Windows и обе сборки Windows

    Движок под Windows именуется прямо в дереве исходников до сборки, поэтому chrome.exe и chrome.dll несут ARMANOS Browser 153.0.7978.0 в своих сведениях о версии. Установщик и портативная сборка сделаны в тот же день на машине с Windows.

  • 5 сентября 2026: три разбора, и деньги закрыты первыми

    Сайт прочитан по восьми осям, 55 заявлений, 28 подтверждено после двух опровергателей на каждое. Докупка профилей пересобирала подписку на 1000 профилей в подписку на 200, а карточка тарифа показывала базу 200 человеку, у которого была тысяча. Разбор сервера подтвердил 27 находок и закрыл 25, разбор программы подтвердил 18 и закрыл все.

  • 5 сентября 2026, 23:13: связался движок под Intel

    Связывание три часа задыхалось без памяти из-за соседних программ на той же машине. Как только их закрыли, началась запись, и движок лёг в apps/desktop/engines/mac-x64.

  • 6 сентября 2026, ночь: оба образа macOS собраны и вскрыты

    verify-build.sh смонтировал каждый образ и нашёл внутри код того же дня. Сборку под Intel запустили под Rosetta на машине с Apple Silicon: пять процессов за пятнадцать секунд, окно поднялось без ошибок.

  • 6 сентября 2026: собранный движок едет в каждой сборке

    macOS на обоих чипах, Windows x64 и Linux x64 несут браузер внутри установщика, и свежая установка выбирает его при первом запуске.

  • 6 сентября 2026, ночь: отметка «не отправлено» стала пополевой

    Признак того, что правка не доехала до сервера, перестал быть одним флажком на весь профиль и стал перечнем полей. Что именно это чинит, написано ниже.

  • 6 сентября 2026: на странице загрузки настоящий выбор сборки

    В каждой карточке радиогруппа, работающая с клавиатурой и экранным чтецом: Apple Silicon или Intel, установщик или портативная, AppImage или архив. Кнопка ведёт ровно на выбранное, а расширение и вес под ней следуют за выбором.

  • 6 сентября 2026: Linux проверен запуском на Ubuntu

    Рабочий процесс на чистой машине с Ubuntu 22.04 скачал AppImage из выпуска и открыл им профиль. Только после этого карточка Linux появилась на сайте.

  • 6 сентября 2026: вход на сайте доводится в программу

    Одноразовый код, живущий две минуты, открывает в программе ссылку armanos://login, и программа доводит вход тем же ходом, что и обычный пароль.

  • 6 сентября 2026: каталог расширений сеется сам

    Кнопка «Включить» отвечала «extension not found»: каталог на боевом сервере никто не засевал. Теперь сервер сеет его из общего пакета при старте и по требованию, а «Включить» само ставит файлы, если их нет.

  • 6 сентября 2026, 13:27 и 14:03: установщики, сайт и сервер выложены

    Шесть файлов уехали в открытый выпуск, затем сайт и сервер выложены штатным скриптом. Живой сайт смотрели глазами на 1440 и 390, а все шесть ссылок запрошены снаружи и сверены по настоящему весу.

Собранный нами движок теперь берётся при первой установке

До сентября программа откатывалась на встроенный движок, пока человек сам не находил настройку. С 6 сентября каждая выложенная сборка несёт собранный браузер внутри установщика, и при первом запуске программа выбирает его. Встроенный остаётся по умолчанию только там, где собранного нет, а на свежей установке такого уже не бывает.

Выбор, сделанный человеком, после этого не перебивается никогда. Выбрали встроенный, он и останется через обновления. Он и дальше доступен нарочно: RPA Plus и Синхронизатор работают на обоих движках, а встроенный это запасной путь, когда собранный браузер не стартует. Про такой откат программа говорит вслух, а не подменяет движок молча.

Между сломанным движком и установщиком стоят две преграды. Первая не даёт упаковать сборку, если каталог движка под нужную архитектуру пуст: движок в хранилище не лежит, а пустой каталог копируется беззвучно. Вторая не пропускает движок старше набора заплат: июльская сборка носит ту же версию, что и сентябрьская, и проверка по одному номеру пропустила бы её, а работа по чтению пикселей молча отсутствовала бы.

Экран движка в программе: встроенный движок и ARMANOS Browser, ниже найденный путь к двоичному файлу.
Экран движка называет оба движка и точный путь к тому, который работает. Собранный браузер едет внутри программы, поэтому новый браузер приходит вместе с новой версией ARMANOS.

Linux перестал быть догадкой: его проверили запуском

Сборки под Linux существовали с 1 сентября и были спрятаны нарочно. На сборочной машине нет ни Docker, ни qemu, поэтому их никто ни разу не открывал. Предлагать файл, о котором сам не знаешь, поднимется ли у него окно, это не выпуск, поэтому карточка на странице загрузки была выключена, а проверка держала её выключенной.

Проверка идёт на машине, которая нам не принадлежит: рабочий процесс на Ubuntu 22.04 в открытом складе установщиков, запускается рукой. Он берёт AppImage из выпуска, то есть проверяет ровно тот файл, который получает покупатель, а не каталог сборки.

  1. 1

    Скачать и распаковать без FUSE

    AppImage берётся из выпуска и распаковывается ключом --appimage-extract, с заданным APPDIR. Первый заход упал ровно здесь, на нашей же ошибке: без APPDIR путь к программе превращался в /armanos.

  2. 2

    Поднять под виртуальным экраном

    Программа стартует под xvfb с заранее включённым локальным интерфейсом, чтобы прогон вёл её сам, без человека за клавиатурой.

  3. 3

    Создать профиль и открыть его

    Создаётся профиль на шаблоне linux-chrome и запускается: это кратчайший путь, который разом трогает движок, отпечаток и окно.

  4. 4

    Прочитать, что ответило на самом деле

    Движок ответил «ARMANOS Browser 153.0.7978.0», локальный интерфейс отозвался через 4 секунды, окно поднялось без ошибок, а профиль работал на процессах из engines/armanos-browser/chrome с песочницей пространств имён и без ослабляющих доводов.

Вход на сайте теперь доводится в программу

До сентября вход на сайте и вход в программе были двумя разными действиями с одним паролем. Теперь сайт умеет передавать сессию.

Сайт просит у сервера одноразовый код от имени того, кто уже вошёл. Код это 24 случайных байта, он живёт две минуты и годится один раз. После этого сайт показывает плашку, открывающую armanos://login с этим кодом, а дальше дело программы.

Программа опознаёт схему armanos и доводит вход тем же ходом, что и набранный пароль, а почту берёт из ответа сервера. Второй шаг входа не спрашивается снова: код выдаётся только тому, кто его уже прошёл. При обмене код снимается ДО проверки срока, поэтому вторая попытка по той же ссылке отказывает независимо от того, опоздала она или нет.

  • macOS

    Система отдаёт ссылку событием open-url, работала программа до этого или нет.

  • Windows и Linux

    Ссылка приходит доводом второму экземпляру, а если программа не была запущена, то первому.

  • В любом случае

    Вход записывается в историю как пришедший передачей, поэтому потом видно, каким путём открыта та сессия.

Неотправленные правки теперь помнятся по полям

Вот что случалось раньше. Вы правите имя профиля без связи. Коллега на другой машине в это же время меняет у того же профиля прокси. Вы выходите в сеть, сверка оставляет местными все ваши поля, а досылка пишет ваш устаревший прокси поверх его свежего. Правка коллеги исчезает без единого слова, и ни один экран об этом не говорит.

Отметка «не отправлено» была одним флажком на весь профиль, а полей, которые правит человек, девять. Теперь отметка хранит перечень имён полей, а сам перечень правимых полей лежит в одном месте рядом с ней, чтобы эти два списка не разошлись.

  • Помечается только тронутое

    Разница считается с прежней записью до записи новой, потому что окно редактора при сохранении шлёт все девять полей, и иначе грязными выходили бы все. Объекты и списки сравниваются по содержимому, с упорядоченными ключами.

  • Сверка оставляет местным только грязное поле

    Соседние берутся с сервера, поэтому правка коллеги в поле, которого вы не трогали, переживает ваше возвращение в сеть.

  • Досылка везёт только долг

    Пары ставятся вместе: прокси со ссылкой на библиотеку, папка со своим номером. Пустой запрос не уходит вовсе.

  • Отметка ставится до отправки, а не после отказа

    Поле, изменившееся, пока запрос был в пути, остаётся в долгу: отметка снимается по снимку значений на миг отправки.

  • Старая отметка читается как «все поля»

    Отметка, записанная прежней версией, означает долг по всему профилю, поэтому правка со старой установки не теряется.

Что заведомо не доделано прямо сейчас

Всё, что ниже, верно на сегодня. Каждый пункт записан в складе, а не просто держится в голове, поэтому мы можем перечислить их здесь, ничего не смягчая.

Три пункта из шести это решения владельца, и они нарочно стоят последними в порядке работ: подпись, нотаризация и выбор платёжного сервиса.

  • Установщик Windows не подписан

    SmartScreen предупреждает о нём. Страница загрузки говорит об этом под карточкой Windows на 22 языках и подсказывает нажать «Подробнее», а затем «Выполнить в любом случае».

  • Образы macOS не нотаризованы

    Они подписаны сертификатом Apple Development, а Gatekeeper на чужой машине такой отвергает. Первый запуск делается через «Системные настройки», раздел «Конфиденциальность и безопасность», кнопка «Всё равно открыть». Developer ID и нотаризация идут в самом конце.

  • Сборка Windows от 2 сентября и не знает трёх починок

    Окно связки ключей, передача входа с сайта и установка расширений кнопкой «Включить» легли 6 сентября. Установщик Windows собирается только на машине с Windows, поэтому они приедут со следующей сборкой.

  • Оплата картой не подключена

    Касса написана, но без ключей она бездействует, а платёжный сервис ещё не выбран. Сегодня сайт не принимает карту вовсе, и тариф до этого выдаётся рукой.

  • Программа пока не забирает обновления

    Адрес обновлений в настройках упаковки это заготовка. Сама программа не проверяет обновления никогда, а проверка из Центра обновлений отвечает ошибкой, а не словом «свежая»: неудавшаяся проверка не доказывает, что вы на новой версии.

  • Две дыры движка записаны, а не спрятаны

    Признак автоматизации, который включает порт отладки, до сих пор снимается доводом командной строки, а не внутри движка, и движок macOS именуется после сборки, а не в дереве исходников. Оба пункта лежат в engine/patches/PENDING.md вместе с замером, которым их нашли.

Как режется выпуск

Шаги ниже это скрипт, а не привычка. Почти каждый из них появился после того, как ручной вариант однажды подвёл, и подвёл тихо.

Порядок важен. Проверка идёт по собранным файлам до всякой выгрузки и ещё раз снаружи после неё. Проверка, читающая только дерево исходников, была бы зелёной во все те дни, когда уехавший файл был не тот.

  1. 1

    Собрать

    npm run dist из apps/desktop делает образы и исполняемые файлы для нынешней машины. Двоичные файлы Windows требуют машины с Windows, поэтому Windows и отстаёт от двух других систем.

  2. 2

    Заглянуть внутрь собранного

    verify-build.sh монтирует каждый образ macOS, читает сборку Windows как есть и ищет в обеих приметы того кода, ради которого пересобирали. Вчерашняя программа внутри сегодняшнего установщика снаружи выглядит точно так же.

  3. 3

    Переименовать, посчитать суммы, разложить

    publish-installers.sh читает версию из package.json, а не хранит свою копию числа, кладёт каждый файл под тем именем, которое зовёт сайт, пишет SHA256SUMS.txt и копирует набор в открытую папку сайта.

  4. 4

    Собрать ленту обновлений и сверить её

    Лента едет вместе с установщиками. Для каждой её строки скрипт берёт названный файл и пересчитывает sha512 тем же способом, каким это сделала бы программа. Одно расхождение останавливает выпуск: старая лента и старый файл сходятся между собой прекрасно.

  5. 5

    Выгрузить в выпуск

    При включённом рубильнике файлы уезжают в открытый выпуск, замещая прежние. Затем каждый запрашивается снаружи и сверяется по настоящему весу, чтобы недогруженный файл не сошёл за готовый.

  6. 6

    Выложить сайт и сервер

    Только штатным скриптом. Он отказывается работать, если в корне склада лежит railway.json: такой файл однажды поставил на сайт образ сервера, и сайт лежал восемь минут.

  7. 7

    Ждать НОВЫЙ номер выкладки, а не состояние

    Выгрузка может не начаться вовсе, и тогда первой в списке остаётся прежняя удачная. Опрос по состоянию сказал бы SUCCESS о выкладке двухнедельной давности.

  8. 8

    Проверить снаружи

    Ход здоровья у сервера, живые страницы глазами на 1440 и 390 и все шесть ссылок скачивания по настоящему весу, прежде чем сказать слово «выложено».

Где лежат файлы и как сайт их находит

Установщики весят вместе около полутора гигабайтов, поэтому в складе исходников их нет. Сайт, собранный из одного склада, имел бы пустую папку загрузок и шесть мёртвых кнопок, и ровно это посетители видели две недели в августе.

Поэтому адрес файлов передаётся сайту при сборке, а без него сборка падает. Это нарочно: отказ на сборке стоит минут, а выложенный сайт, с которого нельзя скачать программу, стоит покупателей.

То же правило и для адреса сервера. Он впечатывается в сайт при сборке, поэтому смена адреса означает пересборку сайта, иначе кабинет продолжит стучаться в старое место.

Где лежитКак достаётся
Установщики и суммыОткрытый выпуск с меткой v0.1.0 в складе, где лежат файлы и нет исходниковКаждая ссылка на странице загрузки собирается из адреса файлов, заданного при сборке
Сайтarmanos.io, собирается из apps/webШтатный скрипт выкладки, служба называет свой Dockerfile сама
Серверapi.armanos.io, собирается из apps/serverШтатный скрипт выкладки, то же правило
БазаУправляемый Postgres, доступен только серверуМиграции накатываются при старте контейнера, руками в живую базу ничего не заливается
Лента обновленийlatest-mac.yml, latest.yml и latest-linux.yml, собираются рядом с установщикамиПока не раздаётся, смотрите список недоделанного выше

Чего эта страница не делает

  • Журнал не обещает сроков. Сборка уходит, когда проходит свои проверки, и нет расписания, которое держало бы её на конкретном дне.
  • Это не список правок в коде. Записи здесь о том, что заметит человек, работающий с продуктом, а не о каждом изменении в дереве.
  • Движок не обновляется отдельно. Он едет внутри программы, поэтому новый браузер приходит только с новой версией ARMANOS.
  • Страница загрузки держит одну версию. Выкладка замещает файлы на месте, и прежние установщики не хранятся для отката.
  • Ничего здесь не говорит о распознавании. Запись в журнале сообщает, что изменилось в нашем коде, а не что может или не может увидеть чужой сайт.

Как проверить

Каждая строка называет файл, который несёт утверждение, и стенд, который его стережёт.

Версия на этой странице и версия в сборке это одно число
apps/desktop/package.json · packages/shared/src/index.js · apps/desktop/test/engine-pin.js · apps/desktop/test/версия-называется-одинаково.js
Вес рядом с каждой кнопкой это вес настоящего файла
apps/web/test/вес-на-странице-настоящий.js · apps/web/test/страница-загрузки.js
Выпуск не уедет с пропавшим файлом или старой лентой
apps/desktop/scripts/publish-installers.sh · apps/desktop/test/publish-feed-guard.js
Установщик не уедет без движка и с движком старше заплат
apps/desktop/build/before-pack.js · apps/desktop/test/установщик-без-движка.js · apps/desktop/test/движок-не-старше-заплат.js
Передача входа живёт две минуты и годится один раз
apps/server/src/auth/auth.service.ts · apps/server/test/передача-входа.js · apps/desktop/test/передача-входа-из-сайта.js
Список недоделанного записан, а не рассказан
engine/patches/PENDING.md · docs/ОСТАЛОСЬ.md · docs/ВЫКЛАДКА.md

Скачайте ту сборку, о которой эта страница

Версия 0.1.0 с движком 153.0.7978.0. Бесплатный тариф даёт два профиля и не спрашивает карту.