# Обновить пакеты {#root}

@status:doc/work @audience:user

[p01] Пакеты меняются. Эта страница показывает, у каких из ваших есть версия новее, двигает вперёд один из них или все и объясняет, что vibe записывает по дороге.

[p02]
```prompt
В проекте VibeVM в текущей папке покажи мне, у каких пакетов есть более новые версии, затем обнови их все и подытожь, что изменилось в лок-файле.
```

- needs: навык vibevm, установленный у вашего агента; проект с `vibe.toml` и `vibe.lock`; доступ по сети к реестрам проекта

outcome: `vibe outdated` перечисляет кандидатов, `vibe update --all` сдвигает пины, а диф `vibe.lock` показывает старые и новые версии

- assert: `vibe check --quiet`
- assert: `vibe list --quiet`

## Что происходит {#what-happens}

[p03] Сначала агент выполняет `vibe outdated`: команда сравнивает каждый пин в [лок-файле](../glossary/index.xml#lock-file) с новейшей версией, которую предлагает [реестр](../glossary/index.xml#registry), и печатает разницу; она ничего не меняет. Затем он выполняет `vibe update --all`. vibe разрешает граф заново, предпочитая текущую версию каждого пакета, который не обновляется, и скачивает новое в [хранилище](../glossary/index.xml#store). Он показывает план; после подтверждения заменяет деревья пакетов, переписывает лок-файл и пересобирает стартовые файлы. Агент заканчивает тем, что зачитывает вам диф лок-файла: этот диф и есть точный список текста, который ваш агент отныне будет читать иначе.

> [p04] `vibe update` remains the explicit "re-resolve and pick newer" command.
>
> <spec://org.vibevm.core/vibevm/modules/vibe-workspace/PROP-011#UPDATE-MOVES-LOCK>

## Руками {#by-hand}

[p05] 1. Посмотрите, что отстало:

[p06] Example `outdated` is copied from the source page at projection time.

[p07] 2. Обновите один пакет или все сразу:

[p08] Example `update` is copied from the source page at projection time.

[p09] `vibe update --all` обновляет всё, что есть в лок-файле; две формы взаимно исключают друг друга.

[p10] 3. Прочитайте диф `vibe.lock`, прежде чем коммитить. Каждая изменённая запись называет старую и новую версию и [отпечаток](../glossary/index.xml#fingerprint).

## Ограничение остаётся там, где вы его поставили {#the-constraint}

[p11] Обновление двигает пин в лок-файле внутри ограничения, которое называет [манифест](../glossary/index.xml#manifest); само ограничение оно не расширяет и не сужает. Если манифест говорит `^1.0`, обновление само на 2.0 не перейдёт. Чтобы сдвинуть и ограничение, установите новую версию явно с новым ограничением или передайте `--exact`, чтобы закрепить разрешённую версию и в манифесте.

> [p12] `flow:wal@^0.3` → semver range.
>
> <spec://org.vibevm.core/vibevm/common/PROP-000#CF-RANGE>

## Как восстановиться после ломающего обновления {#recovery}

[p13] Если после обновления проект перестал проходить проверку, дорога назад — лок-файл в системе контроля версий. Восстановите его и выполните `vibe reinstall`: команда пересобирает дерево из лока и хранилища без сети. Если повреждена запись в самом хранилище, `vibe cache check` её находит, а `vibe cache clean --package` удаляет, после чего свежая установка скачивает пакет заново.

> [p14] Without `--force` it recomputes the materialisation and the boot artifacts from the existing `vibe.lock` and the local cache — no fresh resolution.
>
> <spec://org.vibevm.core/vibevm/modules/vibe-workspace/PROP-009#REINSTALL-NO-FORCE>

## Особые случаи и правила {#edge-cases}

[p15] `vibe outdated` читает реестры, объявленные в манифесте проекта, а ради самого быстрого ответа — их [индекс](../glossary/index.xml#index-registry); проект, созданный `vibe init`, не объявляет ни одного, так что перед вопросом добавьте реестр через `vibe registry add`. Без сети команда сообщает, до чего не смогла достучаться, а не гадает.

[p16] Зависимость, объявленная как git-ветка, при обновлении обходится заново, и её запись в локе переезжает на текущий коммит ветки; тег или коммит остаются на месте.

> [p17] Mutable branch. Lockfile records the resolved commit at install time; subsequent `vibe update` re-walks branch HEAD. **Mutable** — see "Mutability and `vibe update`" below.
>
> <spec://org.vibevm.core/vibevm/modules/vibe-registry/PROP-002#ROW-GS-BRANCH-MEANING>

[p18] `--upstream` сравнивает ещё и выпуски исходной библиотеки, которые пакет объявляет описанными, — для пакетов, документирующих стороннюю библиотеку.

