Айко Атами
Слепая зона

Глава 1. Чистое небо

Мокрый снег ложился на обзорное стекло операторской и тут же сползал вниз серыми нитями. За стеклом порт Северореченска не имел контуров: краны то проступали темными ребрами, то исчезали в соленой дымке, как будто их стирали по одному слою. Внизу, за пустой крановой галереей, ждал грузовой БАС: медрасходники для поселка за проливом, кассета датчиков для ремонтной бригады, срочная автоматика для завода. Не демонстрация. То, что люди завтра начнут считать обещанной дорогой.

Алиса Романова не спала нормально третью ночь. Усталость держалась не в веках, а в жестах: она дважды проверяла один и тот же лист допуска, ставила кружку мимо светового пятна на столе и возвращала взгляд к окну старта раньше, чем успевала дочитать строку. Ее подпись уже стояла под сегодняшним прогоном. Если они закрывали окно сейчас, порт терял день, комиссия получала повод назвать коридор красивой игрушкой, а северный склад снова считал туман сильнее любого проекта.

На стене экранов все выглядело спокойнее. Зеленые поля допуска. Ровная линия уверенности. Пустой сектор на радарном слое. Алиса смотрела не на общий статус, а на задержку в канале с портом.

— Канал три, отклик?

Денис Морозов поднял ладонь от пульта, не оборачиваясь.

— Двести восемьдесят миллисекунд. В допуске.

— Не в среднем, Денис. На последнем пакете.

Он вывел на боковую панель узкую дорожку обмена. Красного там не было. Только короткий зубец, такой аккуратный, что его легко было принять за дыхание системы.

— Триста сорок, — сказал Денис. — Один пакет.

Марина Кольцова отозвалась с соседнего места:

— Классификатор не потерял сцену. Слияние держит уверенность девяносто два.

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

Схема работала только тогда, когда кто-то удерживал ее целой.

— Окно?

— Семнадцать минут, — ответила Тамара с портового канала. Голос шел с песком, но слова держались. — Потом снег сядет ниже крановой галереи. У меня люди уже сняты с третьей эстакады. Второй раз за день я их не выведу.

На дальнем экране мигнула карта коридора: заводской причал, сервисная галерея, пустой участок над контейнерной площадкой, посадочный створ у северного склада. Грузовой БАС стоял на старте, тяжелый, белый, с композитной защитой узлов.

Лебедев именно это повторял комиссии утром: коридор нужен не для красивого отчета. Северу не хватает дороги, когда порт закрыт туманом, а вертолетный час стоит дороже чужого терпения.

Алиса не любила, когда инфраструктуру объясняли через чужое терпение. Терпение редко попадало в протокол. Зато попадали видимость, ветер, плотность осадков, задержка канала, карта препятствий, уверенность модели и подпись руководителя испытаний.

— Павел, кожухи?

Павел Брагин оторвался от промышленного планшета. Он стоял у стола, потому что садиться в операторской не умел: материаловед всегда выглядел так, будто пришел на чужую кухню с деталью в руках.

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

— Не «в пределах». Число.

— Восемьдесят семь процентов у поверхности, девяносто один на двадцати метрах.

Алиса отметила второе число в журнале. Порт за стеклом снова пропал, остались только лампы на мачтах и размазанная желтая полоса аварийного прохода. Внизу люди уже ушли из опасного сектора. Это было главным условием финального допуска: не скорость, не дальность, не демонстрация для комиссии, а пустой коридор под машиной.

— Комиссия спрашивает, почему держим старт, — сказал Кирилл с административного канала.

Алиса не сразу нажала ответ.

На отдельном стекле над переговорной отражались люди, которым нельзя было показывать сомнение раньше, чем оно станет фактом. Виктор Лебедев стоял ближе всех к двери, не садился и не снимал пальто. Рядом с ним двое из регионального блока и инспекторская группа. Илью Сафонова Алиса знала пока только по фамилии в списке наблюдателей: промышленная безопасность, внеплановый контроль, допуск к протоколам без права вмешательства в штатное решение, если нет красного статуса.

Красного статуса не было.

— Потому что окно еще открыто, — сказала Алиса в микрофон. — Условия тяжелые, но расчетные. Финальный прогон именно для этого диапазона.

Лебедев за стеклом повернул голову к инспектору. Сафонов ничего не записал. Он смотрел не на Алису и не на экран, а на схему эвакуации под картой коридора.

Алиса вернулась к основному слою.

— Предстартовая матрица. По строкам.

Операторская изменила дыхание. Разговоры стали короче, кресла перестали скрипеть. На центральном экране строки уходили вниз.

— Навигация.

— Зеленый.

— Радар.

— Зеленый.

— Техническое зрение.

— Зеленый.

— Карта препятствий.

— Зеленый.

— Связь с портом.

Денис задержался на половину вдоха.

— Зеленый.

Алиса посмотрела на него.

— Что не так?

Он провел большим пальцем по кромке клавиатуры. Этот жест не входил ни в один регламент, но Алиса знала его лучше многих показателей: Денис так делал, когда видел несоответствие, которое еще не мог назвать.

— Картинка чистая, — сказал он.

Марина коротко усмехнулась носом, не зло, а от усталости.

— Это обычно хорошая новость.

— Для такой погоды? — Денис вывел рядом портовую камеру. Там в мокрой дымке дернулась тень крана. На слое технического зрения тени не было, только серое поле и аккуратная граница безопасного сектора. — Слишком чистая.

Слово повисло в операторской хуже красного сигнала. Красный сигнал хотя бы говорил, что делать.

Алиса приблизила слой, потом радар, потом сводную уверенность. Система не врала грубо. Она показывала то, что должна была показывать при отсутствии препятствий в рабочем коридоре. Все источники сходились в допустимую картину.

Кроме мокрого стекла, портового голоса с песком и Денисовой ладони над клавиатурой.

