mirror of
https://github.com/Matysh/houseplan-card
synced 2026-09-29 03:09:36 +00:00
docs: spec #510 r4 — proceed replaces only the conflict conjunct
Spec review r3: `proceed` is true on the reuse fast-path too, so it must replace the `rebase.conflict != 'true'` conjunct alone; the existing `reuse != 'true'` (#499), stage and decide conjuncts stay on every step that has them. The "single variable" claim is narrowed accordingly. Issue: #510 User-Visible: no
This commit is contained in:
@@ -66,10 +66,10 @@ Push-прогоны на том же SHA не считаются доказат
|
||||
|
||||
### 5.2. `process.yml`
|
||||
|
||||
Новый шаг «Validate с мутантами на материале» (`id: gate`) стоит **после `reuse` (#499) и шага «Конфликт с dev — вернуть автору без ревью»** и **перед** «Зелёные гейты на этом SHA» (#343): порядок в файле — `material` → `reuse` → возврат при конфликте → `gate` → возврат при красном → `validated` (ревью ТЗ r1, Medium 1: `reuse.outputs` должен быть уже вычислен). Условие шага — `steps.rebase.outputs.conflict != 'true'`; внутри: при `stage != code`, `reuse == true` или отсутствии ветки шаг пишет `proceed=true`, `result=skipped` и выходит; иначе вызывает `validate-gate.mjs` и пишет `result=green|red|missing`, `proceed=true|false` по его коду выхода (сам шаг всегда `exit 0`, чтобы дальнейшая логика меток отработала). Единственная переменная, по которой ветвятся последующие шаги, — `proceed` (`true` = green **или** skipped; `false` = red/missing); `result` — только для текста комментария (ревью ТЗ r2, Medium 1: skip-ветка не должна ни возвращать задачу, ни блокировать ревью). Далее:
|
||||
Новый шаг «Validate с мутантами на материале» (`id: gate`) стоит **после `reuse` (#499) и шага «Конфликт с dev — вернуть автору без ревью»** и **перед** «Зелёные гейты на этом SHA» (#343): порядок в файле — `material` → `reuse` → возврат при конфликте → `gate` → возврат при красном → `validated` (ревью ТЗ r1, Medium 1: `reuse.outputs` должен быть уже вычислен). Условие шага — `steps.rebase.outputs.conflict != 'true'`; внутри: при `stage != code`, `reuse == true` или отсутствии ветки шаг пишет `proceed=true`, `result=skipped` и выходит; иначе вызывает `validate-gate.mjs` и пишет `result=green|red|missing`, `proceed=true|false` по его коду выхода (сам шаг всегда `exit 0`, чтобы дальнейшая логика меток отработала). Гейт добавляет в условия последующих шагов ровно одну переменную — `proceed` (`true` = green **или** skipped; `false` = red/missing), и она **заменяет только конъюнкт `steps.rebase.outputs.conflict != 'true'`**; все прочие конъюнкты существующих условий (`steps.reuse.outputs.reuse != 'true'` у установки зависимостей, Chromium и `Review` — #499, модель на reuse-ветке не вызывается; `needs.guard.outputs.stage == 'code'` там, где он есть; `steps.decide.outputs.green == 'true'` у слияния) остаются как есть (ревью ТЗ r3, Medium 1). `result` — только для текста комментария (ревью ТЗ r2, Medium 1: skip-ветка не должна ни возвращать задачу, ни блокировать ревью). Далее:
|
||||
|
||||
- новый шаг «Validate красный — вернуть автору без ревью», условие `steps.rebase.outputs.conflict != 'true' && steps.gate.outputs.proceed != 'true'` (на skip-ветке `proceed == 'true'` — шаг не срабатывает): комментарий по образцу шага «Конфликт с dev» — что именно (red/missing), ссылка на прогон, что делать (починить, запушить, вернуть `S7`), «цикл ревью не израсходован»; метка `S7 → S6`; `exit 0`.
|
||||
- все последующие шаги ревью (`validated`, зависимости, Chromium, Claude, Review, публикация, решение, слияние, перестановка метки) получают условие `steps.gate.outputs.proceed == 'true'` вместо нынешнего `steps.rebase.outputs.conflict != 'true'` (при конфликте `gate` не выполняется, `proceed` пуст — условие ложно, как и раньше).
|
||||
- все последующие шаги ревью (`validated`, зависимости, Chromium, Claude, Review, публикация, решение, слияние, перестановка метки) получают `steps.gate.outputs.proceed == 'true'` на месте нынешнего конъюнкта `steps.rebase.outputs.conflict != 'true'`, остальные конъюнкты не трогаются: например, «Установить зависимости» — `steps.gate.outputs.proceed == 'true' && steps.reuse.outputs.reuse != 'true'`, `Review` — то же, «Слить ветку в dev» — по-прежнему `steps.decide.outputs.green == 'true'` (при конфликте `gate` не выполняется, `proceed` пуст — условие ложно, как и раньше; на reuse-ветке `proceed == 'true'`, но `reuse != 'true'` ложно — модель и зависимости по-прежнему не запускаются, тест #499 «вердикт прошлого захода применяется повторно: модель не вызывается» остаётся зелёным).
|
||||
- шаг `validated` (#343) остаётся, но при `proceed == 'true'` на этапе code всегда находит зелёный dispatch-прогон и пишет ссылку на него; ветка «зелёного нет» становится недостижимой на этапе code и остаётся для spec.
|
||||
- Шаг «Переставить метку» и «Позвать владельца» не должны считать gate-возврат падением: `if: always()`-логика проверяется тестом.
|
||||
|
||||
@@ -96,7 +96,7 @@ Push-прогоны на том же SHA не считаются доказат
|
||||
- `test/classify-changes.test.mjs`: таблица `mutantsRequested` (push без трейлера → false; push с `Release:` → true; dispatch full/mutants/ни одного; PR; schedule).
|
||||
- `test/validate-workflow.test.mjs`: вход `mutants` объявлен; `mutants_requested` выход и условие job; группа concurrency для dispatch отдельная.
|
||||
- `test/validate-gate.test.mjs` (новый, fake `gh`): найден зелёный dispatch → green без запуска; найден красный → red; идущий → ждёт; нет → запускает и ждёт появления; появился на другом SHA → missing; таймаут → red; push-прогон не считается.
|
||||
- `test/review-doc-guard.test.mjs`: шаг gate стоит после `material` **и после `reuse`** и до установки зависимостей; шаги ревью условны по `proceed`; возврат в `S6` при `proceed != true`; этап spec и reuse гейт не проходят.
|
||||
- `test/review-doc-guard.test.mjs`: шаг gate стоит после `material` **и после `reuse`** и до установки зависимостей; шаги ревью условны по `proceed`, при этом конъюнкт `reuse != 'true'` у зависимостей/Chromium/`Review` сохранён (тест #499 «модель не вызывается» остаётся); возврат в `S6` при `proceed != true`; этап spec и reuse гейт не проходят.
|
||||
- `test/validate-gate.test.mjs`: `provesMutants` — job исполнены и зелёные / нет job / skipped / одна красная; зелёный чужой dispatch со skipped-мутантами игнорируется, гейт запускает свой.
|
||||
- `test/merge-candidate.test.mjs`: dispatch после пуша кандидата, ожидание dispatch-прогона.
|
||||
- Мутанты реестра (`scripts/mutation-gate.mjs`, гарды — `node --test`): `mutants-run-on-every-push` (classify: push → true), `review-starts-on-red-validate` (gate: red → green), `merge-waits-push-run-without-mutants` (waitValidate игнорирует событие). Каждый — отрицательным прогоном штатным раннером.
|
||||
|
||||
Reference in New Issue
Block a user