VibeVM
Contents
On this page
ru
Publisher
org.vibevm.core
Version
1.0.0latest
Adapts
org.vibevm.core/vibevm-docs
Audiences
author
Reading time
3 min
Rendered
Read aloud
never

Написать feat или stack

01Feat говорит, что построить, не говоря как; stack говорит, как это делает технология. Эта страница пишет по одному и соединяет их через умения, которые одному нужны, а другой предоставляет.

02
Создай два пакета в дереве под vibevm/vibepacks/ в текущем проекте VibeVM. Первый — feat org.acme/welcome-page, который описывает страницу приветствия с критериями приёмки и требует возможность ui:page-host. Второй — stack org.acme/static-site, который предоставляет ui:page-host и объясняет, как страница собирается статическим HTML-файлом. Запусти vibe check на обоих.

навык vibevm, установленный у вашего агента; проект с vibe.toml в корне

манифест feat требует ui:page-host, манифест stack его предоставляет, у каждого есть документы спецификации под vibevm/vibespecs/, и vibe check не находит ошибок ни у одного

  • vibe check --path vibevm/vibepacks/org.acme/welcome-page/v0.1.0 --quiet
  • vibe check --path vibevm/vibepacks/org.acme/static-site/v0.1.0 --quiet

Что происходит

03Агент создаёт оба слота через vibe init package, задаёт их виды в манифестах, пишет спецификацию feat, критерии приёмки и требование возможности, пишет описание stack, его соглашения и возможность, которую он предоставляет, и проверяет каждый. Когда проект позже ставит feat, резолвер ищет пакет, предоставляющий ui:page-host, среди stack-пакетов проекта; stack ему подходит, и двое сопоставляются, хотя ни один не называет другого.

04 [[registry]] is an array, priority-ordered. [[mirror]] is a first-class fallback layer, transparent to the lockfile. [[override]] bypasses the resolver for pins. Schema and code path support all three from day one.

Feat

05Feat описывает, что фича делает для своего пользователя, в терминах, которые может реализовать любой stack: назначение, поведение, критерии приёмки, нужные данные, что происходит, когда что-то идёт не так. Он никогда не называет фреймворк. Его манифест объявляет умения, которые ему нужны от stack, как возможности, namespace:name@constraint, и больше ничего о технологии.

06
Путь Назначение
vibevm/vibespecs/feats/<name>/SPEC.md что фича делает, для кого и зачем
vibevm/vibespecs/feats/<name>/acceptance.md наблюдаемые критерии, которым должна отвечать сборка
vibevm/vibespecs/feats/<name>/data-model.md, api.md, ui-flows.md, failure-modes.md те части, что применимы, по одной теме на файл

07В манифесте: [requires] capabilities = ["ui:page-host@^1"] и, для feat, которому вообще нужен stack, [compatibility] requires_kinds = ["stack"].

Stack

08Stack — технологический контекст: он говорит, как абстрактные умения, о которых просит feat, реализуются одним набором инструментов, и может привязать фазы сборки и тестирования жизненного цикла к этому тулчейну. Его манифест объявляет, что он предоставляет, [provides] capabilities = ["ui:page-host@1.0"], а документы спецификации описывают каждую предоставляемую возможность в отдельном файле, плюс соглашения, инструменты и выкладку.

09
Путь Назначение
vibevm/vibespecs/stacks/<name>/STACK.md что такое этот stack и когда его выбирать
vibevm/vibespecs/stacks/<name>/capabilities/<capability>.md по файлу на предоставляемое умение: как оно реализовано
vibevm/vibespecs/stacks/<name>/conventions.md, tooling.md, deployment.md именование и раскладка, команды сборки и тестов, как сборка поставляется
vibevm/vibespecs/boot/<name>.xml необязательный фрагмент, который показывает активный stack на старте сессии

10Stack может также привязать в манифесте вклады жизненного цикла, чтобы vibe build и vibe test в проекте-потребителе запускали тулчейн stack без дополнительной настройки.

11 A stack package may ship its preset as a set of [[extension]] contributions in its own manifest (auto, trust-gated like everything else) — this is how rust-ai-native-lang teaches vibe build/vibe test to drive cargo without vibe hardcoding cargo, the OOS-AUTODETECT posture of PROP-024 kept intact: the package declares, vibe never infers.

Возможности

12Возможность — абстрактный интерфейс: пространство имён, двоеточие, имя и, необязательно, ограничение версии. Feat требует; stack предоставляет; резолвер сопоставляет их при установке и отказывает проекту, чьим feat нужно умение, которого не предоставляет ни один установленный stack. Выбирайте имена по тому, что умение делает для фичи, а не по технологии: ui:page-host, db:relational, auth:oauth-callback.

13 Decision. A package's identity is the tuple (kind, name, version, content_hash). The content_hash is a digest over the deterministically-ordered concatenation of (rel_path_bytes || 0x00 || file_bytes || 0x00) for every file in the package directory, and the value names the recipe that produced it (PROP-044 §4.7): sha256-tree/1:<hex> is recipe 1, whose exclusion list, path normalisation and traversal order are carried as data in formats/hash_recipes/1.toml; the bare sha256:<hex> is recipe 0, the pre-recipe form, frozen verbatim in code — not configurable, because a frozen recipe that can be edited is not frozen — so that values written before recipes were named stay readable. Two hashes are comparable only at the same recipe; comparing across recipes answers a question nobody asked, and is never done silently. PROP-024 §2.2 re-scopes this to the package's shippable tree — its source, minus build output (.git/, .vibe/, target/, node_modules/, .vibeignore globs) — so a code-bearing package's identity is its source, not its build state; that exclusion lands with the code that implements it. The URL used to fetch the content is informational — recorded in the lockfile for debuggability, not for identity.

Особые случаи и правила

14Слово stack называет и бандл семейства: пакет вида stack, в котором нет ничего, кроме точных пинов участников языкового семейства. В реестре и то и другое stack; различает их описание.

15 <family> — the aggregator. kind = "stack", content-minimal: a vibe.toml and a README.md, and nothing else — no code, no boot snippet, no specmap.toml / conform.toml. Its whole job is to name the family's members at one resolved version set through exact =X.Y.Z pins in [requires]. Requiring the aggregator installs the family.

16Критерии приёмки feat — то, что агент проверяет после сборки; пишите их как наблюдаемые факты, а не как пожелания.

17Два feat, требующие одну возможность, могут быть удовлетворены одним stack; проект с несколькими stack помечает один как активный для сборки.

For an agent

This page has a machine mirror. The citation carries the version rather than latest, so what an agent quotes does not move under it.

spec://org.vibevm.core/vibevm-docs@1.0.0/authoring/write-a-feat-or-stack

.md.xmlllms.txt