— Шумоподавление в норме? — спросила Алиса.

Марина уже открывала журнал модели.

— Да. Последний патч не трогал этот блок. Уверенность не скачет.

— Именно, — сказал Денис.

Марина повернулась к нему.

— Что «именно»?

— Она слишком ровная.

Алиса подняла руку, останавливая спор до того, как он стал личным. Время на панели уменьшилось до пятнадцати минут. За стеклом переговорной Лебедев что-то говорил инспектору. Тамара на портовом канале молчала, но значок ее линии оставался открытым.

— Денис, формулируй как проверяемое.

Он сглотнул. Не от страха перед ней, Алиса это видела. От того, что хорошая операторская тревога редко рождается готовой фразой.

— Визуальный слой чистит среду сильнее, чем я ожидаю по камере и погоде. Радарный слой пустой. Модель уверена. Но порт так не молчит.

Павел тихо переставил планшет на стол.

— Материал тут при чем?

— Пока ни при чем, — сказала Алиса. — Не притягиваем.

Она открыла быстрый сравнительный прогон с утренним тестом. Утром осадки были слабее, ветер выше, видимость лучше. Уверенность модели шла почти такой же линией. Почти. Сейчас она была ровнее. Красиво ровнее.

Красиво — плохое слово для допуска.

— Марина, дай сырой слой до постобработки.

Марина не спорила. На экране появился зернистый серый поток, в котором порт перестал быть схемой и снова стал мокрым железом. Никакого препятствия в коридоре не было. Тени кранов лежали вне зоны. Галерея была очищена. БАС еще стоял на стартовой позиции.

— Денис? — спросила Алиса.

Он смотрел на сырое изображение дольше, чем требовалось.

— Формального основания нет.

Это была честная фраза. И неудобная. Она отдавала решение наверх.

Наверхом была Алиса.

— Алиса Сергеевна, — сказал Кирилл с административного канала, — комиссия просит подтвердить, что задержка не связана с отказом.

Задержка. Уже задержка. Не проверка, не уточнение, не нормальное право системы на сомнение, а видимый сбой темпа. Алиса почувствовала, как операторская ждет от нее не мягкости и не красивой уверенности. Ждет решения, которое потом можно будет повторить в отчете без стыда.

Она посмотрела на матрицу. Ни один показатель не давал ей права закрыть окно. Ни один не требовал остановки.

Между этими двумя фразами оставалось место для человека. Место было узким и не имело отдельной строки.

— Пишем замечание в журнал, — сказала Алиса. — «Операторская оценка: визуальный слой выглядит чище ожидаемого при текущей портовой среде». Марина, сохраняешь сырой поток. Денис, ставишь маркер на текущую минуту. Старт не отменяем.

Денис опустил глаза к клавиатуре.

— Принял.

Марина выдохнула не в микрофон. Павел ничего не сказал. На стене экранов статус остался зеленым.

Алиса нажала канал переговорной.

— Предстартовая проверка завершена. Замечание внесено, отказов нет. Готовы к финальному прогону.

За стеклом Лебедев кивнул так, будто это был его ответ. Инспектор Сафонов наконец посмотрел на Алису. Не строго, не обвиняя. Просто так, как смотрят на человека, который только что выбрал формулировку.

БАС поднялся без рывка. На стартовом слое это выглядело как короткая белая метка, которая отделилась от земли и вошла в коридор. За стеклом операторской машина исчезла почти сразу: мокрый снег, свет мачт, дымка от теплых цехов. На экране она была точнее мира.

— Высота двадцать два, скорость восемнадцать, — сказал Денис.

— Коридор?

— Держит.

— Порт?

Тамара ответила не сразу.

— Люди сняты. Третья эстакада пустая. На второй только аварийный пост за бетонной стеной.

— Подтвердите отсутствие движения в створе.

— Подтверждаю.

Алиса отметила время. Каждая подтвержденная строка уменьшала пространство для поздней остановки. Это было нормально. Протокол и существовал, чтобы решение не расплывалось при каждом чужом вдохе.

На панели модели уверенность поднялась до девяноста трех.

— Красиво идет, — сказал Кирилл слишком близко к микрофону.

— Не комментируем, — ответила Алиса.

В переговорной кто-то усмехнулся. Она не посмотрела кто. В такие минуты лишний взгляд мог стать лишней связью: с ожиданием Лебедева, с усталостью команды, с тем, что через неделю этот коридор должен был перейти из испытаний в опытную эксплуатацию.

Денис увеличил радарный слой. Пусто. Техническое зрение: пусто. Карта препятствий: пусто. Сырой поток: снег, темные полосы кранов за пределами створа, дрожащая лампа на галерее. Все неважное оставалось неважным.

— Вход в участок «Север-3» через сорок секунд, — сказала Алиса. — Повторяем контроль.

— Навигация зеленый.

— Радар зеленый.

— Зрение зеленый.

— Карта зеленый.

— Связь с портом… — Денис наклонился ближе. — Зеленый.

Алиса не дала ему уйти в молчание.

— Денис.

Он держал палец над маркером, но не ставил новый.

— Та же картина.

— Хуже?

— Не могу сказать.

— Лучше?

— Тоже нет.

Марина повернула к ним профиль. На ее лице уже была защита модели: не упрямство, а профессиональная обязанность не дать чужому ощущению стать техническим фактом без проверки.

— Сырой слой не показывает препятствий, — сказала она. — Радар пустой. Если мы сейчас остановим, причина будет «оператору кажется странным». Это не остановочное условие.

Денис резко глянул на нее.

— Я не сказал «кажется».

— Тогда дай параметр.

Он молчал две секунды. На экране БАС прошел отметку над первым пустым складом.

— Нет параметра.

