Пользователь хочет сгенерировать финальный документ отчёта. На этом этапе report.md уже должен быть готов (создан через
/lab-draft и доработан через /lab-improve, /lab-research, /lab-conclusion).
Что делать
Этап 1. Проверка полноты
- Прочитай
.claude/lab/config.json. Если не найден — сообщи: «Сначала запусти /lab-setup.» и остановись.
- Проверь наличие
report.md. Если не найден — сообщи: «Сначала создай черновик отчёта через /lab-draft.» и
остановись.
- Прочитай
report.md и проверь:
- Есть ли раздел дополнительного исследования (если
config.preferences.needs_research = true) — предупредить, если
нет (но не блокировать).
- Есть ли итоговый вывод — предупредить, если нет (но не блокировать).
- Спроси пользователя: продолжить генерацию или сначала доработать отчёт?
Этап 2. Работа с изображениями
- Проверь наличие папки
images/ в корне проекта.
- Если папка существует и содержит файлы:
a. Прочитай каждый файл изображения через Read tool (vision).
b. Проанализируй содержимое каждого изображения — текст, интерфейс, данные, графики, что изображено.
c. Сопоставь содержимое изображений с подписями рисунков в report.md по СМЫСЛУ, а не по имени файла или дате.
КРИТИЧЕСКИ ВАЖНО: нельзя бездумно сопоставлять рисунки по порядку (по алфавиту имён, по дате создания).
Нужно именно анализировать содержимое каждого изображения и находить, какой подписи в report.md оно соответствует.
Например: если подпись «Рисунок 3. Настройка DNS», а на изображении видно окно настройки DNS-сервера — это совпадение.
d. Создай
.claude/lab/image_map.json — маппинг номера рисунка на файл:{
"1": "images/screenshot1.png",
"2": "images/network_config.jpg"
}
e. Если автоматическое сопоставление не удалось для некоторых изображений — покажи пользователю список нераспознанных
файлов и подписей, спроси о соответствии.
f. Перепроверь ещё раз, правильно ли ты соотнёс каждое изображение с местом, куда его вставлять. Открой каждое
изображение повторно и убедись, что оно действительно соответствует подписи.
- Если папка
images/ пуста или не существует — предупредить (плейсхолдеры останутся в документе).
Этап 3. Резервная копия шаблона
Если используется шаблон-пустышка (config.template.has_template = true):
- Скопируй шаблон в резервную копию:
cp <template_path> <template_path>.backup
- Сообщи пользователю, что резервная копия создана.
Это позволяет заново запустить генерацию, восстановив шаблон из бэкапа, если результат неудачный.
Этап 4. Генерация документа
Определи формат из config.preferences.report_format и имя файла из config.preferences.output_filename (по умолчанию
report).
ВАЖНО: report.md — это черновик. Этот этап НЕ меняет содержание report.md. Генерация итогового файла — это только
форматирование: подстановка изображений, отступы, стили, титульный лист.
Шаблон-пустышка (почти всегда): скорее всего пользователь уже предоставил шаблон report.docx. Путь к нему в
config.template.example_path. Правила работы с шаблоном:
- Вставлять текст отчёта между заготовленными секциями.
- Титульный лист — не трогать.
- Заголовки секций (Цели работы, Ход работы, и т.д.) — не трогать.
- Все подзаголовки создавать с тем же стилем, что и заголовки шаблона.
Формат MD:
- Скопировать report.md в
{output_filename}.md (если имя отличается от report; иначе — в output.md, чтобы не
перезаписать черновик).
- Заменить плейсхолдеры
[ВСТАВИТЬ РИСУНОК N ЗДЕСЬ] на  (используя
image_map.json).
Формат DOCX:
- Проверь наличие venv:
.claude/lab/venv/bin/python --version (или Scripts/python.exe на Windows).
- Если venv есть — запусти генератор:
.claude/lab/venv/bin/python .claude/lab/scripts/generate_docx.py \
--config .claude/lab/config.json \
--report report.md \
--output {output_filename}.docx \
--images images/ \
--image-map .claude/lab/image_map.json
Если есть шаблон-пустышка (config.template.has_template = true и config.template.example_path не null): --template <путь из config.template.example_path>
Если без титульного листа (config.preferences.no_title_page = true, без шаблона): --no-title-page
Возможности скрипта:
- Режим шаблона: не трогает титульный лист и заголовки секций, вставляет содержимое между секциями, копирует стиль заголовков из шаблона для подзаголовков (НЕ использует Heading 1/2)
- Markdown-таблицы: автоматически конвертируются в Word-таблицы (Table Grid, шрифт 14 пт по ГОСТ)
- Списки: маркированные (
- item) и нумерованные (N) item) — с правильными отступами
- Заголовки: поддерживаются оба формата — нумерованный (
1., 1.1., 1.1.1.) и markdown (##, ###, ####)
- Титульный лист: тип работы из
config.course.lab_type, преподаватель из config.course.reviewer
- Не применяет жирный шрифт в тексте (только в заголовках)
- Пропускает блоки кода (```) — в документ попадают только однострочные выражения
- После каждого рисунка (подписи) вставляет пустую строку
- Красная строка 1,5 см, выравнивание по ширине, contextualSpacing
- Изображения масштабируются до макс. 15,5 см (не выходят за правое поле)
- Если venv нет — сообщи, что DOCX-генерация невозможна без Python. Предложи формат MD.
Формат PDF:
- Сначала сгенерируй DOCX (как описано выше).
- Проверь наличие LibreOffice:
libreoffice --version.
- Если LibreOffice есть — конвертируй:
libreoffice --headless --convert-to pdf {output_filename}.docx.
- Если LibreOffice нет — сообщи пользователю, что PDF-конвертация невозможна. Предложи открыть DOCX и сохранить как PDF
вручную.
Этап 5. Подтверждение
Сообщи пользователю:
- Путь к сгенерированному файлу (report.docx / report.pdf / report.md).
- Количество вставленных изображений (если были).
- Количество оставшихся плейсхолдеров (если изображения не найдены).
- Рекомендацию проверить документ перед сдачей.
- Напомни, что если результат неудачный, шаблон можно восстановить из бэкапа (.backup) и запустить
/lab-report заново.
Дополнительный контекст от пользователя
$ARGUMENTS
1---2name: lab-report3description: Генерация финального документа (DOCX/PDF/MD) с изображениями4---56Пользователь хочет сгенерировать финальный документ отчёта. На этом этапе report.md уже должен быть готов (создан через7/lab-draft и доработан через /lab-improve, /lab-research, /lab-conclusion).89## Что делать1011### Этап 1. Проверка полноты12131. Прочитай `.claude/lab/config.json`. Если не найден — сообщи: «Сначала запусти `/lab-setup`.» и остановись.142. Проверь наличие `report.md`. Если не найден — сообщи: «Сначала создай черновик отчёта через `/lab-draft`.» и15 остановись.163. Прочитай `report.md` и проверь:17 - Есть ли раздел дополнительного исследования (если `config.preferences.needs_research` = true) — предупредить, если18 нет (но не блокировать).19 - Есть ли итоговый вывод — предупредить, если нет (но не блокировать).204. Спроси пользователя: продолжить генерацию или сначала доработать отчёт?2122### Этап 2. Работа с изображениями23241. Проверь наличие папки `images/` в корне проекта.252. Если папка существует и содержит файлы:26 a. **Прочитай каждый файл изображения через Read tool (vision).**27 b. **Проанализируй содержимое каждого изображения** — текст, интерфейс, данные, графики, что изображено.28 c. **Сопоставь содержимое изображений с подписями рисунков в report.md по СМЫСЛУ, а не по имени файла или дате.**29 КРИТИЧЕСКИ ВАЖНО: нельзя бездумно сопоставлять рисунки по порядку (по алфавиту имён, по дате создания).30 Нужно именно анализировать содержимое каждого изображения и находить, какой подписи в report.md оно соответствует.31 Например: если подпись «Рисунок 3. Настройка DNS», а на изображении видно окно настройки DNS-сервера — это совпадение.32 d. Создай `.claude/lab/image_map.json` — маппинг номера рисунка на файл:33 ```json34 {35 "1": "images/screenshot1.png",36 "2": "images/network_config.jpg"37 }38 ```39 e. Если автоматическое сопоставление не удалось для некоторых изображений — покажи пользователю список нераспознанных40 файлов и подписей, спроси о соответствии.41 f. **Перепроверь ещё раз**, правильно ли ты соотнёс каждое изображение с местом, куда его вставлять. Открой каждое42 изображение повторно и убедись, что оно действительно соответствует подписи.433. Если папка `images/` пуста или не существует — предупредить (плейсхолдеры останутся в документе).4445### Этап 3. Резервная копия шаблона4647Если используется шаблон-пустышка (`config.template.has_template` = true):481. Скопируй шаблон в резервную копию: `cp <template_path> <template_path>.backup`492. Сообщи пользователю, что резервная копия создана.5051Это позволяет заново запустить генерацию, восстановив шаблон из бэкапа, если результат неудачный.5253### Этап 4. Генерация документа5455Определи формат из `config.preferences.report_format` и имя файла из `config.preferences.output_filename` (по умолчанию56`report`).5758**ВАЖНО:** report.md — это черновик. Этот этап НЕ меняет содержание report.md. Генерация итогового файла — это только59форматирование: подстановка изображений, отступы, стили, титульный лист.6061**Шаблон-пустышка (почти всегда):** скорее всего пользователь уже предоставил шаблон report.docx. Путь к нему в62`config.template.example_path`. Правила работы с шаблоном:6364- Вставлять текст отчёта между заготовленными секциями.65- Титульный лист — не трогать.66- Заголовки секций (Цели работы, Ход работы, и т.д.) — не трогать.67- Все подзаголовки создавать с тем же стилем, что и заголовки шаблона.6869**Формат MD:**7071- Скопировать report.md в `{output_filename}.md` (если имя отличается от `report`; иначе — в `output.md`, чтобы не72 перезаписать черновик).73- Заменить плейсхолдеры `[ВСТАВИТЬ РИСУНОК N ЗДЕСЬ]` на `` (используя74 image_map.json).7576**Формат DOCX:**77781. Проверь наличие venv: `.claude/lab/venv/bin/python --version` (или `Scripts/python.exe` на Windows).792. Если venv есть — запусти генератор:80 ```81 .claude/lab/venv/bin/python .claude/lab/scripts/generate_docx.py \82 --config .claude/lab/config.json \83 --report report.md \84 --output {output_filename}.docx \85 --images images/ \86 --image-map .claude/lab/image_map.json87 ```88 Если есть шаблон-пустышка (`config.template.has_template` = true и `config.template.example_path` не null):89 ```90 --template <путь из config.template.example_path>91 ```92 Если без титульного листа (`config.preferences.no_title_page` = true, без шаблона):93 ```94 --no-title-page95 ```96 Возможности скрипта:97 - **Режим шаблона**: не трогает титульный лист и заголовки секций, вставляет содержимое между секциями, копирует стиль заголовков из шаблона для подзаголовков (НЕ использует Heading 1/2)98 - **Markdown-таблицы**: автоматически конвертируются в Word-таблицы (Table Grid, шрифт 14 пт по ГОСТ)99 - **Списки**: маркированные (`- item`) и нумерованные (`N) item`) — с правильными отступами100 - **Заголовки**: поддерживаются оба формата — нумерованный (`1.`, `1.1.`, `1.1.1.`) и markdown (`##`, `###`, `####`)101 - **Титульный лист**: тип работы из `config.course.lab_type`, преподаватель из `config.course.reviewer`102 - Не применяет жирный шрифт в тексте (только в заголовках)103 - Пропускает блоки кода (```) — в документ попадают только однострочные выражения104 - После каждого рисунка (подписи) вставляет пустую строку105 - Красная строка 1,5 см, выравнивание по ширине, contextualSpacing106 - Изображения масштабируются до макс. 15,5 см (не выходят за правое поле)1073. Если venv нет — сообщи, что DOCX-генерация невозможна без Python. Предложи формат MD.108109**Формат PDF:**1101111. Сначала сгенерируй DOCX (как описано выше).1122. Проверь наличие LibreOffice: `libreoffice --version`.1133. Если LibreOffice есть — конвертируй: `libreoffice --headless --convert-to pdf {output_filename}.docx`.1144. Если LibreOffice нет — сообщи пользователю, что PDF-конвертация невозможна. Предложи открыть DOCX и сохранить как PDF115 вручную.116117### Этап 5. Подтверждение118119Сообщи пользователю:120121- Путь к сгенерированному файлу (report.docx / report.pdf / report.md).122- Количество вставленных изображений (если были).123- Количество оставшихся плейсхолдеров (если изображения не найдены).124- Рекомендацию проверить документ перед сдачей.125- Напомни, что если результат неудачный, шаблон можно восстановить из бэкапа (.backup) и запустить `/lab-report` заново.126127## Дополнительный контекст от пользователя128129$ARGUMENTS