Авиаинциденты — журнал отказов

Обновлено: 2026-07-16 инциденты incidents краш отказ разбор root cause

Авиаинциденты

Раздел Авиаинциденты (/incidents) — журнал отказов и крашей.

Зачем это нужно

Каждый инцидент — это петля обучения: инцидент → причина → меры.
Зафиксированный разбор помогает:

  • не повторять собственные ошибки (история по каждому борту в Ангаре);
  • учиться на чужих — публичные инциденты видны всем участникам;
  • отделять гипотезы от фактов: предполагаемая причина фиксируется сразу,
    подтверждённая — по итогам расследования.

Вверху раздела — сводка: всего разборов, процент закрытых выводом,
процент полных потерь, ваши инциденты.

Создание инцидента

Нажмите + Описать инцидент (/incidents/new) и заполните форму:

Поле Обязательное Примечание
Дата и время да когда произошёл инцидент
Борт да из Ангара или вручную — см. ниже
Фаза полёта да Предполётная подготовка / Взлёт / Крейсерский полёт / Манёвр / Посадка
Категории да теги, можно несколько (до 4): Мотор, Регулятор (ESC), Аккумулятор, Потеря RC-связи, Потеря видеосвязи, Конструкция, ПО / автопилот, Пилотирование, Погода, Неизвестно, Другое
Серьёзность да Без последствий / Повреждения / Полная потеря
Место нет свободный текст: склон, поле, трасса…
Погода нет заполняется автоматически по точке и времени (см. ниже), можно править: «Ветер 8–12 м/с, +18 °C»
Описание происшествия да что произошло, хронология, поведение аппарата
Предполагаемая причина нет первая гипотеза — что, по-вашему, отказало
Теги нет через запятую: inav, autolaunch, esc
Видимость нет флажок «Публичный — виден всем участникам» (по умолчанию инцидент приватный)

Категория «Неизвестно» — для случаев, когда причина отказа не установлена:
честнее, чем «Другое», и не искажает статистику категорий.

Категории выбираются тегами: селект «+ Добавить категорию…» добавляет чип,
крестик на чипе убирает его. Причин может быть несколько (например, «Потеря
RC-связи» + «Пилотирование») — все теги видны в журнале и на карточке,
фильтр по категории находит инцидент по любому из тегов, а ИИ-разбор
учитывает их все.

Кнопка Создать разбор сохраняет инцидент.

Борт: из Ангара или вручную

  • Если в Ангаре есть борта — поле Борт показывает селектор
    ваших бортов в формате «имя — модель». Инцидент привязывается к борту
    и появится на его карточке.
  • Кнопка Ввести вручную переключает на свободный ввод имени борта —
    для чужого аппарата или борта, которого нет в Ангаре. (При редактировании
    переключение в ручной режим отвязывает борт.)
  • Если бортов нет — сразу ручной режим и ссылка «заведите борт в Ангаре».

Предполагаемая и подтверждённая причина

  • Предполагаемая причина заполняется при создании — рабочая гипотеза.
  • Подтверждённая причина появляется в форме редактирования — заполните её,
    когда расследование завершено (разбор обломков, логи, воспроизведение).

Оба поля видны в паспорте инцидента на его карточке.

Статусы расследования

У нового инцидента статус «Открыт». Владелец меняет статус прямо на странице
инцидента
— селектом в ряду бейджей, без открытия формы (статус сохраняется
сразу). Тот же статус доступен и в форме редактирования.

Статус Смысл
Открыт инцидент зафиксирован, разбор не начат
Расследование идёт анализ логов/обломков, причина уточняется
Закрыт причина установлена, выводы сделаны

Закрытый инцидент защищён от правок: поля становятся read-only — кнопка
«Редактировать» скрывается, а API отклоняет изменения полей (можно менять
только статус). Чтобы отредактировать закрытый инцидент, переоткройте его —
смените статус на «Открыт» или «Расследование», редактируемость вернётся.
Комментарии и вложения у закрытого инцидента работают как обычно.

Карточка инцидента

/incidents/view/{id} — описание, паспорт (борт, дата, фаза, место, погода,
причины), бейджи серьёзности/статуса/категории/видимости и теги. Владельцу
доступны кнопки Редактировать и Удалить.