Алиса услышала в этой фразе не капитуляцию. Скорее обиду на язык, который не успел за глазом. Она сама учила Дениса не приносить наверх неоформленную тревогу. Она сама добивалась, чтобы команда говорила проверяемо, потому что иначе сложный проект распадался на чувства, статус и крик.

И все же порт за стеклом не был чистым.

— У нас есть процедурный вариант, — сказал Павел. — Снизить скорость на участке.

Марина дернула головой.

— Изменим профиль прогона. Финальный допуск будет грязным.

— Зато посмотрим, останется ли ровная уверенность.

— На другой скорости? Это уже другой тест.

Алиса посмотрела на таймер. Двенадцать секунд до «Север-3». Если снизить скорость без формального основания, комиссия получит право сказать, что команда сама не доверяет конфигурации. Если остановить, окно уйдет, порт второй раз людей не снимет, а Лебедев получит не перенос, а провал финального допуска. Если продолжить, они будут действовать по утвержденной матрице.

По матрице все было зеленым.

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

— После? — спросил Денис.

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

— Да. После.

БАС вошел в «Север-3».

На экране ничего не произошло. Метка шла по коридору, как по линейке. Радар молчал. Модель держала девяносто три, потом девяносто четыре. Пустой сектор оставался пустым.

За стеклом порт дрожал от снега и света. Внизу, за бетонной стеной, аварийный пост Тамары был невидим. Люди там доверяли не красивой линии, а тому, что наверху кто-то не перепутает допуск с безопасностью.

Алиса поправила микрофон.

— Борт, подтверждаю прохождение участка по плану. Отклонений, требующих остановки, нет.

Денис не повторил за ней. Он поставил второй маркер.

Марина сохранила пакет. Павел записал влажность. Тамара на портовом канале сказала:

— В створе тихо.

В ее голосе не было облегчения. Только рабочая отметка.

Алиса смотрела на пустой сектор и ждала обычного набора мелких несовпадений: шум на границе крана, слабую рябь от мокрой галереи, дрожание классификации на дальнем свете. Система не дала ей ни одного. Она шла чисто. Очень чисто.

— Выход из «Север-3» через двадцать, — сказал Денис.

— Принято.

В переговорной Лебедев уже говорил кому-то по телефону, закрыв ладонью микрофон. Он видел успешную линию, не слышал ее цены. Сафонов стоял у стекла так же неподвижно, как раньше. Алиса вдруг подумала, что он запомнит не зеленый статус, а Денисову паузу перед словом «зеленый».

Эта мысль была лишней. Она убрала ее так же, как убирала с экрана вспомогательные слои.

— Выход, — сказал Денис. — Коридор держит. Посадочный створ через четыре минуты.

На центральной панели участок «Север-3» стал серым: пройден. За ним не осталось ничего, кроме двух маркеров в журнале и сырого потока, который можно будет разобрать позже. Позже было удобным словом. Оно не спорило с текущим решением.

Алиса нажала запись руководителя.

— Финальный прогон продолжается по утвержденному профилю. Операторское замечание зарегистрировано. Оснований для остановки нет.

Она произнесла это ровно. Фраза получилась пригодной для отчета.

Денис посмотрел на экран так, будто отчет уже стал тяжелее воздуха.

— Алиса Сергеевна.

— Что?

Он не сразу нашел голос.

— Если после прогона окажется, что это был сигнал, журнал покажет, что мы его видели.

В операторской стало тише, чем позволяли вентиляторы. Марина опустила глаза к своей панели. Павел перестал писать. Тамара на портовом канале не отключилась.

Алиса могла сказать, что журнал для этого и нужен. Могла напомнить, что сигнал без параметра не является основанием. Могла перенести разговор на разбор и тем самым закрыть его чисто.

Она выбрала самое короткое.

— Покажет.

БАС шел дальше, к посадочному створу. На экране перед ним было пусто.

Глава 2. Падение

Посадочный створ погас без предупреждения.

Не красным. Не желтым. Просто на долю секунды исчезла рамка допуска, будто интерфейс решил моргнуть. Потом рамка вернулась уже красной, с тонкой подписью под ней: «расхождение карты препятствий».

— Створ? — сказала Алиса.

Денис не ответил. Его рука была на клавиатуре, но пальцы не двигались.

На центральном экране белая метка БАС шла к северному складу по штатной линии. Высота двадцать два. Скорость восемнадцать. Радарный слой все еще показывал пустоту там, где система уже признала расхождение.

— Денис.

Он дернулся, как человек, которого вытолкнули из воды.

— Карта отстала на один цикл. Нет, на два. Визуальный слой не подтверждает новый объект.

— Какой объект?

Марина уже раскрывала журнал слияния.

— Радар дал короткий отклик внизу створа. Модель отнесла к шуму. Сейчас пересчитала.

— Покажи.

На боковой панели появилась белая пустота перед ударом. Сначала ничего, только снег, размазанный свет и ровный серый коридор. Потом короткий зубец на радаре, такой слабый, что его можно было потерять между строками. Потом красная метка, появившаяся слишком поздно.

В портовом канале что-то хрустнуло.

— У нас удар! — крикнула Тамара.

Голос не сорвался. Это было страшнее: Тамара успела войти в аварийный режим раньше, чем операторская приняла случившееся.

— Где? — спросила Алиса.

— Северный склад, нижняя галерея. Не в створе, сбоку. Аппарат ушел с линии. Есть повреждение ограждения. Люди за стеной.

Алиса нажала общий аварийный канал.

— Всем постам: остановка операций. БАС-коридор закрыт. Порт подтверждает людей за бетонной стеной. Денис, телеметрия в аварийный пакет. Марина, заморозить модельный слой и сырой поток. Павел, материалы и влажность по последним пяти минутам в отдельный лог.

Слова выходили ровно. Слишком ровно. Она слышала себя так, будто рядом говорила другая руководительница испытаний, пригодная для протокола и не имеющая права помнить собственную фразу.

