6.0 KiB
6.0 KiB
work_item, stage, author_agent, status, created_at, model_used
| work_item | stage | author_agent | status | created_at | model_used |
|---|---|---|---|---|---|
| ORCH-057 | analysis | analyst | ready-for-review | 2026-06-10 | claude-opus-4-8 |
03 — Критерии приёмки (Acceptance Criteria): ORCH-057 — нормализация legacy root-owned файлов
Work Item: ORCH-057 · Repo: orchestrator · Стадия: analysis
Формат: каждый критерий имеет PASS (что должно быть истинно для приёмки) и FAIL (что считается провалом). Любой машинный/ручной reviewer проверяет их буквально по файлам репозитория.
AC-1 — Конвейер стартует без ручного chown (или внятная блокирующая ошибка)
Условие: после миграции контейнера на новый uid первый job не падает сырым git-фаталом на launch.
- PASS: при нормализованных правах worktree создаётся и агент стартует; при НЕнормализованных
правах конвейер выдаёт понятную блокирующую ошибку с диагнозом и лечащей командой (НЕ сырой
fatal: could not create leading directories … Permission denied). - FAIL: на launch всплывает сырой git-fatal/Permission denied без диагноза причины и инструкции.
AC-2 — ensure_worktree даёт actionable-ошибку при отказе доступа
Условие: src/git_worktree.py::ensure_worktree классифицирует ошибки прав.
- PASS: при
Permission denied/could not create leading directories/insufficient permissionподнимаетсяRuntimeError, текст которого называет причину (legacy root-файлы в/repos/_wt/.gitпосле миграции uid) и указывает команду/ссылку на процедуру; ошибки, не связанные с правами, сохраняют прежний контракт. - FAIL: сырой git stderr пробрасывается без диагноза; либо подменяется смысл не-прав-ошибок;
либо
ensure_worktreeпадает необработанно.
AC-3 — Детект несоответствия владельца
Условие: новый леаф src/fs_normalize.py обнаруживает файлы с uid != target_uid в корнях
(/repos/_wt, <repo>/.git/objects, <repo>/.git/worktrees, data/runs).
- PASS: на среде с root-файлами
scan_ownershipвозвращает mismatch=True + затронутые корни; на чистой (1000:1000) среде — mismatch=False (no-op, идемпотентно); леаф never-raise. - FAIL: mismatch не обнаружен на грязной среде / ложный mismatch на чистой / леаф бросает наружу.
AC-4 — Наблюдаемость детекта
Условие: результат детекта виден оператору без падения задачи.
- PASS: при mismatch — структурный лог-WARNING (число/корни/лечащая команда) и Telegram (если
включён); опц. read-only отражение в
GET /queue. - FAIL: mismatch обнаружен, но никак не сообщён; оператор узнаёт о проблеме только по упавшей задаче.
AC-5 — Self-hosting безопасность и нулевая регрессия enduro-trails
Условие: изменение безопасно для общего инстанса.
- PASS: код не рестартит/не роняет прод, не трогает
main/force-push/прод-образ; chown — только при наличии прав; при выключенном kill-switch поведение 1:1 как до ORCH-057; при пустом scope-CSV feature активен только для self-hosting (enduro-trails не затронут); регрессpytest tests/ -qзелёный. - FAIL: любой рестарт/деградация прода из кода задачи; ненулевая регрессия enduro-trails; поведение меняется при выключенном флаге; падение всего регресса.
AC-6 — Инварианты конвейера сохранены
Условие: изменение аддитивно.
- PASS:
STAGE_TRANSITIONS,QG_CHECKS,check_*, machine-verdict-ключи и схема БД — байт-в-байт прежние; новые флаги аддитивны и обратимы. - FAIL: затронут любой exit/под-гейт, изменён machine-key, добавлена миграция схемы.
AC-7 — Документированная процедура нормализации
Условие: процедура воспроизводима.
- PASS:
INFRA.mdсодержит раздел «Миграция uid: обязательная нормализация legacy root-файлов» с точными командами (_wt, оба.git,data/runs) как обязательный шаг миграции; ADR ORCH-057 фиксирует решение и ссылается на процедуру. - FAIL: процедура отсутствует/абстрактна (как было в ORCH-040) либо не покрывает все корни.
Сводная матрица AC ↔ FR/BR
| AC | Покрывает |
|---|---|
| AC-1 | BR-1 / FR-1, FR-3 |
| AC-2 | BR-1, BR-5 / FR-1 |
| AC-3 | BR-2 / FR-2 |
| AC-4 | BR-4 / FR-3 |
| AC-5 | NFR-1, NFR-2, NFR-5 / FR-4 |
| AC-6 | NFR-5 (инварианты) |
| AC-7 | BR-3 / FR-5 |