| name | timeline |
| description | Построение юридической хронологии дела. Используй, когда юрист говорит «построй хронологию», «сделай таймлайн», «собери хронологию дела», «покажи историю событий по делу», «когда что произошло», «нужна лента событий». Скилл оркестрируется main-Sonnet: анализ выполняет Opus-subagent по контракту 3.1c, итогом становится markdown-файл в корне дела с обязательным Mermaid Gantt-блоком и обновлённый `case.yaml.timeline`.
|
Timeline — Хронология дела
Скилл работает по схеме preview → confirm → apply → verify. Оркестрацию ведёт main-Sonnet, а аналитическую сборку хронологии выполняет Opus-subagent по контрактам 3.0 и 3.1c из shared/subagent-dispatch.md. Sidecar-визуализации и .docx в этой ветке не используются.
Main-Sonnet не вставляет в prompt полные тексты документов inline. В субагентный вызов передаются только абсолютные пути к case.yaml, index.yaml, зеркалам и, при наличии, только к hearings/*/analysis.md.
Предусловия
- Существует
.vassal/case.yaml.
- Существует
.vassal/index.yaml.
- В индексе есть хотя бы два документа с датами. Если датированных документов меньше, сообщи Сюзерену, что сначала нужно наполнить дело через
intake / add-evidence / add-opponent.
- Доступен
Task(model=opus) по контракту 3.1c.
Переменные сессии
Вычисли в начале:
today = текущая дата YYYY-MM-DD
out_path = <case_root>/<today> Хронология дела.md
policy = extend или rebuild
Фаза 1 — Preview (main-Sonnet, read-only)
- Прочитай
.vassal/case.yaml:
- стороны и предмет спора;
- существующий
timeline;
- вручную добавленные события (
source: user), которые нельзя терять.
- Прочитай
.vassal/index.yaml и отфильтруй документы с датами.
- Найди доступные источники для аналитики:
.vassal/mirrors/doc-*.md;
- при наличии
hearings/*/analysis.md — учитывай их как дополнительные источники событий;
- не используй другие файлы из
hearings/ как источник timeline: transcript.md, протоколы и любые вложения оттуда исключены;
- сырые транскрипты и протоколы можно брать только из
.vassal/raw или из основного набора документов дела, если они там заведены как обычные документы.
- Составь preview:
- сколько датированных документов доступно;
- какой период они покрывают;
- сколько событий уже есть в
case.yaml.timeline;
- сколько из них имеют
source: user и будут сохранены при любом режиме;
- какой файл будет создан:
{{out_path}}.
- Покажи Сюзерену preview и попроси выбрать политику:
extend — дополнить существующий timeline, не трогая текущие машинные записи без необходимости;
rebuild — пересобрать машинные записи заново, сохранив все source: user.
Запрещено в preview-фазе:
- создавать
Хронология дела.md;
- менять
.vassal/case.yaml;
- писать
.vassal/history.md.
Фаза 2 — Confirm
- Дождись явного ответа Сюзерена.
- Если политика не указана, переспроси.
- Если операция отменена — остановись без изменений.
Фаза 3 — Apply (main-Sonnet + Opus-subagent)
- Собери prompt Opus-subagent строго по контрактам 3.0 и 3.1c из shared/subagent-dispatch.md:
ROLE: Ты юрист-аналитик в скилле timeline.
THINKING: think hard по умолчанию или override из shared/conventions.md.
CONTEXT: абсолютные пути к case_root, .vassal/case.yaml, .vassal/index.yaml, .vassal/mirrors/doc-*.md и доступным hearings/*/analysis.md; никакие другие файлы из hearings/** в этот контекст не включай.
TASK: собрать юридическую хронологию без галлюцинаций, опираясь только на указанные файлы; сохранить ручные события source: user; обязательно выдать:
- секцию
## События с markdown-таблицей, где колонки строго Дата | Источник | Событие;
- секцию
## Gantt с блоком ````mermaid``, содержащим ключевое слово gantt;
- при
extend не дублировать уже существующие события;
- при
rebuild пересобрать машинные события, но не терять события source: user.
OUTPUT: единый markdown без строки READY_FOR_DOCX.
- Вызови
Task с параметрами:
subagent_type: "general-purpose"
model: "opus"
description: 3-5 слов
- Проверь OUTPUT через валидационный скрипт:
- передай полный текст OUTPUT Opus-subagent в
python3 "$PLUGIN_ROOT/scripts/validate_opus_output.py" --skill timeline --contract 3.1c --stdin;
- скрипт должен вернуть
valid=true.
- Любая ошибка валидации считается блокирующей: не записывай ни
{{out_path}}, ни .vassal/case.yaml, пока не получен валидный OUTPUT.
- Если
valid=false, перезапусти Opus-subagent один раз с явным напоминанием о контракте 3.1c и требовании выполнить скриптовую валидацию. Если и второй ответ невалиден — остановись и покажи Сюзерену блокер.
- Сохрани markdown как есть в
{{out_path}} только после успешного парсинга таблицы ## События.
- Обнови
.vassal/case.yaml:
- извлеки строки только из успешно распарсенной таблицы
## События;
- нормализуй их в элементы
timeline;
- при
extend сохрани существующие записи и добавь только отсутствующие машинные события;
- при
rebuild замени машинные записи на свежесобранные, но все записи с source: user оставь без изменений.
- Добавь запись в
.vassal/history.md о перестроении хронологии.
Фаза 4 — Verify (main-Sonnet)
- Прочитай
{{out_path}} и проверь:
- файл существует;
- в нём есть ````mermaid``;
- в нём есть
gantt;
- нет
READY_FOR_DOCX;
- в нём есть секция
## События с парсируемой таблицей Дата | Источник | Событие.
- Прочитай
.vassal/case.yaml и проверь:
- YAML валиден;
timeline не пустой;
- события
source: user не потеряны.
- Покажи Сюзерену резюме:
- сколько событий в итоговом
timeline;
- какой период покрыт;
- путь к
{{out_path}}.
Дисциплина
- Не создавать
.docx и не диспатчить Sonnet-subagent по контракту 3.2.
- Не предлагать растровые превью или любые sidecar-изображения.
- Не писать лог-файлы в
.vassal/: в этой ветке лога нет.
- Не подменять анализ main-Sonnet'ом: юридическую сборку событий делает только
Task(model=opus).
- Не использовать файлы из
hearings/, кроме hearings/*/analysis.md; транскрипты и протоколы из каталога заседаний в timeline не подмешиваются.
Блокер при недоступном Opus-subagent
Если Task(model=opus) недоступен, завершился ошибкой или дважды подряд вернул OUTPUT без Mermaid Gantt-блока либо без парсируемой таблицы ## События:
- сообщи Сюзерену:
Opus-subagent недоступен, timeline остановлен. Нужен рабочий Task(model=opus) по контракту 3.1c.
- покажи конкретную ошибку или причину невалидного OUTPUT;
- не переключайся на ручную генерацию хронологии в main-Sonnet.