Оснований для остановки нет.

— Алиса Сергеевна, — сказал Кирилл с административного канала. — Комиссия просит статус.

— Комиссия подождет.

— Там Лебедев…

— Комиссия подождет, Кирилл. Дай мне спасателей.

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

Алиса заставила себя не приближать изображение до тех пор, пока Тамара не даст людей.

— Тамара, пост?

— Двое в укрытии. Один на связи. Второй… — В канале послышалось короткое дыхание. — Второго проверяют. Бригада идет с южного входа.

Павел у стола снял очки и тут же надел обратно. Марина смотрела на свой слой так, будто могла вернуть метку назад одним правильным запросом.

Денис наконец заговорил:

— Я ставлю аварийную копию.

— Не одну. Три. Локально, на сервер комиссии и на внешний регистратор. Без перезаписи.

— Принял.

— И два маркера из «Север-3» в тот же пакет.

Он посмотрел на нее. Не с упреком. Упрек был бы легче.

— Они там.

— Проверь.

Денис проверил. На панели появились две строки с его формулировкой: «визуальный слой выглядит чище ожидаемого при текущей портовой среде». Первая перед стартом. Вторая перед входом в «Север-3».

— Есть, — сказал он.

Алиса кивнула. Горло не слушалось, но командный голос держался.

— Марина, что с расхождением?

— Радарный отклик пришел сбоку, ниже основной зоны. Визуальный слой его не увидел. Карта препятствий пересчиталась только после изменения траектории.

— Почему траектория изменилась?

— Не знаю.

Марина сказала это слишком быстро, без защиты модели. Значит, уже испугалась не обвинения, а настоящей пустоты в объяснении.

— Автопилот?

— Лог говорит, что борт корректировал удержание по ветру. Команда штатная.

— Штатная команда не кладет аппарат в галерею.

— Я знаю.

Алиса не стала добивать. В операторской и так не осталось воздуха для лишнего давления.

Снаружи по стеклу поползла синяя вспышка аварийной машины. Порт за окном больше не был фоном испытания. Он стал местом происшествия.

— Связь со вторым? — спросила Алиса.

Тамара ответила через три секунды.

— Жив. Травма ноги. Сознание есть.

В операторской никто не выдохнул вслух. Облегчение было недопустимо: БАС все равно упал, галерея все равно получила удар, и слово «жив» не отменяло того, что эта минута уже разделила проект на до и после.

— Медики?

— Заходят.

— Хорошо. Денис, ставь контрольную сумму пакета. Марина, сохрани конфигурацию модели. Павел, не закрывай журнал влажности. Все действия только через аварийный режим, без ручного исправления данных.

Кирилл снова вышел в канал:

— Алиса Сергеевна, инспекторская группа идет в операторскую.

За стеклом переговорной Лебедев говорил уже не по телефону, а с двумя людьми сразу. Илья Сафонов шел впереди группы. Не быстро.

Алиса посмотрела на журнал. Две операторские метки. Сырой поток. Параметры фильтрации. Радарный зубец. Красная метка, появившаяся поздно. Все было сохранено, но сохраненное не спасало людей внизу.

Дверь открылась без стука.

— Работы остановить, — сказал Сафонов.

Его голос был ниже, чем Алиса ожидала. Не громкий, не торжествующий. От этого запрет прозвучал окончательно.

— Все операции уже остановлены, — ответила она. — Аварийный протокол активен.

— Любые повторные действия с бортом, моделью, логами и стендом запрещены до распоряжения комиссии.

Марина подняла голову.

— Мы не сможем восстановить первичную причину без технического доступа.

Сафонов посмотрел не на нее, а на Алису.

— Сможете. По копиям, которые уже должны быть созданы. Если не созданы, это отдельный вопрос.

— Созданы, — сказала Алиса.

— Тогда сейчас вы защищаете не причину, а место происшествия.

За его спиной вошли двое из комиссии и сотрудник охраны завода. Один нес пластиковый кейс с пломбами. Второй держал планшет, на котором уже был открыт акт изъятия.

Денис убрал руки от клавиатуры. В этом движении было больше вины, чем в любой фразе.

— Нам нужен доступ к аварийному пакету, — сказала Алиса. — Иначе вы получите красивую пломбу вместо причины.

— Доступ будет через комиссию.

— Через сколько?

— После фиксации.

— Люди внизу уже рискуют второй раз, если мы не поймем, что случилось с траекторией.

Сафонов на мгновение повернул голову к окну. Там синяя вспышка прошла по его лицу и ушла.

— Именно поэтому вы сейчас ничего не исправляете.

Это было не обвинение. Граница.

Алиса ненавидела границы, когда за ними оставался ответ. Но она знала цену чужих рук в первичных данных. Стоило кому-то открыть модель «просто посмотреть», и каждая последующая строка отчета становилась спорной.

— Денис, — сказала она, не отрывая взгляда от Сафонова. — Закрыть сессию. Только чтение. Контрольные суммы на экран.

Денис выполнил. На центральной панели появились длинные строки хэшей. Сухие, равнодушные, единственное, что сейчас могло подтвердить: данные еще не тронуты.

Сафонов кивнул сотруднику с кейсом.

— Пломбируйте рабочие станции и сервер аварийного пакета. Руководитель испытаний остается на месте до первичного опроса.

— Команда?

— По одному. Без обсуждения показаний.

Марина вскинулась:

— Мы не преступники.

— Я этого не говорил.

— Тогда не разговаривайте с нами как с преступниками.

Сафонов снова посмотрел на Алису, будто именно она была точкой, через которую можно удержать комнату от срыва.

— Я разговариваю с вами как с людьми, у которых есть мотив спасти свою работу. Это не вина. Это риск.

Марина отвернулась. Павел тихо положил планшет на стол. Денис смотрел на две свои метки.

