Files
orchestrator/docs/work-items/ORCH-019/08-data-requirements.md

3.7 KiB
Raw Permalink Blame History

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

08 — Требования к данным (Data Requirements): ORCH-019 — Багфикс-трек

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

⚠️ Общая прод-БД (self-hosting + enduro). Только аддитивные, идемпотентные миграции; существующие контракты таблиц не меняются.


1. Новая колонка tasks.track

Атрибут Значение
Таблица tasks
Колонка track
Тип TEXT
DEFAULT 'full'
Допустимые значения 'full' (дефолт; ВСЕ существующие и не-баг задачи) | 'bug'
Миграция _ensure_column(conn, "tasks", "track", "TEXT DEFAULT 'full'") (идемпотентно, паттерн tasks.cancelled_at ORCH-090)
Размещение рядом с _ensure_column(conn, "tasks", "cancel_requested_at", ...) в init src/db.py

Семантика: тип задачи (полный цикл / багфикс). Записывается в start_pipeline после успешного create_task_atomic (created=True) при is_bug_task==True. Читается в advance_stage для routing-override (D3) — из БД, никогда из сети (NFR-4).

2. Хелперы доступа (src/db.py)

Хелпер Контракт
set_task_track(task_id: int, track: str) -> None UPDATE tasks SET track=? WHERE id=?; идемпотентно; never-raise на уровне вызова в start_pipeline/escalate
get_task_track(task_id: int) -> str SELECT track FROM tasks WHERE id=?; отсутствие/NULL → 'full' (fail-safe → полный цикл)

3. Что НЕ меняется

  • Сигнатура create_task_atomic(plane_id, work_item_id, repo, branch, stage, title)без изменений (задача создаётся как track='full' по DEFAULT, тип проставляется отдельным set_task_track).
  • Существующие колонки tasks (прочие), таблицы jobs, job_deps, agent_runs, coverage_baseline, repo_freeze, tracker_messagesбез изменений.
  • claim_next_jobбез изменений (не читает track; сеть/маршрут в горячем claim не вводятся).

4. Обратная совместимость / откат

  • Колонка аддитивна с безопасным DEFAULT 'full' → существующие строки и enduro-задачи ведут себя как сегодня без обратной записи.
  • Откат фичи (bug_fast_track_enabled=False) не требует удаления колонки: при выключенном флаге track не влияет на маршрут (skips_architectureFalse). Остаточная колонка безвредна.
  • Полный revert PR: миграция _ensure_column идемпотентна; повторный запуск на БД с уже существующей колонкой — no-op.

5. Объём данных / производительность

  • Одна TEXT-колонка на строку tasks (низкая кардинальность: 2 значения). Индекс не требуется (чтение по id PK в advance_stage; агрегат для GET /queue — редкий read-only скан).