# Спросить по сессиям

> Вопрос модели по записям сессий разработки: три способа, примеры по ролям, что получает модель, как читать ответ, кто видит вопрос, расход и журнал.

По записям [сессий разработки](/docs/buff-code/sessions) можно задавать вопросы — так же, как
[«Спросить»](/docs/ask) отвечает по коду. Модель читает записи, а не пересказывает по памяти,
и на каждое утверждение ссылается на сессию и шаг. Ответ приходит во вкладку **«Вопросы»**
раздела, где и хранится.

## Три способа задать вопрос

| Откуда | Что попадёт в вопрос | Заголовок диалога |
| --- | --- | --- |
| Кнопка **«Спросить»** в открытой сессии | эта сессия | «Спросить по сессии» и название сессии |
| Кнопка **«Спросить по выборке»** над списком | все сессии под текущими фильтрами: период, разработчик, проект | «Спросить по выборке»: сколько сессий, за какой период, чьи, в каком проекте |
| **«Новый вопрос»** во вкладке «Вопросы» | сессии, которые вы отметите в окне: поиск по запросу, разработчику, проекту или машине, флажок у каждой, счётчик «Выбрано: N» | «Новый вопрос» |

В диалоге — поле вопроса и подсказка: спросите своими словами, что делал разработчик, почему
выбрано такое решение, где ушло больше всего времени и денег, что осталось незакрытым.
Отправить — кнопкой **«Спросить»** или **Ctrl+Enter** (⌘+Enter на Mac). Пока в «Новом
вопросе» не отмечена ни одна сессия, кнопка недоступна; если под фильтры выборки не попало ни
одной сессии, вопрос не создастся: «За выбранный период сессий нет».

_Иллюстрация: Вкладка «Вопросы»: что уже спрашивали по записям и о каких сессиях; ответ открывается рядом со списком._

_Иллюстрация: Набор сессий для вопроса собирается вручную: поиск и флажки._

_Иллюстрация: Вопрос из открытой сессии: диалог называет сессию, подсказывает, о чём спрашивать, и отправляет вопрос во вкладку «Вопросы»._

## Какие вопросы задавать

| Кто | Примеры |
| --- | --- |
| **Руководитель** | «Что сделала команда за неделю и во что это обошлось?» · «На какие задачи ушло больше всего токенов?» · «Где модель ходила по кругу?» |
| **Тимлид** | «Какие препятствия всплывали у новичка в этом проекте?» · «Что осталось незакрытым в сессии про миграцию?» · «Какие тесты падали и как это чинили?» |
| **Продакт, аналитик** | «Что разработчики выясняли про экспорт отчётов?» · «Какие вопросы про выкладку задавали модели?» |
| **Разработчик** | «Почему я в итоге выбрал этот вариант?» · «Какие файлы я менял позавчера и зачем?» |
| **Информационная безопасность** | «Уходили ли к модели файлы из папки `secrets`?» · «Какие команды запускались с `sudo`?» |

Ответ по нескольким сессиям — это сводка по записям, а не по коду: модель видит, что делалось
и что получилось, но не видит текущее состояние репозитория.

## Что получает модель

- **Перечень сессий** набора — только их. Сессия, которой в наборе нет, для модели недоступна,
  даже если она угадает её идентификатор.
- Два инструмента по записям: **оглавление** сессии (`dev_session_toc`) — кто, когда, модель,
  итоги по токенам и списанию и **шаги**: что сказал разработчик и что было сделано по этому —
  вызовы модели, инструменты, файлы, ошибки, токены, списание; и **чтение диапазона
  сообщений** (`dev_session_read`) — слова разработчика, ответы и рассуждения модели, вызовы
  инструментов с аргументами, их результаты, ошибки. Модель сначала читает оглавление, потом
  только те шаги, которые нужны для ответа.
- **База знаний** организации — только чтение, как в «Спросить».
- **Кода нет.** Сессии шли на машине разработчика; репозиторий проекта в этом режиме не
  подключается. Спросить по коду можно в обычном [«Спросить»](/docs/ask).

Ничего не записывается: вопрос читает записи и не меняет ни их, ни базу знаний.

## Набор замораживается

Набор сессий фиксируется в момент создания вопроса. Новые сессии, которые появятся позже,
в этот вопрос не попадут, даже если подходят под те же фильтры, — ответ всегда можно
воспроизвести по тем же записям. Нужны свежие сессии — задайте новый вопрос. Идущая сессия,
попавшая в набор, читается такой, какой она будет на момент ответа: набор заморожен по
сессиям, а не по ходам.

## Как читать ответ

Ответ — в Markdown, простым языком. Каждое утверждение о сессии модель подкрепляет ссылкой
вида **«сессия `id`, шаг N (время)»**. Это текст, а не ссылка: перехода по нему в интерфейсе
нет — откройте сессию из списка и найдите шаг по времени на полосе хода.

**Шаг в ответе и шаг на полосе хода — разные вещи.** В оглавлении, которое читает модель,
шаг — это одно сообщение разработчика и всё, что было сделано по нему (служебные вызовы в
шаги не входят). На полосе хода шаг — каждая метка: сообщение или одно действие. Поэтому
«шаг 3» в ответе — это третий запрос разработчика, а не третья метка. Деньги модель называет
по списанию из оглавления. Если в записях ответа нет, модель так и говорит.

Диалог ведётся как в «Спросить»: видно рассуждение, можно приложить файл (Word, Excel,
PowerPoint, PDF, текст) и задать встречный вопрос — поле называется **«Уточнить вопрос по
сессиям»**. Если модели не хватает вашего выбора, она спросит сама — в списке вопрос помечен
«Ждёт вашего ответа».

## Список вопросов

Во вкладке «Вопросы» каждый вопрос подписан тем, о чём он: **«Сессия: …»** — по одной
сессии; **«N сессий: …»** с названиями — по отмеченным вручную; **«N сессий · с … · логин ·
проект»** — по выборке. Рядом — день и автор; спиннер — «Buff думает». На телефоне список и
открытый вопрос занимают экран по очереди, назад ведёт кнопка **«Все вопросы»**.

## Кто видит вопрос

Вопрос виден **владельцу организации** и тому, кому **доступны все сессии набора** — то есть
разработчику, если в наборе только его сессии. Тред с чужими сессиями участнику не откроется.

Для вопроса нужны право задавать вопросы (как для «Спросить») и положительный баланс.

## Расход и журнал

Ответ списывается по [тарифу организации](/docs/tariffs), как «Спросить»; в истории биллинга
строка ведёт во вкладку «Вопросы». Создание вопроса по сессиям попадает в
[журнал аудита](/docs/buff-code/sessions/audit) событием `ask.create` с перечнем сессий
набора.
