Первичный правовой анализ дела с итогом в markdown и .docx. Используй, когда юрист просит «проанализировать дело», «сделать правовой анализ», «проверить сроки», «оценить перспективы», «проверить досудебный порядок» или «дать правовую оценку». Ветка Ф5a: Sonnet-main оркестрирует, Opus-subagent делает анализ по контракту 3.1a, Sonnet-subagent оформляет .docx через arbitrum-docx по контракту 3.2.
Первичный правовой анализ дела с итогом в markdown и .docx. Используй, когда юрист просит «проанализировать дело», «сделать правовой анализ», «проверить сроки», «оценить перспективы», «проверить досудебный порядок» или «дать правовую оценку». Ветка Ф5a: Sonnet-main оркестрирует, Opus-subagent делает анализ по контракту 3.1a, Sonnet-subagent оформляет .docx через arbitrum-docx по контракту 3.2.
legal-review — Первичный правовой анализ
Скилл работает по паттерну Sonnet-main -> Opus-subagent -> Sonnet-subagent -> arbitrum-docx и следует контрактам из shared/subagent-dispatch.md. Main-Sonnet не вставляет тексты документов inline: в субагентные вызовы передаются только абсолютные пути.
при наличии — предыдущие аналитические артефакты из .vassal/analysis/*.md
Если .vassal/index.yaml пуст, не содержит документов, или после сверки с .vassal/mirrors/doc-*.md не осталось ни одного доступного зеркала документа, верни SKILL_UNAVAILABLE с reason no documents и остановись без создания выходных файлов.
Покажи Сюзерену короткий preview:
какие файлы пойдут в контекст Opus-subagent;
что будет создано: {{md_path}} и {{docx_path}};
что итог идёт по single-document ветке 3.1a с финальной строкой READY_FOR_DOCX: analytical.
Дождись подтверждения.
Фаза 2 — Apply (main-Sonnet + Opus-subagent + Sonnet-subagent)
Перед любым Task(...) ещё раз проверь, что .vassal/index.yaml содержит документы и список доступных .vassal/mirrors/doc-*.md не пуст; если документов нет, верни SKILL_UNAVAILABLE с reason no documents и остановись без создания выходных файлов.
Собери prompt Opus-subagent строго по контрактам 3.0 и 3.1a:
использовать только допустимые верхнеуровневые секции:
## Квалификация
## Схема сторон
## Анализ
## Выводы
OUTPUT: единый markdown; последняя строка строго READY_FOR_DOCX: analytical.
Вызови Task с параметрами:
subagent_type: "general-purpose"
model: "opus"
description: 3-5 слов
Проверь OUTPUT через валидационный скрипт:
передай полный текст OUTPUT Opus-subagent в
python3 "$PLUGIN_ROOT/scripts/validate_opus_output.py" --skill legal-review --contract 3.1a --stdin;
скрипт должен вернуть valid=true.
Если valid=false, ровно один раз перезапусти Opus-subagent с напоминанием о контракте 3.1a, обязательной структуре и маркере READY_FOR_DOCX: analytical, затем повтори валидацию тем же скриптом.
Если и после retry valid=false, покажи errors и останови скилл.
Сохрани валидный markdown-оригинал как есть в {{md_path}}.
Подготовь вход для Sonnet-subagent по контракту 3.2:
markdown_input = markdown без последней строки READY_FOR_DOCX: analytical
case_meta = поля из .vassal/case.yaml: court, case_number, judge, our_party, our_client, other_parties
out_dir = {{analysis_dir}}
doc_name = legal-review-{{today}}.docx
Запусти Sonnet-subagent по контракту 3.2. Если он возвращает SKILL_UNAVAILABLE, main-Sonnet сам вызывает arbitrum-docx с теми же doc_type, header, title, body.
Ожидаемый итог ветки 3.2: абсолютный путь к созданному .docx.
Фаза 3 — Verify (main-Sonnet)
Проверь, что существуют:
{{md_path}}
{{docx_path}}
Прочитай {{md_path}} и проверь:
есть ## Схема сторон;
есть блок ````mermaid```;
последняя строка строго READY_FOR_DOCX: analytical;
нет верхнеуровневых ## секций вне разрешённого списка.
Проверь {{docx_path}}:
файл существует;
файл не пустой.
Покажи Сюзерену короткое резюме:
путь к markdown-оригиналу;
путь к .docx;
перечень верхнеуровневых секций.
Дисциплина
Не использовать sidecar-изображения и отдельные графические preview.
Не использовать markdown-only ветку 3.1c и не пропускать Sonnet-subagent.
Не вставлять тексты зеркал inline в prompt main-Sonnet.
Не добавлять верхнеуровневые ## секции вне списка Ф5a.
Не заменять arbitrum-docx ручной сборкой .docx.
Блокер
Если Task(model=opus) недоступен, дважды возвращает невалидный OUTPUT, или formatter-ветка 3.2 не смогла создать .docx даже после main-fallback:
сообщи Сюзерену, какая именно проверка не прошла;
не подменяй Opus-анализ или formatter ручной генерацией;