Авиаинциденты
Раздел Авиаинциденты (/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,binblackbox,
архивы), показываются компактной строкой «Файлы» со скачиванием — в
карусель они не попадают; - лимиты: 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-доступа — чужим
инцидентам и вложениям токен ссылки доступа не даёт.
Подборки: выделение и шаринг выбранных инцидентов
Если делиться нужно не всем журналом, а несколькими разборами — соберите
подборку:
- Отметьте инциденты чекбоксами на карточках журнала (чекбоксы есть
только у ваших инцидентов — чужие в подборку не попадают).
Флажок «Выбрать все видимые» отмечает всё, что прошло активные
фильтры и поиск; кнопка «Сбросить выделение» снимает отметки. - Нажмите «Поделиться выбранными (N)» — откроется диалог подборки:
- публичная ссылка/incidents/shared-selection/…создаётся сразу:
по ней выбранные инциденты видны без входа, только на чтение;
со страницы подборки открываются и карточки этих инцидентов —
read-only, с фото и вложениями (в рамках подборки);
- доступ по email (опционально) — участники платформы из списка
увидят инциденты подборки в собственном журнале и смогут открывать
их карточки (чтение и комментарии, как при обычном шаринге). - Кнопка «Создать подборку» сохраняет её и показывает ссылку —
скопируйте и отправьте.
Активные подборки собраны в диалоге «Мои подборки» (кнопка появляется
рядом с «Поделиться журналом»): для каждой — ссылка, «Перевыпустить»
(мгновенно гасит старую ссылку и выдаёт новую) и «Отозвать» (удаляет
подборку целиком — перестают работать и ссылка, и доступ по email).
В одну подборку помещается до 100 инцидентов; создание и отзыв подборок
фиксируются в вашей истории действий («Моя активность» в настройках).
Карта места и автопогода
Точку инцидента можно указать на карте (кнопка Указать на карте в форме;
без настроенного ключа Яндекс.Карт — ручные поля широты/долготы). Флажок
«Место примерное» помечает координаты как неточные.
Погода подтягивается автоматически: как только вы применили место
(«Готово» в модале карты или ввели пару координат вручную) и указана дата,
поле «Погода» заполняется сводкой по точке и времени инцидента. Смена
даты/времени при выставленной точке обновляет сводку. Поле остаётся
редактируемым: если вы поправили текст руками, автоподстановка его не
перезапишет до следующего применения места. Если погода недоступна
(нет ключа WeatherAPI, дата старше 7 дней, сбой сервиса) — причина
показывается подсказкой под полем, введённый текст не затирается.
Следующие шаги
- Ангар — заведите борта, чтобы привязывать инциденты
- Платформа Skyforge — обзор всех разделов