feat(process): a track:ask draft may be written during the spec review (#729)

On track:ask every spec review round is 10-45 minutes of waiting, and
rule #1 kept the author idle for all of it. Rule 10 (#738) judges a
class A commit by its author date, so code written in the
S4-spec-review epoch was always refused: nothing told a draft written
against the reviewed text from a violation. The owner allowed changing
rule #1 for this (decision 2026-10-01).

A draft commit carries `Spec-Draft: sha256:<issueBodyDigest(body)>`,
the hash the pipeline already writes as "Тело issue" into the review
document anchor. Rule 10 accepts a class A commit written in S4 only
when its S4 epoch (a repeated S4 does not restart it) was closed by
S5-ready, the track at the author date was ask, and the trailer equals
the body of the green, High 0 SPEC-REVIEW added inside that epoch, read
from the range head or origin/dev. The first failing check is the one
finding: trailer format, track, how the epoch ended, the missing
document with a `git fetch origin dev` hint, or both hashes and the
document name. A trailer on a commit written in an allowed epoch is a
warn. Without the document reader rule 10 is exactly #738; main always
passes one, and it reads git only when the range holds a draft.

The task packet tells S4 on ask that a local draft is allowed while the
branch stays closed, prints the trailer line, and in S5/S6 names the
green spec review, whether the body changed since, and the --report
check before push. SPEC-REVIEW documents are a separate input
(specDocs) from the branch and origin/dev, so the previous verdict and
the AC witness keep their source.

PROCESS.md gets §11.8 and the points that refer to it (§1, §2.4-2.6,
§3 item 1, §7.2, §9, §10.2 item 10, §12); AUTHOR.md, REVIEWER.md and
AGENTS.md follow, with three new key rules in process-digests. The
pre-push hook fixture copies the modules process-gate now imports.

Issue: #729
User-Visible: no
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_018qZfe7YS4rqEMKoVeS3GKd
This commit is contained in:
Claude
2026-10-01 11:47:01 +03:00
parent 7ff2b5aeaa
commit 0e44f8a69f
10 changed files with 882 additions and 34 deletions
+38 -4
View File
@@ -14,7 +14,9 @@
- **Изменение продуктового кода без issue запрещено.** Код меняется только
из `S5-ready` или дальше ([§1](../../PROCESS.md#1-основное-правило),
[§3 п.1–2](../../PROCESS.md#3-правила)).
[§3 п.1–2](../../PROCESS.md#3-правила)). Исключение — локальный черновик на
`track:ask` во время ревью ТЗ
([§11.8](../../PROCESS.md#118-черновик-кода-во-время-ревью-тз)).
- Классы: A — продукт (`src/**`, `custom_components/houseplan/**/*.py`,
манифесты, i18n); B — гейты и инструменты (`test/**`, `tests_backend/**`,
`demo/**`, `scripts/**`, `.github/**`, конфиги сборки, `package*.json`);
@@ -112,6 +114,34 @@
бюджет, сразу ставит `review-4`; исчерпание — решение владельца: разделить,
отклонить, арбитраж ([§4](../../PROCESS.md#4-лимит-циклов-ревью-4)).
## Черновик во время ревью ТЗ (`S4-spec-review`)
- Черновик — возможность, а не обязанность: только `track:ask`, только после
того, как ТЗ отправлено и стоит `S4-spec-review`; под `blocked` и `review-4`
не ведётся. Цена — код по непринятому тексту, который после жёлтого или
красного вердикта переделывается
([§11.8](../../PROCESS.md#118-черновик-кода-во-время-ревью-тз)).
- Один checkout, одна локальная ветка `issue/<NN>-<slug>`; до `S5` не пушится
ни ветка, ни коммиты; статус остаётся `S4`. Комментарий «Черновик:» по
шаблону, черновик занимает слот WIP
([§11.8](../../PROCESS.md#118-черновик-кода-во-время-ревью-тз),
[§7.2](../../PROCESS.md#72-шаблоны-комментариев),
[§2.6](../../PROCESS.md#26-в-разработке--реализация)).
- Каждый черновой коммит несёт ровно один трейлер `Spec-Draft: sha256:<хеш>` —
строку печатает пакет задачи в разделе «Черновик»
([§11.8](../../PROCESS.md#118-черновик-кода-во-время-ревью-тз)).
- Жёлтый или красный вердикт — черновик остановить: коммиты по прежнему тексту
гейт не примет, переписывать дату автора запрещено; новый черновик — в
следующей эпохе `S4` с новым хешем
([§11.8](../../PROCESS.md#118-черновик-кода-во-время-ревью-тз),
[§12](../../PROCESS.md#12-запрещено)).
- В ветку черновик попадает только после зелёного ревью ТЗ: `S6-in-progress`,
`git fetch`, ребейз на `origin/dev` (или на `origin/issue/<NN>-*`, если ветка
уже была; без force-push), проверка
`node scripts/process-gate.mjs --range origin/dev..HEAD --issues --report`,
push ([§11.8](../../PROCESS.md#118-черновик-кода-во-время-ревью-тз),
[§10.2](../../PROCESS.md#102-что-проверяет-process-gatemjs)).
## Реализация (`S6-in-progress`)
- Занятие: `Взял: <роль> · сессия <id> · ветка issue/NN-slug`; WIP — одна
@@ -236,9 +266,13 @@
## Запрещено
- Код без issue или из статуса раньше `S5-ready`; ТЗ после кода (кроме
хотфикса); ревью своей работы; пятый цикл ревью; issue вместо возврата на
правки ([§12](../../PROCESS.md#12-запрещено)).
- Код без issue или из статуса раньше `S5-ready` (кроме черновика
`track:ask` по §11.8); ТЗ после кода (кроме хотфикса); ревью своей работы;
пятый цикл ревью; issue вместо возврата на правки
([§12](../../PROCESS.md#12-запрещено)).
- Push черновика до `S5`; перенос черновика по устаревшему ТЗ коммитами с
переписанной датой автора ([§12](../../PROCESS.md#12-запрещено),
[§11.8](../../PROCESS.md#118-черновик-кода-во-время-ревью-тз)).
- Попутные правки «раз уж я здесь»; параллельные бэклоги в файлах;
force-push в `dev`; закрытие issue до выпуска беты
([§12](../../PROCESS.md#12-запрещено), [§3 п.17](../../PROCESS.md#3-правила)).
+3
View File
@@ -36,6 +36,9 @@
вынесенный владельцу, ревьюер снимает и решает по существу. Технический
спор автора и ревьюера решается вердиктом, а не владельцем
([§7.1](../../PROCESS.md#71-цепочка)).
- Черновик автора ревьюер ТЗ не читает и доводом не считает: судится тело
issue ([§2.4](../../PROCESS.md#24-тз-на-ревью),
[§11.8](../../PROCESS.md#118-черновик-кода-во-время-ревью-тз)).
## Код-ревью