Фото-обложка

Если к инциденту приложено фото, оно становится обложкой — показывается
миниатюрой в журнале и в шапке карточки. Правила:

  • первое загруженное фото назначается обложкой автоматически;
  • при нескольких фото владелец выбирает главную кнопкой «Сделать обложкой»
    рядом с вложением (текущая помечена бейджем «Обложка»);
  • при удалении обложки её место занимает следующее фото-вложение;
  • если фото-вложений нет, используется фолбэк: фото привязанного борта из
    Ангара → фото модели борта → стандартный баннер раздела.

Обложку видит каждый, кто видит инцидент (та же приватность, что у самого
инцидента); состав вашего Ангара при этом не раскрывается.

Вложения

Фото и логи полётных контроллеров прикладываются в блоке Вложения
(только владелец): выберите файлы и нажмите Загрузить. Можно выбрать
несколько файлов сразу — они загрузятся по очереди с индикатором
прогресса; если какой-то файл не прошёл проверку, остальные всё равно
загрузятся, а причины отказа будут перечислены под формой.

Файлы можно и перетащить мышью: вся карточка «Вложения» — drop-зона.
При перетаскивании она подсвечивается с подсказкой «Отпустите, чтобы
загрузить»; сброшенные файлы уходят тем же конвейером, что и кнопка —
с тем же прогрессом, проверками типов/лимитов и общим отчётом об ошибках.
Кнопка выбора файлов никуда не девается — на телефонах и планшетах без
drag&drop всё работает как раньше.

  • Допустимые типы:
  • фото — jpg, jpeg, png, webp, heic;
  • видео — mp4, mov (другие контейнеры — mkv, avi и т. п. — отклоняются
    с пояснением; конвертируйте в MP4/MOV);
  • логи — bin, bbl (Betaflight blackbox), log, tlog (ArduPilot),
    ulg (PX4), txt, csv;
  • архивы — zip (например, набор логов одним файлом);
  • содержимое проверяется по сигнатуре файла, а не только по расширению —
    видео, переименованное в .jpg, будет отклонено;
  • фото автоматически сжимаются: длинная сторона до 2560 px, JPEG —
    детали повреждений сохраняются, а место экономится (оригинал не хранится;
    HEIC сохраняется как есть);
  • фото и видео показываются единой сеткой миниатюр (в порядке загрузки);
    у видео на миниатюре — первый кадр со значком ▶. Клик открывает
    полноэкранный просмотр с листанием по всем медиа подряд (стрелки, свайп,
    Esc): фото — картинкой, видео — встроенным плеером с перемоткой прямо
    в карусели (хранится без перекодирования). На публичных shared-страницах
    карусель работает так же, только на чтение;
  • действия на миниатюрах (только владелец): «Сделать обложкой» (у фото),
    «Скачать» и «Удалить» (с подтверждением) — всё применяется сразу, без
    перезагрузки страницы;
  • файлы, которые не фото и не видео (логи txt/csv, bin blackbox,
    архивы), показываются компактной строкой «Файлы» со скачиванием — в
    карусель они не попадают;
  • лимиты: 25 МБ на файл (видео — 200 МБ), до 20 файлов и
    500 МБ суммарно на один инцидент; текущий суммарный объём показан
    над сеткой вложений;
  • скачать вложение может каждый, кто видит инцидент (в строке «Файлы» —
    ссылкой, у медиа владельцу доступна кнопка «Скачать» на миниатюре).

Лимиты настраиваются переменными окружения INCIDENT_ATTACHMENT_MAX_BYTES,
INCIDENT_VIDEO_MAX_BYTES, INCIDENT_ATTACHMENT_MAX_FILES,
INCIDENT_ATTACHMENT_MAX_TOTAL_BYTES и INCIDENT_ATTACHMENT_ALLOWED_EXTENSIONS.

Комментарии

Комментарий может оставить любой залогиненный пользователь, который видит
инцидент (владелец — всегда; остальные — если инцидент публичный).
Авторы подписываются как «Вы», «Автор разбора» или «Участник» — без раскрытия
личных данных.

