---
work_item: ORCH-098
stage: architecture
author_agent: architect
status: proposed
created_at: 2026-06-10
model_used: claude-opus-4-8
---

# 07 — Инфра-требования: ORCH-098 — машинный журнал уроков `lessons`

Work Item: **ORCH-098** · Repo: **orchestrator** · Стадия: architecture

> When-applicable. Топология **не меняется**; файл создан для аудитопригодности (новая env-переменная).

## I-1. Топология / окружения
**N/A.** Новых контейнеров/портов/сети/томов нет. Таблица `lessons` живёт в существующей общей
SQLite-БД (тот же том `./data`), эндпоинты обслуживаются текущим процессом `orchestrator` (8500) /
`orchestrator-staging` (8501). Принцип «всё в Docker на одном сервере mva154» — соблюдён.

## I-2. Переменные окружения / секреты
Новые env (pydantic `BaseSettings`, авто-биндинг `ORCH_*`), все с безопасными дефолтами:

| Env | Дефолт | Назначение |
|---|---|---|
| `ORCH_LESSONS_ENABLED` | `true` | kill-switch журнала (NFR-2); `false` → полная инертность |
| `ORCH_LESSONS_DEDUP_WINDOW_S` | `3600` | окно дедупа автозаписи (ADR-001 D4) |
| `ORCH_LESSONS_QUERY_LIMIT_DEFAULT` | `100` | дефолтный `limit` для `GET /lessons` |

**`lessons_repos` СОЗНАТЕЛЬНО не вводится** — журнал observer-only и не скоупится по репо
(ADR-001 D2). Секретов нет. `.env.example` дополнить тремя ключами для документируемости (значения —
дефолтные, не секреты).

## I-3. Деплой / рестарт
- Изменение применяется штатным конвейером: **обязательный staging-гейт (8501) перед прод-деплоем**
  орка (self-hosting инвариант). Прод-контейнер **не рестартить вне процедуры деплоя стадии**
  `deploy`/`Confirm Deploy` (ORCH-059) — конвейер всех проектов встанет.
- Таблица `lessons` создаётся идемпотентно при старте (`init_db()`) — на первом штатном запуске
  нового образа, **без отдельной ручной миграции** (restart-safe, NFR-4). На живой БД enduro не
  затронут.
- Откат — `ORCH_LESSONS_ENABLED=false` (мгновенная инертность) либо revert образа.

## I-4. CI/CD
**Без изменений** в `.gitea/workflows/`. Новые тесты `tests/test_lessons.py` исполняются штатным
шагом `pytest tests/ -q`. Новых системных/pip-зависимостей нет (raw SQL на stdlib `sqlite3`).