Алиса вдруг ясно вспомнила, как в первой минуте перед стартом он сказал: «Слишком чистая». Не громко. Без параметра. Так, как говорят о звуке в стене, который слышит только тот, кто долго живет в доме.

Она слышала его.

И не остановила.

В аварийном штабе пахло мокрой тканью, кофе из автомата и холодным металлом, который занесли с улицы на касках спасателей. Каски лежали у стены рядком. На полу под ними натекла вода.

Илья Сафонов стоял у торца стола и смотрел на распечатку финального допуска.

Подпись Алисы Романовой была внизу листа, четкая и узкая. Рядом стояли время, окно погоды, зеленые статусы, отметка об операторском замечании. Формально документ был крепкий. Именно поэтому Илья не доверял ему как ответу.

Крепкие документы часто лучше всего закрывали слабое место.

На стене висел замороженный кадр с камеры склада. Белая часть кожуха у бетонной стены. Желтая балка ограждения. Пустая серая зона перед ударом. Если смотреть достаточно долго, глаз начинал ждать движения, но кадр молчал.

— Первичный медицинский статус? — спросил Илья.

Начальник заводской безопасности, сухой человек с усталым лицом, сверился с телефоном.

— Один легкая контузия. Второй перелом голени, ушибы. Угроза жизни снята.

— Фамилии не в общий протокол до уведомления семей.

— Уже.

Илья отметил строку. В первые часы после аварии все хорошие намерения протекали через щели.

Дверь открылась, и в штаб вошел Виктор Лебедев. Пальто он так и не снял. Снег на плечах растаял пятнами.

— Нам нельзя сейчас замораживать проект целиком, — сказал он вместо приветствия. — Коридор закрыт, это понятно. Но стенд, модель, расчетная группа…

— Остановлены, — сказал Илья.

Лебедев посмотрел на него, как на неправильно настроенный прибор.

— Вы понимаете региональные последствия?

— Да.

— Тогда формулируйте точнее. Мы не можем в акте писать «проект остановлен». Это ударит по финансированию и по всей программе БАС на Севере.

— В акте будет написано: эксплуатационные и испытательные действия приостановлены до установления первичной причины аварии.

— Это то же самое для любого журналиста.

— А для следующей бригады под галереей это разное.

Лебедев сжал челюсть. Он был не глуп и не трус. Просто слишком хорошо видел карту последствий и слишком плохо — место, где последствие уже случилось.

— Я прошу хотя бы дать команде Романовой полный технический доступ, — сказал Лебедев. — Они быстрее всех поймут сбой.

— Они участники события.

— Они инженеры.

— Одно не отменяет другого.

За столом кто-то тихо кашлянул. У каждого уже была своя версия будущего акта: удобная, осторожная, переносимая наверх без личной крови.

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

С тех пор Илья не верил чистым утрам после грязной ночи.

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

— Это займет дни.

— Значит, дни.

— Север не ждет дни.

— Переломанная нога тоже не ждала.

Лебедев замолчал. Не потому что согласился. Потому что понял, что давить через людей сейчас опасно.

Дверь снова открылась. Алиса вошла без куртки, с планшетом под рукой. На лице была только жесткая усталость человека, который еще держит систему внутри себя, хотя система уже упала.

— Аварийный пакет закрыт на чтение, — сказала она. — Контрольные суммы переданы вашему сотруднику. Мне нужен список разрешенных действий на ближайший час.

— Опрос, — сказал Илья. — Раздельно. Потом сверка копий.

— Сверка без моей команды бессмысленна.

— С вашей командой она рискованна.

Лебедев использовал паузу:

— Алиса Сергеевна, объясните инспектору, что без вас он получит только железо и испуганных операторов.

Алиса не посмотрела на него.

— Он это понимает.

Илья отметил эту фразу. Не поддержку. Точность.

— Тогда объясните ему, — продолжил Лебедев жестче, — что если сейчас появится формулировка «системная ошибка», проект похоронят до конца года.

— Если сейчас появится формулировка «ничего страшного», — сказала Алиса, — его похоронят навсегда.

В штабе стало тихо. Даже телефоны будто перестали вибрировать.

Илья впервые за час посмотрел на нее не как на руководителя испытаний, а как на возможного свидетеля правды. Опасное допущение.

— Вы требуете доступа, — сказал он. — Зачем именно?

— Сопоставить два маркера Дениса с моментом потери достоверности визуального слоя. Проверить, не началась ли слепая зона до посадочного створа, еще в «Север-3». Отделить поздний радарный отклик от первичной причины. И понять, почему штатная коррекция по ветру превратилась в уход с линии.

— Это четыре гипотезы.

— Это четыре вопроса. Гипотезы будут после того, как мы увидим сырые данные.

— Вы уже видели часть.

— Недостаточно.

Он положил перед ней распечатку допуска.

— Здесь ваша подпись. Здесь отметка, что операторское замечание зарегистрировано, но оснований для остановки нет.

Она посмотрела на лист. Не отвела глаза, не стала объяснять раньше вопроса.

— Да.

— Вы слышали Морозова.

— Да.

— И продолжили прогон.

— Да.

Лебедев резко вдохнул, но Алиса подняла руку.

— Формального остановочного условия не было, — сказала она. — Это объясняет решение. Не оправдывает результат.

В комнате сместился вес. Она дала фразу, которую нельзя было легко использовать ни одной стороне.

— Тогда вы понимаете запрет, — сказал он.

— Понимаю. Не принимаю его объем.

— Объем останется.

— Тогда фиксируйте мой протест. Мне нужен контролируемый доступ к копии сырого потока, параметрам фильтрации и журналу управления до конца суток.

— Для чего?

— Чтобы причина не успела стать политической раньше, чем станет технической.

Лебедев повернулся к ней:

— Осторожнее с формулировками.

