type: standard
aspect: structure
title: "CONTEXT BLOCKS (КОНТЕКСТБЛОКИ)"
version: 1.0.0
date: 2026-02-19
status: active
Версия: 1.0.0
Дата: 2026-02-01
Контекстблок (Context Block, Context Unit) — квант работы, который умещается в голове Claude.
Единица декомпозиции проекта по ограничению контекста LLM:
- Помещается в контекст (можно прочитать всё за один раз)
- Автономный (содержит всё необходимое)
- Завершённый (границы: вход, выход, тест, критерии готовности)
- Независимый (можно делать отдельно, параллельно)
- Исполняемый (от начала до конца без переключения)
| Термин | Язык | Использование | Пример |
|---|---|---|---|
| Контекстблок | РУ | Основной, в документах | "Разбей на контекстблоки" |
| Context Unit (CU) | EN | Стандартный, в коде | CU_AUTH_VALIDATE |
| Юнитблок | РУ | Краткая форма | "Создай юнитблок для emails" |
| Экзеблок | РУ | Execution Block | "Два экзеблока в параллель" |
| Работа | РУ | Синоним, неформальный | "Разбей работу на части" |
| Термин | Источник | Значение | Отличие |
|---|---|---|---|
| Work Package | PMBOK | Единица планирования PM | ≠ контекстблок, на уровень выше |
| Memory Block | Letta/LLM | Единица памяти в LLM | Похож, но только память |
| Deliverable Unit | Contracting | Единица поставки | Более широко, может = многим блокам |
| Sprint Task | Agile | Задача спринта | ≠ контекстблок, зависит от спринта |
| Atomic Task | Project Mgmt | Неделимая задача | Синоним, используем "контекстблок" |
Правило: Всё вместе (описание + код + зависимости + тесты) умещается в 95% контекстного окна.
| Тип | Ограничение | Примечание |
|---|---|---|
| CODE | 150-300 строк | функции, классы, модули |
| DOCS | 200-400 строк | описание, README, спеки |
| OPS | 50-100 строк | скрипты, конфиги, инструкции |
| TEST | 100-200 строк | тест-кейсы, fixtures |
Время понимания: 2-5 минут на чтение всего материала.
Принцип: Содержит ВСЁ необходимое для выполнения, но БЕЗ полного кода зависимостей.
# ХОРОШО:
Блок: [ORDERS_CREATE]
Зависимости:
- [AUTH] для validate_user()
- [DB] для orders table
# ПЛОХО:
Зависимости:
- "весь код из AUTH"
Из зависимостей берём только интерфейсы и критические данные:
# КЕШИРОВАНИЕ вместо полного чтения
# [AUTH] блок:
def validate_token(token: str) -> Dict[str, Any]:
"""
Возвращает: {user_id, role, exp}
Ошибки: TokenExpired, TokenInvalid, TokenMissing
"""
pass
# В контекстблоке:
# Копируем сигнатуру + ошибки, НЕ весь auth.py
Структура:
| Элемент | Описание | Обязательно |
|---|---|---|
| Наименование | Юнитблок-имя (код, не описание) | ✅ |
| Тип | CODE / DOCS / OPS / TEST / DESIGN / CONTENT | ✅ |
| Описание | Что делает (2-3 предложения) | ✅ |
| Границы | Что входит, что НЕ входит | ✅ |
| Вход | Данные, параметры, зависимости | ✅ |
| Выход | Результат, интерфейс, файлы | ✅ |
| Зависимости | Другие блоки, внешние библиотеки | ✅ |
| Тесты | Критерии проверки, тест-кейсы | ✅ |
| Готовность | Чеклист завершения | ✅ |
Пример:
Контекстблок: AUTH_VALIDATE
Тип: CODE
Размер: 180 строк
Описание:
Валидация JWT токенов пользователей.
Проверка подписи, срока действия, прав.
Границы:
ДЕЛАЕТ:
- Проверить подпись JWT
- Проверить срок действия
- Вернуть user_id + role
НЕ ДЕЛАЕТ:
- Генерация токенов (это [TOKEN_CREATE])
- Обновление токенов (это [TOKEN_REFRESH])
Вход:
- token: str (JWT)
- secret_key: str (из [CONFIG])
Выход:
- success: {user_id: int, role: str, exp: int}
- error: TokenExpired | TokenInvalid | TokenMissing
Зависимости:
- PyJWT (библиотека)
- [CONFIG] для SECRET_KEY
- [DB_USER] для проверки существования пользователя
Тесты (критерии проверки):
✓ Валидный токен → user_id
✓ Истекший токен → TokenExpired
✓ Неверная подпись → TokenInvalid
✓ Отсутствует токен → TokenMissing
✓ Повреждённый JSON → TokenMissing
✓ Type check (mypy pass)
Готовность:
- [ ] Код написан
- [ ] Все тесты green
- [ ] Type check mypy pass
- [ ] Docstring заполнены
- [ ] Интегрирован в [AUTH_MIDDLEWARE]
Проверка:
| Вопрос | Ответ |
|---|---|
| Можно выполнить БЕЗ ожидания других блоков? | ✅ ДА (может быть параллельно) |
| Можно тестировать в isolation? | ✅ ДА (mock зависимости) |
| Можно выполнить → выполнить другой блок → вернуться? | ✅ ДА (независимость) |
Фраза проверки: "Могу ли я дать этот блок отдельному разработчику и он сделает?"
| Тип | Описание | Размер | Содержимое | Пример |
|---|---|---|---|---|
| CODE | Написание кода | 150-300 строк | Функции, классы, модули | auth.py (валидация) |
| DOCS | Документирование | 200-400 строк | README, спеки, дизайн-доки | PROJECT.md (архитектура) |
| OPS | Операции, инсталляция | 50-100 строк | Скрипты, конфиги, инструкции | deploy.sh |
| DESIGN | Дизайн, UI/UX | N/A | Макеты, сетки, стили | header.figma |
| CONTENT | Контент, копирайтинг | 300-500 слов | Тексты, описания, сценарии | landing.md |
| TEST | Тестирование | 100-200 строк | Тест-кейсы, fixtures, сценарии | test_auth.py |
| RESEARCH | Исследование | 200-300 слов | Анализ, проверка, экспертиза | RESEARCH_API.md |
| INFRA | Инфраструктура | 50-150 строк | Конфиги, сетевые, базы | nginx.conf |
1. SPEC ← Определить границы, вход/выход
↓
2. IMPL ← Реализовать (код/документ/дизайн)
↓
3. TEST ← Протестировать (самостоятельный тест)
↓
4. INTEGRATE ← Интегрировать с другими блоками
↓
5. DELIVER ← Отдать заказчику / merge в main
Движение блока по стадиям:
STATUS: pending
→ SPEC (определены границы)
→ in_progress (выполняется)
→ testing (на тестировании)
→ integrate (интеграция)
→ completed (готово)
Блок: AUTH_VALIDATE
Тип: CODE
Размер: 180 строк Python
Описание: |
Валидация JWT токенов с проверкой подписи,
срока действия и прав доступа.
Вход:
- token: str (JWT)
- secret_key: str (из конфига)
Выход:
- success: {user_id: int, role: str, exp: int}
- error: TokenExpired | TokenInvalid | TokenMissing
Зависимости:
- PyJWT (externe)
- [CONFIG] для SECRET_KEY
- [DB_USER] для проверки пользователя
Тесты:
✓ Валидный токен → user_id + role
✓ Истекший токен → TokenExpired
✓ Неверная подпись → TokenInvalid
✓ Отсутствует токен → TokenMissing
✓ Повреждённый JSON → TokenMissing
Готовность:
- [ ] Функция написана
- [ ] Все 5 тестов green
- [ ] mypy type check pass
- [ ] Docstring есть
- [ ] Интегрирована в middleware
Блок: ORDERS_SYSTEM ← ПРОБЛЕМА
Проблема:
- 800+ строк кода
- Содержит: создание, обновление, удаление, список, статусы, доставку
- Нельзя протестировать в isolation
- Нельзя делать параллельно
Решение: Разбить на 5 блоков:
[ORDERS_CREATE] ← создание (180 строк)
[ORDERS_UPDATE] ← обновление (150 строк)
[ORDERS_DELETE] ← удаление (80 строк)
[ORDERS_LIST] ← список + фильтры (200 строк)
[ORDERS_CANCEL] ← отмена + статусы (150 строк)
Блок: AUTH ← ПРОБЛЕМА
Проблема:
- Граница не определена
- Что входит? Токены? Сессии? Permissions?
- Что выходит? Строка? Объект?
- Непонятно где заканчивается AUTH и начинается MIDDLEWARE
Решение: Разбить чётко:
[AUTH_VALIDATE] ← валидация токена
[AUTH_GENERATE] ← генерация токена
[AUTH_REFRESH] ← обновление токена
[AUTH_PERMISSIONS] ← проверка прав
Правило: Всегда указывать ЧТО именно нужно из другого блока.
# ХОРОШО:
Зависимости:
- [AUTH_VALIDATE] → функция validate_token()
- [DB_ORDERS] → класс OrdersRepository
- PyJWT → для JWT decode
# ПЛОХО:
Зависимости:
- "весь код из auth.py"
- "База данных"
- "внешние библиотеки"
Правило: Не читать весь блок зависимости, кешировать интерфейсы.
# [AUTH_VALIDATE] блок:
def validate_token(token: str) -> Dict[str, Any]:
"""
Returns: {user_id, role, exp}
Raises: TokenExpired, TokenInvalid, TokenMissing
"""
pass
# [ORDERS_CREATE] блок (зависит от AUTH_VALIDATE):
# Копируем только СИГНАТУРУ + ОШИБКИ из AUTH_VALIDATE
# Не копируем весь auth.py
CACHED_VALIDATE_TOKEN = {
'signature': 'validate_token(token: str) -> Dict',
'returns': {'user_id': 'int', 'role': 'str', 'exp': 'int'},
'errors': ['TokenExpired', 'TokenInvalid', 'TokenMissing']
}
# Используем в коде:
from auth import validate_token
try:
user = validate_token(token)
except TokenExpired:
...
Правило: Зависеть только от необходимого, не больше.
# ХОРОШО (минимум):
[ORDERS_CREATE] зависит от:
- [AUTH_VALIDATE] (для проверки пользователя)
- [DB_ORDERS] (для сохранения)
- [NOTIFY] (для уведомления)
# ПЛОХО (слишком много):
[ORDERS_CREATE] зависит от:
- [AUTH_VALIDATE]
- [AUTH_GENERATE]
- [AUTH_REFRESH]
- [AUTH_PERMISSIONS]
- [DB_ORDERS]
- [DB_USERS]
- [DB_PRODUCTS]
- [CACHE_ORDERS]
- [NOTIFY_EMAIL]
- [NOTIFY_SMS]
- [NOTIFY_TELEGRAM]
- [ANALYTICS]
- [LOGGING]
- ...
Правило: Зависимости = DAG (directed acyclic graph), без циклов.
# ХОРОШО (DAG):
[AUTH_VALIDATE] ← нет зависимостей
↓
[ORDERS_CREATE] (зависит от AUTH)
↓
[ORDERS_NOTIFY] (зависит от ORDERS)
# ПЛОХО (цикл):
[AUTH] → [DB_USERS]
↑ ↓
← ← ← ← ←
# SPEC этап
- [ ] Блок имеет имя (KEB_NAME)
- [ ] Блок имеет тип (CODE / DOCS / OPS / ...)
- [ ] Границы чётко определены (что делает / что НЕ делает)
- [ ] Размер ≤ лимиту (300 строк код / 400 строк docs)
- [ ] Вход описан (параметры, данные)
- [ ] Выход описан (результат, интерфейс)
- [ ] Зависимости явные (ссылки на блоки)
- [ ] Тесты определены (критерии проверки, 3-5 тест-кейсов)
- [ ] Может быть выполнен отдельно (проверка независимости)
# IMPL + TEST этап
- [ ] Код/документ написан
- [ ] Все тесты green (если критерии = тесты)
- [ ] Type check pass (если CODE)
- [ ] Нет TODO/FIXME (если не запланировано)
- [ ] Docstring/комментарии есть
- [ ] Готов к интеграции с другими блоками
## Контекстблок: [ИМЯ]
### SPEC (определение)
- [ ] Размер ≤ 300 строк (код) или ≤ 400 строк (docs)
- [ ] Границы чёткие (что делает / что НЕ делает)
- [ ] Зависимости явно указаны (ссылки на блоки)
- [ ] Важные данные из зависимостей кешированы
- [ ] Тесты определены (3-5 критериев проверки)
- [ ] Можно выполнить независимо (без других блоков)
- [ ] Готовность измеряема (чеклист + критерии)
### IMPL (реализация)
- [ ] Код/документ написан
- [ ] Все тесты green
- [ ] Нет TODO/FIXME (или запланировано)
- [ ] Docstring/комментарии есть
- [ ] Type check pass (если CODE)
### INTEGRATE (интеграция)
- [ ] Зависимости установлены
- [ ] Интеграционные тесты pass
- [ ] Документация обновлена
- [ ] Готово к деплою
| Метрика | Хорошо | Плохо |
|---|---|---|
| Размер | 150-300 строк (код) | >500 строк |
| Зависимости | 2-4 блока | >8 блоков |
| Тесты | 3-5 критериев | 0 или >10 |
| Время выполнения | 30-120 минут | >8 часов |
| Понимание | 2-5 минут прочтения | >15 минут |
| Независимость | Можно делать параллельно | Ждёт других блоков |
| Документ | Путь | Назначение |
|---|---|---|
| Work Breakdown Structure | PMBOK Guide | Иерархия работ в PM |
| Context Windows | Anthropic Claude | Ограничения контекста LLM |
| Memory Blocks | Letta Framework | Архитектура памяти LLM |
| Atomic Tasks | Getting Things Done | Теория неделимых задач |
| DAG (Directed Acyclic Graph) | Wikipedia | Теория зависимостей |
[PIM_CATEGORY_IMPORT]
- Тип: CODE
- Размер: 250 строк
- Зависимости: [API_1C], [DB_PIM], [VALIDATE]
- Тесты: 4 критерия (валидный CSV, пропуски, дубли, ошибки)
[PIM_PRODUCT_SYNC]
- Тип: CODE
- Размер: 280 строк
- Зависимости: [API_OZON], [DB_PIM], [CATEGORY_IMPORT]
- Тесты: 5 критериев (новые товары, обновления, цены, статусы, удаления)
[OZON_ORDERS_FETCH]
- Тип: OPS
- Размер: 80 строк (скрипт)
- Зависимости: [API_OZON], [DB_ORDERS], [SCHEDULER]
- Тесты: 3 критерия (успешная fetch, retry, ошибка API)
[CATALOG_ARCHITECTURE]
- Тип: DOCS
- Размер: 350 строк
- Зависимости: [PROJECT.md], [API_DOCS]
- Тесты: Документ полный, ссылки работают
[TRUCKS_CLASSIFIER]
- Тип: CODE
- Размер: 220 строк
- Зависимости: [ML_MODEL], [DB_TRUCKS], [API_1C]
- Тесты: 4 критерия (известные модели, неизвестные, ошибки, производительность)
Версия: 1.0.0
Дата создания: 2026-02-01
Статус: Активный стандарт