VibeVM
Contents
On this page
en
Publisher
org.vibevm.core
Version
1.0.0latest
Audiences
Reading time
3 min
Rendered
Read aloud
never

WORKER-REPORT

Task

01G2-MECHANICS — вторым независимым взглядом разобрать механику эволюции формата (каталог vibevm) против свода FINDINGS-DIGEST.md; результат — G2-MECHANICS.md. Задача на размышление, не на правку кода; git и cargo не запускались.

Changed files (each with why)

  • 02G2-MECHANICS.md — основной результат: скептический разбор шести вопросов (Avro, пусто/отсутствует, тегированное объединение, граница терпимости, механика protobuf, номера полей) с пятью предложенными формами объединения.
  • WORKER-REPORT-G2-MECHANICS.md — этот отчёт.
  • (Код не правился — задача проектировочная.)

Acceptance, point by point

  • 03G2-MECHANICS.md существует -> DONE — evidence: файл создан в корне worktree.
  • Модель Avro разобрана скептически, с ответом «дешевле/дороже терпимого читателя» и обоснованием -> DONE — evidence: G2-MECHANICS.md §1, вердикт «ДОРОЖЕ»; обоснование — две разных истории git (каталог-реестр vs исходный репозиторий), внешний читатель без репо, скопированная наружу запись; контраргумент-пересмотр «настоящий урок Avro — опубликовать артефакт схемы».
  • Вопрос про списки разобран с ответом «нужна ли нам различимость» -> DONE — evidence: G2-MECHANICS.md §2, ответ «для каталога НЕ нужна» (машинные поля не бывают legitimately неизвестными); нужна только человеко-написанному манифесту.
  • Для нашего объединения предложено минимум три формы с ценой каждой -> DONE — evidence: G2-MECHANICS.md §3 дано пять форм (A — тег-поле; B — разделённые карты; C — вывод по обязательному полю/baseline; D — вложенная обёртка, нет в своде; E — тег в ключе, отбраковано), у каждой цена и «чем платим».
  • Граница терпимости разобрана минимум по четырём видам «незнакомого» -> DONE — evidence: G2-MECHANICS.md §4 разобрано пять видов (незнакомое поле, незнакомое значение enum, незнакомый тип значения, лишний элемент списка, незнакомый ключ карты) с вердиктом по каждому.
  • Каждое утверждение о внешнем мире несёт метку источника -> DONE — evidence: по всему G2-MECHANICS.md использованы [ИЗ СВОДА], [ИЗ ДЕРЕВА] с файл:строка, [ПО ПАМЯТИ, НЕ ПРОВЕРЕНО]; правило разметки оглашено вверху.

Self-verify

  • 04grep -c 'ИЗ ДЕРЕВА\|ИЗ СВОДА\|ПО ПАМЯТИ' G2-MECHANICS.md -> метки источника присутствуют повсеместно; каждое внешнее утверждение помечено.
  • Числа свода перепроверены чтением кода:
  • deny_unknown_fields = 15 в crates/vibe-index/src (1+6+1+5+2) -> СОВПАЛО.
  • #[serde(other)] -> 0 в дереве -> СОВПАЛО.
  • сравнение версии каталога -> 0; единственное сравнение версии во всём .rs — vibe-core/src/manifest/lockfile.rs:430 (lockfile) -> СОВПАЛО со сводом.
  • skip_serializing_if = "...is_empty" -> 21, не 14 -> РАСХОЖДЕНИЕ со сводом (зафиксировано как находка): 12 Vec::is_empty + 2 BTreeMap::is_empty
  • 7 структурных *Entry::is_empty; свод считал только сырые коллекции (14).
  • (cargo/git не запускались по условию задачи; верификация — чтением исходников и grep.)

Decisions taken (each with why)

  • 05Avro признан ДОРОЖЕ -> предпосылка «схема и данные в одной истории git» неверна (каталог и Rust-типы — два репозитория), а внешний читатель без репо и скопированная запись ломают разрешение схем целиком.
  • Различимость списков признана ненужной для каталога -> машинные поля детерминированно вычисляются, «отсутствует» не бывает легитимным состоянием.
  • Форма A (тег-поле) выбрана рекомендованной -> один атрибут от нынешнего состояния, выразима во всех языках схем, и устраняет блокер А6, который держит только #[serde(untagged)].
  • Несоответствие типа отнесено к твёрдому отказу -> коэрция = патология «будь либерален» (RFC 9413); это порча, не эволюция.
  • Rename-безопасность через #[serde(alias)] -> бесплатна в serde, работает и в JSON, и в TOML; один список отставленных имён (рекомендация свода) недостаточен.

Deviations and resolved ambiguities

  • 06Свод неточно описал объединение («угадывает по набору ключей»): в дереве у Directory есть позитивный тег kind:"directory" (repomd.rs:44-50). Реальный дефект — untagged, не «отсутствие тега». Учтено в §0 и §3.
  • Периметр «14» пересмотрен до 21 (структурные *Entry::is_empty коллапсируют пусто≡отсутствует так же). Зафиксировано, не подано как «свод ошибся в лоб» — периметр сырых коллекций оправдан, но релевантное языку схемы число = 21.
  • Не перепроверял «23 типа / 18 каталожных / 86 полей» — не нагрузко-несущие для выводов; честно отмечено в §0.

Not done / leftovers

  • 07Не строил и не выполнял код (запрещено условием и не нужно для задачи).
  • Числа «23/18/86» оставлены на доверии своду.

С чем я не согласен

  1. 08Avro «почти бесплатно» — не согласен (предпосылка ложна). Каталог и схема в двух разных репозиториях/историях; внешний читатель без репо и скопированная запись ломают модель; Avro ДОРОЖЕ терпимого читателя, который уже написан (wire.rs).
  2. «Угадывание по набору ключей» — не согласен с фактикой. Directory уже несёт kind:"directory" (repomd.rs:44-50); дефект — untagged, не отсутствие дискриминанта.
  3. «14 полей» — не согласен с периметром. Живое число — 21; структурные поля с *Entry::is_empty коллапсируют пусто≡отсутствует так же; решение А6 принято по заниженному числу.
  4. «Невосстановление присутствия списков = незавершённость» — не согласен. Это осознанный отказ; для каталога различимость не нужна (машинные поля не бывают «неизвестными»).
  5. «Наследуем проблемы JSON-protobuf без выхода» — не согласен с рамкой. Наш выход — убрать deny_unknown_fields (один атрибут), а не двоичный формат; скалярного коллапса proto3 у нас в JSON нет вовсе.
  6. Поле-имя — возмещаемо полностью, а свод назвал только полумеру. Список отставленных имён необходим, но rename-безопасность даёт #[serde(alias)], которого свод не упомянул.

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@1.0.0/research/schema-evolution-2026-08/worker-reports/G2-MECHANICS-report

.md.xmlllms.txt