Комментарии учитываются ИИ-разбором: и одиночный разбор инцидента, и
сводный анализ читают обсуждение (с ограничением количества и длины) — версии
и наблюдения участников попадают в контекст модели. Имена и email в промпт
не передаются, только роль («автор инцидента» / «участник»).

Разбор ИИ

Разбор одного инцидента

В карточке инцидента кнопка «Разобрать (ИИ)» запускает локальную модель:
она читает поля инцидента, текстовые логи из вложений (LOG, TXT, CSV, BBL)
и комментарии, после чего предлагает вероятные причины, рекомендации и
чек-лист перед следующим полётом. Разбор сохраняется в инциденте; кнопка
«Обновить разбор» перезапускает его.

Статус показывается живьём: «В очереди (N)» → «Анализирую…» → результат.
Страницу можно закрыть или уйти на другую — разбор продолжится в фоне,
а при возвращении карточка сама переподхватит запущенную задачу и
покажет результат. Если разбор упал, пока вы отсутствовали, карточка
покажет текст ошибки, а не промолчит.

Массовый разбор

На странице журнала (если у вас есть неразобранные инциденты) — кнопка
«Разобрать неразобранные (N)». Задачи ставятся в очередь автоматически,
порциями в рамках лимита очереди (следующие подаются по мере завершения
предыдущих); прогресс — «Разобрано N из M». Ошибки отдельных разборов
не прерывают остальные и показываются итоговым сообщением.

Сводный разбор

Кнопка «Сводный разбор (ИИ)» анализирует весь ваш журнал сразу:
повторяющиеся причины, системные ошибки, тренды и топ-рекомендации.
Отчёт кэшируется и показывается при открытии списка; «Обновить сводку»
пересобирает его. Запущенная сводка тоже переживает перезагрузку страницы —
отчёт дорисуется при возвращении.

Время ответа локальной модели ограничено (переменная окружения
LLM_JOB_TIMEOUT_S, по умолчанию 180 секунд); при превышении лимита
сообщение об ошибке показывает фактическое значение. Одновременно в очереди
может стоять не более LLM_MAX_QUEUED_PER_USER задач (по умолчанию 3) —
массовый разбор учитывает это сам.

Фильтры, поиск и сортировка списка

Над панелью — переключатель «Все / Только мои»: «Все» показывает ваши
инциденты и публичные инциденты сообщества, «Только мои» скрывает чужие.
Выбор запоминается в браузере и комбинируется с фильтрами ниже; кнопка
Сбросить возвращает «Все».

Панель фильтров применяется мгновенно, без перезагрузки страницы:

  • Поиск — живой, посимвольный: по имени борта, модели и описанию;
  • Статус — открыт / расследование / закрыт;
  • Модель — модели бортов вашего флота; фильтр появляется, когда среди
    инцидентов есть привязанные к Ангару борта;
  • Борт — конкретный экземпляр: привязанный борт из Ангара или имя,
    введённое вручную;
  • Серьёзность, Категория (совпадение по любому из тегов инцидента), Фаза полёта — по значению.

Фильтры и поиск комбинируются (логика И); кнопка Сбросить возвращает
полный список. Если по выбранным условиям ничего не нашлось — появится
заглушка «Ничего не найдено по фильтрам» с кнопкой сброса.

Над панелью — счётчик «Показано N из M»: N — записи, видимые после
применения фильтров, поиска и вкладки «Все / Только мои», M — все записи
журнала. Счётчик пересчитывается мгновенно при каждой смене условий.
Количество инцидентов показывается и на публичных страницах: у shared-ссылки
на весь журнал и у подборки — бейдж «Инцидентов: N».

Сортировка — в той же панели: по дате (по умолчанию, новые сверху),
серьёзности, борту/модели или статусу; направление переключается кнопкой
↑/↓. Выбор сортировки запоминается в браузере.

Фильтры работают и как query-параметры API
(/api/incidents?category=…&severity=…&flight_phase=…&status=…), дополнительно
API принимает tag и aircraft_id. Те же параметры у страницы /incidents
подсвечивают соответствующие фильтры панели (deep-link).