— Я уже была осторожна.

У Дениса, сидевшего у стены с бумажным стаканом, дрогнула рука.

Председатель комиссии, до этого молчавший, поднял планшет.

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

Денис поставил стакан на пол.

— Я не управлял бортом.

— Речь не о пилотировании, — сказал председатель. — Речь об операторской оценке.

Алиса повернулась к нему медленно.

— Нет.

— Что «нет»?

— Вы не начнете с виновного, потому что вам нужна линия. Начнете с фактов: два маркера, зеленые статусы, поздняя красная метка, уход траектории, травма людей и запрет на повторные действия.

— Романова, — сказал Лебедев.

— Нет, Виктор Андреевич. Если это ошибка оператора, мы докажем. Если моя управленческая ошибка, тоже. Но пока у вас нет права превращать Дениса в удобную деталь.

Илья смотрел на нее и понимал, что запрет только что стал тяжелее. Перед ним была руководительница, которая хотела доступ к данным и одновременно не позволяла комиссии забрать самого слабого члена команды в первую версию.

Это не делало ее невиновной.

Это делало расследование настоящим.

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

Председатель нахмурился.

— Вы превышаете…

— Я защищаю доказательства и право комиссии не выглядеть глупо через три дня.

Лебедев коротко усмехнулся без радости. Алиса не поблагодарила. Илья был ей за это признателен. Благодарность сейчас испортила бы границу.

На замороженном кадре белый обломок кожуха оставался у стены. Пустота перед ним уже не казалась пустой. Она казалась местом, где система научилась не видеть.

Телефон начальника безопасности завибрировал. Он прочитал сообщение и поднял глаза.

— Старые прогоны по «Север-3» подняли. Морозов просит допуск к одному фрагменту. Говорит, там такая же пустота.

Алиса закрыла глаза на один вдох.

Илья забрал у него телефон и посмотрел на строку сообщения.

На одном старом прогоне Денис видел знакомую пустоту.

Глава 3. Матрица запрета

В закрытой переговорной комиссии не хватало воздуха и розеток.

На столе лежали три распечатки: финальный допуск, первичный аварийный акт и лист с рабочими версиями. Третий лист был самым опасным. В нем еще не было правды, но уже была форма, в которую правду собирались уложить.

Алиса стояла у стены, потому что сидеть рядом с этим листом не могла.

— Нам нужна формулировка для внешнего контура, — сказал страховой представитель. Фамилию он назвал в начале, но Алиса ее не удержала. Лицо у него было аккуратное, голос тоже. — Не обвинение. Рабочая версия.

— Тогда пишите «причина не установлена», — сказала Алиса.

— Это не версия.

— Именно.

Председатель комиссии потер переносицу.

— Романова, вы понимаете, что вакуум в акте завтра заполнит кто угодно? Нам нужна управляемая линия.

Управляемая линия. Не техническая. Не доказанная. Управляемая.

Илья Сафонов сидел у торца стола, как человек, которому уже надоело быть единственной тяжелой дверью в комнате. Перед ним лежал планшет с контрольными суммами аварийного пакета. Алиса видела на экране длинные строки хэшей и две отметки Дениса. Они были единственным местом в переговорной, где слова еще отвечали данным.

— У вас есть линия, — сказал страховой представитель. — Оператор дважды фиксирует неформальное замечание. Руководитель испытаний продолжает прогон. После этого происходит авария. Это причинно понятно.

— Понятно не значит верно.

— Я говорю не о вине Морозова.

— Тогда уберите слово «оператор».

Он улыбнулся профессионально, без тепла.

— Нельзя убрать человека из человеческого решения.

Алиса почувствовала, как поднимается злость. Она была почти удобной: злость собирала тело лучше, чем вина.

— Человеческое решение мое. Денис поставил маркеры. Я продолжила профиль.

— Вы хотите взять ответственность на себя?

— Я хочу, чтобы вы не подменяли технический разбор красивой стрелкой.

Лебедев, сидевший напротив, сложил руки на столе.

— Алиса Сергеевна, аккуратнее. Признание управленческой ошибки сейчас закроет нам любые переговоры о продолжении.

— Отрицание ошибки закроет их хуже.

— Вы не юрист.

— Я руководила прогоном.

Илья поднял взгляд. Алиса не искала у него поддержки, но отметила: он слушает не слова, а места, где человек мог бы соврать и не соврал.

Председатель комиссии повернул лист к ней.

— Хорошо. Дайте техническую альтернативу. Коротко.

Алиса подошла к столу. На листе уже стояли три пункта: «ошибка операторской оценки», «ошибка модели», «внешний фактор». Три контейнера для сложной аварии. Три способа сделать вид, что мир делится на полки.

— Альтернатива такая: у нас нет одной причины. У нас есть несостыковка между визуальным слоем, радаром, картой препятствий и управлением по ветру. Красная метка появилась поздно. До нее система несколько минут держала чистую картину там, где Денис видел несоответствие среде. Старый прогон может показать повторяемость.

— Старый прогон еще не сверен, — сказал Илья.

— Поэтому я говорю «может».

Страховой представитель сделал пометку.

— Но пока сверки нет, наиболее проверяемая часть — решение продолжить.

— Самая удобная часть, — сказала Алиса. — Проверяемая только потому, что моя подпись уже лежит перед вами.

Лебедев резко выдохнул.

— Нам всем сейчас нужна не философия.

— Мне тоже. Мне нужен доступ к копиям: сырой поток, параметры фильтрации, журнал управления, погодный слой, влажность по кожухам, старые прогоны «Север-3».

— Новых полетов не будет, — сказал Илья.

— Я не прошу полет.

— Пересчет модели?

— Только на копии, с логом команд и наблюдателем комиссии. Без изменения первичных данных.

Председатель постучал пальцем по листу.

— Это займет время. Внешняя версия нужна сегодня.

