5.2 KiB
work_item, stage, author_agent, status, created_at, model_used
| work_item | stage | author_agent | status | created_at | model_used |
|---|---|---|---|---|---|
| ORCH-057 | architecture | architect | proposed | 2026-06-10 | claude-opus-4-8 |
10 — Технические риски: ORCH-057 — нормализация legacy root-owned файлов при миграции на uid 1000
Work Item: ORCH-057 · Repo: orchestrator · Стадия: architecture
Информационный (гейтом не парсится). Перечисляет риски реализации и их митигейшн.
Реестр рисков
| ID | Риск | Вер. | Влия. | Митигейшн |
|---|---|---|---|---|
| TR-1 | Ложная классификация ошибки worktree (D1): не-прав-ошибка распознана как «нет прав» → подмена смысла (FAIL AC-2). | Низ. | Сред. | Узкий набор маркеров (Permission denied/could not create leading directories/insufficient permission/EACCES/EPERM); классификатор — чистая функция с юнит-тестами на обе ветки; не-совпадение → прежний сырой текст без изменений. |
| TR-2 | Дорогой рекурсивный обход больших .git/objects / _wt тормозит старт сервиса. |
Сред. | Сред. | Ранний выход при первом mismatch (булев вердикт); полный count опционален/семплирован; TTL-кэш (fs_scan_cache_ttl_s); вызов best-effort на старте, не в hot-path claim'а; applies() first → обход только при applies. |
| TR-3 | Ложно-блокирующий эффект на enduro-trails через общий /repos. |
Низ. | Выс. | Claim НЕ блокируется (D3 — только наблюдаемость); scope applies() first, пустой CSV → self-hosting only → enduro не сканируется; детект never-raise. |
| TR-4 | Забытый ручной chown: на среде без выполненной процедуры баг всё ещё проявится. |
Сред. | Сред. | Теперь проявляется внятно (D1 actionable-ошибка + startup WARNING/Telegram, не сырой git-fatal); процедура — обязательный пункт чеклиста миграции в INFRA.md; идемпотентна. Остаточный риск принят (код под uid 1000 не может chown). |
| TR-5 | fs_normalize_auto=True под root реинтродуцирует chown-контекст / неожиданный массовый chown. |
Низ. | Сред. | Дефолт False; прод-self бежит под uid 1000 (chown = no-op); auto-режим — opt-in для сред с CAP_CHOWN; init-контейнер отвергнут (ADR-001 D4). |
| TR-6 | never-raise дыра: необработанное исключение детекта роняет старт сервиса всех проектов. | Низ. | Выс. | Леаф never-raise (паттерн serial_gate/post_deploy); startup-вызов в try/except (как lease-reclaim/log-rotation); ошибка → WARNING + консервативный mismatch=False. |
| TR-7 | os.getuid() неприменим в нестандартном рантайме → неверный target_uid → ложный mismatch. |
Низ. | Низ. | Фолбэк fs_target_uid (дефолт 1000); идемпотентность скана; вердикт only-наблюдательный (не блокирует). |
| TR-8 | Кэш устарел после выполнения нормализации → stale mismatch=True в GET /queue. |
Низ. | Низ. | TTL-инвалидизация; ручной POST /fs-normalize/check (force=True) для немедленного пересчёта. |
Сводный вывод
Доминирующий класс — операционные риски разовой нормализации, а не алгоритмические: код только
читает/детектит/диагностирует (chown — операторская процедура под root на хосте). Самостоятельный
техдолг (TR-4) — остаточный и принят: контейнер без root физически не может починить права сам;
решение гарантирует внятность отказа, а не его отсутствие. Self-hosting-безопасность соблюдена
(никакого рестарта прода / касания main / root-контекста в коде). Изменение аддитивно и обратимо
kill-switch'ем → эскалация arch:major-change НЕ требуется (нет новой стадии/QG/таблицы/смены
топологии). Возврат в анализ не нужен — ТЗ удовлетворяется без нарушения принципов архитектуры.
Остаточный риск для прод-конвейера — низкий.