10 KiB
CODE-REVIEW-699-r2
Issue: #699 · этап: code · трек: show · заход: r2 · блокирующих циклов до этого раунда: 1/2
Материал раунда: git log --oneline origin/dev..HEAD / git diff origin/dev...HEAD,
вершина ветки issue/699-ratchet-bands = 23aca8a987142633c6f0c7522538d6601aa942d9.
Validate на этом SHA — success (run 36490355420). Ребейз на dev не делался
(трек show, #696): dev впереди на 17 коммитов, слияние без конфликта
(заявлено автором, git merge-tree); материал — ветка как есть.
Предыдущий раунд: r1, документ docs/reviews/CODE-REVIEW-699-r1.md, материал
709c5b8a38f4ac16f7ce18593ef0a40d672742cb, вердикт жёлтый — один Medium в
скоупе (M1), High 0.
Дельта r1 → r2
git diff 709c5b8a..HEAD — два коммита: d7af9fbb (только добавляет
docs/reviews/CODE-REVIEW-699-r1.md, документ ревью, не код) и 23aca8a9
(исправление M1). Дифф второго коммита — три файла:
docs/DEVELOPMENT.md | 5 ++++-
scripts/mutation-registry.mjs | 11 +++++++++++
test/ratchets.test.mjs | 8 ++++++++
Разбор ниже — по этой дельте (§2.10): дельта локальна (один Medium из предыдущего раунда, три файла), задача не меняет контракт и не вводит новую подсистему, повторный ребейз не проводился.
Закрытие раунда r1
| Находка | Чем закрыта | Где это видно |
|---|---|---|
M1: node scripts/ratchets.mjs tighten не был в единственном каноническом release-runbook docs/DEVELOPMENT.md (§«Primary prerelease path»); единственное упоминание — предупреждение внутри release:prerelease уже в момент публикации, когда откатывать коммит кандидата поздно. |
Шаг tighten вставлен в чек-лист «Prepare the candidate as usual» сразу после npm run bundle:release и до записи docs/RELEASE-NOTES.md, с пояснением «commit them with the candidate». Закрытие подкреплено тестом, который пере проверяет и наличие, и порядок шага, плюс новым мутантом реестра. |
docs/DEVELOPMENT.md:525-534 (см. ниже цитату); test/ratchets.test.mjs:69-75 (#699 r1 M1: runbook беты опускает храповики при подготовке кандидата, до публикации); scripts/mutation-registry.mjs — release-runbook-forgets-tighten, guard --test-name-pattern="#699 r1 M1". |
Цитата из docs/DEVELOPMENT.md:525-531 (после правки):
Prepare the candidate as usual: synchronize every version field, add dated RU and EN changelog sections, update the production bundle snapshots with
npm run bundle:release(…), then lower the ratchets to the candidate's facts withnode scripts/ratchets.mjs tighten(#699: it rewrites the core line caps, the gzip graph ceilings andscripts/monolith-baseline.jsonfrom the freshdist/; commit them with the candidate) and write the short bilingual body indocs/RELEASE-NOTES.md.
Порядок ровно тот, который требовало замечание: tighten — после свежего
dist/ (bundle:release) и до пуша/публикации (release:prerelease), одним
коммитом кандидата.
L1 (r1, оркестрация tighten без автотеста) была снята ревьюером в r1 с
записью; дельта r2 её не касается — унаследовано без повторной проверки.
Проверка исполнением (не только чтением)
node --test test/ratchets.test.mjs— 6/6 ok, включая новый тест#699 r1 M1.- Тест умеет падать: применил патч мутанта вручную (
tighten→reportв той же позиции текста, ровно то, что делаетrelease-runbook-forgets-tighten), прогналnode --test --test-name-pattern="#699 r1 M1" test/ratchets.test.mjs— 1 fail (assert.matchне находитtightenпослеbundle:release). Откатил патч (git status --porcelain— чисто,git diff— пусто). node scripts/mutation-gate.mjs --check— зелёный;release-runbook-forgets-tightenв выводе — ровно один разok(якорь не задваивается, реестр не рассинхронизирован),browser guards: 200/200, 3 предсуществующих WARN не относятся к #699 (те же, что в r1).node --test test/mutation-gate.test.mjs test/monolith-text-anchors.test.mjs— 71/71 ok: новый тест не задевает замороженный списокFROZEN_TEXT_ANCHOR_TESTS, регресс первого провала автора (#624 AC4) не вернулся.node --test test/process-digests.test.mjs— 5/5 ok (дифф r2 не трогаетPROCESS.md/REVIEWER.md, ожидаемо зелёный).- Трейлеры коммита
23aca8a9:Issue: #699,User-Visible: no— верно, правка не трогаетsrc/**и видимое поведение продукта не меняет (это правка релиз-документации и внутреннего гейта). Оба changelog не тронуты — корректно приUser-Visible: no. - Рабочая копия после ручной проверки мутанта осталась чистой:
git status --porcelainпуст, файлов в репозитории не создавал.
Проверено и корректно (унаследовано из r1, без повторного прогона)
Не в скоупе дельты r2 — реализация правила «полоса над потолком беты» для
всех четырёх храповиков, реордер CLI bundle-budget.mjs, мутанты реестра,
согласованность PROCESS.md/docs/TESTING.md с кодом. Принято как в r1, без
повторной проверки — документ и материал: docs/reviews/CODE-REVIEW-699-r1.md,
SHA 709c5b8a38f4ac16f7ce18593ef0a40d672742cb. Дельта r2 этих файлов не
касается (см. git diff 709c5b8a..HEAD выше — только docs/DEVELOPMENT.md,
scripts/mutation-registry.mjs, test/ratchets.test.mjs).
Находки
Нет ни одной новой находки. M1 закрыт доказательно (тест + мутант, исполнением подтверждено, что тест умеет падать). Новых Medium/Low в дельте не обнаружено:
- Место вставки шага в чек-листе логически верное (после свежего
dist/, до публикации), формулировка не создаёт второго источника числа (шаг ссылается на#699, не вводит новых констант). - Мутант
release-runbook-forgets-tightenвставлен в середину реестра без видимых конфликтов id/anchor, гейт--checkзелёный.
Что не проверял
- Полный дифф-мутационный прогон (
mutation-gate.mjsс реальными патчами, 186 мутантов, 6 шардов) — не перегонял повторно: трек show, Validate уже зелёный на этом SHA, дельта r2 — три файла из документации/гейта, точечная проверка нового мутанта исполнением сделана вручную (см. выше). - Браузерные смоки — не выбирались и не гонялись: дельта не трогает
src/**и demo/,smoke-select.mjsне запускался за отсутствием диффа, который он мог бы сопоставить. golden:verify,pytest tests_backend,npm run invariants, performance-профили — не применимы к этому диффу (нет рендера, Python, геометрии; AC их не называют).- Не проверял исполнением, что реальный
release:prereleaseв GitHub Actions печатает--warn— унаследовано из r1 как непроверенное (эта часть дельтой r2 не затронута). - Типизацию, полный
npm testиnpm run buildс сверкой бандла — не перегонял: зелёный Validate на этом же SHA (23aca8a9, run 36490355420) подтверждает дешёвые гейты без повторного прогона.
Вердикт
M1 из r1 закрыт: шаг tighten в единственном каноническом release-runbook,
до публикации, зафиксирован тестом, который умеет падать, и новым мутантом
реестра. Новых находок нет. High: 0, Medium: 0 → зелёный, цикл не тратится.
Материал раунда
- Ветка:
issue/699-ratchet-bands, коммит23aca8a98714— ребейз его осиротит, и это нормально: ниже якоря, которые ребейз не меняет. - Дерево материала:
d7500b073db5a6a6c55130d61acfd14cd9f8c715git log --all --format='%H %T' | grep d7500b073db5 - Тело issue:
18b6f2dce7c2f914e9c4d61715360cb529fc34c87cbad12c2a646990fefcb724 - Вердикт конвейера:
green· High 0