Алиса посмотрела на акт. Там, где должна была быть причина, зияла пустая строка. Пустота на бумаге была похожа на пустоту на экране: аккуратная, чистая, уже готовая принять чужое удобство.

— Пишите: «предварительная версия об ошибке операторской оценки не подтверждена телеметрией на момент составления акта». Это честно.

Страховой представитель впервые перестал улыбаться.

— Это ничего не объясняет.

— Зато не врет.

— Для внешнего контура это слабая позиция.

— Для пострадавших это единственная позиция, с которой мы можем смотреть им в глаза.

В комнате опять стало тихо. Алиса поняла, что сказала больше, чем собиралась. Не эмоционально. Хуже: точно.

Илья взял лист с рабочими версиями и перечеркнул верхнюю строку не до конца, а так, чтобы она осталась читаемой.

— Формулировка будет промежуточной. Версия об операторской оценке выдвинута, но требует технической сверки. Полный доступ запрещен. Ограниченный доступ к копиям разрешается группе Романовой под протоколом комиссии. Новые полеты, стендовые прогоны на исходной конфигурации и изменение первичных логов запрещены.

— Это половина доступа, — сказала Алиса.

— Это весь доступ, который вы получите сегодня.

Она хотела спорить дальше. Во рту уже стояли слова про потерянные часы, про влажность, про старый прогон, про то, что алгоритм не будет ждать юридической чистоты. Но Илья держал границу именно там, где она сама держала бы ее, если бы авария была чужой.

Это злило сильнее запрета.

— Тогда мне нужен Денис.

Председатель покачал головой.

— Морозов проходит отдельный опрос.

— После опроса. Без него старый прогон никто не найдет быстро.

— Он заинтересованное лицо.

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

Лебедев тихо произнес ее имя, предупреждая. Она не остановилась.

— Денис не трогает первичные данные. Он показывает, где искать фрагмент. Марина и Павел работают рядом. Ваш человек смотрит на команды. Илья утверждает список действий.

Сафонов молчал несколько секунд.

— Морозов допускается после опроса. Только навигация по архиву. Ни одного запуска без команды в протоколе.

Алиса кивнула.

Она получила мало. Но в этой комнате «мало» впервые было больше, чем удобная вина.

Временную комнату разбора дали рядом с архивом стенда. На двери еще висела табличка «Учебный класс № 2», а внутри пахло маркером, пылью от старых жалюзи и горячими блоками питания. Шесть рабочих мест поставили полукругом, чтобы сотрудник комиссии видел экраны.

Алиса стерла с доски чужую схему пожарной эвакуации и написала четыре строки:

«среда»

«сенсоры»

«модель»

«управление»

Потом добавила пятую:

«решение человека»

Марина прочитала и сразу отвернулась к ноутбуку.

— Если это для равновесия, можно не надо.

— Это для порядка.

— Порядок уже есть. Все смотрят на модель.

Павел, сидевший у крайнего стола, поднял голову.

— Не все. Некоторые смотрят на кожухи так, будто композит сам решил увести аппарат в стену.

Денис стоял у окна с бумажным стаканом и не пил. После опроса он выглядел младше обычного. Не слабее. Просто так, будто с него сняли профессиональную кожу и оставили человека, который дважды сказал правильное слово недостаточно громко.

Алиса положила на стол разрешенный список действий.

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

Марина усмехнулась.

— Красиво.

— Рабоче.

— Рабоче было бы дать мне пересчитать слой нормально.

— Нам дали копию и наблюдателя. Значит, работаем так.

Сотрудник комиссии у стены поднял глаза от планшета. Он был молод, и от этого особенно старался выглядеть беспристрастным.

— Все команды называйте вслух.

— Услышали, — сказала Алиса. — Денис, старый прогон.

Он поставил стакан на подоконник.

— Архивная дата — двенадцатое апреля. Участок тот же, «Север-3», но без грузовой кассеты. Погода хуже по видимости, влажность близкая. Тогда прогон считали служебным, потому что посадки не было.

— Почему ты его вспомнил только сейчас? — спросила Марина.

Денис посмотрел на нее.

— Потому что тогда это тоже не было параметром.

Она открыла рот и закрыла. В первый раз за день не нашла защиты.

Алиса написала под «среда»: «влажность/портовый ветер/мокрый снег».

— Павел, кожухи.

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

— Что можем проверить без борта?

— Партия материала, журнал обработки, параметры обогрева узлов, влажность по участку. Но я не приму версию «кожух ослепил систему» без физики.

— Никто не просит принять. Сформулируй, чем ее убить.

Павел помолчал.

— Если на старом прогоне была такая же пустота без этой партии кожухов, материал не первичная причина.

Алиса записала.

Марина наклонилась к экрану.

— Я открываю копию сырого потока ch02. Команда: чтение файла, без пересчета. Время перед входом в «Север-3».

Сотрудник комиссии повторил это в планшет.

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

Денис подошел ближе.

— Вот тут.

Он не коснулся клавиатуры, только показал пальцем на участок у края створной зоны.

Марина увеличила фрагмент.

— Там нет объекта.

— Я не говорю, что там объект.

— Тогда что?

— Там слишком ровно исчезает грязь.

Павел тихо сказал:

— Это звучит как плохой стих.

— Знаю.

Алиса посмотрела на серое поле. Денис был прав: картинка не становилась пустой сразу. Она как будто теряла право на мелкие неровности. Снег оставался на камере, порт оставался в мире, но обработанный слой выбирал гладкость там, где должен был хотя бы сомневаться.

— Марина, можно вывести до фильтра и после рядом?

— Можно. Команда: сравнение сохраненных слоев без нового пересчета.

На экране появились две панели. В левой порт дрожал. В правой он был дисциплинированным, почти стерильным.

Марина побледнела не от страха. От профессиональной обиды.

