From f3f12186f560222e6725f2189e08eacf336b1bf9 Mon Sep 17 00:00:00 2001 From: Danil Pismenny Date: Sun, 6 Sep 2026 11:42:20 +0300 Subject: [PATCH 1/4] docs: bound review convergence across delivery flows MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Процессы требовали проверки реализации и зелёного CI, но не определяли порядок между «реализация закончена» и «готово». Отсюда неоднозначности: достаточно ли одной проверки после исправлений, к одной ли редакции относятся verdict и CI, сколько раз допустимо повторять цикл и как отличить локальный дефект от ошибки в плане, design, брифе или маршрутизации. `flows/testing-policy.md` уже владеет таксономией проходов проверки, поэтому контракт сходимости добавлен туда как cross-flow правило: - ровно два исхода — сошлась или не сошлась; третьего не существует; - clean verdict и зелёный обязательный CI обязаны относиться к одной редакции; исправление после verdict аннулирует его; - бюджет по умолчанию — десять полных циклов на review pass; flow может задать более строгий предел, как пять итераций Plan Ready в Feature Flow; - исчерпание бюджета не разрешает принять работу и не создаёт Human Gate само по себе: причина классифицируется и работа возвращается владельцу фактов — коду, плану, design pack, брифу или routing record; - решение продолжить, остановиться или вернуться фиксируется в canonical carrier flow вместе с номером цикла, редакцией, verdict и классом причины. Feature, Small Change, Bug Fix и Refactoring теперь ссылаются на общий контракт вместо собственной формулировки «последний review cycle без открытых замечаний», которая не требовала ни одной редакции, ни разбора причины. Контракт механизм-нейтрален: он требует независимой проверки со структурированным verdict, но не выбирает инструмент — это предмет #120. Closes #121 Co-Authored-By: Claude Opus 5 Claude-Session: https://claude.ai/code/session_01RtxeRwhVf1y8zvxUtk6xrS --- template/memory-bank/flows/bug-fix.md | 2 +- template/memory-bank/flows/feature.md | 6 +- template/memory-bank/flows/refactoring.md | 2 +- template/memory-bank/flows/small-change.md | 2 +- template/memory-bank/flows/testing-policy.md | 67 +++++++++++++++++++- 5 files changed, 73 insertions(+), 6 deletions(-) diff --git a/template/memory-bank/flows/bug-fix.md b/template/memory-bank/flows/bug-fix.md index 48c6642..8a4233a 100644 --- a/template/memory-bank/flows/bug-fix.md +++ b/template/memory-bank/flows/bug-fix.md @@ -98,7 +98,7 @@ report → triage → reproduction → analysis → fix - подтверждённая root cause summary; - regression test или обоснованный альтернативный carrier; - результаты required tests; -- последний review cycle завершён без открытых замечаний; +- проверка сошлась по [`Review Convergence`](testing-policy.md#review-convergence): clean verdict и зелёный обязательный CI относятся к одной редакции кода; - все изменения закоммичены и отправлены в remote branch, required CI полностью зелёный. ### Terminal State diff --git a/template/memory-bank/flows/feature.md b/template/memory-bank/flows/feature.md index 7991e2c..7dd99f7 100644 --- a/template/memory-bank/flows/feature.md +++ b/template/memory-bank/flows/feature.md @@ -352,8 +352,10 @@ flowchart LR ### Upstream Ready → Plan Ready Plan Ready artifact-review convergence допускает не более пяти review-improve -итераций. Последняя итерация с исправлениями не считается clean verdict без -последующего re-review; исчерпание budget оставляет gate непройденным. Примени +итераций — более строгий предел, чем общий бюджет из +[`Review Convergence`](testing-policy.md#review-convergence). Последняя итерация +с исправлениями не считается clean verdict без последующего re-review; +исчерпание budget оставляет gate непройденным. Примени [`Structured Decision Protocol`](autonomy-boundaries.md#structured-decision-protocol), пересмотри hypothesis, upstream facts, plan и review scope; продолжай через обоснованный replan или `bounded_probe`. Human Gate нужен только при outcome diff --git a/template/memory-bank/flows/refactoring.md b/template/memory-bank/flows/refactoring.md index 773c9ca..468b510 100644 --- a/template/memory-bank/flows/refactoring.md +++ b/template/memory-bank/flows/refactoring.md @@ -85,7 +85,7 @@ task → baseline → characterization coverage → plan + checkpoints - validation profile decision и evidence его minimum contract; - результаты regression checks по checkpoints; - before/after summary либо research artifact с источниками и выводом; -- последний review cycle завершён без открытых замечаний; +- проверка сошлась по [`Review Convergence`](testing-policy.md#review-convergence): clean verdict и зелёный обязательный CI относятся к одной редакции кода; - все изменения закоммичены и отправлены в remote branch, required CI полностью зелёный для production change. ### Terminal State diff --git a/template/memory-bank/flows/small-change.md b/template/memory-bank/flows/small-change.md index 7b84038..4bcca9a 100644 --- a/template/memory-bank/flows/small-change.md +++ b/template/memory-bank/flows/small-change.md @@ -104,7 +104,7 @@ Acceptance из issue/task выполнен одним локальным change - validation profile decision и evidence его minimum contract; - изменённый код и automated coverage для changed behavior; - результаты проверок из `Verify`; -- последний review cycle завершён без открытых замечаний; +- проверка сошлась по [`Review Convergence`](testing-policy.md#review-convergence): clean verdict и зелёный обязательный CI относятся к одной редакции кода; - все изменения закоммичены и отправлены в remote branch, required CI полностью зелёный. ### Terminal State diff --git a/template/memory-bank/flows/testing-policy.md b/template/memory-bank/flows/testing-policy.md index 8a6eebe..630559e 100644 --- a/template/memory-bank/flows/testing-policy.md +++ b/template/memory-bank/flows/testing-policy.md @@ -18,6 +18,7 @@ canonical_for: - manual_only_verification_exceptions - simplify_review_discipline - verification_context_separation + - review_convergence_contract - bdd_automation_policy must_not_define: - feature_acceptance_criteria @@ -72,7 +73,7 @@ Canonical lifecycle gates живут в [feature.md](feature.md): - к `Problem Ready` `brief.md` уже фиксирует validation profile decision и test case inventory; - к `Solution Ready` весь required design pack готов по relation, ownership, publication/lifecycle и consistency rules из Feature Flow; - к `Plan Ready` `implementation-plan.md` содержит `Test Strategy` с planned automated coverage и manual-only gaps; -- к `Done` required tests добавлены, локальные команды зелёные и CI не противоречит локальному verify. +- к `Done` required tests добавлены, локальные команды зелёные, CI не противоречит локальному verify, а проверка сошлась по [`Review Convergence`](#review-convergence). ## Что Считается Sufficient Coverage @@ -113,6 +114,70 @@ Artifact review и implementation review имеют разные объекты Artifact review не является доказательством качества реализации, а implementation review не исправляет задним числом непройденный artifact gate. Для compact feature packages проходы допустимы в одной сессии, если их объекты, verdicts и evidence зафиксированы раздельно; обязательный review или simplify review не пропускается. +## Review Convergence + +Проверка реализации завершается ровно одним из двух состояний. Третьего — +«вроде замечания закрыли» — не существует. + +1. **Сошлась.** Независимая проверка дала clean verdict, блокирующие замечания + устранены, обязательный CI зелёный. +2. **Не сошлась.** Бюджет циклов исчерпан. Работа не закрывается, причина + классифицируется, задача возвращается владельцу фактов на соответствующий + этап. + +Контракт механизм-нейтрален: он требует независимой проверки со структурированным +verdict, но не выбирает инструмент, команду или оркестратор. + +### Одна редакция + +Положительный verdict и зелёный обязательный CI обязаны относиться к **одной и +той же редакции кода**. Любое исправление после verdict создаёт новую редакцию и +аннулирует его: последний цикл с изменениями не является clean verdict без +повторной проверки. Verdict, подтверждающий одну редакцию, и CI, подтверждающий +другую, вместе не доказывают ничего. + +### Бюджет + +По умолчанию допускается не более **десяти** полных циклов «проверка — +исправление» на один review pass. Flow может задать более строгий предел для +своего gate: например, Plan Ready artifact review в +[`feature.md`](feature.md) ограничен пятью итерациями. + +Исчерпание бюджета не разрешает принять работу, проигнорировать замечания или +автоматически потребовать решение человека. Оно означает одно: цикл перестал +сходиться, и вместо одиннадцатой попытки нужен разбор причины. + +### Классификация причины + +Повторяющиеся замечания часто указывают не на код, а на документ выше по потоку. +Отнеси причину к одному классу и вернись к его владельцу: + +| Класс причины | Владелец фактов | Куда возвращаемся | +| --- | --- | --- | +| Локальный дефект реализации | код | тот же execution step | +| Ошибка последовательности или охвата работ | `implementation-plan.md` или execution-запись flow | Plan Ready | +| Ошибка выбранного решения или контрактов | design pack либо ADR | Solution Ready | +| Ошибка требований, scope или acceptance | `brief.md` или эквивалентный problem-owner | Problem Ready | +| Неверно выбран сам процесс | routing record | [`Task Routing`](routing.md) | + +Возврат наверх не отменяет уже пройденные проверки других объектов: изменённый +артефакт проходит свой gate заново по обычным правилам. + +### След + +Решение продолжить, остановиться или вернуться назад фиксируется в canonical +carrier выбранного flow — вместе с номером цикла, проверенной редакцией, verdict +и классом причины. Без этого следа невозможно отличить сошедшуюся проверку от +брошенной. + +Исчерпание бюджета само по себе не является Human Gate. Примени +[`Structured Decision Protocol`](autonomy-boundaries.md#structured-decision-protocol): +эскалация нужна только при outcome `escalate` — когда разбор не дал bounded +продолжения либо вскрыл границу полномочий, ценностного выбора или риска. + +Контракт не ослабляет выбранный [`validation profile`](validation-profiles.md), +обязательные approvals и CI: они остаются в силе на каждом цикле. + ## Project Execution Layer Как именно исполняется эта policy в конкретном репозитории — framework, тестовые данные, CI jobs, размещение тестов и helper patterns — задаёт [`../engineering/testing-conventions.md`](../engineering/testing-conventions.md), а canonical локальные команды — [`../ops/development.md`](../ops/development.md). Project-специфичный слой может усиливать требования этой policy, но не может их ослаблять. From 0ea10af93afb471f1aa908c2e136c66d0dd17b16 Mon Sep 17 00:00:00 2001 From: Danil Pismenny Date: Sun, 6 Sep 2026 11:50:35 +0300 Subject: [PATCH 2/4] docs: rewrite the convergence contract against the full criteria MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Ревью показало, что первая редакция была спроектирована по частично прочитанному issue: я пропустил таблицу из семи классов причин, требования к границе цикла, исключение нестабильного CI и прямой запрет смешивать контракт с Plan Ready. - Контракт явно ограничен проверкой после реализации; связь с Plan Ready снята, вместе с дублем константы «пять итераций». Artifact review остаётся отдельным объектом по Verification Context Separation. - Граница цикла определена: `review → исправления → повторный review`, началом служит verdict с блокирующими замечаниями. Редакция — commit SHA. Без этого ни бюджет, ни правило одной редакции нельзя было проверить по следу. - Бюджет считается на delivery-единицу, а не на каждый проход проверки: пять проходов из Verification Context Separation давали бы 50 циклов вместо десяти. - Повтор нестабильного или недоступного CI без изменения кода циклом не считается и фиксируется как внешняя причина. - Таблица причин приведена к issue, включая недостающий седьмой класс — внешнюю блокировку. Без него десять падений на недоступной инфраструктуре пришлось бы классифицировать как дефект реализации и вернуть в тот же цикл. - Возврат при дефекте реализации — пересоставить ограниченный план исправления, а не войти в тот же цикл заново; новый лимит нельзя начать, пока причина не разобрана и владелец фактов не обновлён. - Правые ячейки называют владельца фактов, а не gate Feature Flow: у Small Change, Bug Fix и Refactoring нет Problem/Solution/Plan Ready. - Глубина самой проверки отдана validation profile: контракт не добавляет неавторского reviewer там, где профиль требует лишь обычный review. - Done gate Feature Flow дополнен в самом feature.md — в первой редакции условие стояло только в testing-policy.md, который на feature.md и ссылается. - Required Evidence в Refactoring Flow больше не требует зелёного CI от research refactoring, у которого нет production change. - Incident Flow подключён для repository changes: тот же hotfix через Bug Fix и через Incident должен закрываться одинаково. Co-Authored-By: Claude Opus 5 Claude-Session: https://claude.ai/code/session_01RtxeRwhVf1y8zvxUtk6xrS --- template/memory-bank/flows/feature.md | 10 +- template/memory-bank/flows/incident.md | 2 +- template/memory-bank/flows/refactoring.md | 2 +- template/memory-bank/flows/testing-policy.md | 106 +++++++++++-------- 4 files changed, 71 insertions(+), 49 deletions(-) diff --git a/template/memory-bank/flows/feature.md b/template/memory-bank/flows/feature.md index 7dd99f7..2971925 100644 --- a/template/memory-bank/flows/feature.md +++ b/template/memory-bank/flows/feature.md @@ -352,10 +352,10 @@ flowchart LR ### Upstream Ready → Plan Ready Plan Ready artifact-review convergence допускает не более пяти review-improve -итераций — более строгий предел, чем общий бюджет из -[`Review Convergence`](testing-policy.md#review-convergence). Последняя итерация -с исправлениями не считается clean verdict без последующего re-review; -исчерпание budget оставляет gate непройденным. Примени +итераций. Это artifact review до gate, а не проверка реализации: контракт +[`Review Convergence`](testing-policy.md#review-convergence) к нему не +применяется. Последняя итерация с исправлениями не считается clean verdict без +последующего re-review; исчерпание budget оставляет gate непройденным. Примени [`Structured Decision Protocol`](autonomy-boundaries.md#structured-decision-protocol), пересмотри hypothesis, upstream facts, plan и review scope; продолжай через обоснованный replan или `bounded_probe`. Human Gate нужен только при outcome @@ -423,7 +423,7 @@ Plan Ready artifact-review convergence допускает не более пят - validation profile decision и evidence его minimum contract; - выполненные `CHK-*` и конкретные carriers для `EVID-*`; - automated coverage, required local/CI results и approval refs для manual-only gaps; -- Plan Ready artifact review и required implementation/code review имеют отдельные clean verdicts по своим reviewed revisions; +- Plan Ready artifact review и required implementation/code review имеют отдельные clean verdicts по своим reviewed revisions; проверка реализации сошлась по [`Review Convergence`](testing-policy.md#review-convergence), то есть её clean verdict и зелёный обязательный CI относятся к одной редакции кода; - все изменения закоммичены и отправлены в remote branch, required CI полностью зелёный; - обновлённый `UC-*`, когда изменился устойчивый project-level scenario. diff --git a/template/memory-bank/flows/incident.md b/template/memory-bank/flows/incident.md index c0cef15..2e37575 100644 --- a/template/memory-bank/flows/incident.md +++ b/template/memory-bank/flows/incident.md @@ -77,7 +77,7 @@ Operational impact прекращён, recovery подтверждён набл - recovery signals и проверка remediation; - RCA с разделением causes, contributing factors и hypotheses; - принятый человеком PIR и отдельные references для prevention items; -- последний review cycle для PIR и repository changes завершён без открытых замечаний; +- для repository changes проверка сошлась по [`Review Convergence`](testing-policy.md#review-convergence); последний review cycle для PIR завершён без открытых замечаний; - все repository changes закоммичены и отправлены в remote branch, required CI полностью зелёный. ### Terminal State diff --git a/template/memory-bank/flows/refactoring.md b/template/memory-bank/flows/refactoring.md index 468b510..775f011 100644 --- a/template/memory-bank/flows/refactoring.md +++ b/template/memory-bank/flows/refactoring.md @@ -85,7 +85,7 @@ task → baseline → characterization coverage → plan + checkpoints - validation profile decision и evidence его minimum contract; - результаты regression checks по checkpoints; - before/after summary либо research artifact с источниками и выводом; -- проверка сошлась по [`Review Convergence`](testing-policy.md#review-convergence): clean verdict и зелёный обязательный CI относятся к одной редакции кода; +- проверка сошлась по [`Review Convergence`](testing-policy.md#review-convergence); для production change это означает, что clean verdict и зелёный обязательный CI относятся к одной редакции кода; - все изменения закоммичены и отправлены в remote branch, required CI полностью зелёный для production change. ### Terminal State diff --git a/template/memory-bank/flows/testing-policy.md b/template/memory-bank/flows/testing-policy.md index 630559e..e39d8d1 100644 --- a/template/memory-bank/flows/testing-policy.md +++ b/template/memory-bank/flows/testing-policy.md @@ -116,67 +116,89 @@ Artifact review не является доказательством качес ## Review Convergence -Проверка реализации завершается ровно одним из двух состояний. Третьего — -«вроде замечания закрыли» — не существует. +Контракт описывает проверку **после реализации** и доводит её ровно до одного из +двух состояний. Третьего — «вроде замечания закрыли» — не существует. -1. **Сошлась.** Независимая проверка дала clean verdict, блокирующие замечания - устранены, обязательный CI зелёный. +1. **Сошлась.** Review дал clean verdict, блокирующие замечания устранены, + обязательный CI зелёный. 2. **Не сошлась.** Бюджет циклов исчерпан. Работа не закрывается, причина - классифицируется, задача возвращается владельцу фактов на соответствующий - этап. + классифицируется, работа возвращается владельцу исходных фактов. -Контракт механизм-нейтрален: он требует независимой проверки со структурированным -verdict, но не выбирает инструмент, команду или оркестратор. +Контракт не относится к artifact review до lifecycle gate — в частности к +Plan Ready, у которого свой бюджет и свои объекты проверки; их разделение +описано в [`Verification Context Separation`](#verification-context-separation). +Контракт механизм-нейтрален: он не выбирает инструмент проверки, команду или +оркестратор. + +Глубина самой проверки принадлежит выбранному +[`validation profile`](validation-profiles.md): где профиль требует лишь обычный +review, контракт не добавляет отдельного неавторского reviewer, а где требует +separate non-authoring review — не отменяет его. ### Одна редакция -Положительный verdict и зелёный обязательный CI обязаны относиться к **одной и -той же редакции кода**. Любое исправление после verdict создаёт новую редакцию и -аннулирует его: последний цикл с изменениями не является clean verdict без -повторной проверки. Verdict, подтверждающий одну редакцию, и CI, подтверждающий -другую, вместе не доказывают ничего. +Clean verdict и зелёный обязательный CI обязаны относиться к **одной редакции +кода** — одному commit SHA. Verdict по одной редакции и CI по другой вместе не +доказывают ничего. + +Любое изменение кода после verdict создаёт новую редакцию и аннулирует его: +последний цикл с исправлениями не является clean verdict без повторной проверки. +До выполнения этих условий работа не переходит в Done. + +### Бюджет и граница цикла + +Один цикл — это `review → исправления → повторный review`. Он начинается +verdict-ом с блокирующими замечаниями и заканчивается следующим verdict-ом, +сколько бы коммитов ни содержали исправления. Чистый re-review без изменений +циклом не является. -### Бюджет +По умолчанию на delivery-единицу допускается не более **десяти** циклов. Бюджет +общий, а не отдельный для каждого прохода проверки. -По умолчанию допускается не более **десяти** полных циклов «проверка — -исправление» на один review pass. Flow может задать более строгий предел для -своего gate: например, Plan Ready artifact review в -[`feature.md`](feature.md) ограничен пятью итерациями. +Повторный запуск нестабильной или недоступной проверки CI **без изменения кода** +циклом не считается: редакция та же, исправления не было. Такой повтор +фиксируется отдельно как внешняя причина. Исчерпание бюджета не разрешает принять работу, проигнорировать замечания или -автоматически потребовать решение человека. Оно означает одно: цикл перестал -сходиться, и вместо одиннадцатой попытки нужен разбор причины. +автоматически потребовать решение человека. Нельзя и начать новый лимит: пока +причина не разобрана, а владелец исходных фактов не обновлён, счёт продолжается. -### Классификация причины +### Разбор при несходимости -Повторяющиеся замечания часто указывают не на код, а на документ выше по потоку. -Отнеси причину к одному классу и вернись к его владельцу: +После исчерпания бюджета зафиксируй на наблюдаемых данных: какие замечания +повторялись, какие исправления предпринимались и к чему привели, какие локальные +проверки и CI остаются красными, локальна ли причина или лежит на более раннем +этапе. -| Класс причины | Владелец фактов | Куда возвращаемся | -| --- | --- | --- | -| Локальный дефект реализации | код | тот же execution step | -| Ошибка последовательности или охвата работ | `implementation-plan.md` или execution-запись flow | Plan Ready | -| Ошибка выбранного решения или контрактов | design pack либо ADR | Solution Ready | -| Ошибка требований, scope или acceptance | `brief.md` или эквивалентный problem-owner | Problem Ready | -| Неверно выбран сам процесс | routing record | [`Task Routing`](routing.md) | +Затем отнеси причину к одному классу и верни работу его владельцу: -Возврат наверх не отменяет уже пройденные проверки других объектов: изменённый -артефакт проходит свой gate заново по обычным правилам. +| Причина | Куда вернуть работу | +| --- | --- | +| Дефект реализации или необоснованная сложность | Пересоставить ограниченный план исправления реализации | +| Недостаточное изучение кода или ошибочная последовательность исполнения | Этап планирования исполнения выбранного flow (в Feature Flow — Plan Ready) | +| Пробел или противоречие в решении, контракте, инварианте, failure handling или release rules | Владелец design pack либо ADR (в Feature Flow — Solution Ready) | +| Пробел или противоречие в границах, требовании, acceptance criterion или составе evidence | Канонический problem-owner: `brief.md`, bug report, refactoring task (в Feature Flow — Problem Ready) | +| Недостаточно определены проблема, результат или границы | Повторить брифование или первичный разбор | +| Неверно определён тип задачи или её объём | Повторить [`Task Routing`](routing.md); при необходимости выбрать Research, Feature или Epic Flow | +| Внешняя блокировка, недоступная инфраструктура или нестабильный CI без причины в коде | Зафиксировать ожидание или блокировку с evidence, не меняя исходные факты без основания | + +Flow без именованных gates возвращает работу к соответствующему этапу своего +lifecycle: правая колонка называет владельца фактов, а не gate конкретного flow. + +После изменения исходного владельца все зависящие от него документы и проверки +проходят заново. ### След -Решение продолжить, остановиться или вернуться назад фиксируется в canonical -carrier выбранного flow — вместе с номером цикла, проверенной редакцией, verdict -и классом причины. Без этого следа невозможно отличить сошедшуюся проверку от -брошенной. +В canonical carrier выбранного flow — том же, который владеет routing record и +validation profile decision, — фиксируются: номер цикла, проверенная редакция, +verdict, класс причины и решение продолжить, остановиться или вернуться назад. +Без этого следа нельзя отличить сошедшуюся проверку от брошенной. Исчерпание бюджета само по себе не является Human Gate. Примени -[`Structured Decision Protocol`](autonomy-boundaries.md#structured-decision-protocol): -эскалация нужна только при outcome `escalate` — когда разбор не дал bounded -продолжения либо вскрыл границу полномочий, ценностного выбора или риска. - -Контракт не ослабляет выбранный [`validation profile`](validation-profiles.md), -обязательные approvals и CI: они остаются в силе на каждом цикле. +[`Structured Decision Protocol`](autonomy-boundaries.md#structured-decision-protocol) +и записывай решение в его канонической форме; эскалация нужна только при outcome +`escalate` либо при уже действующем обязательном approval. ## Project Execution Layer From 29f041c1841cd3e1c1f3675bc3f432f8ba1f3f45 Mon Sep 17 00:00:00 2001 From: Danil Pismenny Date: Sun, 6 Sep 2026 11:59:35 +0300 Subject: [PATCH 3/4] docs: close the second review round on review convergence MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Самое важное — определение цикла было дырявым. Он начинался «verdict-ом с блокирующими замечаниями», поэтому петля «чистый verdict → красный CI по коду → правка → снова чистый verdict → снова красный CI» не расходовала бюджет вовсе: ни один verdict в ней замечаний не содержит. Это ровно та бесконечная петля, ради закрытия которой issue и существует. Теперь цикл считается по любой несошедшейся проверке — verdict с замечаниями либо красный обязательный CI. - След имеет одного владельца: canonical owner validation profile decision. У Feature Flow routing record и profile decision лежат в разных документах, и прежняя формулировка «тот же carrier» давала записи два законных места. Добавлена минимальная форма записи. - Incident Flow отключён от контракта: `validation-profiles.md` не назначает ему profile, поэтому два пункта контракта — глубина проверки и носитель следа — не имели бы референта. Permanent remediation получает и profile, и контракт после отдельного Task Routing. - Контракт добавлен в сами чек-листы gate, а не только в Required Evidence: терминальное состояние flow определяется через «все gates выполнены», и агент работает по чек-листу. - Research refactoring полностью выведен из-под контракта: у него нет production change, а контракт объявляет себя проверкой после реализации. - Возврат при дефекте реализации — ограничить объём исправления, а не «пересоставить план»: в Small Change план сам по себе является триггером rerouting. - Для flow без нужного этапа возврат ведёт к повторному Task Routing. - `derived_from` дополнен autonomy-boundaries.md и routing.md, откуда контракт берёт нормативное содержание. - Терминальное состояние названо как `Done`, `Resolved` или эквивалент: Bug Fix и Incident не заканчиваются в `Done`. Co-Authored-By: Claude Opus 5 Claude-Session: https://claude.ai/code/session_01RtxeRwhVf1y8zvxUtk6xrS --- template/memory-bank/flows/bug-fix.md | 1 + template/memory-bank/flows/feature.md | 1 + template/memory-bank/flows/incident.md | 2 +- template/memory-bank/flows/refactoring.md | 3 +- template/memory-bank/flows/small-change.md | 1 + template/memory-bank/flows/testing-policy.md | 56 +++++++++++++++----- 6 files changed, 49 insertions(+), 15 deletions(-) diff --git a/template/memory-bank/flows/bug-fix.md b/template/memory-bank/flows/bug-fix.md index 8a4233a..18acbba 100644 --- a/template/memory-bank/flows/bug-fix.md +++ b/template/memory-bank/flows/bug-fix.md @@ -82,6 +82,7 @@ report → triage → reproduction → analysis → fix - [ ] simplify review выполнен - [ ] PR содержит ссылку на report, root cause summary и evidence - [ ] required local tests и CI зелёные +- [ ] проверка реализации сошлась по [`Review Convergence`](testing-policy.md#review-convergence): clean verdict и зелёный обязательный CI относятся к одной редакции кода, а след цикла записан Если analysis показывает, что observed behavior соответствует текущему contract, а требуется изменить expected behavior, это не bug fix: повтори Task Routing и выбери `Small Change` или Feature Flow. diff --git a/template/memory-bank/flows/feature.md b/template/memory-bank/flows/feature.md index 2971925..36b90bd 100644 --- a/template/memory-bank/flows/feature.md +++ b/template/memory-bank/flows/feature.md @@ -401,6 +401,7 @@ Plan Ready artifact-review convergence допускает не более пят - [ ] minimum validation/evidence contract выбранного profile закрыт concrete evidence - [ ] каждый manual-only gap явно approved человеком (approval ref в `AG-*`) - [ ] required implementation/code review проверил delivered repository diff против active `brief.md`, полного optional design pack, referenced finalized external dependencies и execution plan; его verdict/evidence не подменяются Plan Ready artifact review +- [ ] проверка реализации сошлась по [`Review Convergence`](testing-policy.md#review-convergence): clean verdict и зелёный обязательный CI относятся к одной редакции кода, а след цикла записан - [ ] simplify review выполнен: код минимально сложен или complexity обоснована ссылкой на `CON-*`, `FM-*`, `SD-*` или accepted ADR - [ ] если feature добавляет новый stable flow или materially changes существующий project-level scenario, соответствующий `UC-*` создан или обновлен и зарегистрирован в `memory-bank/use-cases/README.md` - [ ] `brief.md` → `delivery_status: done` diff --git a/template/memory-bank/flows/incident.md b/template/memory-bank/flows/incident.md index 2e37575..c0cef15 100644 --- a/template/memory-bank/flows/incident.md +++ b/template/memory-bank/flows/incident.md @@ -77,7 +77,7 @@ Operational impact прекращён, recovery подтверждён набл - recovery signals и проверка remediation; - RCA с разделением causes, contributing factors и hypotheses; - принятый человеком PIR и отдельные references для prevention items; -- для repository changes проверка сошлась по [`Review Convergence`](testing-policy.md#review-convergence); последний review cycle для PIR завершён без открытых замечаний; +- последний review cycle для PIR и repository changes завершён без открытых замечаний; - все repository changes закоммичены и отправлены в remote branch, required CI полностью зелёный. ### Terminal State diff --git a/template/memory-bank/flows/refactoring.md b/template/memory-bank/flows/refactoring.md index 775f011..9df5ca6 100644 --- a/template/memory-bank/flows/refactoring.md +++ b/template/memory-bank/flows/refactoring.md @@ -72,6 +72,7 @@ task → baseline → characterization coverage → plan + checkpoints - [ ] simplify review подтверждает уменьшение или обоснование complexity - [ ] rollback или остановка на последнем checkpoint понятны - [ ] PR содержит before/after structure summary и evidence +- [ ] для production change проверка реализации сошлась по [`Review Convergence`](testing-policy.md#review-convergence): clean verdict и зелёный обязательный CI относятся к одной редакции кода, а след цикла записан ## Outcome / Exit Contract @@ -85,7 +86,7 @@ task → baseline → characterization coverage → plan + checkpoints - validation profile decision и evidence его minimum contract; - результаты regression checks по checkpoints; - before/after summary либо research artifact с источниками и выводом; -- проверка сошлась по [`Review Convergence`](testing-policy.md#review-convergence); для production change это означает, что clean verdict и зелёный обязательный CI относятся к одной редакции кода; +- для production change проверка сошлась по [`Review Convergence`](testing-policy.md#review-convergence): clean verdict и зелёный обязательный CI относятся к одной редакции кода; - все изменения закоммичены и отправлены в remote branch, required CI полностью зелёный для production change. ### Terminal State diff --git a/template/memory-bank/flows/small-change.md b/template/memory-bank/flows/small-change.md index 4bcca9a..61a3c67 100644 --- a/template/memory-bank/flows/small-change.md +++ b/template/memory-bank/flows/small-change.md @@ -85,6 +85,7 @@ issue/task → routing record → implementation → automated checks - [ ] simplify review выполнен отдельным проходом - [ ] PR ссылается на issue/task и содержит concrete evidence - [ ] required CI зелёный до merge +- [ ] проверка реализации сошлась по [`Review Convergence`](testing-policy.md#review-convergence): clean verdict и зелёный обязательный CI относятся к одной редакции кода, а след цикла записан ## Delivery Trace diff --git a/template/memory-bank/flows/testing-policy.md b/template/memory-bank/flows/testing-policy.md index e39d8d1..b67db67 100644 --- a/template/memory-bank/flows/testing-policy.md +++ b/template/memory-bank/flows/testing-policy.md @@ -5,9 +5,11 @@ doc_function: canonical purpose: "Описывает testing policy delivery-процесса: обязательность test case design, требования к automated regression coverage и допустимые manual-only gaps." derived_from: - ../dna/governance.md + - autonomy-boundaries.md - behavior-specification.md - feature.md - feature-requirements.md + - routing.md - validation-profiles.md status: active canonical_for: @@ -124,9 +126,13 @@ Artifact review не является доказательством качес 2. **Не сошлась.** Бюджет циклов исчерпан. Работа не закрывается, причина классифицируется, работа возвращается владельцу исходных фактов. -Контракт не относится к artifact review до lifecycle gate — в частности к -Plan Ready, у которого свой бюджет и свои объекты проверки; их разделение -описано в [`Verification Context Separation`](#verification-context-separation). +Контракт применяется к Feature, Small Change, Bug Fix и Refactoring Flow. Он не +относится к artifact review до lifecycle gate — в частности к Plan Ready, у +которого свой бюджет и свои объекты проверки; их разделение описано в +[`Verification Context Separation`](#verification-context-separation). Incident +Flow закрывает containment по своим правилам: profile ему не назначается, а +permanent remediation получает и profile, и этот контракт после отдельного +[`Task Routing`](routing.md). Контракт механизм-нейтрален: он не выбирает инструмент проверки, команду или оркестратор. @@ -143,15 +149,20 @@ Clean verdict и зелёный обязательный CI обязаны от Любое изменение кода после verdict создаёт новую редакцию и аннулирует его: последний цикл с исправлениями не является clean verdict без повторной проверки. -До выполнения этих условий работа не переходит в Done. +До выполнения этих условий работа не переходит в конечное состояние выбранного flow — `Done`, `Resolved` или эквивалентное. ### Бюджет и граница цикла -Один цикл — это `review → исправления → повторный review`. Он начинается -verdict-ом с блокирующими замечаниями и заканчивается следующим verdict-ом, -сколько бы коммитов ни содержали исправления. Чистый re-review без изменений +Один цикл — это `несошедшаяся проверка → исправления → повторная проверка`. +Несошедшейся считается любая: verdict с блокирующими замечаниями **или** красный +обязательный CI по причине в коде. Цикл заканчивается следующей проверкой, +сколько бы коммитов ни содержали исправления. Проверка без изменения редакции циклом не является. +Считать только замечания reviewer недостаточно: петля «чистый verdict → красный +CI → правка → снова чистый verdict → снова красный CI» не содержит ни одного +verdict-а с замечаниями и без этого правила не расходовала бы бюджет вовсе. + По умолчанию на delivery-единицу допускается не более **десяти** циклов. Бюджет общий, а не отдельный для каждого прохода проверки. @@ -174,7 +185,7 @@ verdict-ом с блокирующими замечаниями и заканч | Причина | Куда вернуть работу | | --- | --- | -| Дефект реализации или необоснованная сложность | Пересоставить ограниченный план исправления реализации | +| Дефект реализации или необоснованная сложность | Ограничить объём исправления и повторить его в рамках текущего flow | | Недостаточное изучение кода или ошибочная последовательность исполнения | Этап планирования исполнения выбранного flow (в Feature Flow — Plan Ready) | | Пробел или противоречие в решении, контракте, инварианте, failure handling или release rules | Владелец design pack либо ADR (в Feature Flow — Solution Ready) | | Пробел или противоречие в границах, требовании, acceptance criterion или составе evidence | Канонический problem-owner: `brief.md`, bug report, refactoring task (в Feature Flow — Problem Ready) | @@ -182,17 +193,36 @@ verdict-ом с блокирующими замечаниями и заканч | Неверно определён тип задачи или её объём | Повторить [`Task Routing`](routing.md); при необходимости выбрать Research, Feature или Epic Flow | | Внешняя блокировка, недоступная инфраструктура или нестабильный CI без причины в коде | Зафиксировать ожидание или блокировку с evidence, не меняя исходные факты без основания | -Flow без именованных gates возвращает работу к соответствующему этапу своего -lifecycle: правая колонка называет владельца фактов, а не gate конкретного flow. +Правая колонка называет владельца фактов и действие; gates в скобках относятся +к Feature Flow. Flow без такого этапа возвращает работу к соответствующему месту +своего lifecycle, а если этапа нет вовсе — повторяет +[`Task Routing`](routing.md). Так, Small Change Flow по своим entry predicates +не имеет ни design, ни execution plan: причина, требующая их, там же и является +триггером rerouting. После изменения исходного владельца все зависящие от него документы и проверки проходят заново. ### След -В canonical carrier выбранного flow — том же, который владеет routing record и -validation profile decision, — фиксируются: номер цикла, проверенная редакция, -verdict, класс причины и решение продолжить, остановиться или вернуться назад. +След фиксируется там же, где живёт validation profile decision этого flow — +в canonical owner из таблицы +[`Canonical Decision Owner By Flow`](validation-profiles.md#canonical-decision-owner-by-flow). +Один носитель, а не любой подходящий: routing record и profile decision у Feature +Flow лежат в разных документах, и без этого правила у записи было бы два +одинаково законных места. + +Минимальная запись: + +```text +Review convergence: converged | not-converged +Cycle: <номер> / <бюджет> +Reviewed revision: +Verdict: +Cause class: <строка таблицы выше; только при not-converged> +Decision: continue | stop | return to <владелец фактов> +``` + Без этого следа нельзя отличить сошедшуюся проверку от брошенной. Исчерпание бюджета само по себе не является Human Gate. Примени From e3de010aada6fd3855bdb6393ed69c3059709654 Mon Sep 17 00:00:00 2001 From: Danil Pismenny Date: Sun, 6 Sep 2026 12:22:14 +0300 Subject: [PATCH 4/4] docs: cut the convergence contract to what it must say MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Ревью на соразмерность: 114 добавленных строк, из них на счастливом пути работают 18. Контракт занимал 48% файла, а файл входит в priming всех четырёх flow — 800 слов протокола несходимости читались на каждой задаче, включая те, где проверка сходится с первого раза. Раздел сокращён со 114 строк до 53 без потери критериев приёмки #121. Упрощение вскрыло два дефекта, которые два предыдущих раунда не увидели: - След предписывалось писать в canonical owner profile decision. Для Feature Flow это `brief.md` в репозитории: запись следа создавала новый commit, а значит новую revision, на которой verdict уже недействителен — неразрешимая петля, порождённая правилом об одной редакции. Теперь след пишется вне проверяемой revision: issue, PR или routing record. Заодно execution-факты перестали ложиться в problem-space документ. - Строка «дефект реализации → повторить в текущем flow» не сочеталась с запретом открывать новый лимит без обновления владельца фактов: состояние было не определено, то есть цикл мог идти вечно за пределами бюджета. Разрешено одно продолжение с суженным объёмом, дальше — SDP. Выброшено: след на счастливом пути вместе с полями, которые там не заполняются (`Cycle` при нуле циклов, `Decision` без значения «сошлось»); два абзаца обоснования для ревьюера; пересказ факта о глубине проверки, которым владеет validation-profiles.md; дубли формулировки в восьми местах — осталась одна ссылка на flow, как требует принцип единственного владельца факта. Восстановлено требование закрытого review для research refactoring: сужение до production change случайно сняло его совсем. Манифесты priming для Small Change и Refactoring дополнены autonomy-boundaries и routing — контракт требует их при несходимости, а агент читает только exact manifest стадии. dependency-tree обновлён под новый derived_from. Co-Authored-By: Claude Opus 5 Claude-Session: https://claude.ai/code/session_01RtxeRwhVf1y8zvxUtk6xrS --- dependency-tree.md | 2 +- template/memory-bank/flows/bug-fix.md | 3 +- template/memory-bank/flows/feature.md | 4 +- .../flows/priming/refactoring.yaml | 2 + .../flows/priming/small-change.yaml | 2 + template/memory-bank/flows/refactoring.md | 3 +- template/memory-bank/flows/small-change.md | 3 +- template/memory-bank/flows/testing-policy.md | 128 +++++------------- 8 files changed, 43 insertions(+), 104 deletions(-) diff --git a/dependency-tree.md b/dependency-tree.md index 0893b3b..5fde5dc 100644 --- a/dependency-tree.md +++ b/dependency-tree.md @@ -108,7 +108,7 @@ template/memory-bank/dna/principles.md ### Feature-related Docs - [`template/memory-bank/flows/feature-artifact-catalog.md`](template/memory-bank/flows/feature-artifact-catalog.md) зависит от [`template/memory-bank/flows/feature.md`](template/memory-bank/flows/feature.md) и [`template/memory-bank/flows/feature-requirements.md`](template/memory-bank/flows/feature-requirements.md). -- [`template/memory-bank/flows/testing-policy.md`](template/memory-bank/flows/testing-policy.md) зависит от [`template/memory-bank/dna/governance.md`](template/memory-bank/dna/governance.md), [`template/memory-bank/flows/behavior-specification.md`](template/memory-bank/flows/behavior-specification.md), [`template/memory-bank/flows/feature.md`](template/memory-bank/flows/feature.md), [`template/memory-bank/flows/feature-requirements.md`](template/memory-bank/flows/feature-requirements.md) и validation profiles. +- [`template/memory-bank/flows/testing-policy.md`](template/memory-bank/flows/testing-policy.md) зависит от [`template/memory-bank/dna/governance.md`](template/memory-bank/dna/governance.md), [`template/memory-bank/flows/behavior-specification.md`](template/memory-bank/flows/behavior-specification.md), [`template/memory-bank/flows/feature.md`](template/memory-bank/flows/feature.md), [`template/memory-bank/flows/feature-requirements.md`](template/memory-bank/flows/feature-requirements.md), validation profiles, autonomy boundaries и routing: контракт сходимости берёт из них Structured Decision Protocol и путь повторной маршрутизации. - [`template/memory-bank/features/README.md`](template/memory-bank/features/README.md) зависит от [`template/memory-bank/dna/governance.md`](template/memory-bank/dna/governance.md) и [`template/memory-bank/flows/feature.md`](template/memory-bank/flows/feature.md). - [`template/memory-bank/flows/templates/feature/README.md`](template/memory-bank/flows/templates/feature/README.md) зависит от [`template/memory-bank/flows/feature.md`](template/memory-bank/flows/feature.md) и [`template/memory-bank/dna/frontmatter.md`](template/memory-bank/dna/frontmatter.md). - [`template/memory-bank/flows/templates/feature/brief.md`](template/memory-bank/flows/templates/feature/brief.md) зависит от [`template/memory-bank/flows/feature.md`](template/memory-bank/flows/feature.md), [`template/memory-bank/flows/feature-requirements.md`](template/memory-bank/flows/feature-requirements.md), [`template/memory-bank/flows/behavior-specification.md`](template/memory-bank/flows/behavior-specification.md), [`template/memory-bank/dna/frontmatter.md`](template/memory-bank/dna/frontmatter.md) и [`template/memory-bank/flows/testing-policy.md`](template/memory-bank/flows/testing-policy.md). diff --git a/template/memory-bank/flows/bug-fix.md b/template/memory-bank/flows/bug-fix.md index 18acbba..93f4b15 100644 --- a/template/memory-bank/flows/bug-fix.md +++ b/template/memory-bank/flows/bug-fix.md @@ -82,7 +82,7 @@ report → triage → reproduction → analysis → fix - [ ] simplify review выполнен - [ ] PR содержит ссылку на report, root cause summary и evidence - [ ] required local tests и CI зелёные -- [ ] проверка реализации сошлась по [`Review Convergence`](testing-policy.md#review-convergence): clean verdict и зелёный обязательный CI относятся к одной редакции кода, а след цикла записан +- [ ] проверка реализации сошлась по [`Review Convergence`](testing-policy.md#review-convergence) Если analysis показывает, что observed behavior соответствует текущему contract, а требуется изменить expected behavior, это не bug fix: повтори Task Routing и выбери `Small Change` или Feature Flow. @@ -99,7 +99,6 @@ report → triage → reproduction → analysis → fix - подтверждённая root cause summary; - regression test или обоснованный альтернативный carrier; - результаты required tests; -- проверка сошлась по [`Review Convergence`](testing-policy.md#review-convergence): clean verdict и зелёный обязательный CI относятся к одной редакции кода; - все изменения закоммичены и отправлены в remote branch, required CI полностью зелёный. ### Terminal State diff --git a/template/memory-bank/flows/feature.md b/template/memory-bank/flows/feature.md index 36b90bd..58fa386 100644 --- a/template/memory-bank/flows/feature.md +++ b/template/memory-bank/flows/feature.md @@ -401,7 +401,7 @@ Plan Ready artifact-review convergence допускает не более пят - [ ] minimum validation/evidence contract выбранного profile закрыт concrete evidence - [ ] каждый manual-only gap явно approved человеком (approval ref в `AG-*`) - [ ] required implementation/code review проверил delivered repository diff против active `brief.md`, полного optional design pack, referenced finalized external dependencies и execution plan; его verdict/evidence не подменяются Plan Ready artifact review -- [ ] проверка реализации сошлась по [`Review Convergence`](testing-policy.md#review-convergence): clean verdict и зелёный обязательный CI относятся к одной редакции кода, а след цикла записан +- [ ] проверка реализации сошлась по [`Review Convergence`](testing-policy.md#review-convergence) - [ ] simplify review выполнен: код минимально сложен или complexity обоснована ссылкой на `CON-*`, `FM-*`, `SD-*` или accepted ADR - [ ] если feature добавляет новый stable flow или materially changes существующий project-level scenario, соответствующий `UC-*` создан или обновлен и зарегистрирован в `memory-bank/use-cases/README.md` - [ ] `brief.md` → `delivery_status: done` @@ -424,7 +424,7 @@ Plan Ready artifact-review convergence допускает не более пят - validation profile decision и evidence его minimum contract; - выполненные `CHK-*` и конкретные carriers для `EVID-*`; - automated coverage, required local/CI results и approval refs для manual-only gaps; -- Plan Ready artifact review и required implementation/code review имеют отдельные clean verdicts по своим reviewed revisions; проверка реализации сошлась по [`Review Convergence`](testing-policy.md#review-convergence), то есть её clean verdict и зелёный обязательный CI относятся к одной редакции кода; +- Plan Ready artifact review и required implementation/code review имеют отдельные clean verdicts по своим reviewed revisions; - все изменения закоммичены и отправлены в remote branch, required CI полностью зелёный; - обновлённый `UC-*`, когда изменился устойчивый project-level scenario. diff --git a/template/memory-bank/flows/priming/refactoring.yaml b/template/memory-bank/flows/priming/refactoring.yaml index 65a711a..b4a99ad 100644 --- a/template/memory-bank/flows/priming/refactoring.yaml +++ b/template/memory-bank/flows/priming/refactoring.yaml @@ -6,6 +6,8 @@ stages: - memory-bank/use-cases/*.md - memory-bank/domain/*.md - memory-bank/engineering/architecture.md + - memory-bank/flows/autonomy-boundaries.md + - memory-bank/flows/routing.md - memory-bank/flows/validation-profiles.md - memory-bank/flows/testing-policy.md - memory-bank/engineering/testing-conventions.md diff --git a/template/memory-bank/flows/priming/small-change.yaml b/template/memory-bank/flows/priming/small-change.yaml index d1b3cd1..12b7bc9 100644 --- a/template/memory-bank/flows/priming/small-change.yaml +++ b/template/memory-bank/flows/priming/small-change.yaml @@ -2,6 +2,8 @@ version: 1 process: small_change stages: entry_execution: + - memory-bank/flows/autonomy-boundaries.md + - memory-bank/flows/routing.md - memory-bank/flows/validation-profiles.md - memory-bank/engineering/coding-style.md - memory-bank/flows/testing-policy.md diff --git a/template/memory-bank/flows/refactoring.md b/template/memory-bank/flows/refactoring.md index 9df5ca6..72a8338 100644 --- a/template/memory-bank/flows/refactoring.md +++ b/template/memory-bank/flows/refactoring.md @@ -72,7 +72,7 @@ task → baseline → characterization coverage → plan + checkpoints - [ ] simplify review подтверждает уменьшение или обоснование complexity - [ ] rollback или остановка на последнем checkpoint понятны - [ ] PR содержит before/after structure summary и evidence -- [ ] для production change проверка реализации сошлась по [`Review Convergence`](testing-policy.md#review-convergence): clean verdict и зелёный обязательный CI относятся к одной редакции кода, а след цикла записан +- [ ] последний review cycle завершён без открытых замечаний; для production change проверка сошлась по [`Review Convergence`](testing-policy.md#review-convergence) ## Outcome / Exit Contract @@ -86,7 +86,6 @@ task → baseline → characterization coverage → plan + checkpoints - validation profile decision и evidence его minimum contract; - результаты regression checks по checkpoints; - before/after summary либо research artifact с источниками и выводом; -- для production change проверка сошлась по [`Review Convergence`](testing-policy.md#review-convergence): clean verdict и зелёный обязательный CI относятся к одной редакции кода; - все изменения закоммичены и отправлены в remote branch, required CI полностью зелёный для production change. ### Terminal State diff --git a/template/memory-bank/flows/small-change.md b/template/memory-bank/flows/small-change.md index 61a3c67..08814c3 100644 --- a/template/memory-bank/flows/small-change.md +++ b/template/memory-bank/flows/small-change.md @@ -85,7 +85,7 @@ issue/task → routing record → implementation → automated checks - [ ] simplify review выполнен отдельным проходом - [ ] PR ссылается на issue/task и содержит concrete evidence - [ ] required CI зелёный до merge -- [ ] проверка реализации сошлась по [`Review Convergence`](testing-policy.md#review-convergence): clean verdict и зелёный обязательный CI относятся к одной редакции кода, а след цикла записан +- [ ] проверка реализации сошлась по [`Review Convergence`](testing-policy.md#review-convergence) ## Delivery Trace @@ -105,7 +105,6 @@ Acceptance из issue/task выполнен одним локальным change - validation profile decision и evidence его minimum contract; - изменённый код и automated coverage для changed behavior; - результаты проверок из `Verify`; -- проверка сошлась по [`Review Convergence`](testing-policy.md#review-convergence): clean verdict и зелёный обязательный CI относятся к одной редакции кода; - все изменения закоммичены и отправлены в remote branch, required CI полностью зелёный. ### Terminal State diff --git a/template/memory-bank/flows/testing-policy.md b/template/memory-bank/flows/testing-policy.md index b67db67..9c06934 100644 --- a/template/memory-bank/flows/testing-policy.md +++ b/template/memory-bank/flows/testing-policy.md @@ -2,7 +2,7 @@ title: Testing Policy doc_kind: governance doc_function: canonical -purpose: "Описывает testing policy delivery-процесса: обязательность test case design, требования к automated regression coverage и допустимые manual-only gaps." +purpose: "Описывает testing policy delivery-процесса: обязательность test case design, требования к automated regression coverage, допустимые manual-only gaps и сходимость проверки после реализации." derived_from: - ../dna/governance.md - autonomy-boundaries.md @@ -118,70 +118,34 @@ Artifact review не является доказательством качес ## Review Convergence -Контракт описывает проверку **после реализации** и доводит её ровно до одного из -двух состояний. Третьего — «вроде замечания закрыли» — не существует. +Проверка после реализации доводится ровно до одного из двух состояний. -1. **Сошлась.** Review дал clean verdict, блокирующие замечания устранены, - обязательный CI зелёный. -2. **Не сошлась.** Бюджет циклов исчерпан. Работа не закрывается, причина - классифицируется, работа возвращается владельцу исходных фактов. +**Сошлась.** Clean verdict обязательного review и зелёный обязательный CI +относятся к одной repository revision — одному commit SHA. Изменение кода после +verdict создаёт новую revision и аннулирует его. До выполнения этих условий +работа не переходит в терминальное состояние flow. -Контракт применяется к Feature, Small Change, Bug Fix и Refactoring Flow. Он не -относится к artifact review до lifecycle gate — в частности к Plan Ready, у -которого свой бюджет и свои объекты проверки; их разделение описано в -[`Verification Context Separation`](#verification-context-separation). Incident -Flow закрывает containment по своим правилам: profile ему не назначается, а -permanent remediation получает и profile, и этот контракт после отдельного -[`Task Routing`](routing.md). -Контракт механизм-нейтрален: он не выбирает инструмент проверки, команду или -оркестратор. +**Не сошлась.** Исчерпан бюджет в десять циклов на delivery-единицу. Один цикл — +`несошедшаяся проверка → исправления → повторная проверка`; несошедшейся +считается verdict с блокирующими замечаниями либо красный обязательный CI по +причине в коде. Повторный запуск CI без изменения revision циклом не является. -Глубина самой проверки принадлежит выбранному -[`validation profile`](validation-profiles.md): где профиль требует лишь обычный -review, контракт не добавляет отдельного неавторского reviewer, а где требует -separate non-authoring review — не отменяет его. +Исчерпание бюджета не разрешает принять работу и само по себе не создаёт Human +Gate. Зафиксируй вне проверяемой revision — в issue, PR или routing record +выбранного flow, чтобы запись не меняла проверенный код: -### Одна редакция - -Clean verdict и зелёный обязательный CI обязаны относиться к **одной редакции -кода** — одному commit SHA. Verdict по одной редакции и CI по другой вместе не -доказывают ничего. - -Любое изменение кода после verdict создаёт новую редакцию и аннулирует его: -последний цикл с исправлениями не является clean verdict без повторной проверки. -До выполнения этих условий работа не переходит в конечное состояние выбранного flow — `Done`, `Resolved` или эквивалентное. - -### Бюджет и граница цикла - -Один цикл — это `несошедшаяся проверка → исправления → повторная проверка`. -Несошедшейся считается любая: verdict с блокирующими замечаниями **или** красный -обязательный CI по причине в коде. Цикл заканчивается следующей проверкой, -сколько бы коммитов ни содержали исправления. Проверка без изменения редакции -циклом не является. - -Считать только замечания reviewer недостаточно: петля «чистый verdict → красный -CI → правка → снова чистый verdict → снова красный CI» не содержит ни одного -verdict-а с замечаниями и без этого правила не расходовала бы бюджет вовсе. - -По умолчанию на delivery-единицу допускается не более **десяти** циклов. Бюджет -общий, а не отдельный для каждого прохода проверки. - -Повторный запуск нестабильной или недоступной проверки CI **без изменения кода** -циклом не считается: редакция та же, исправления не было. Такой повтор -фиксируется отдельно как внешняя причина. - -Исчерпание бюджета не разрешает принять работу, проигнорировать замечания или -автоматически потребовать решение человека. Нельзя и начать новый лимит: пока -причина не разобрана, а владелец исходных фактов не обновлён, счёт продолжается. - -### Разбор при несходимости - -После исчерпания бюджета зафиксируй на наблюдаемых данных: какие замечания -повторялись, какие исправления предпринимались и к чему привели, какие локальные -проверки и CI остаются красными, локальна ли причина или лежит на более раннем -этапе. +```text +Not converged: cycle /10, revisions +Repeated findings: <что повторялось; какие проверки остаются красными> +Cause class: <строка таблицы ниже> +Decision: return to <владелец фактов> | continue, scope <суженный объём> +``` -Затем отнеси причину к одному классу и верни работу его владельцу: +Новый бюджет открывается только после обновления владельца исходных фактов. При +дефекте реализации допускается одно продолжение в текущем flow с явно суженным +объёмом; дальше применяется +[`Structured Decision Protocol`](autonomy-boundaries.md#structured-decision-protocol), +и эскалация нужна только при outcome `escalate`. | Причина | Куда вернуть работу | | --- | --- | @@ -193,42 +157,16 @@ verdict-а с замечаниями и без этого правила не р | Неверно определён тип задачи или её объём | Повторить [`Task Routing`](routing.md); при необходимости выбрать Research, Feature или Epic Flow | | Внешняя блокировка, недоступная инфраструктура или нестабильный CI без причины в коде | Зафиксировать ожидание или блокировку с evidence, не меняя исходные факты без основания | -Правая колонка называет владельца фактов и действие; gates в скобках относятся -к Feature Flow. Flow без такого этапа возвращает работу к соответствующему месту -своего lifecycle, а если этапа нет вовсе — повторяет -[`Task Routing`](routing.md). Так, Small Change Flow по своим entry predicates -не имеет ни design, ни execution plan: причина, требующая их, там же и является -триггером rerouting. - -После изменения исходного владельца все зависящие от него документы и проверки -проходят заново. - -### След - -След фиксируется там же, где живёт validation profile decision этого flow — -в canonical owner из таблицы -[`Canonical Decision Owner By Flow`](validation-profiles.md#canonical-decision-owner-by-flow). -Один носитель, а не любой подходящий: routing record и profile decision у Feature -Flow лежат в разных документах, и без этого правила у записи было бы два -одинаково законных места. - -Минимальная запись: - -```text -Review convergence: converged | not-converged -Cycle: <номер> / <бюджет> -Reviewed revision: -Verdict: -Cause class: <строка таблицы выше; только при not-converged> -Decision: continue | stop | return to <владелец фактов> -``` - -Без этого следа нельзя отличить сошедшуюся проверку от брошенной. +Правая колонка называет владельца фактов; gates в скобках относятся к Feature +Flow. Flow без такого этапа возвращает работу к соответствующему месту своего +lifecycle, а если этапа нет вовсе — повторяет [`Task Routing`](routing.md). +После изменения владельца зависящие документы и проверки проходят заново. -Исчерпание бюджета само по себе не является Human Gate. Примени -[`Structured Decision Protocol`](autonomy-boundaries.md#structured-decision-protocol) -и записывай решение в его канонической форме; эскалация нужна только при outcome -`escalate` либо при уже действующем обязательном approval. +Контракт применяется к Feature, Small Change, Bug Fix и Refactoring Flow, не +относится к artifact review до gate (включая Plan Ready) и механизм-нейтрален. +Обязательств выбранного [`validation profile`](validation-profiles.md) он не +изменяет. Incident Flow закрывает containment по своим правилам; permanent +remediation попадает под контракт после отдельного [`Task Routing`](routing.md). ## Project Execution Layer