mirror of
https://github.com/Matysh/houseplan-card
synced 2026-09-29 03:09:36 +00:00
test: объявленный Baseline-Reviewed прогон проверяется отдельно от вершины ветки
`test/release-gate.test.mjs` строил ожидания из живого состояния репозитория, а `localEvidence` читает `baselines.reviewedRun` из сообщения HEAD-коммита. Пока вершиной был обычный коммит, поле оставалось `null` и всё сходилось. Как только вершиной становился коммит приёмки эталонов, поле становилось непустым, и `evaluateCiProof` законно требовал объявленный прогон — которого заглушка `loadContext` не отдавала. Тест краснел на всей ветке, ради которой #573 и писалась, и вместе с ним краснел бы `dev` сразу после слияния такой ветки. Воспроизведено на `issue/594-form-kit-room@68bb7558`: 2776 pass / 1 fail, из-за чего конвейер ревью не запустился вовсе. Продуктовый код не менялся: контракт «объявленный прогон обязан существовать, быть завершённым, не отменённым и быть Validate» — ровно то, что задумано, и он намеренно не требует `success`, потому что приёмка эталонов по определению ссылается на прогон, где golden покраснел. Что изменено: - зелёный путь теста считается на evidence с `baselines.reviewedRun: null` и больше не зависит от того, каким коммитом оказалась вершина; - контракт объявленного прогона вынесен в отдельный тест и проверяется с трёх сторон: завершённый неотменённый Validate с `conclusion: 'failure'` — зелёно; прогона нет — отказ; прогон отменён — отказ; - мутант `declared-baseline-review-run-never-checked` обнуляет объявление и краснеет на новом тесте. Доказательство на фикстуре «вершина — приёмка эталонов»: старый тест 8 pass / 1 fail, новый 10 pass / 0 fail. Issue: #595 User-Visible: no
This commit is contained in:
@@ -9937,6 +9937,18 @@ const MUTANT_DEFINITIONS = [
|
||||
replace: ' const mismatch = evidenceMismatch(proof.evidence, proof.evidence);',
|
||||
}],
|
||||
},
|
||||
{
|
||||
id: 'declared-baseline-review-run-never-checked',
|
||||
guard: 'node --test --test-name-pattern="#595" test/release-gate.test.mjs',
|
||||
because: '#573/#595: коммит приёмки эталонов объявляет прогон, на кадры которого смотрели. '
|
||||
+ 'Если объявление не резолвится, трейлер Baseline-Reviewed становится честным словом: '
|
||||
+ 'сослаться можно на что угодно, включая отменённый или несуществующий прогон',
|
||||
patches: [{
|
||||
file: 'scripts/ci-proof.mjs',
|
||||
find: ' const declared = proof.evidence.baselines?.reviewedRun ?? null;',
|
||||
replace: ' const declared = null;',
|
||||
}],
|
||||
},
|
||||
{
|
||||
id: 'reused-marker-key-unchecked-against-candidate',
|
||||
guard: 'node --test --test-name-pattern="#573" test/ci-proof.test.mjs',
|
||||
|
||||
Reference in New Issue
Block a user