— Фильтр не должен так резать.

— Почему мог?

— При редком совпадении шума, влажности и уверенности соседних слоев. Но тогда радар должен был спорить громче.

— Радар спорил коротким откликом перед ударом.

— Поздно.

— А раньше?

Денис открыл рот, но Алиса подняла ладонь.

— Не отвечай памятью. Открываем архив.

Он продиктовал путь. Марина набрала его вслух, с паузами после каждой папки. Сотрудник комиссии записывал. Павел встал за спиной Алисы, хотя ему явно хотелось остаться у своей строки на доске.

Архивный прогон открылся без торжественности. Та же карта, другой день, меньше груза, та же зона «Север-3». На сыром потоке порт был темнее, снег плотнее. На обработанном слое — ровная пустота у края, слишком чистая для такой среды.

Денис не сказал «я же говорил». За это Алиса была ему благодарна.

— Время, — сказала она.

— Двенадцатое апреля, четырнадцать двадцать три, — ответила Марина. — Уверенность модели девяносто один. Радар пустой. Карта препятствий пустая.

— Погода?

Павел уже смотрел журнал.

— Влажность восемьдесят девять у поверхности, девяносто два на двадцати метрах. Ветер с порта, боковой. Температура около нуля.

Алиса написала рядом с ch02: «влажность + боковой портовый ветер + чистый визуальный слой».

Потом под старым прогоном поставила те же слова.

Комната стала меньше. Не потому что они нашли причину. Потому что причина впервые перестала быть человеком.

Марина откинулась на спинку стула.

— Это не доказывает модель.

— Никто не доказывает модель, — сказала Алиса. — Мы доказываем повторяемость пустоты.

— Если это фильтр, меня спросят, почему я не видела.

— Если это материал, меня спросят, почему я не видел, — сказал Павел.

Денис тихо добавил:

— Если это оператор, меня уже спросили.

Алиса повернулась к ним. На доске пять строк выглядели слишком простыми для комнаты, в которой люди уже готовились защищать себя.

— Слушайте меня. Сегодня никто не выходит отсюда с личной версией. Ни «модель виновата», ни «материал виноват», ни «оператор виноват». Мы пишем цепочку: какие условия совпали, какой слой замолчал, какой слой опоздал, где регламент не дал остановочного условия. Если цепочка придет к кому-то из нас, мы пойдем туда. Но не раньше фактов.

Марина сжала губы.

— Ты говоришь так, будто уже не боишься.

Алиса посмотрела на две одинаковые пустоты на экране.

— Боюсь. Поэтому и говорю.

Сотрудник комиссии поднял руку, как на занятии.

— Мне нужно зафиксировать результат сессии.

Алиса продиктовала медленно:

— В архивном прогоне от двенадцатого апреля на участке «Север-3» обнаружен визуальный паттерн, сходный с предаварийным фрагментом: подавление мелких неоднородностей среды при высокой уверенности модели и отсутствии красного статуса. Требуется сверка с метеоусловиями, параметрами фильтрации, радарным слоем и журналом управления. Первичная версия «ошибка операторской оценки» недостаточна.

Он записал. Не все понял, но записал.

Денис смотрел на экран.

— Там еще есть расширенный лог.

— Где?

— В служебной ветке. После этого прогона Марина просила сохранить диагностику фильтра. Не для аварии. Для оптимизации.

Марина резко повернулась.

— Я просила?

— Да. Ты сказала, что слой слишком красивый для такой погоды. Только другими словами.

Она молчала. Алиса увидела, как профессиональная защита треснула, и под ней оказалось не упрямство, а память.

— Открыть можно? — спросил Денис.

Сотрудник комиссии уже тянулся к телефону.

— Нужна санкция Сафонова.

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

Ответ пришел через минуту.

«Ждите. Не открывать».

Марина тихо выругалась без слова, только дыханием.

Алиса положила планшет на стол.

— Ждем.

Но все уже смотрели на закрытую служебную ветку так, будто за ней не файл, а дверь в другую версию аварии.

Расширенный лог показывал, что пустота совпадала с влажностью и портовым ветром.

Глава 4. Архив дождя

Ночной режим лаборатории не выключал свет, только делал его виноватым.

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

На большом мониторе висел архивный прогон от двенадцатого апреля. Сырой поток слева. Обработанный визуальный слой справа. Между ними — протокол команд, который Марина читала вслух перед каждым действием, чтобы сотрудник комиссии успевал записывать.

— Команда: открытие расширенного лога диагностики фильтра. Только чтение. Временной диапазон четырнадцать двадцать одна — четырнадцать двадцать пять.

— Зафиксировано, — сказал наблюдатель.

Марина нажала ввод.

Файл открылся сухими строками. Влажность, контраст, коэффициент подавления шума, доверие соседних слоев, порог стабилизации. Никакой драматической красной строки. Никакого признания: «здесь система ослепла». Только числа, которые когда-то посчитали скучными.

Денис наклонился ближе, но рук к клавиатуре не тянул.

— Вот окно, — сказал он. — Три секунды до входа в край «Север-3».

— Три секунды не доказывают failure mode, — сказала Марина.

— Доказывают, что он повторяется.

— Повторяется что? Красивое слово «пустота»?

Алиса подняла ладонь.

— Не спорим словами. Марина, выводи параметры рядом с ch02.

— Команда: сопоставление сохраненных диагностических строк ch02 и архива двенадцатого апреля, без пересчета.

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

Красный порог. Алиса уже ненавидела это сочетание. Оно делало вид, что опасность обязана прийти в форме, заранее удобной для регламента.

— Совпадение условий есть, — сказала она. — Что опровергает версию?

Павел потер переносицу.

— Если аналогичный паттерн встречается при другой влажности или без бокового ветра. Или если на той же партии кожухов он отсутствует в сходных условиях.

— Партия в архиве другая?