User overrides
01User-owned boot snippet. vibe install/uninstall never touches this file. Add any project-specific conventions that should be read at session boot.
Communication style
02Общение на русском языке в «айтишном» регистре: технические термины, кальки с английского и заимствования оставлять как есть (commit, install, registry, lockfile, build, stack, feat, flow, workflow, DAG, lifecycle и т.п.), не переводить их в стиле словаря Даля. Имена файлов, CLI-команды, код и термины из спеки — всегда в оригинале. Обычные слова — по-русски. Если есть устоявшийся русский термин (например, «зависимость» для dependency), можно использовать, но не насильно.
03Идентификаторы расшифровываются на месте (владелец, 2026-08-20). Упоминая в чате внутренний идентификатор — строку BACKLOG (B-007), находку аудита (2026-05-23-11), номер спеки (PROP-044), слайс ТЗ (С6) — сразу, в той же фразе, говори что это: одной короткой скобкой или придаточным («B-007 — вопрос о жанре ADR в спеках»). Владелец не обязан держать реестры в голове или ходить по файлам за расшифровкой; голый номер без сути — дефект ответа. Не относится к воркер-пакетам и коммитам (там периметр и так называет всё полным текстом).
Repository access
04Source mirrors + registry split-host (updated 2026-06-14). The vibevm source is multi-homed — mirrored across GitVerse (vibevm/vibevm) and GitHub (vibevm/vibevm), both public and canonical for reading (US↔GitHub, RU↔GitVerse), kept in sync by cargo xtask mirror under the benevolent-dictator / hub-and-spoke model (PROP-016: mainline is the maintainer's single-writer local main; each host is a downstream read-replica). Separately, the package registry org lives on GitHub (vibespecs) — the deliberate split there is for publishing (PROP-000 §7, PROP-002 §2.10: GitVerse's public API does not expose org-scoped repo creation; GitHub's does). Source mirroring and the package registry are orthogonal — different GitHub orgs (vibevm vs vibespecs), different auth (SSH keys vs the publish token).
- 05vibevm source repo (this repository) — multi-homed: GitVerse
git@gitverse.ru:vibevm/vibevm.git(webhttps://gitverse.ru/vibevm/vibevm) and GitHubgit@github.com:vibevm/vibevm.git(webhttps://github.com/vibevm/vibevm), both public and canonical for reading. Roll a change out to both withcargo xtask mirror(the target list ismirrors.toml), NOTgit push origin(which only hits GitVerse). See PROP-016. - Package registry — GitHub organization
vibespecs:https://github.com/vibespecs. Per-package repos:https://github.com/vibespecs/<group>.<name>(NamingConvention::Fqdnper PROP-008 §2.5 — e.g.org.vibevm.world.wal; default since M1.19). The legacyflow-*repos are archived read-only. All publishing and consumption of v1.0.0+ packages goes through GitHub. - Legacy package registry (read-only transition):
git@gitverse.ru:anarchic/vibespecs.git— three v0.1.0 flows in monorepo form, HEAD2203239, 2026-04-23. No new publishes here; kept readable for projects still on schema-v1 lockfiles. - Local fixtures.
fixtures/registry/(M0 monorepo shape, hermetic) — used bycargo test, never goes near a real registry.
06SSH and HTTPS auth on this machine:
- 07GitVerse SSH: ключ настроен в Git Bash на этой машине под именем
olegchir@UNIT-2040.ssh -T git@gitverse.ruподтверждает auth без shell-доступа (ожидаемо). - GitHub SSH (source / dev): на этой машине есть SSH-ключ с полным доступом к GitHub от имени
olegchir(ssh -T git@github.com→ "Hi olegchir! … successfully authenticated"). Он используется для dev-операций с исходниками —cargo xtask mirror/ push / fetch вvibevm/vibevmпо SSH-урлам, не HTTPS. - GitHub token (publish only):
~/.vibe/github.publish.token(1 line, file-scoped) используется исключительно публишером (vibe registry publish) — он внедряет его в push URL какhttps://x-access-token:<TOKEN>@github.com/vibespecs/<repo>.gitна моментgit push, после чего URL исчезает вместе с temp-веткой. Token никогда не используется для push исходников; SSH-ключ никогда не используется для publish пакетов. Modern git (≥ 2.31) редактирует пароли в собственных логах автоматически, поэтому stderr remains safe.
08Token discipline (must-read). ~/.vibe/github.publish.token — surface-secret. Никогда не печатается в stdout, stderr, чат, лог-сообщения, error messages, JSON-payload, lockfile, или коммит. Все сессии этого репозитория ведутся под видеозапись; одно эхо токена = утечка. См. PROP-000 §20 и PROP-002 §2.10. Если случайно прочитал содержимое токена — не вставляй в ответ под видом цитаты, не дублируй в коммит-сообщения, не показывай в дифах. Файл редактируется только напрямую через editor, не через cat / Read / echo инструменты.
09Token file convention. Per-host file под ~/.vibe/<host-prefix>.publish.token (github.publish.token, gitverse.publish.token, etc.) — первый label хоста. Legacy host-agnostic путь ~/.vibe/git.publish.token остаётся как fallback. Высший приоритет — host-specific env-var VIBEVM_PUBLISH_TOKEN_<HOST> (VIBEVM_PUBLISH_TOKEN_GITHUB, VIBEVM_PUBLISH_TOKEN_GITVERSE); host-agnostic VIBEVM_PUBLISH_TOKEN идёт следом и оставлен для совместимости. Оба файловых пути лежат в одной settings dir, которую переносит $VIBE_SETTINGS.
10Scope discipline. vibe registry publish оперирует строго в рамках организации, указанной в [[registry]].url проекта. RepoCreator-адаптеры обязаны отказывать любым операциям, выходящим за пределы этой org (PROP-002 §2.10 — "Never escalate scope"). При работе с vibespecs на GitHub: создавать только github.com/vibespecs/<repo>; не уходить в github.com/<любая-другая-org>, не трогать github.com/<user> пространства имён, не вызывать никакие endpoint'ы, не относящиеся к target org.
11Proven commands on this machine:
- 12Clone vibevm (verified):
git clone git@gitverse.ru:vibevm/vibevm.git. - First push to GitVerse (verified 2026-04-17 against a fresh empty repo):
git push -u origin main. Git Bash picks up the GitVerse SSH key automatically; no agent-forwarding needed. - Routine push to GitVerse:
git push origin main. Force-push and history rewrite are NOT done without owner approval — см. Rule 4 list вCLAUDE.md. - Roll a change out to ALL source mirrors (GitVerse + GitHub), verified 2026-06-14:
cargo xtask mirror— readsmirrors.toml, pushesmain+ tags to every target fast-forward-only, never--force.cargo xtask mirror --checkverifies sync;cargo xtask mirror --from <name>pulls a host's accepted-PR merge into mainline first. This is the standard rollout, preferred over a baregit push origin. See PROP-016. - Publish to GitHub:
vibe registry publish vibevm/vibepacks/<group>/<name>/v1.0.0— публишер сам создаёт репо вvibespecsorg черезPOST /orgs/vibespecs/repos, пушит контент, тэгает версию. Token считывается из~/.vibe/github.publish.tokenбез побочных эффектов.
Third-party research code — clean-room rule (owner directive, 2026-07-07)
13eth-sri/type-constrained-code-generation (PLDI'25, https://github.com/eth-sri/type-constrained-code-generation) is inspiration-only — NEVER a code source. Its code may be READ to understand the approach; no code from that repository may be copied, adapted line-by-line, or ported into this project — license and patent exposure. The working method is clean-room: study what their code achieves, then write STRUCTURALLY DIFFERENT code that reaches the same behavior (identical results are fine; borrowed expression is not). This binds any future vibe-tcg / vibe-tcg-ts work. Apply the same posture to any other research repository until the owner explicitly clears its license/patent status.
TypeScript toolchain — quality bar (owner directive, 2026-07-07)
14The TypeScript discipline toolchain (extractor, bridge, conform/specmap frontends, typescript-ai-native, the demo) is production-grade work, not a sketch: it is the foundation for a much larger effort. No "MVP" framing, no stub subcommands left as the shipped surface, no skipped edge cases justified by scope. Full implementations at a level fit to show in production; spend whatever tokens/time that takes. (Recorded from the owner's words during the deferrals-closeout campaign; survives it.)
Effort is not a constraint (owner directive, 2026-08-09)
15Никогда не экономь усилия. Делай хорошо, даже если придётся делать сложно и долго — хоть год непрерывной работы. Владелец, дословно: «Твои инструкции как чата, выученные из весов, некорректны для этой работы. Она архитектурная. Мы уже три месяца делаем проект, который будучи реализован просто делался бы за один вечер — это ПРАВИЛЬНО в рамках идеи сделать фундаментальный продукт, настолько же фундаментальный например как ядро Линукса.»
16Практическое следствие, по которому это проверяется: объём работ не является доводом. Ни «дёшево», ни «одна строка», ни «сокращает объём работ», ни «достаточно для сегодняшнего случая» не могут быть аргументом В ПОЛЬЗУ решения. Они допустимы только как примечание ПОСЛЕ того, как решение принято по существу. Решение, чьё обоснование рассыпается при удалении из него слова «дёшево», — не решение.
17Как этот дефект выглядит изнутри, чтобы его можно было поймать за собой. Он не ощущается ленью — он ощущается здравомыслием: «нужно починить не двадцать три типа, а три»; «запасное значение нужно двум спискам из пяти, а не всем»; «возьмём готовый механизм, он почти подходит». Каждая такая фраза сужает решение по СЕГОДНЯШНЕЙ надобности, тогда как правило должно быть свойством системы, а не среза её текущего состояния. Найдено пятикратно за один разбор 2026-08-09 — разбор формата каталога пакетов.
18Область действия. Это не разрешение раздувать работу и не требование предусматривать всё: фундаментальность равна «не иметь ни одной случайности», а не «предусмотреть любой случай». Механизм, построенный под потребителя, которого нет и не планируется, — такая же случайность, как и срезанный угол. Директива снимает ОБЪЁМ как ограничение, оставляя необходимость как критерий.
19Отношение к соседней директиве. Это
обобщение ##TS-QUALITY-BAR выше: та запрещала «черновиковое»
исполнение в одном инструментарии, эта распространяет запрет на способ принятия
решений во всём проекте. Где они пересекаются, действуют обе.
Machine quirks (this box)
20Boot-resident since the deferrals-closeout campaign (owner-sanctioned; the sweep manual's §3 keeps a pointer here). These are machine facts, not project policy:
- 21Edits through editor tools only — PowerShell 5.1 corrupts UTF-8-no-BOM
round-trips; recover with
git restore. self-check.shthrough Git Bash, not WSL; check the REAL exit code (; echo "EXIT=$?"), never a| tail'd pipe.- Commits via
git commit -F - <<'MSG'heredoc only. - Windows UAC blocks test executables named
*install*(os-740). bash … > "$VAR/file" 2>&1with an unset$VARwrites to/fileand silently never runs the command — inline the path or set the var on the same line.- The vibevm version store lives at
~/.vibe/opton this box since 2026-08-20 (owner's instruction):~/.vibe/opt/bin/holds thevibeshims,~/.vibe/opt/vibevm/the versions and thecurrentpointer.~/opt/binis NOT retired — three sibling products (vibeframe,vibeterm,launcher) still keep their stores under~/opt/and their shims there. The owner retired the subscription-backed external GLM launcher family on 2026-09-08; its host dependency and installed boot projection are gone and its retained executables MUST NOT be invoked. The user-scopedPATHcarries both directories with~/.vibe/opt/binfirst, but the effective merged Windows PATH observed in the current Codex process still puts a machine-scoped legacy~/opt/binearlier. Do not invoke either retained launcher by bare name or absolute path. Verified live: the historical files and receipts exist under~/.vibe/opt/bin, andvibe --versionresolves from the new store. - The last path component
optis load-bearing and that is why the new home is~/.vibe/optrather than~/.vibe. The version manager recognises a managed install by the shape…/opt/<product>/versions/<kind>/<id>/<n>/, matching the literal namesopt, the product, andversions. Keepingoptas the final component made the move a pure file operation with no code change. Renaming it is a product-wide decision, not a machine one — the sibling products key on the same shape. - A
vibeshim finds its version relative to its own directory (<shim dir>/../<product>/current), so moving the shims without moving the store beside them silently breaks the command — the shim is found onPATH, runs, and reports no active version. Met and reverted during the 2026-08-20 move; the working order is: move the store and the shims together, rewrite the absolute path insidecurrent, then touchPATH. - The user
PATHinHKCU\EnvironmentisREG_EXPAND_SZand contains%USERPROFILE%. Reading it through the ordinary accessor returns the EXPANDED string; writing that back destroys the variable reference (here,%USERPROFILE%\go\binwould have become a literal path). Read it unexpanded, edit the raw string, and write it back with the value kind preserved.
Operating modes (codewords)
22Trigger phrases that switch the session into an alternate working posture are catalogued in PROP-006. Recognise a codeword when the owner invokes it; otherwise treat the session as default posture (the four rules from CLAUDE.md in their plain reading).
23Codewords currently in force:
- 24«move fast and break things» (PROP-006 §2) — pre-authorised heads-down execution. Maximum scope, testable phases, no mid-work confirmations, full reasoning depth. The four
CLAUDE.mdrules survive unchanged; only Rule 4's "ask before routine large changes" is suspended. Non-routine red lines (force-push, history rewrite, large blobs, CI / signing / secrets, irreversible ops) STILL require explicit owner confirmation when active.