3.7 KiB
3.7 KiB
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_architecture→False). Остаточная колонка безвредна. - Полный revert PR: миграция
_ensure_columnидемпотентна; повторный запуск на БД с уже существующей колонкой — no-op.
5. Объём данных / производительность
- Одна
TEXT-колонка на строкуtasks(низкая кардинальность: 2 значения). Индекс не требуется (чтение поidPK вadvance_stage; агрегат дляGET /queue— редкий read-only скан).