kin/tasks/kin-docs-002-analysis.md

142 lines
9.2 KiB
Markdown
Raw Permalink Normal View History

2026-03-19 15:58:39 +02:00
# KIN-DOCS-002: Аудит промптов агентов — Аналитический отчёт
**Дата:** 2026-03-19
**Исполнитель:** tech_researcher
**Статус:** Исследование завершено
---
## 1. Структурный аудит всех 25 промпт-файлов
**Вывод: ВСЕ 25 файлов содержат все 5 обязательных секций.**
| № | Файл | Working Mode | Focus On | Quality Checks | Return Format | Constraints |
|---|------|:---:|:---:|:---:|:---:|:---:|
| 1 | analyst.md | ✅ | ✅ | ✅ | ✅ | ✅ |
| 2 | architect.md | ✅ | ✅ | ✅ | ✅ | ✅ |
| 3 | backend_dev.md | ✅ | ✅ | ✅ | ✅ | ✅ |
| 4 | backlog_audit.md | ✅ | ✅ | ✅ | ✅ | ✅ |
| 5 | business_analyst.md | ✅ | ✅ | ✅ | ✅ | ✅ |
| 6 | constitution.md | ✅ | ✅ | ✅ | ✅ | ✅ |
| 7 | constitutional_validator.md | ✅ | ✅ | ✅ | ✅ | ✅ |
| 8 | debugger.md | ✅ | ✅ | ✅ | ✅ | ✅ |
| 9 | department_head.md | ✅ | ✅ | ✅ | ✅ | ✅ |
| 10 | followup.md | ✅ | ✅ | ✅ | ✅ | ✅ |
| 11 | frontend_dev.md | ✅ | ✅ | ✅ | ✅ | ✅ |
| 12 | learner.md | ✅ | ✅ | ✅ | ✅ | ✅ |
| 13 | legal_researcher.md | ✅ | ✅ | ✅ | ✅ | ✅ |
| 14 | market_researcher.md | ✅ | ✅ | ✅ | ✅ | ✅ |
| 15 | marketer.md | ✅ | ✅ | ✅ | ✅ | ✅ |
| 16 | pm.md | ✅ | ✅ | ✅ | ✅ | ✅ |
| 17 | reviewer.md | ✅ | ✅ | ✅ | ✅ | ✅ |
| 18 | security.md | ✅ | ✅ | ✅ | ✅ | ✅ |
| 19 | smoke_tester.md | ✅ | ✅ | ✅ | ✅ | ✅ |
| 20 | spec.md | ✅ | ✅ | ✅ | ✅ | ✅ |
| 21 | sysadmin.md | ✅ | ✅ | ✅ | ✅ | ✅ |
| 22 | task_decomposer.md | ✅ | ✅ | ✅ | ✅ | ✅ |
| 23 | tech_researcher.md | ✅ | ✅ | ✅ | ✅ | ✅ |
| 24 | tester.md | ✅ | ✅ | ✅ | ✅ | ✅ |
| 25 | ux_designer.md | ✅ | ✅ | ✅ | ✅ | ✅ |
---
## 2. Конфликт-анализ 9 файлов из EXCLUDED_FROM_STRUCTURE_CHECK
| Файл | 5 секций | Тест(ы), ссылающиеся на файл | Тип проверки | Реальный конфликт | Рекомендация |
|------|:---:|------|------|:---:|------|
| analyst.md | ✅ | test_kin_128_regression.py (analyst injection, revise_count), test_kin_arch_023_regression.py (pending_steps), test_context_builder.py (context assembly) | Структурная (pipeline logic) + Output-контентная (root_problem) | ❌ НЕТ | YELLOW → убрать из exclusion |
| backend_dev.md | ✅ | test_kin_128_regression.py (proof fields: what_was_done, how_verified, verification_result), test_context_builder.py (context assembly) | Output-контентная | ❌ НЕТ | YELLOW → убрать из exclusion |
| constitutional_validator.md | ✅ | test_kin_docs_001_regression.py (gate=true, output_schema, route position), test_kin_091_regression.py (маршруты) | Структурная (yaml config + routes), НЕ .md структура | ❌ НЕТ | YELLOW → убрать из exclusion |
| debugger.md | ✅ | test_KIN-117_regression.py (worktree logic), test_context_builder.py (context), test_kin_128_regression.py (proof: what_was_fixed, how_verified, verification_result) | Output-контентная | ❌ НЕТ | YELLOW → убрать из exclusion |
| frontend_dev.md | ✅ | test_context_builder.py (decision selectors), test_kin_128_regression.py (proof field), test_kin_091_regression.py (маршруты) | Output-контентная | ❌ НЕТ | YELLOW → убрать из exclusion |
| pm.md | ✅ | test_context_builder.py (context + specialists assembly), test_kin_091_regression.py (маршруты) | Output-контентная (context assembly) | ❌ НЕТ | YELLOW → убрать из exclusion |
| reviewer.md | ✅ | test_context_builder.py (decision selectors), test_kin_100_regression.py (## Verdict, ## Details), test_kin_133_gate_cannot_close.py (gate logic: approved/changes_requested/revise) | Output-контентная | ❌ НЕТ | YELLOW → убрать из exclusion |
| smoke_tester.md | ✅ | test_kin_128_regression.py (confirmed/cannot_confirm → pipeline status) | Output-контентная (status processing) | ❌ НЕТ | YELLOW → убрать из exclusion |
| tester.md | ✅ | test_context_builder.py (minimal context), test_auto_mode.py (auto_complete logic), test_kin_100_regression.py (## Verdict, ## Details) | Output-контентная | ❌ НЕТ | YELLOW → убрать из exclusion |
### Ключевой вывод по конфликтам
**По decision #922**: output-контентный тест (проверяет наличие конкретных слов/полей в тексте промпта) **не конфликтует** со структурным тестом (проверяет наличие 5 заголовков `##`).
- Ни один из 9 excluded файлов не имеет **реального структурного конфликта** с тестом `TestAllPromptsContainStandardStructure`
- Все тесты, ссылающиеся на excluded файлы, проверяют либо: (a) pipeline-логику в Python-коде, либо (b) содержимое поля `proof`/`verdict` в тексте промпта
- Заголовки `## Verdict`, `## Details` (reviewer, tester) — это **дополнительные** секции поверх стандартных 5, не конфликтуют
---
## 3. Классификация GREEN / YELLOW / RED
### 🟢 GREEN (16 файлов) — уже в активной зоне проверки, всё ок
architect.md, backlog_audit.md, business_analyst.md, constitution.md, department_head.md, followup.md, learner.md, legal_researcher.md, market_researcher.md, marketer.md, security.md, spec.md, sysadmin.md, task_decomposer.md, tech_researcher.md, ux_designer.md
### 🟡 YELLOW (9 файлов) — в exclusion без реального конфликта, нужно убрать
analyst.md, backend_dev.md, constitutional_validator.md, debugger.md, frontend_dev.md, pm.md, reviewer.md, smoke_tester.md, tester.md
### 🔴 RED — нет ни одного файла с реальным конфликтом
---
## 4. Рекомендации для backend_head
**Что делать:** Убрать все 9 файлов из `EXCLUDED_FROM_STRUCTURE_CHECK` в `tests/test_kin_docs_002_regression.py`
**Что НЕ делать:** Промпт-файлы уже стандартизированы. Менять содержимое *.md файлов не нужно.
**Конкретное изменение в коде:**
```python
# tests/test_kin_docs_002_regression.py, строки 29-39
# БЫЛО:
EXCLUDED_FROM_STRUCTURE_CHECK = [
"reviewer.md",
"tester.md",
"constitutional_validator.md",
"pm.md",
"backend_dev.md",
"debugger.md",
"frontend_dev.md",
"analyst.md",
"smoke_tester.md",
]
# СТАЛО:
EXCLUDED_FROM_STRUCTURE_CHECK = []
```
**Эффект:** 9 ранее незащищённых файлов получат регрессионную защиту (decision #921). Тест `TestAllPromptsContainStandardStructure` начнёт покрывать все 25 файлов.
**Риск:** НУЛЕВОЙ — все 9 файлов уже содержат все 5 секций.
---
## 5. Рекомендации для qa_head
**Тесты для прогона после изменений:**
1. `pytest tests/test_kin_docs_002_regression.py -v` — основной структурный тест (должен пройти)
2. `pytest tests/test_kin_128_regression.py -v` — proof block + smoke_tester (не должен сломаться)
3. `pytest tests/test_context_builder.py -v` — context assembly (не должен сломаться)
4. `pytest tests/test_kin_100_regression.py -v` — reviewer/tester verdict (не должен сломаться)
5. `pytest tests/test_kin_docs_001_regression.py -v` — constitutional_validator в yaml (не должен сломаться)
**На что обратить внимание:**
- После удаления из exclusion, `_ACTIVE_PROMPT_NAMES` вырастет с 16 до 25 файлов
- `TestAllPromptsContainStandardStructure` будет генерировать 25×5=125 параметризованных тестов вместо 16×5=80
- Тест `TestPromptCount` ожидает ровно 25 файлов — это инвариант, не трогать
**Регрессионный риск:** Минимальный. Изменение в exclusion-списке — безопасная операция, все файлы уже соответствуют стандарту.
---
## 6. Итог
| Метрика | Значение |
|---------|---------|
| Файлов проверено | 25 |
| Файлов с полной структурой (5 секций) | **25 / 25 (100%)** |
| Файлов в exclusion-списке | 9 |
| Файлов с реальным конфликтом | **0** |
| Файлов для удаления из exclusion | **9** |
| Изменений в промпт-файлах | **0** |
**Вся работа сосредоточена в одном файле:** `tests/test_kin_docs_002_regression.py`, строки 29-39.