13 KiB
PIPELINE_DOCS — стандарт документов конвейера (golden source структуры)
Назначение. Единая карта «стадия → агент → документ → категория → гейт/механизм → frontmatter machine-key» + конвенция ADR-naming. Это golden source структуры номерных документов work item (
00-business-request.md…18-coverage-report.md), который каждая агентская роль пишет на своей стадии.Статус истины (важно). Манифест документирует текущее поведение гейтов, но НЕ является их источником истины. Источник истины — код:
src/stages.py(STAGE_TRANSITIONS),src/qg/checks.py(QG_CHECKS/check_*/_parse_*),src/stage_engine.py. При будущей правке гейта первична правка кода, манифест обновляется следом (ORCH-075 / ADR-001 §D2).Копируемые скелеты каждого документа — в каталоге
docs/_templates/: «скопировал → заполнил → не угадываешь структуру/ключ».
Введён задачей ORCH-075 (ORCH-52b — слой 1 эпика ORCH-52). Сквозной ADR:
docs/architecture/adr/adr-0019-pipeline-docs-standard.md;
детально — docs/work-items/ORCH-075/06-adr/ADR-001-pipeline-docs-standard.md.
1. Конвейер стадий (ground-truth STAGE_TRANSITIONS)
created → analysis → architecture → development → review → testing → deploy-staging → deploy → done
↑ │
└──── REQUEST_CHANGES ──────┘ (откат на development, max 3 retries)
Каждое ребро несёт ровно один exit-гейт (src/stages.py):
check_analysis_approved → check_architecture_done → check_ci_green → check_reviewer_verdict → check_tests_passed → check_staging_status → check_deploy_status.
Под-гейты ребра deploy-staging → deploy (check_security_gate → check_branch_mergeable →
check_staging_image_fresh) — это врезки в advance_stage, а НЕ строки STAGE_TRANSITIONS.
Аналогично под-гейт ребра deploy → done (_handle_merge_verify, ORCH-071/073) — врезка, не
зарегистрированный QG. Карта стадий о них не «лжёт»: они не являются стадиями.
2. Манифест: документ → агент → категория → стадия → гейт → machine-key
Категории: required (пишется всегда), when-applicable (пишется при наличии предмета: инфра / данные / security / post-deploy — отсутствие не нарушение), optional / legacy.
| Документ | Владелец-агент | Категория | Стадия написания | Гейт / механизм проверки | Frontmatter machine-key |
|---|---|---|---|---|---|
00-business-request.md |
система (Plane webhook _create_initial_docs) / заказчик |
required | created (инициализация) |
не гейтится (вход) | — |
01-brd.md |
analyst | required | analysis |
exit-гейт analysis→architecture = check_analysis_approved (Approved + полнота файлов); helper check_analysis_complete (наличие 01/02/03/04) |
— |
02-trz.md |
analyst | required | analysis |
то же | — |
03-acceptance-criteria.md |
analyst | required | analysis |
то же | — |
04-test-plan.yaml |
analyst | required | analysis |
то же | — |
06-adr/ADR-NNN-<slug>.md |
architect | required | architecture |
check_architecture_done (наличие каталога 06-adr/ ≥1 файл ИЛИ 07-infra-requirements.md) |
— |
07-infra-requirements.md |
architect | when-applicable | architecture |
check_architecture_done (учитывается при наличии) |
— |
08-data-requirements.md |
architect | when-applicable | architecture |
информационный (гейтом не парсится) | — |
10-tech-risks.md |
architect | required | architecture |
информационный (гейтом не парсится) | — |
12-review.md |
reviewer | required | review |
check_reviewer_verdict |
verdict: (APPROVED | REQUEST_CHANGES) |
13-test-report.md |
tester | required | testing |
check_tests_passed (_parse_tests_verdict) |
result: / verdict: / status: (PASS | FAIL | BLOCKED; три равноранговых, ORCH-047) |
14-deploy-log.md |
deployer / deploy-finalizer | required | deploy |
check_deploy_status (_parse_deploy_status) |
deploy_status: (SUCCESS | FAILED) |
15-staging-log.md |
deployer | required (self-hosting) | deploy-staging |
check_staging_status (self-hosting; иначе N/A — ORCH-35) |
staging_status: (SUCCESS | FAILED) |
16-post-deploy-log.md |
post-deploy-monitor | when-applicable | пост-done наблюдение (ORCH-021; не ребро STAGE_TRANSITIONS) |
информационный (гейтом не парсится) | post_deploy_status: (HEALTHY | DEGRADED) |
17-security-report.md |
security-гейт (детерминированный, ORCH-022) | when-applicable | под-гейт ребра deploy-staging→deploy |
check_security_gate (врезка в advance_stage) |
security_status: (PASS | FAIL) |
18-coverage-report.md |
coverage-гейт (детерминированный, ORCH-027) | when-applicable | под-гейт ребра deploy-staging→deploy (ПОСЛЕ merge-gate, ДО image-freshness) |
check_coverage_gate (врезка в advance_stage) |
coverage_status: (PASS | FAIL) |
Примечания манифеста (нормативные)
- Под-гейты ребра
deploy-staging→deploy(check_security_gate→check_branch_mergeable→check_staging_image_fresh) исполняются как врезки вadvance_stage, а НЕ строкиSTAGE_TRANSITIONS. Не путать с exit-гейтами рёбер. 09-review.md— legacy fallback от старой нумерации; канон —12-review.md. В основную таблицу как канон не вносится; reviewer пишет12-review.md.- Категория
when-applicable= документ пишется при наличии соответствующего предмета (инфра / данные / security / post-deploy). Его отсутствие — не нарушение приёмки. 05-…/09-…/11-…— зарезервированные/legacy номера, в текущем каноне не используются.
3. Machine-verdict доки vs информационные (честный механизм проверки)
Machine-verdict доки — гейт читает ТОЛЬКО YAML-frontmatter (никогда прозу), маппит ключ в вердикт. Имя ключа чувствительно к регистру; значение парсер приводит к верхнему регистру.
| Документ | Machine-key | Парсер (src/qg/checks.py) |
Эффект вердикта |
|---|---|---|---|
12-review.md |
verdict: |
check_reviewer_verdict |
APPROVED → дальше; REQUEST_CHANGES → откат на development |
13-test-report.md |
result: / verdict: / status: |
_parse_tests_verdict |
PASS → дальше; FAIL/BLOCKED → откат |
14-deploy-log.md |
deploy_status: |
_parse_deploy_status |
SUCCESS → done; FAILED → откат (БАГ-8) |
15-staging-log.md |
staging_status: |
_parse_staging_status |
SUCCESS → дальше; FAILED → откат (self-hosting; иначе N/A) |
17-security-report.md |
security_status: |
check_security_gate |
PASS → дальше; FAIL → откат |
18-coverage-report.md |
coverage_status: |
check_coverage_gate |
PASS → дальше; FAIL → откат на development |
Информационные доки — гейтом НЕ парсятся (структура ничего не блокирует):
00-business-request.md (вход), 08-data-requirements.md, 10-tech-risks.md,
16-post-deploy-log.md (несёт post_deploy_status:, но это телеметрия петли уроков ORCH-8 /
наблюдаемость, не гейт).
4. Конвенция ADR-naming
Per-work-item ADR (основное)
- Путь:
docs/work-items/<plane-id>/06-adr/ - Имя файла:
ADR-NNN-<kebab-slug>.mdNNN— 3-значный, начинается с001; инкремент при нескольких ADR в одной задаче (ADR-001-…,ADR-002-…).<kebab-slug>— kebab-case (нижний регистр, слова через дефис), отражает суть решения.
- Стадия: пишет architect на стадии
architecture; гейтитсяcheck_architecture_done(наличие каталога06-adr/≥ 1 файла).
Сквозной (cross-cutting) ADR
Решения, затрагивающие несколько компонентов/ролей или поведение всего конвейера, дублируются в глобальный реестр:
- Путь:
docs/architecture/adr/ - Имя файла:
adr-NNNN-<kebab-slug>.md(4-значная сквозная нумерация, последовательная по всему репозиторию; на момент ORCH-075 реестр доходит доadr-0019).
Примеры из репозитория (реальные, проверенные)
docs/work-items/ORCH-088/06-adr/ADR-001-serial-gate.mddocs/work-items/ORCH-089/06-adr/ADR-001-auto-label-gates.mddocs/work-items/ORCH-071/06-adr/ADR-001-merge-verify-gate.md- Сквозные:
docs/architecture/adr/adr-0017-serial-gate.md,docs/architecture/adr/adr-0018-auto-label-gates.md.
5. Как пользоваться шаблонами
- Скопируй нужный скелет из
docs/_templates/вdocs/work-items/<plane-id>/под канонным именем (для ADR —06-adr/ADR-001-<slug>.md). - Заполни секции; не удаляй machine-key frontmatter у machine-verdict доков и не меняй имя ключа (регистр чувствителен — иначе гейт упадёт ложно).
- Сверяйся с манифестом (§2–§3): какой агент, на какой стадии, какой гейт читает документ.
Стандарт описательный (слой 1). Машинный слой реализован в ORCH-52c (ORCH-076): единый frontmatter-контракт (reader + writer + валидатор) в
src/frontmatter.pyи формальная спека handoffHANDOFF_PROTOCOL.md(«стадия → обязательный выход» + обязательная frontmatter-схемаREQUIRED_FIELDS). Пять вердикт-парсеров (check_reviewer_verdict,_parse_tests_verdict,_parse_deploy_status,_parse_staging_status,parse_security_status) читают вердикт через ОДНУ точку парсинга (parse_frontmatter); семантика вердиктов 1:1. Валидатор обязательной схемы по умолчанию warning-only (kill-switchfrontmatter_validation_strict, дефолтFalse) — соблюдение схемы пока на ответственности агента и reviewer'а, enforcement придёт с ORCH-52d.
6. Спека handoff (машинный контракт, ORCH-52c)
Вертикальный срез «стадия → обязательные документы + frontmatter-ключи на выходе» и обязательная
frontmatter-схема вынесены в отдельную нормативную спеку HANDOFF_PROTOCOL.md
(набор документов/ключей/гейтов согласован 1:1 с §2–§3 этого манифеста). Машинный источник
обязательной схемы — frontmatter.REQUIRED_FIELDS.