WORKER-REPORT
Task
01G3-CLIENTS — вторым независимым взглядом проверить свод FINDINGS-DIGEST.md по
теме «словари, версии и то, что не переносится», и выдать обоснованное
несогласие; результат — G3-CLIENTS.md. Задача на размышление, без правки кода.
Changed files (each with why)
- 02
G3-CLIENTS.md— основной результат: разбор всех шести вопросов темы (критерий переносимости; три формы запасного значения; рецепт LinkedIn; бюджет Google; урок Cloudflare; обязательная vs версия по умолчанию) с разделом «С чем я не согласен». WORKER-REPORT-G3-CLIENTS.md— этот отчёт.
03Код не правился (задача проектировочная).
Acceptance, point by point
- 04
G3-CLIENTS.mdсуществует -> DONE — evidence: файл создан в корне worktree. - Критерий переносимости проверен попыткой контрпримеров -> DONE — evidence: §1; найден «passes-but-broken» (Avro/protobuf-отвержение) и «relational-but-works» (parity-тест PackageKind), критерий не опровергнут, а переформулирован вокруг «контролируемости контрагента».
- Для словарей предложено минимум три формы запасного значения с оценкой
влияния на наш код -> DONE — evidence: §2, Формы A/B/C, каждая привязана к
конкретным ветвям нашего кода (
vibedeps.rs:41,kinds.rs:128,subskill.rs:144,wire.rs:14-16). - Рецепт LinkedIn посчитан на нашем случае конкретно -> DONE — evidence: §3, пошаговая цена 6→7 против одношагового расширения enum'а; вывод «лекарство хуже болезни» при нуле внешних потребителей.
- Названы места в НАШЕМ каталоге, где старый читатель разобрал бы успешно и
понял неверно, со ссылками
файл:строка-> DONE — evidence: §5, четыре места —repomd.rs:42-55,memory.rs:262-280,inverted.rs:66,75,subskill.rs:144-146. - Каждое утверждение о внешнем мире несёт метку источника -> DONE —
evidence: метки
[ИЗ СВОДА]/[ИЗ ДЕРЕВА]/[ПО ПАМЯТИ, НЕ ПРОВЕРЕНО]проставлены по всемуG3-CLIENTS.md, включая преамбулу с определением меток.
Self-verify
- 05
grep "serde(other)" **/*.rs-> 0 совпадений. Подтверждает: запасного варианта (#[serde(other)]) в дереве нет нигде. grep "schema_version\s*(!=|==)|match.*schema_version" **/*.rs-> ровно одно совпадение:vibe-core/src/manifest/lockfile.rs:430(if lockfile.meta.schema_version != CURRENT_SCHEMA_VERSION). Этоvibe.lock(схема 5). В каталоге индекса сравнений версии НЕТ — подтверждает тезис «версия каталога — ярлык, а не переключатель» (§5.2, §6).grep "App|app" **/kind.rs-> 0 совпадений. Подтверждает:app(седьмой вид) в enum не внесён — только «anticipated» в спеке (§3, §4).- Все
[ИЗ ДЕРЕВА]-цитаты сверены чтением:repomd.rs:43-55(untagged + непересекающиеся ключи),kinds.rs:1-5(parity-дубликат),wire.rs:57,85,88(закрытые enum'ы в «терпимом» клиенте),VIBEVM-SPEC.md:178,180(six kinds + amendment-лог).
Decisions taken (each with why)
- 06Не соглашаться «вслепую», а перепроверять числа свода по дереву -> свод написан одним умом и имеет слепые зоны; ценен обоснованный разрыв. Перепроверка нашла: объединение у свода описано хрупче, чем оно есть (§7.1), а «терпимость клиента» не покрывает словарных значений (§7.2).
- Читать историю словаря из amendment-лога спека и док-комментариев, а не из
git -> git запускать запрещено; amendment-лог (
VIBEVM-SPEC.md:180,kind.rs:16,46) даёт достаточную и честно помеченную датируемость. - Не выдумывать внешних фактов -> все внешние утверждения несут
[ИЗ СВОДА]; мои собственные знания о serde/Avro/protobuf помечены[ПО ПАМЯТИ, НЕ ПРОВЕРЕНО]без выдуманных версий/дат. - Защитить «слабейшую» форму (А) через свойство нашего каталога ->
само-перезапись (harvest 3.6) делает deserialize-only
otherразрушительным; это конкретно-наше ограничение, которого нет в «среднем» случае.
Deviations and resolved ambiguities
- 07Тема просила «минимум три формы» — дано ровно три (A/B/C), без четвёртой: три исчерпывают пространство (catch-all / open-string / new-field), четвёртая степень свободы — это их смесь, обсуждённая в синтезе §2.
- «Контрпример, который ломает критерий» честно не найден — сообщено как усиление критерия (переформулировка оси), как и разрешено темой.
Not done / leftovers
- 08Не проверял дату появления
mcp(PROP-027) — в спеке amendment-лог фиксирует толькоlang(2026-08-06); для темпа «реже раза в год» точная датаmcpне нужна, но если понадобится — это вgit log/PROP-027. - Не касался
vibe.lockдетально (тема про каталог иvibe.toml); отмечен только как контраст «там версия ветвится» (lockfile.rs:430).
С чем я не согласен
09Подробно — §7 G3-CLIENTS.md. Список:
- 10Свод переоценивает хрупкость объединения
RepomdFileEntry— разбор однозначен по непересекающимся ключам и внутреннему тегу; опасность в отсутствииdeny_unknown_fields, не в неоднозначности. - «Клиент терпим → наружу правильны» — полуправда: терпимость к полям не распространяется на значения словарей (закрытые enum'ы в клиенте).
- Критерий переносимости верен, но неточен по оси — реальная ось «контролируемость контрагента», не «артефакт vs отношения» (parity-тест работает, будучи отношением).
- Бюджет Google в контексте свода тянет к строкам, а применённый к нашим темпам — защищает закрытые enum'ы.
- «Статик-чек совместимости внедрить первым» имеет скрытое前置-условие (у каталога нет схемы), которое свод не оговаривает.
- Согласие с добавлением: версия-контракт и строгость-по-происхождению
верны, но «обязательная vs умолчание» — не антиподы, а writer-strict/
reader-default, а обязательная версия на рукописном
vibe.tomlбез валидатора — частично театр.
11Список не пустой — несогласие обоснованное и привязано к файл:строка.