From 15d551592516d9554807b9184cafcac419cf4bfd Mon Sep 17 00:00:00 2001 From: Dmitry Dementiev Date: Fri, 10 Jul 2026 16:51:17 +0300 Subject: [PATCH] =?UTF-8?q?docs(skill):=20=D1=8D=D0=BA=D0=BE=D0=BD=D0=BE?= =?UTF-8?q?=D0=BC=D0=B8=D1=8F=20=D0=BA=D0=BE=D0=BD=D1=82=D0=B5=D0=BA=D1=81?= =?UTF-8?q?=D1=82=D0=B0=20=D0=BE=D1=80=D0=BA=D0=B5=D1=81=D1=82=D1=80=D0=B0?= =?UTF-8?q?=D1=82=D0=BE=D1=80=D0=B0=20=D0=BF=D0=BE=20=D1=80=D0=B5=D1=82?= =?UTF-8?q?=D1=80=D0=BE=20=D0=BF=D1=80=D0=BE=D0=B3=D0=BE=D0=BD=D0=B0=20202?= =?UTF-8?q?6-07-10?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Зачем: - ретро трёх циклов конвейера показало: находки ревью проходили через контекст оркестратора до шести раз, review-промпт дублировался, ~7 пустых ходов на idle-пингах teammate-ревьюера. - Что: - SKILL.md: механика «индекс у оркестратора, нагрузка файлами» — вердикты в файлы обменного temp-каталога, fix-промпт конкатенацией, один канонический review-промпт на обоих ревьюеров, idle-пинги как шум; - новый references/prompt-templates.md — скелеты четырёх промптов; - codex-exec.md: сборка промптов cat'ом, боевая модель gpt-5.5 явно (фронтир из конфига не наследовать); - codex-sandbox-fix-handover: рабочий AppArmor-фикс (ловушка memfd, профиль на бинарь codex), проверен на обоих режимах; - lessons.md: датированные записи ретро, казуса Sol и memfd. - Проверка: - чтение SKILL.md и references/, следующий прогон конвейера. Co-Authored-By: Claude Fable 5 --- .../skills/claude-subagent-playbook/SKILL.md | 59 ++++++-- .../references/codex-exec.md | 22 ++- .../codex-sandbox-fix-handover-2026-07-10.md | 25 +++- .../references/lessons.md | 38 +++++ .../references/prompt-templates.md | 136 ++++++++++++++++++ 5 files changed, 258 insertions(+), 22 deletions(-) create mode 100644 agents/.agents/skills/claude-subagent-playbook/references/prompt-templates.md diff --git a/agents/.agents/skills/claude-subagent-playbook/SKILL.md b/agents/.agents/skills/claude-subagent-playbook/SKILL.md index d0ae688..c74f19d 100644 --- a/agents/.agents/skills/claude-subagent-playbook/SKILL.md +++ b/agents/.agents/skills/claude-subagent-playbook/SKILL.md @@ -29,7 +29,17 @@ description: >- - **Оркестратор (ты)** — план, постановка, синтез, коммит. Работай по **индексу** (правило `/coordinator-loop`): в твой контекст входят вердикты и находки `файл:строка`, а не diff, не полные логи и не нарратив. Шумные - команды — через файл-лог, в контекст только сводку. + команды — через файл-лог, в контекст только сводку. **Индекс — у тебя, + полезная нагрузка — файлами между агентами**: вердикты, отчёты и промпты + живут в `$SCRATCH` (обменный temp-каталог прогона с полуслучайным + префиксом — скретчпад сессии или `mktemp -d`; детали — в + [references/prompt-templates.md](references/prompt-templates.md)), ты + читаешь их один раз и дальше передаёшь путями и конкатенацией (`cat`), а + не переписываешь Write'ом — каждое переписывание дублирует контент в + твоём контексте (ретро 2026-07-10: находки ревью проходили через + оркестратора до шести раз). SendMessage возвращает эхом + весь текст сообщения — teammate'у шли короткое (вердикт, путь, вопрос), + длинное — файлом, который он прочтёт сам. - **Codex** — реализация кода. У пользователя лимиты Codex больше, код он пишет в целом лучше, но верхнеуровнево планирует хуже — поэтому декомпозиция и постановка остаются у тебя. Механика вызова — @@ -94,25 +104,39 @@ description: >- Один писатель в дереве: пока Codex пишет — никто больше (казус с форвардером — в [references/lessons.md](references/lessons.md)). Готово, когда Codex вернул отчёт, а в дереве нет правок, которых он не называл. -4. **Два слепых ревью параллельно.** Каждому: путь к задаче-файлу + фокус - (математика/краевые случаи, соответствие критериям, честность тестов, - артефакты). Друг про друга не знают, твои выводы им не пересказывай. - Обоим поощряй безопасные эмпирические проверки (воспроизвести краевой - случай вне репо, сходить в документацию) — вердикт заметно твёрже; - менять исходники и окружение нельзя, после ревью сверь дерево - (`git status`). Клод-ревьюеру можно поручить смотреть артефакты - (картинки из ноутбука). Этап закрыт, когда оба вердикта у тебя индексами - и дерево нетронуто; вердикт без единой находки засчитывай только после - проверки его лога — работа, не отписка +4. **Два слепых ревью параллельно.** Промпт — **один канонический файл в + `$SCRATCH` на оба ревью** (скелет и обёртки вызова — + [references/prompt-templates.md](references/prompt-templates.md)): Codex + получает его через stdin, Клод-субагенту в prompt — короткая обёртка + «прочитай файл X и выполни; индекс — в файл Y» (не дублируй текст + промпта в параметре — это второй полный экземпляр в твоём контексте). + Содержание: путь к задаче-файлу + фокус (математика/краевые случаи, + соответствие критериям, честность тестов, артефакты). Друг про друга не + знают, твои выводы им не пересказывай. Обоим поощряй безопасные + эмпирические проверки (воспроизвести краевой случай вне репо, сходить в + документацию) — вердикт заметно твёрже; менять исходники и окружение + нельзя. Вердикты — файлами с **разными путями**: у Codex это его + `-o`-отчёт, Клод-ревьюеру обёртка разрешает запись файла вердикта в + `$SCRATCH` (вне репо — мандату не противоречит), финальным актом — + SendMessage только со строкой VERDICT, счётчиками и путём: его + idle-уведомления не содержат результата, не жди из них ничего. После + ревью сверь дерево (`git status`). Клод-ревьюеру можно поручить смотреть + артефакты (картинки из ноутбука). Этап закрыт, когда оба вердикта у тебя + индексами и дерево нетронуто; вердикт без единой находки засчитывай + только после проверки его лога — работа, не отписка (приём — в [references/codex-exec.md](references/codex-exec.md)). 5. **Синтез и триаж.** Сведи вердикты по индексам: пересечения, противоречия. Пофиндинговый триаж — у **исполнителя**, не у тебя (правило `/claude-team-review` и `/coordinator-loop`: судит тот, у кого контекст кода): перешли Codex индекс находок **дословно**, он чинит или **аргументированно отклоняет** — через контракт и тест, не голословно; - промпт починки — «закрой перечисленное, больше ничего не меняй». Ты судишь - уровнем задачи: принять риск / вне скоупа. Повторная проверка — узкая - (см. «Свежесть»). Этап закрыт, когда по каждой находке обоих ревью есть + промпт починки — «закрой перечисленное, больше ничего не меняй». + «Дословно» — это конкатенация: `cat шапка.md вердикт-A.md вердикт-B.md > + fix-prompt.md` Bash'ем; Write'ом ты бы переписал те же находки в контекст + ещё раз. Свои замечания к триажу — только шапкой. Ты судишь уровнем + задачи: принять риск / вне скоупа. Повторная проверка — узкая (см. + «Свежесть»); её промпт не пересказывает резолюции — ссылается на файл + отчёта исполнителя. Этап закрыт, когда по каждой находке обоих ревью есть решение: починено и перепроверено — или отклонено с доводом. 6. **Финал.** Артефакты проверь **своими глазами** (счётчик тестов, картинки, прогон CLI) — ревью не заменяет твою приёмку. Обнови чекбоксы и статус @@ -129,7 +153,9 @@ description: >- (механика — [references/codex-exec.md](references/codex-exec.md)). Подстраховка от молчаливой смерти агента — ScheduleWakeup сроком дольше ожидаемой длительности: по пробуждению смотри логи сам, по приходу -результата таймер снимай. +результата таймер снимай. Idle-уведомления teammate-субагентов — шум, а не +событие: не докладывай о них пользователю и не действуй по ним, если +результат уже получен (ретро 2026-07-10: ~7 пустых ходов на idle-пингах). ## Соседние скиллы @@ -150,6 +176,9 @@ description: >- - [references/codex-exec.md](references/codex-exec.md) — прямой `codex exec`: сквозные правила (шум в файлы, thread_id, resume по id, проверка отписки), ветки исполнитель/ревьюер/триаж, раннер для переваривания шума. +- [references/prompt-templates.md](references/prompt-templates.md) — скелеты + четырёх промптов конвейера (задача/ревью/триаж/перепроверка): пиши только + параметрический блок на задачу, boilerplate не переписывай. - [references/lessons.md](references/lessons.md) — датированная эмпирика прогонов: что поймал каждый этап, казусы, цифры. - [references/claude-agents.md](references/claude-agents.md) — определения diff --git a/agents/.agents/skills/claude-subagent-playbook/references/codex-exec.md b/agents/.agents/skills/claude-subagent-playbook/references/codex-exec.md index 76e5c2a..97b287c 100644 --- a/agents/.agents/skills/claude-subagent-playbook/references/codex-exec.md +++ b/agents/.agents/skills/claude-subagent-playbook/references/codex-exec.md @@ -10,14 +10,24 @@ ## Сквозные правила (любая ветка) -- **Промпт — файлом, шум — в файлы.** Промпт пиши Write'ом в `$SCRATCH` и - подавай через stdin (`-`); stdout/stderr — редиректами туда же. В контекст - оркестратора читается ровно один файл — финальный отчёт из `-o`. +- **Промпт — файлом, шум — в файлы.** Промпт подавай через stdin (`-`); + stdout/stderr — редиректами в `$SCRATCH`. В контекст оркестратора + читается ровно один файл — финальный отчёт из `-o`. Промпт **собирай + конкатенацией, а не переписывай**: скелеты — в + [prompt-templates.md](prompt-templates.md), Write'ом пиши только + параметрический блок задачи; чужой контент (вердикты ревью, отчёты) в + промпт попадает через `cat a.md b.md > prompt.md` — дословно и без + повторного прохода через твой контекст (ретро 2026-07-10: переписывание + гоняло находки через оркестратора до шести раз). - **Модель и глубину рассуждения задавай явно** (`-m`, `-c 'model_reasoning_effort="..."'`): дефолты берутся из `~/.codex/config.toml` и плавают за последней интерактивной сессией - пользователя. Для реализации и ревью — high; текущую боевую модель сверь - с конфигом (2026-07-10: `gpt-5.5`). Оверрайды проверены под + пользователя. Для реализации и ревью — high; боевая модель — + **`gpt-5.5`** (решение пользователя 2026-07-10). Модель из конфига НЕ + наследовать: «сверить с конфигом» ≠ «взять из конфига» — туда утекают + фронтирные модели интерактивных сессий (gpt-5.6-sol — фронтир уровня + Fable, лимиты дорогие; казус — прогон тикета 02, 2026-07-10). Конфиг + разошёлся с правилом — спроси пользователя. Оверрайды проверены под `--strict-config`. - **Запуск — собственным фоновым Bash оркестратора** (`run_in_background`): фоновый процесс детачится, живёт сквозь ходы и будит оркестратора по @@ -94,6 +104,8 @@ cat "$SCRATCH/task-prompt.md" | codex exec --json --strict-config \ как проверить), явная строка VERDICT и поощрение безопасных эмпирических проверок вне репо (воспроизвести краевой случай, свериться с первоисточником) — вердикт заметно твёрже (эмпирика 2026-07-09). +`-o`-файл вердикта — и есть обменный артефакт: на триаже он уходит в +fix-промпт конкатенацией, читай его один раз для синтеза и не пересказывай. ## Ветка «триаж/починка» (тем же тредом, что писал код) diff --git a/agents/.agents/skills/claude-subagent-playbook/references/codex-sandbox-fix-handover-2026-07-10.md b/agents/.agents/skills/claude-subagent-playbook/references/codex-sandbox-fix-handover-2026-07-10.md index cefa5ae..2d99fb8 100644 --- a/agents/.agents/skills/claude-subagent-playbook/references/codex-sandbox-fix-handover-2026-07-10.md +++ b/agents/.agents/skills/claude-subagent-playbook/references/codex-sandbox-fix-handover-2026-07-10.md @@ -56,13 +56,30 @@ permission profiles requiring direct runtime enforcement are incompatible with - — workspace-write требует именно bwrap-backend. Полный фикс — ниже, нужен sudo. -## Полный фикс (sudo; на исходной машине пока не применён) +## Полный фикс (sudo; применён и проверен 2026-07-10) -**Вариант A — рекомендуемый, точечный**: AppArmor-профиль только для bwrap Codex'а, системное ограничение userns остаётся. Создать `/etc/apparmor.d/codex-bwrap`: +**Ловушка, съевшая первую попытку**: профиль на путь vendored bwrap +(`**/codex-resources/bwrap`) НЕ работает — Codex ≥0.144 исполняет +**встроенный** bwrap из memfd (`linux-sandbox/src/bundled_bwrap.rs`, +`memfd_create` в бинаре), и путевой attachment не цепляется никогда: в audit +виден `profile="unconfined" comm="bwrap"` → transition в +`unprivileged_userns`. Прямой запуск vendored bwrap с диска при этом +проходит — ложное подтверждение, не верь ему. + +**Рабочий вариант**: вешать профиль на **сам бинарь codex** (родителя) — +memfd-exec'нутый ребёнок наследует метку через exec, и правило `userns,` +разрешает namespace. Стандартный приём Ubuntu для браузеров/Electron. +`/etc/apparmor.d/codex-bwrap`: ``` abi , include + +profile codex-cli /home/dmitry/.npm-global/lib/node_modules/@openai/codex/**/bin/codex flags=(unconfined) { + userns, + include if exists +} + profile codex-bwrap /home/dmitry/.npm-global/lib/node_modules/@openai/codex/**/codex-resources/bwrap flags=(unconfined) { userns, include if exists @@ -73,8 +90,12 @@ profile codex-bwrap /home/dmitry/.npm-global/lib/node_modules/@openai/codex/**/c ``` codex sandbox -c 'sandbox_mode="workspace-write"' -- sh -c 'touch ./__p && rm ./__p && echo OK' +codex sandbox -- sh -c 'touch ./__p 2>/dev/null && echo BROKEN || echo RO_OK' ``` +Проверено 2026-07-10: WRITE_OK, read-only блокирует запись, workspace-write +не пускает в `/etc` — изоляция сохранена. + Переносимость: путь в профиле — под конкретную машину (`~/.npm-global/...`); glob `**` переживает обновления версий Codex, но если npm-global живёт в другом месте — путь поправить. Перезагружать профиль нужно только при смене самого расположения. **Вариант B — грубый, не рекомендуется**: `sudo sysctl -w kernel.apparmor_restrict_unprivileged_userns=0` (+ файл в `/etc/sysctl.d/`). Ослабляет защиту всей машины. diff --git a/agents/.agents/skills/claude-subagent-playbook/references/lessons.md b/agents/.agents/skills/claude-subagent-playbook/references/lessons.md index df5aad0..0aed21c 100644 --- a/agents/.agents/skills/claude-subagent-playbook/references/lessons.md +++ b/agents/.agents/skills/claude-subagent-playbook/references/lessons.md @@ -193,3 +193,41 @@ Codex (8 находок) поймал уровень требований: па **Наблюдение пользователя (в память проекта тоже записано):** Codex хорошо ревьюит планы/постановки, не только код — при явной рамке уровня. + +## Прогон 2026-07-10 (позже): AppArmor-фикс — ловушка memfd + +Рецепт «профиль на путь vendored bwrap» из handover-файла оказался +недостаточным: Codex ≥0.144 исполняет встроенный bwrap **из memfd** +(`bundled_bwrap.rs`, `memfd_create` в бинаре) — путевой attachment не +цепляется никогда. Коварство: прямой запуск vendored bwrap с диска под +профилем проходит (BWRAP_OK) — ложное подтверждение фикса; истина — в audit: +`profile="unconfined" comm="bwrap"` → transition. Рабочий фикс — профиль на +**сам бинарь codex**: метка наследуется через memfd-exec, `userns,` +срабатывает у ребёнка (стандартный приём Ubuntu для браузеров). Применён и +проверен: оба режима работают, изоляция цела. Обновлённый рецепт — в +handover-файле. + +## Ретро 2026-07-10: расход контекста оркестратора за 3 цикла (тикеты 01–03) + +Конвейер отработал (3 цикла: реализация → двойное слепое ревью → триаж → +узкие перепроверки → коммит; пересечение находок ревьюеров — ноль во всех +трёх, подтверждая ценность двух родословных). Главные пожиратели контекста +оркестратора, по убыванию: + +1. **Находки ревью проходили через оркестратора до шести раз**: вердикт → + Write fix-промпта с находками «дословно» → пересказ резолюций в двух + recheck-промптах → SendMessage-эхо (tool result возвращает весь текст + сообщения). Лечение — «индекс у оркестратора, нагрузка файлами»: + вердикты в файлы, fix-промпт cat'ом, recheck ссылкой на файл отчёта. + Внесено в SKILL.md (роль оркестратора, этапы 4–5) и codex-exec.md. +2. **Review-промпт уходил полным текстом дважды** (файл для Codex + + параметр prompt Клод-субагента, ~80 строк × 2 × 3 тикета). Лечение — + один канонический файл, оба читают сами; скелеты — prompt-templates.md. +3. **Idle-пинги teammate-ревьюера**: ~7 пустых ходов; вердикт не приходит + сам — нужен запрос. Лечение — мандат «финальный акт — SendMessage с + коротким вердиктом», idle-пинги игнорировать. +4. Сага починки санбокса — разовая, задокументирована отдельно. + +Обменный каталог прогона — временный, с полуслучайным префиксом (скретчпад +сессии или mktemp -d): не мусорит в репо и не переживает ребут (решение +пользователя). diff --git a/agents/.agents/skills/claude-subagent-playbook/references/prompt-templates.md b/agents/.agents/skills/claude-subagent-playbook/references/prompt-templates.md new file mode 100644 index 0000000..25c61d6 --- /dev/null +++ b/agents/.agents/skills/claude-subagent-playbook/references/prompt-templates.md @@ -0,0 +1,136 @@ +# Скелеты промптов конвейера + +Отработали боевой прогон 2026-07-10 (3 цикла, тикеты FTP/CSV DQ). Правило +использования: заполни скелет в `$SCRATCH` **один раз за прогон** и дальше +не переписывай — на каждую следующую задачу пиши только параметрический +блок и собирай финальный промпт конкатенацией. Плейсхолдеры `{{...}}` +заполняются значениями задачи; секции, помеченные «адаптируй», меняются +по смыслу задачи, остальное — стабильный boilerplate. + +`$SCRATCH` здесь — общий обменный каталог прогона во **временном каталоге +ОС с полуслучайным префиксом**: скретчпад сессии из системного промпта +(он уже такой) или `mktemp -d` на прогон. Это безопасный вариант +(решение пользователя 2026-07-10): не мусорит в репо, не сталкивается с +параллельными прогонами и не переживает ребут машины — устаревшие обменные +файлы не накапливаются. Windows-кавеат из codex-exec.md в силе: путь — +forward-slash, не голый `/tmp` Git Bash. + +## 1. Задача исполнителю (`codex exec`, workspace-write) + +```markdown +# Задача: {{тикет/цель одной строкой}} + +Рабочий каталог — корень репозитория {{repo}}. Ветка {{branch}} — работай +в ней, ветку не менять. + +## Что делать +Реализуй {{тикет NN}} из {{путь к задаче-файлу}}. Задача самодостаточна: +постановка — в тикете, следуй ей буквально; чекбоксы — критерии приёмки. +Кажется неправильным — реализуй как написано и отметь сомнение в отчёте. + +## Сначала прочитать (обязательно, до кода) +{{нумерованный список: задача-файл, спека, образцы кода, конвенции}} + +## Порядок и дисциплина +{{адаптируй: TDD, порядок слоёв, команда тестов}} + +## Границы (что трогать нельзя) +- **Коммитов не делать.** Никаких `git commit`/`git add`. +{{адаптируй: стабы, чужой код, существующие тесты, файлы вне репо}} + +## Финальный отчёт (что вернуть) +1. Файлы с одной строкой «зачем» на каждый. +2. Команда тестов и итог прогона (счётчик, все зелёные). +3. Чекбоксы: какие закрыты, какие нет и почему. +4. Сомнения, если были. +``` + +## 2. Слепое ревью (один файл на ОБОИХ ревьюеров) + +Канонический файл не знает, кто его читает — куда класть вердикт, задаёт +обёртка вызова, и пути у ревьюеров разные (иначе коллизия): + +- **Codex**: файл через stdin; отдельный файл вердикта не нужен — вердикт + и есть его `-o`-отчёт (`$SCRATCH/NN-review-codex.md`). +- **Клод-субагент**: в prompt — только обёртка: «прочитай {{путь к + каноническому файлу}} и выполни, рабочий каталог {{корень репо}}; + полный индекс запиши в {{$SCRATCH/NN-review-claude.md}} — это вне репо, + мандату не противоречит (Write у тебя нет — Bash heredoc'ом); финальным + сообщением пришли только строку VERDICT, счётчики по severity и путь + к файлу». + +```markdown +# Ревью кода: {{тикет NN — суть}} + +Ты — независимый адверсарный ревьюер. Рабочий каталог — корень +репозитория {{repo}}, ветка {{branch}}. + +## Мандат (жёсткий) +- Исходники и окружение НЕ менять. Правок не вносить — только находки. +- Запускать тесты, проверять гипотезы, читать документацию — можно и + нужно; безопасные эмпирические проверки во временных каталогах вне + репо поощряются: вердикт с проверкой твёрже вердикта по прочтению. +- Никаких `git add`/`git commit`/`git checkout`. +- Итог — только индекс находок и строка VERDICT, без пересказа кода и + нарратива; куда его положить — сказано в вызове. + +## Что ревьюишь +{{задача-файл + спека; что уже закоммичено и не ревьюится}} +Изменения (незакоммичены, смотри рабочее дерево): {{список файлов}} +Команда тестов (ожидается {{N}} passed): {{команда}} + +## Фокус +{{адаптируй: 3–4 пункта под задачу — математика/краевые, соответствие +критериям, честность тестов, общий код/регрессии}} + +## Формат файла находок — только индекс +SEVERITY(BLOCKER|MAJOR|MINOR|NIT) | файл:строка | суть одной фразой | как проверить/воспроизвести +В конце — отдельная строка: VERDICT: APPROVED | APPROVED_WITH_MINORS | CHANGES_REQUIRED +``` + +## 3. Триаж исполнителю (`codex exec resume `) + +Собирается конкатенацией — находки НЕ переписывать: +`cat шапка.md review-A.md review-B.md замечания.md > fix-prompt.md` + +Шапка (стабильная): + +```markdown +# Триаж находок двух независимых ревью твоей реализации + +Ниже — находки двух слепых ревью **дословно**. Закрой перечисленное, +больше ничего не меняй. По каждой — починка по TDD (сначала тест, +воспроизводящий находку) или аргументированное отклонение через +контракт/спеку и тест — голословное «не важно» не принимается. +Коммитов не делать. + +Финальный отчёт: по каждой находке одной строкой — починено (чем) / +отклонено (довод + где зафиксировано); команда тестов, счётчик прогона, +список изменённых файлов. +``` + +Замечания оркестратора (опционально, коротко): фактура, которой нет у +исполнителя (проверенные тобой данные), решения уровня задачи +(вне скоупа / принять риск), приоритеты. + +## 4. Узкая перепроверка (тем же ревьюером) + +```markdown +# Узкая повторная проверка: закрывают ли правки твои находки + +Исполнитель обработал находки. Проверь ТОЛЬКО свои — полный повторный +обход не нужен. Мандат прежний: ничего не менять, только чтение и прогон +тестов. + +Отчёт исполнителя с резолюциями: прочитай {{$SCRATCH/NN-fix-result.md}}. +Команда тестов (ожидается {{N}} passed): {{команда}} + +Ответ — по каждой твоей находке одной строкой: CLOSED / NOT_CLOSED +(почему) / REJECTION_VALID / REJECTION_INVALID (почему). Финальная +строка: RECHECK: ALL_CLOSED | ISSUES_REMAIN +``` + +Кавеат: проверь, что Codex-ревьюер может читать `$SCRATCH` из своей +песочницы (temp-каталоги обычно читаемы в workspace-write; в этом прогоне +`-o`-файлы под `/tmp` работали). Если нет — резолюции по его находкам +передай текстом (только его находки, не весь отчёт).