# 🔴 РАБОЧАЯ ДИСЦИПЛИНА — ДОВОДИМ ВСЁ ДО КОНЦА (единый канон, 4 столпа)

> **Это единственный источник правды по тому, КАК мы работаем.** Принцип НЕ размазан по файлам:
> все четыре столпа собраны здесь, а детальные/механические правила подключены ссылками вниз
> (depth/enforcement), чтобы ничего не терялось и любой вход вёл сюда.

Директивы пользователя:
> (2026-06-07) «мы доделываем до конца поставленную задачу. если уже начали над чем-то работать,
> то ничего не остаётся "на следующую сессию" или на потом. всё делается пока задача не доделается
> или пока реально не будет близко переполнение контекста.»
> (2026-06-07) «map every connected branch, do them all, verify each … не минимум, который работает.»
> (2026-06-15) «правила не размазывать, в одном месте, эталонно, чтобы не терялось. не экономим
> токены и не оставляем задачи на потом — делаем всё планомерно одно за одним, не обращая внимания
> на трудность задачи.»

## Четыре столпа (всё в одном месте)

1. **До конца, ничего «на потом»** — начатое доделывается в этой же сессии (P1).
2. **Полнота охвата — ВСЕ связанные ветки**, не минимум (P2).
3. **Качество, НЕ экономия токенов** — токен-бюджет не основание срезать (P3).
4. **Трудность ≠ повод отложить** — planомерно по одному, независимо от сложности (P4).

---

## 1. Доводим до конца, ничего «на потом» (P1 + P4)
- Начали задачу — **доводим до конца в этой же сессии**. Декомпозируем и делаем **каждый шаг сейчас**.
- Запрещены отговорки: «на следующую сессию», «на потом», «отдельная задача», «complicated»,
  «risky», «good stopping point». **Risky → тщательнее тестируем. Complicated → разбиваем на шаги.**
  Сложность/широта/«это трудно» — НЕ основание пропустить или отложить.
- **Легитимная не-доводка = одно из 5 исключений `no-pre-existing-evasion.md`** (missing-data,
  missing-dep, arch-decision, scope-explosion >10 файлов/>2 систем/>2ч, inaccessible-repo) **ИЛИ**
  переполнение контекста. В этих случаях: пометить blocked + explicit ticket в `PROBLEMS.md`, и
  идти дальше по другим частям. Эти правила делят **одну** таксономию отложки — не противоречат.

## 2. Полнота охвата — доводим ВСЕ связанные ветки, не минимум (P2)
- «До конца» = **не только основная цель, но и все связанные/побочные ветки задачи**. Перед
  завершением: составить **карту** каждой подзадачи / зависимости / смежного эффекта, пройти их
  **по очереди**, и **верифицировать каждую** (измерить, не предположить) — а не остановиться на
  минимуме, который «вроде работает».
- Найденный по пути баг / смежная недоделка = **часть той же задачи** (см. `no-pre-existing-evasion.md`:
  «I fixed A; noticed B and C → fix B and C», не «отдельный PR на потом»).
- Широкую доводку — раскладываем на шаги или **fan-out агентов** (это норма, не расточительство),
  но проходим всё. (Поднято из памяти `task-thoroughness-all-branches` в правило — 2026-06-15.)

## 3. Качество, НЕ экономия токенов (P3)
- **Цель = качество по всем правилам, НЕ экономия токенов.** Ни одна ветка не срезается ради
  «дешевле / быстрее / меньше токенов»: **токен-бюджет — не основание оставить часть работы**
  или сделать хуже. Сложное/важное/необратимое → независимая перепроверка свежим агентом
  (Generator-Evaluator). Полностью — `quality-over-tokens-independent-verify.md`.

## Исключения — только реальный блокер или переполнение контекста
- Реальное переполнение контекста (≈>85%): **создать handoff** (не просто остановиться).
  Путь: `<cwd>/.claude/handoffs/<project-slug>/ГГГГ-ММ-ДД_ЧЧ-ММ_<session-id>.md` + строка в
  `.claude/handoffs/INDEX.md`. `<project-slug>` = kebab-case имя проекта (переиспользовать подпапку).
  `~/.claude/handoffs/` — ТОЛЬКО fallback без проектного cwd. Конвенция — `session-handoff.md`.
- Иначе — один из 5 исключений выше (с тикетом в `PROBLEMS.md`). Всё остальное доделывается.

## Механически (на хуках, активно)
- `stop-phrase-guard.py` (Stop) — блок завершения при фразах-отговорках: deferral / ownership
  dodging / «next session» / «что дальше?»-меню вместо доделывания (`deferral_via_next_step_question`).
  Легитимный стоп — только реальный внешний блокер (назвать явно) или overflow (handoff), не «shall I?».
- `session-handoff-reminder.py` / `session-handoff-check.py` (Stop / SessionStart) — handoff в конце,
  показ свежих при старте.
- `test-gate-stop-hook.py` / `problems-md-validator.py` — не дают закрыть с красными тестами /
  открытыми OPEN-пунктами без тикета.

## Связано (depth / enforcement этого канона)
- `no-pre-existing-evasion.md` — 5-исключений + «fix B and C» (детали P1/P2/P4 + хуки-энфорсмент).
- `quality-over-tokens-independent-verify.md` — P3 + Generator-Evaluator.
- `quality-code.md` — без over-build и без монки-патча; «минимально, но полно». P2/P3 имеют приоритет: «минимализм» = меньше кода на ветку, НЕ предлог недоделать ветку/срезать токены.
- `autonomy-risk-tiers.md` — что делаем без спроса (обратимое) vs ждём (необратимое) — не путать с отложкой.
- `task-thoroughness-all-branches` (memory) — исходник P2 (теперь поднят сюда как правило).
- `session-handoff.md`, memory `claude-system-recovery-hub` — handoff (единственное legit прерывание).
