65 lines
3.7 KiB
Markdown
65 lines
3.7 KiB
Markdown
---
|
||
work_item: ORCH-019
|
||
stage: architecture
|
||
author_agent: architect
|
||
status: proposed
|
||
created_at: 2026-06-10
|
||
model_used: 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 значения). Индекс не требуется
|
||
(чтение по `id` PK в `advance_stage`; агрегат для `GET /queue` — редкий read-only скан).
|
||
</content>
|