41 lines
3.1 KiB
Markdown
41 lines
3.1 KiB
Markdown
# 08 — Требования к данным / схеме БД (ORCH-021)
|
||
|
||
## Вывод: миграция БД НЕ требуется
|
||
Состояние наблюдения хранится в **sentinel-файлах** (restart-safe, без миграции —
|
||
по образцу ORCH-36/53/58), а не в таблицах. Реестры и схема не меняются (AC-12).
|
||
|
||
## 1. Существующие таблицы — без изменений
|
||
- `events`, `tasks`, `agent_runs`, `jobs` — структура не меняется.
|
||
- В `tasks` НЕ вводится колонка статуса/окна наблюдения (намеренно — миграция на
|
||
проде = риск, как обосновано в adr-0007; альтернатива отклонена в ADR-001 §Альтернативы).
|
||
|
||
## 2. Очередь `jobs` — переиспользование, без схемы
|
||
- `post-deploy-monitor` — новый **job-kind** (значение в существующей колонке
|
||
`agent`/`task_content`), НЕ новая колонка. Ставится через существующий
|
||
`enqueue_job(..., available_at_delay_s=...)` (ORCH-1).
|
||
- Счётчик тиков/деферов восстанавливается из jobs-очереди (как
|
||
`_deploy_finalize_defer_count` считает по `task_content LIKE`), restart-safe.
|
||
|
||
## 3. Sentinel-состояние (файлы, не БД)
|
||
State-dir `.post-deploy-state-<repo>/<work_item_id>/` на `settings.repos_dir`
|
||
(по образцу `.deploy-state-*`):
|
||
| Файл | Назначение |
|
||
|------|------------|
|
||
| `armed` | наблюдение заармлено (идемпотентность арма; калька `INITIATED`) |
|
||
| `series` | JSON-список результатов опросов (счётчики health-fail / 5xx; restart-safe) |
|
||
| `done` | наблюдение завершено (защита от повторной обработки) |
|
||
|
||
Все обращения — never-raise (по образцу `self_deploy.has_marker`/`write_marker`/
|
||
`read_result`). Отсутствие/битость файла → консервативный фоллбэк, не исключение.
|
||
|
||
## 4. Артефакт `16-post-deploy-log.md` — файл репозитория, не БД
|
||
Машиночитаемый YAML-frontmatter (`post_deploy_status`, `action_taken`, `window_s`,
|
||
`checks_total`, `checks_failed`) пишется best-effort в `docs/work-items/<id>/`; в БД
|
||
не реплицируется. Источник для петли уроков ORCH-8 (BR-10).
|
||
|
||
## 5. Очистка состояния
|
||
По завершении окна / реакции `done`-маркер ставится; state-dir можно чистить
|
||
best-effort (по образцу `self_deploy.clear_state`) — необязательно для корректности,
|
||
но желательно для гигиены. Stale-`armed` без `done` после краха → виден в `/queue`
|
||
как «активное наблюдение» и доигрывается восстановленным job'ом.
|