Приватность

  • По умолчанию инцидент приватный — виден только вам.
  • Сменить видимость можно в диалоге «Поделиться» — переключатель
    «Публичный — виден всем пользователям платформы» (доступен и у закрытого
    инцидента: это управление доступом, а не правка полей). Публичность
    не зависит от списка участников e-mail-шаринга.
  • Публичный инцидент видят все залогиненные пользователи (чтение
    и комментарии); править и удалять его можете только вы.
  • Привязанный борт другим пользователям показывается только по имени —
    состав вашего Ангара не раскрывается.

Шаринг всего журнала

Кнопка «Поделиться журналом» на /incidents открывает диалог:

  • Ссылка на журнал — тумблер выдаёт read-only ссылку
    /incidents/shared/… на весь журнал (включая приватные записи).
    По умолчанию ссылка требует входа: открыть её можете вы и участники
    из списка email ниже; анонима она отправляет на страницу входа, а
    залогиненного пользователя не из списка — на «ссылка недействительна».
    Выключение тумблера или кнопка «Перевыпустить» мгновенно гасят
    старую ссылку.
  • Без входа — отдельный тумблер делает ссылку публичной: журнал увидит
    любой, у кого она есть, без логина (только чтение). Режим сохраняется
    при перевыпуске ссылки. Ссылки, выданные до этого обновления, публичность
    не унаследовали: они продолжают работать, но по умолчанию просят войти —
    включите «Без входа», если журнал должен быть открыт всем.
  • Доступ по email — участники платформы из списка видят все ваши
    инциденты в собственном журнале, могут читать и комментировать.

Со shared-страницы журнала можно переходить в карточки инцидентов
они открываются в том же режиме доступа, только на чтение (без форм
комментария и LLM-разбора). Фото, видео и прочие вложения, а также обложки
показываются и скачиваются в рамках этого же shared-доступа — чужим
инцидентам и вложениям токен ссылки доступа не даёт.

Подборки: выделение и шаринг выбранных инцидентов

Если делиться нужно не всем журналом, а несколькими разборами — соберите
подборку:

  1. Отметьте инциденты чекбоксами на карточках журнала (чекбоксы есть
    только у ваших инцидентов — чужие в подборку не попадают).
    Флажок «Выбрать все видимые» отмечает всё, что прошло активные
    фильтры и поиск; кнопка «Сбросить выделение» снимает отметки.
  2. Нажмите «Поделиться выбранными (N)» — откроется диалог подборки:
    - публичная ссылка /incidents/shared-selection/… создаётся сразу:
    по ней выбранные инциденты видны без входа, только на чтение;
    со страницы подборки открываются и карточки этих инцидентов —
    read-only, с фото и вложениями (в рамках подборки);
    - доступ по email (опционально) — участники платформы из списка
    увидят инциденты подборки в собственном журнале и смогут открывать
    их карточки (чтение и комментарии, как при обычном шаринге).
  3. Кнопка «Создать подборку» сохраняет её и показывает ссылку —
    скопируйте и отправьте.

Активные подборки собраны в диалоге «Мои подборки» (кнопка появляется
рядом с «Поделиться журналом»): для каждой — ссылка, «Перевыпустить»
(мгновенно гасит старую ссылку и выдаёт новую) и «Отозвать» (удаляет
подборку целиком — перестают работать и ссылка, и доступ по email).
В одну подборку помещается до 100 инцидентов; создание и отзыв подборок
фиксируются в вашей истории действий («Моя активность» в настройках).

Карта места и автопогода

Точку инцидента можно указать на карте (кнопка Указать на карте в форме;
без настроенного ключа Яндекс.Карт — ручные поля широты/долготы). Флажок
«Место примерное» помечает координаты как неточные.

Погода подтягивается автоматически: как только вы применили место
(«Готово» в модале карты или ввели пару координат вручную) и указана дата,
поле «Погода» заполняется сводкой по точке и времени инцидента. Смена
даты/времени при выставленной точке обновляет сводку. Поле остаётся
редактируемым: если вы поправили текст руками, автоподстановка его не
перезапишет до следующего применения места. Если погода недоступна
(нет ключа WeatherAPI, дата старше 7 дней, сбой сервиса) — причина
показывается подсказкой под полем, введённый текст не затирается.

Следующие шаги