<?xml version="1.0" encoding="UTF-8"?>
<spec xmlns="https://vibevm.org/spec/1">
  <title id="root">Вопросы</title>
  <status stage="doc" state="work" audience="user"/>
  <p p="1">Настоящие вопросы, которые задавали люди; на каждый ответ в несколько предложений и ссылка на страницу, которая объясняет механизм.</p>
  <section id="q-commit-vibedeps" title="Коммитить ли дерево зависимостей?">
    <p p="2">Да. `vibevm/vibedeps/` коммитят намеренно: агент, который клонирует репозиторий, читает всю полосу, ничего не запуская, а ревьюер видит, какой именно текст изменился, когда сдвинулась зависимость. Это дерево vibe, а не ваше: никогда не правьте его, а в сомнении дайте `vibe reinstall` пересобрать его. См. [Два дерева](../model/two-trees.xml).</p>
    <rule ref="spec://org.vibevm.core/vibevm/modules/vibe-workspace/PROP-009#VIBEDEPS-COMMITTED" p="3"/>
  </section>
  <section id="q-conflict" title="Зависимость глубоко в моём дереве конфликтует по версии. Как починить?">
    <p p="4">Сначала прочитайте объяснение резолвера: оно называет два ограничения, которые не сходятся, а пересекающиеся диапазоны — не конфликт. Затем поднимайтесь по лестнице от лёгкого к тяжёлому. Расширьте ограничение, которое вы сузили сверх нужного. Сдвиньте промежуточную зависимость на версию с совместимым ограничением через `vibe update`. Добавьте `[[override]]` для одной [координаты](../glossary/index.xml#coordinate), с `reason`. Форкните и используйте [git-источник](../glossary/index.xml#git-source), когда должно измениться собственное ограничение зависимости. Правило: одна версия на пакет во всём рабочем пространстве, поэтому vibe останавливается, а не ставит две.</p>
    <rule ref="spec://org.vibevm.core/vibevm/modules/vibe-registry/PROP-002#OVERRIDE-SHORT-CIRCUIT" p="5"/>
  </section>
  <section id="q-confirm" title="Почему установка просит подтверждения?">
    <p p="6">Потому что установка пишет в ваш репозиторий: дерево зависимостей, [лок-файл](../glossary/index.xml#lock-file), стартовые файлы, [управляемый блок](../glossary/index.xml#managed-block) в файлах инструкций. План сначала показывает всё это. В скрипте за вас отвечает `--assume-yes` или `--unattended`; отказ — не ошибка, и он не оставляет ничего написанным наполовину.</p>
    <rule ref="spec://org.vibevm.core/vibevm/modules/vibe-workspace/PROP-009#PLAN-UNIT" p="7"/>
  </section>
  <section id="q-llm" title="Вызывает ли vibe языковую модель?">
    <p p="8">Сам по себе нет. Внутри vibe нет модели, и каждая подсистема работает алгоритмически. Когда шагу нужно рассуждение, vibe откладывает инструкцию для агента, который его запустил, или, за терминалом, вызывает настроенный вами сервис модели, только для этого шага и только если вы включили эту функцию. См. [Поручите работу агенту](../agent/ask-your-agent.xml).</p>
    <rule ref="spec://org.vibevm.core/vibevm/common/PROP-054#LLM-IS-AN-ENHANCEMENT" p="9"/>
  </section>
  <section id="q-two-versions" title="Могут ли две версии одного пакета сосуществовать в проекте?">
    <p p="10">Нет. Разрешение выбирает одну версию на пакет во всём рабочем пространстве, иначе полоса, которую читает агент, содержала бы две версии одних правил. Если двум участникам рабочего пространства действительно нужны разные мажорные версии, это два рабочих пространства.</p>
    <rule ref="spec://org.vibevm.core/vibevm/modules/vibe-workspace/PROP-009#INSTALL-UNIFIED" p="11"/>
  </section>
  <section id="q-registry-gone" title="Реестр, которым я пользовался, исчез. Проект застрял?">
    <p p="12">Нет, пока пакеты лежат в машинном [хранилище](../glossary/index.xml#store): сохранённой версией можно пользоваться, даже когда её больше не перечисляет ни один [реестр](../glossary/index.xml#registry), а `vibe reinstall` пересобирает дерево из лок-файла и хранилища. На долгий срок `vibe registry vendor` записывает папку со всем, на что ссылается лок-файл, и любая машина может использовать её как [зеркало](../glossary/index.xml#mirror) по адресу `file://`.</p>
    <rule ref="spec://org.vibevm.core/vibevm/modules/vibe-registry/PROP-010#A-CACHE-HIT-IS-AUTHORITATIVE-FOR-AVAILABILITY" p="13"/>
  </section>
  <section id="q-pin" title="Как закрепить пакет на точной версии?">
    <p p="14">Установите его с `@=1.2.0` или передайте `--exact` в `vibe install` или `vibe update`, чтобы записать разрешённую версию точным пином в [манифест](../glossary/index.xml#manifest). Без `--exact` манифест хранит диапазон, а пин держит лок-файл; большинству проектов нужно именно это.</p>
    <rule ref="spec://org.vibevm.core/vibevm/common/PROP-000#CF-EXACT" p="15"/>
  </section>
  <section id="q-edit-lock" title="Можно ли править vibe.lock руками, чтобы заглушить ошибку хеша?">
    <p p="16">Нет. Несовпадение [отпечатка](../glossary/index.xml#fingerprint) значит, что отданные байты не те, что помнил лок-файл: тег после force-push, сломанное зеркало или намеренное [переопределение](../glossary/index.xml#override). Выясните, что именно, затем удалите и установите заново, чтобы перепинить, уберите сломанное зеркало или запишите переопределение с его причиной. Правка лок-файла отключает единственную проверку целостности, которая у вас есть.</p>
    <rule ref="spec://org.vibevm.core/vibevm/modules/vibe-registry/PROP-002#EFF-MIRROR-SUBSTITUTION" p="17"/>
  </section>
  <section id="q-why-eight-kinds" title="Почему так много видов пакетов?">
    <p p="18">Потому что инструмент, который знает, для чего пакет, ещё до того, как его открыл, может рано отказать неправильному: пакет документации не может нести [стартовый фрагмент](../glossary/index.xml#boot-snippet), пакет сервера обязан закрепить то, что обслуживает, фича не может назвать фреймворк. Каждый вид — один жанр, и слово, которое значило два жанра, разделили в тот момент, когда это случилось.</p>
    <rule ref="spec://org.vibevm.core/vibevm/modules/vibe-registry/PROP-008#KIND-METADATA" p="19"/>
  </section>
  <section id="q-offline" title="Я в самолёте. Что работает?">
    <p p="20">Всё, что читает хранилище и проект: установка из хранилища с `--offline`, reinstall, check, tree, локальная читалка документации. То, что не работает, говорит об этом, называя недостающую координату, и никогда не ставит частичный результат. Прогрейте хранилище перед отъездом через `vibe cache add`. См. [Работать без сети](../howto/work-offline.xml).</p>
    <rule ref="spec://org.vibevm.core/vibevm/modules/vibe-registry/PROP-010#OFFLINE-NO-DEGRADE" p="21"/>
  </section>
  <section id="q-remove-vibe" title="Проект готов. Как отдать его без vibe?">
    <p p="22">`vibe scrape` удаляет слой vibe по контракту и доказывает, что родная сборка по-прежнему проходит: в новую папку или на месте с возможностью восстановления. Это не то же, что `vibe clean`, который удаляет только то, что vibe может сгенерировать заново. См. [Убрать VibeVM из проекта](../lifecycle/scrape.xml).</p>
    <rule ref="spec://org.vibevm.core/vibevm/common/PROP-056#RELATED-CLEAN" p="23"/>
  </section>
  <section id="q-docs-install" title="Почему я не могу установить руководство в свой проект?">
    <p p="24">Документацию читают, а не выполняют, и она не должна попадать в полосу, которую агент читает на каждом старте сессии. Поэтому пакет документации прогревается в машинное хранилище через `vibe cache add`, читается локально через `vibe doc serve`, а агент добирается до него через [навык](../glossary/index.xml#skill) или по адресу. См. [Читать документацию локально](../howto/read-documentation-locally.xml).</p>
    <rule ref="spec://org.vibevm.core/vibevm/common/PROP-057#KIND-DOC-NOT-INSTALLED" p="25"/>
  </section>
</spec>
