architect/standards/1-structure/structure-context-blocks.md

type: standard
aspect: structure
title: "CONTEXT BLOCKS (КОНТЕКСТБЛОКИ)"
version: 1.0.0
date: 2026-02-19
status: active


CONTEXT BLOCKS (КОНТЕКСТБЛОКИ)

Версия: 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 Неделимая задача Синоним, используем "контекстблок"

КРИТЕРИИ КОНТЕКСТБЛОКА

1. РАЗМЕР

Правило: Всё вместе (описание + код + зависимости + тесты) умещается в 95% контекстного окна.

Тип Ограничение Примечание
CODE 150-300 строк функции, классы, модули
DOCS 200-400 строк описание, README, спеки
OPS 50-100 строк скрипты, конфиги, инструкции
TEST 100-200 строк тест-кейсы, fixtures

Время понимания: 2-5 минут на чтение всего материала.

2. АВТОНОМНОСТЬ

Принцип: Содержит ВСЁ необходимое для выполнения, но БЕЗ полного кода зависимостей.

Зависимости — явные ссылки

# ХОРОШО:
Блок: [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

3. ЗАВЕРШЁННОСТЬ

Структура:

Элемент Описание Обязательно
Наименование Юнитблок-имя (код, не описание)
Тип 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]

4. НЕЗАВИСИМОСТЬ

Проверка:

Вопрос Ответ
Можно выполнить БЕЗ ожидания других блоков? ✅ ДА (может быть параллельно)
Можно тестировать в 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]   ← проверка прав

ПРАВИЛА ЗАВИСИМОСТЕЙ

1. Явные ссылки

Правило: Всегда указывать ЧТО именно нужно из другого блока.

# ХОРОШО:
Зависимости:
  - [AUTH_VALIDATE] → функция validate_token()
  - [DB_ORDERS] → класс OrdersRepository
  - PyJWT → для JWT decode

# ПЛОХО:
Зависимости:
  - "весь код из auth.py"
  - "База данных"
  - "внешние библиотеки"

2. Кеширование данных

Правило: Не читать весь блок зависимости, кешировать интерфейсы.

# [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:
    ...

3. Минимизация зависимостей

Правило: Зависеть только от необходимого, не больше.

# ХОРОШО (минимум):
[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]
  - ...

4. Направленность (нет циклов)

Правило: Зависимости = 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 Теория зависимостей

ПРИМЕРЫ КОНТЕКСТБЛОКОВ В ПРОЕКТАХ

Проект: pirotehnika

[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)

Проект: lideravto

[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
Статус: Активный стандарт