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 48c6642..93f4b15 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) Если analysis показывает, что observed behavior соответствует текущему contract, а требуется изменить expected behavior, это не bug fix: повтори Task Routing и выбери `Small Change` или Feature Flow. @@ -98,7 +99,6 @@ report → triage → reproduction → analysis → fix - подтверждённая root cause summary; - regression test или обоснованный альтернативный carrier; - результаты required tests; -- последний review cycle завершён без открытых замечаний; - все изменения закоммичены и отправлены в remote branch, required CI полностью зелёный. ### Terminal State diff --git a/template/memory-bank/flows/feature.md b/template/memory-bank/flows/feature.md index 7991e2c..58fa386 100644 --- a/template/memory-bank/flows/feature.md +++ b/template/memory-bank/flows/feature.md @@ -352,7 +352,9 @@ flowchart LR ### Upstream Ready → Plan Ready Plan Ready artifact-review convergence допускает не более пяти review-improve -итераций. Последняя итерация с исправлениями не считается clean verdict без +итераций. Это 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; продолжай через @@ -399,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) - [ ] 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/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 773c9ca..72a8338 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 +- [ ] последний review cycle завершён без открытых замечаний; для production change проверка сошлась по [`Review Convergence`](testing-policy.md#review-convergence) ## Outcome / Exit Contract @@ -85,7 +86,6 @@ task → baseline → characterization coverage → plan + checkpoints - validation profile decision и evidence его minimum contract; - результаты regression checks по checkpoints; - before/after summary либо research artifact с источниками и выводом; -- последний review cycle завершён без открытых замечаний; - все изменения закоммичены и отправлены в 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..08814c3 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) ## Delivery Trace @@ -104,7 +105,6 @@ Acceptance из issue/task выполнен одним локальным change - validation profile decision и evidence его minimum contract; - изменённый код и automated coverage для changed behavior; - результаты проверок из `Verify`; -- последний review cycle завершён без открытых замечаний; - все изменения закоммичены и отправлены в 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..9c06934 100644 --- a/template/memory-bank/flows/testing-policy.md +++ b/template/memory-bank/flows/testing-policy.md @@ -2,12 +2,14 @@ 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 - behavior-specification.md - feature.md - feature-requirements.md + - routing.md - validation-profiles.md status: active canonical_for: @@ -18,6 +20,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 +75,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 +116,58 @@ Artifact review и implementation review имеют разные объекты Artifact review не является доказательством качества реализации, а implementation review не исправляет задним числом непройденный artifact gate. Для compact feature packages проходы допустимы в одной сессии, если их объекты, verdicts и evidence зафиксированы раздельно; обязательный review или simplify review не пропускается. +## Review Convergence + +Проверка после реализации доводится ровно до одного из двух состояний. + +**Сошлась.** Clean verdict обязательного review и зелёный обязательный CI +относятся к одной repository revision — одному commit SHA. Изменение кода после +verdict создаёт новую revision и аннулирует его. До выполнения этих условий +работа не переходит в терминальное состояние flow. + +**Не сошлась.** Исчерпан бюджет в десять циклов на delivery-единицу. Один цикл — +`несошедшаяся проверка → исправления → повторная проверка`; несошедшейся +считается verdict с блокирующими замечаниями либо красный обязательный CI по +причине в коде. Повторный запуск CI без изменения revision циклом не является. + +Исчерпание бюджета не разрешает принять работу и само по себе не создаёт Human +Gate. Зафиксируй вне проверяемой revision — в issue, PR или routing record +выбранного flow, чтобы запись не меняла проверенный код: + +```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`. + +| Причина | Куда вернуть работу | +| --- | --- | +| Дефект реализации или необоснованная сложность | Ограничить объём исправления и повторить его в рамках текущего 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) | +| Недостаточно определены проблема, результат или границы | Повторить брифование или первичный разбор | +| Неверно определён тип задачи или её объём | Повторить [`Task Routing`](routing.md); при необходимости выбрать Research, Feature или Epic Flow | +| Внешняя блокировка, недоступная инфраструктура или нестабильный CI без причины в коде | Зафиксировать ожидание или блокировку с evidence, не меняя исходные факты без основания | + +Правая колонка называет владельца фактов; gates в скобках относятся к Feature +Flow. Flow без такого этапа возвращает работу к соответствующему месту своего +lifecycle, а если этапа нет вовсе — повторяет [`Task Routing`](routing.md). +После изменения владельца зависящие документы и проверки проходят заново. + +Контракт применяется к 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 Как именно исполняется эта policy в конкретном репозитории — framework, тестовые данные, CI jobs, размещение тестов и helper patterns — задаёт [`../engineering/testing-conventions.md`](../engineering/testing-conventions.md), а canonical локальные команды — [`../ops/development.md`](../ops/development.md). Project-специфичный слой может усиливать требования этой policy, но не может их ослаблять.