From 8788261d4f494a4082107d922b2b1ecebff8f1c8 Mon Sep 17 00:00:00 2001 From: NW Date: Sat, 9 May 2026 01:57:50 +0100 Subject: [PATCH] rules: add Task Critical Assessment (TCA) to prevent waste MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Add task-critical-assessment.md with 5 criteria to evaluate tasks BEFORE execution: 1. Abstraction over local API → reject (MCP lesson) 2. Layer without proven need → reject (hybrid fallback lesson) 3. Environment more complex than task → reject (Docker overlay lesson) 4. No acceptance criteria → require clarification 5. Previously rolled back work → require justification Link from global.md so every agent runs TCA before starting work. Prevents repeating the MCP incident: 6 commits, 1700+ lines, 2 days → full revert. --- .kilo/rules/global.md | 15 +++- .kilo/rules/task-critical-assessment.md | 94 +++++++++++++++++++++++++ 2 files changed, 108 insertions(+), 1 deletion(-) create mode 100644 .kilo/rules/task-critical-assessment.md diff --git a/.kilo/rules/global.md b/.kilo/rules/global.md index 8ebd914..c7c3295 100644 --- a/.kilo/rules/global.md +++ b/.kilo/rules/global.md @@ -54,7 +54,20 @@ Always verify generated frontmatter with: `node scripts/validate-agents.cjs` - Subagents MUST NOT invoke the `task` tool to spawn further subagents - Orchestrator (`mode: all`) is the ONLY agent allowed to use `task` tool -### Bash Hardening +## Task Critical Assessment + +Before executing any user request, apply the criteria from `task-critical-assessment.md`. + +If any criterion triggers → STOP and ask for clarification. + +Key checks: +1. Is this an abstraction over an already-local API? +2. Does it add layers without a proven failure mode? +3. Is the environment more complex than the task itself? +4. Are there clear acceptance criteria with measurable outcomes? +5. Has this (or something similar) been rolled back before? + +## Bash Hardening - Default bash permission for agents: `ask` (not `allow`) - Agents that REQUIRE shell execution for their core function MAY have `bash: "allow"` with explicit justification: - `lead-developer`: build, test, and tooling commands diff --git a/.kilo/rules/task-critical-assessment.md b/.kilo/rules/task-critical-assessment.md new file mode 100644 index 0000000..ff5b0fb --- /dev/null +++ b/.kilo/rules/task-critical-assessment.md @@ -0,0 +1,94 @@ +# Task Critical Assessment (TCA) + +Оценка целесообразности задачи ДО начала выполнения. + +## Проблема + +Мы тратили время и токены на: +- MCP Gitea интеграцию (6 коммитов, 1700+ строк) — откат через 2 дня +- Docker overlay networking для локального API +- Multi-layer fallback цепочки, которые никогда не использовались +- Документацию и E2E тесты для кода, который не пошёл в прод + +Каждая из этих идей казалась разумной на момент запроса. +Ни одна не выдержала проверку реальностью. + +## Критерии отсева (Любой совпадение → STOP) + +### 1. Абстракция поверх локального API +- Новый сервис/контейнер/протокол для доступа к тому, что уже доступно напрямую +- **Пример**: MCP сервер для Gitea API, который мы и так вызываем через REST +- **Вердикт**: Отказ. Используем существующий клиент напрямую. + +### 2. Слой без чёткой необходимости +- "Давайте добавим X на случай если..." +- Нет конкретного сценария, где текущее решение не работает +- **Пример**: Hybrid клиент (MCP → REST → curl fallback) при рабочем REST +- **Вердикт**: Отказ. Решаем реальную проблему, когда она появится. + +### 3. Окружение сложнее задачи +- Docker + healthcheck + network + env vars для решения, которое делается в 3 строки кода +- **Пример**: Docker контейнер для stdio MCP процесса +- **Вердикт**: Отказ. Если решение не вмещается в существующую архитектуру — задача плохо сформулирована. + +### 4. Нет acceptance criteria +- "Сделай лучше" / "Улучши" / "Оптимизируй" +- Что измеримо изменится? Какой метрикой проверим результат? +- **Вердикт**: Уточнить критерии. Если не уточняются — отказ. + +### 5. Повторение того, что уже было откачено +- Если похожая задача уже была сделана и откачена — объяснить почему и предложить альтернативу +- **Вердикт**: Требуется явное объяснение "что изменилось с прошлого раза" + +## Процедура оценки + +На каждый новый запрос: + +``` +1. Определить: что меняется для пользователя? + - Если ответ "ничего, это внутренняя архитектура" → критичнее оценивать + +2. Сколько слоёв добавляется? + - Agent → X → Y → Z → Gitea (слишком много) + - Agent → GiteaClient → HTTP (правильно) + +3. Какой Plan B если это не сработает? + - Если Plan B = "откатить всё" → это плохой Plan A + - Хорошая задача: можно отключить одной строкой или env var + +4. Оценка трудозатрат: + - < 30 мин и < 500 токенов: можно + - > 2 часа или > 3000 токенов: требуется явное подтверждение + - > 1 дня: milestone + обоснование + +5. Вопрос пользователю: + "Это добавит N слоёв. Сейчас работает через curl/fetch за 1 запрос. + Подтверди, что выигрыш стоит затрат." +``` + +## Формулировка отказа + +``` +Оценка задачи: [название] + +Вердикт: ❌ Не целесообразно + +Причина: +- [критерий из списка выше] +- [конкретное объяснение] + +Альтернатива: +- [простое решение, которое уже работает] +- [или: уточни acceptance criteria] + +Если подтверждаешь — выполню, но фиксирую сомнения. +``` + +## Исторические примеры "коллективной чуши" + +| Задача | Затраты | Результат | Критерий | +|--------|---------|-----------|----------| +| MCP Gitea интеграция | 6 коммитов, 1700 строк, Docker, healthchecks | Откат через 2 дня | Абстракция поверх локального API | +| SSE transport для MCP | stdio bridge, JSON-RPC | Не поддерживается инфраструктурой | Слой без необходимости | +| Hybrid fallback curl | MCP → REST → bash curl | Ни разу не сработал REST fallback | Слой без необходимости | +| Docker network overlay | ipam subnet 172.28.0.0/16 | Конфликт с хостом | Окружение сложнее задачи |