<?xml version="1.0" encoding="UTF-8"?>
<spec xmlns="https://vibevm.org/spec/1">
  <title id="root">Установить vibe</title>
  <status stage="doc" state="work" audience="user"/>
  <p p="1">vibe — одна программа без рантайма, который надо ставить. На Windows вы скачиваете архив и распаковываете его; на любой платформе с тулчейном Rust — собираете из исходников. Когда всё готово, одна команда печатает версию.</p>
  <prompt id="install-vibe" p="2">
    Установи vibe на этой машине: на Windows — из последнего релизного архива на github.com/vibevm/vibevm, иначе — собрав чекаут исходников его скриптом первого запуска. Затем открой новую оболочку и подтверди, что `vibe --version` печатает версию.
    <needs>доступ по сети к github.com; на платформе, отличной от Windows, — git и тулчейн Rust</needs>
    <outcome>`vibe --version` печатает `vibe 1.0.0` в новом терминале, а `vibe self doctor` не находит проблем</outcome>
    <assert>vibe --version</assert>
    <assert>vibe self doctor</assert>
  </prompt>
  <section id="what-happens" title="Что происходит">
    <p p="3">На Windows агент скачивает релизный архив, распаковывает его и запускает скрипт-установщик. Скрипт импортирует бинарник в управляемую папку vibe под `~/.vibe/opt`, помечает его активным и добавляет в пользовательский `PATH` одну папку с маленькими скриптами-лаунчерами. На остальных платформах агент клонирует репозиторий с исходниками и запускает его скрипт первого запуска, который собирает программу и устанавливает её через тот же менеджер. В обоих случаях получается одна и та же раскладка: версии под `~/.vibe/opt/vibevm/`, лаунчеры в `~/.vibe/opt/bin/` и указатель на текущую версию.</p>
    <rule ref="spec://org.vibevm.core/vibevm/common/PROP-019#ROOT-DEFAULT" p="4"/>
    <p p="5">vibe работает на Windows, macOS и Linux. Холодный старт одной строкой — это скрипт по устойчивому адресу: `https://vibevm.org/install.sh` для Bash и `install.ps1` для PowerShell. Он скачивает манифест — список файлов выпуска с их размерами и дайджестами — и проверяет по нему небольшой бутстрап-бинарник, а тот проверяет и устанавливает полный бандл. Менеджеры пакетов вроде Homebrew и WinGet — позже.</p>
    <rule ref="spec://org.vibevm.core/vibevm/common/PROP-000#PLATFORMS-TRIO" p="6"/>
    <rule ref="spec://org.vibevm.core/vibevm/common/PROP-019#COLD-START-PATH" p="7"/>
    <rule ref="spec://org.vibevm.core/vibevm/common/PROP-019#BOOTSTRAP-SCRIPT-LATER" p="8"/>
  </section>
  <section id="by-hand" title="Руками">
    <section id="windows" title="На Windows" when="os:windows">
      <p p="9">1. Скачайте `vibe-&lt;version&gt;-windows-x86_64.zip` со страницы релизов `github.com/vibevm/vibevm`.</p>
      <p p="10">2. Распакуйте архив в папку на ваш выбор.</p>
      <p p="11">3. В этой папке запустите установщик:</p>
      <example ref="windows-install" p="12"/>
      <p p="13">4. Откройте новый терминал, чтобы изменённый `PATH` был прочитан.</p>
      <p p="14">5. Проверьте результат:</p>
      <example ref="version" p="15"/>
      <p p="16">В архиве есть и `SHA256SUMS.txt`. Сравните дайджест `vibe.exe` со строкой в этом файле, прежде чем запускать установщик. Установщик делает ту же проверку.</p>
    </section>
    <section id="from-source" title="Из исходников, на любой платформе">
      <p p="17">1. Установите git и тулчейн Rust. OpenSSL не нужен.</p>
      <rule ref="spec://org.vibevm.core/vibevm/common/PROP-019#TOOLS-LIST" p="18"/>
      <p p="19">2. Клонируйте репозиторий: `git clone https://github.com/vibevm/vibevm.git` — и войдите в папку.</p>
      <p p="20">3. Запустите скрипт первого запуска: `bash tools/first-run.sh` на Linux и macOS, `.\tools\first-run.ps1` на Windows. Он собирает программу, устанавливает её в управляемое [хранилище](../glossary/index.xml#store) и настраивает лаунчеры.</p>
      <p p="21">4. Откройте новый терминал и выполните `vibe --version`, затем `vibe self doctor`.</p>
      <p p="22">Позже `vibe self update` переводит установку на новейший выпуск, а `vibe self reinstall` скачивает текущую заново. `vibe self ls` перечисляет версии на машине, а `vibe self rollback` возвращает предыдущую.</p>
      <rule ref="spec://org.vibevm.core/vibevm/common/PROP-019#CMD-INSTALL" p="23"/>
    </section>
  </section>
  <section id="where-things-go" title="Где что лежит">
    <p p="24">Всё своё vibe держит в одной папке вашего домашнего каталога, `~/.vibe/`: установленные версии и их лаунчеры под `opt/`, машинное хранилище скачанных пакетов под `cache/`, клоны [реестров](../glossary/index.xml#registry) под `registries/` и ваши файлы настроек. Больше он никуда не пишет, а всю папку можно перенести, задав переменную окружения `VIBE_SETTINGS`.</p>
    <rule ref="spec://org.vibevm.core/vibevm/modules/vibe-registry/PROP-010#THE-SETTINGS-HOME-IS-DOT-VIBE-NOT-XDG" p="25"/>
    <p p="26">Установщик никогда не перезаписывает работающий бинарник и никогда не правит ваш `PATH` дважды: он добавляет одну запись, огороженную маркером, и не трогает остальное.</p>
    <rule ref="spec://org.vibevm.core/vibevm/common/PROP-019#RULE-NEVER-CLOBBER" p="27"/>
  </section>
  <section id="edge-cases" title="Особые случаи и правила">
    <p p="28">Если `vibe --version` ничего не печатает в том терминале, где вы запускали установщик, откройте новый: изменение `PATH` действует только для новых оболочек.</p>
    <p p="29">Готовый бинарник откуда угодно можно принять в управляемое хранилище без тулчейна: `vibe self import ./vibe.exe --tag 1.0.0 --use`.</p>
    <rule ref="spec://org.vibevm.core/vibevm/common/PROP-019#CMD-IMPORT" p="30"/>
    <p p="31">Собрать произвольный git-ref — значит выполнить произвольный код, как при любой сборке из исходников. Собирайте из репозитория и веток, которым доверяете.</p>
    <rule ref="spec://org.vibevm.core/vibevm/common/PROP-019#ACE-ACCEPTED" p="32"/>
  </section>
</spec>
