Задача · DP-6-RS-6.1 · ДОЛГ · P0

Контракт слоя агента

Список копируемых путей в составном образе заменяется контрактом слоя: выделенная стадия собирает /opt/agent-layer/ в dev-agent, Dockerfile.agent сводится к одному COPY, HCL ссылается на стабильный тег. Правило распространяется на спека-агента и ревьюера.

Статус: готово · - · все задачи · на главную

Что это за задача

Список копируемых путей в составном образе заменяется контрактом слоя: выделенная стадия собирает /opt/agent-layer/ в dev-agent, Dockerfile.agent сводится к одному COPY, HCL ссылается на стабильный тег. Правило распространяется на спека-агента и ревьюера.

Зависит от: -

Задача из листа «Задачи» проекта (DP-6-RS-6.1, ДОЛГ, приоритет P0). Срез DP-6-RS-6.1: статус — готово.

Тесткейсы

Кейсы, привязанные к этой задаче в листе «Тесткейсы» (колонка «Единица бэклога»):

TC-IDДаноКогдаТогда
TC-DP-6-RS-6.1.1-aобраз роли nikell28/dev-agent собран из Dockerfile с выделенной стадией сборки слояв запущенном образе перечисляется содержимое /opt/agent-layer/ и целевых путей корняв /opt/agent-layer/ присутствуют usr/local/lib/dev-agent/, usr/local/bin/agent-entrypoint.sh, usr/local/bin/goose, root/.config/goose/config.yaml, workspace/.goosehints; те же файлы присутствуют в корне образа по путям /usr/local/lib/dev-agent/, /usr/local/bin/agent-entrypoint.sh, /usr/local/bin/goose, /root/.config/goose/config.yaml, /workspace/.goosehints
TC-DP-6-RS-6.1.1-bобраз роли dev-agent собран из Dockerfile с выделенной стадией сборки слояв образе выполняется /usr/local/bin/goose --version по абсолютному путикоманда завершается кодом возврата 0 и печатает версию. Разрешение имени goose по PATH — свойство составного образа, покрыто TC-DP-6-RS-6.1.3-a (отсутствие ENV PATH), -b (бинарь в /usr/local/bin) и -c (запуск Goose достигнут)
TC-DP-6-RS-6.1.1-cв исходники репозитория dev-agent добавлен новый файл в lib/; Dockerfile не правилсяобраз роли пересобираетсяфайл присутствует и в /opt/agent-layer/usr/local/lib/dev-agent/, и в /usr/local/lib/dev-agent/ корня образа; перечень путей раскладки встречается в Dockerfile один раз
TC-DP-6-RS-6.1.1-dрепозиторий dev-agent на HEAD задачичитается docs/agent-layer-contract.mdдокумент перечисляет состав слоя (пять путей) с целевой раскладкой и называет требование бинарной совместимости базы потребителя с базой образа роли
TC-DP-6-RS-6.1.2-aрабочее дерево dev-agent на коммите C, registry доступен; прогон помечен явным признаком публикации (маркер pytest либо отдельная цель); наличия REGISTRY_ADDR для запуска недостаточновыполняется цель Makefile push-dev-agentв registry разрешаются обе координаты — dev-agent:v0.1.0 и dev-agent:<SHA коммита C>; обе дают один digest
TC-DP-6-RS-6.1.2-bтот же прогон цели пуша завершён; прогон помечен явным признаком публикации (маркер pytest либо отдельная цель); наличия REGISTRY_ADDR для запуска недостаточнотег коммита опубликованного образа сравнивается с git rev-parse HEAD репозитория dev-agentзначения совпадают
TC-DP-6-RS-6.1.3-adocker/Dockerfile.agent в nikell28/mr_meeseeks на HEAD задачифайл читаетсясодержит ровно один COPY --from=agent с источником /opt/agent-layer/ и целью /; директивы ENV PATH нет; build-arg'и DEV_ENV_IMAGE, AGENT_IMAGE и ENTRYPOINT на месте
TC-DP-6-RS-6.1.3-bсоставной образ dev-agent-repo собран поверх образа роли со слоемперечисляется содержимое собранного образаприсутствуют /usr/local/lib/dev-agent/task_result.py и /usr/local/bin/goose
TC-DP-6-RS-6.1.3-dтот же составной образ (регрессия решений 2026-07-31 о сборке идентичности и explicit-списке расширений)читаются /workspace/.goosehints и /root/.config/goose/config.yaml.goosehints завершается CORE-разделом; config.yaml — поимённый список расширений, extensionmanager выключен
TC-DP-6-RS-6.1.4-aрабочее дерево mr_meeseeks на коммите C, образ роли опубликованвыполняется цель Makefile push-agent-repoв registry разрешаются dev-agent-repo:<стабильный тег> и dev-agent-repo:<SHA коммита C>; обе координаты дают один digest
TC-DP-6-RS-6.1.4-bnomad/dev-agent.nomad.hcl на HEAD задачифайл читаетсяconfig.image указывает стабильный тег составного образа; подстроки dev-agent-repo:latest в файле нет. Координаты образов, собираемых вне скоупа задачи (repo-fetch, temporal-signal-cli), кейсом не покрываются — решение 2026-08-05, задача DP-9-RS-6.1
TC-DP-6-RS-6.1.4-cсоставной образ опубликован под стабильным тегом, джоба отрендеренавыполняется nomad job run на отрендеренной джобеджоба регистрируется, ошибки разрешения образа нет
TC-DP-6-RS-6.1.4-D1рабочее дерево mr_meeseeks, в котором git rev-parse HEAD не отдаёт SHA (каталог .git отсутствует либо git недоступен); REGISTRY заданвыполняется цель Makefile push-agent-repo либо push-allцель завершается ненулевым кодом на разборе Makefile, до выполнения рецепта; ни одна команда docker не вызывается; сообщение называет неопределённый тег коммита. Цели build-agent-repo, build-dev-env и rmi-agent-repo в том же дереве отрабатывают. Цель push-signal-cli из перечня негейтованных исключена: задачей DP-9-RS-6.1 она заводится под тот же гейт, её поведение на этом входе проверяет TC-DP-9-RS-6.1.1-d.
TC-DP-6-RS-6.1.6-aсоставной образ, собранный по контракту слоя, опубликован под стабильным тегом; джоба dev-agent зарегистрированадиспатчится шаг дев-пайплайнаmain-таск агента стартует, preflight не отдаёт код возврата 2, аллокация доходит до записи результата
TC-DP-6-RS-6.1.6-bтот же прогон; агент записал task_result.json со status = success и заполненными commit_sha, commit_message, mr_title, mr_descriptionворкер принимает сигнал agent_doneresult.json содержит exit_code, status, output, commit_sha, commit_message, mr_title, mr_description
TC-DP-6-RS-6.1.6-cв lib/ репозитория dev-agent добавлен файл, образ роли переиздан под тем же стабильным тегом; в mr_meeseeks правок нетсоставной образ пересобирается и диспатчитсяфайл присутствует в /usr/local/lib/dev-agent/ диспатченного образа