
Полная версия:
Охотник не стреляет

Охотник не стреляет
Глава 1. Жёлтая рамка
До выстрела оставалось восемь секунд, и Таисия Нечаева смотрела не на цель.
Цель шла над серой водой — низко, с упрямой прямизной тестового маршрута, какой не бывает у живого пилота. На центральном экране её звали «Сойка-6»: красная метка, скорость сто сорок, высота двадцать три. Ветер с залива бил по фермам дальномеров, гонял по бетону сухую соль, трепал жёлтые флажки запретной зоны. Глеб Назаров вёл её в захвате, и где-то снаружи техник по наружной связи ругался на старый подъёмник и просил закрыть наряд. Его голос падал в командный модуль фоном — жизнь возилась со своими болтами, пока здесь решали, сколько ей позволено шуметь.
Таисия стояла за креслом оператора, руки в карманах серой куртки, наушник снят с одного уха. Смотрела она в нижний правый угол интерфейса — туда, где мелким шрифтом система выкладывала всё, что мешало расчёту стать окончательным. Боковая панель любила сомнение. За годы Таисия научилась верить ей сильнее, чем красной метке.
— Захват есть. — Глеб уронил это скупо, не отрывая глаз от экрана.
Он вообще берёг слова. Бывший диспетчер аварийной службы, он уважал красные метки, подозревал жёлтые предупреждения и терпел длинные инженерные объяснения как человек, которому жизнь не раз выдавала ровно три секунды.
Игорь Крайнов поднялся с откидного сиденья и оперся о край консоли. Роман Зотов поправил очки — для него этот прогон был доказательством зрелости: «Охотник» дошёл до возраста, в котором машина берёт труд выбора быстрее человека. На экране загорелась вероятность угрозы, рекомендация на поражение, обратный отсчёт до необратимого. Глеб держал ладонь у клавиши.
Четыре. Три.
И тут по центру экрана легла жёлтая рамка.
Глеб выдохнул коротко, зло, через зубы. Необратимое действие заблокировано — риск поражения гражданской метки. «Сойка-6» прошла сектор насквозь, дожила на учебной траектории ещё несколько секунд и ушла за край карты целой, невредимой и, если верить протоколу, победившей защиту.
Воздух в модуле стал плотным.
— Это что сейчас было? — Крайнов медленно обернулся.
Роман повернулся к ней первым. Алгоритм вёл себя безупречно, цель читалась чисто, все признаки сходились к выстрелу — и в эту стройность влезла часть системы, разработанная Нечаевой.
— Ложная остановка. — Он пожал плечами. — Классика.
Таисия молча вывела на боковой экран карту низких высот. Спорить без данных она не умела: спор без данных превращался в литературу, а она работала там, где литература стоила металла и подписей под актами. На карте красная траектория «Сойки» пересекала сектор, и у северо-восточной кромки, за ней, дрожала маленькая серая отметка.
— Глеб, увеличьте северо-восток.
Отметка раскрылась в сервисный коптер с ремонтным блоком на подвесе. Он шёл ниже допустимой высоты, держась у мачты радиодальномера. Под мачтой, на технической площадке, камера поймала человека в оранжевом жилете: тот стоял согнувшись над люком, держал в зубах перчатку и глядел вниз, в свою железную хозяйственную беду. Он и его коптер оказались в учебном небе без допуска.
Глеб медленно снял ладонь с панели.
— Наряд должен быть закрыт. — Роман нахмурился. — Зона должна быть чистой.
— Зона живая. — Таисия не повернула головы. — В этом и трудность.
Крайнов прищурился:
— Значит, служба допуска провалила процедуру.
— Значит, «Охотник» увидел провал раньше выстрела.
Роман хмыкнул, и в этом звуке было всё его отношение к её разделу.
— Мы тестировали поражение цели, Тая. Не аудит хозяйственного отдела.
При посторонних он называл её так напрасно. Она выдержала паузу, посмотрела на него холодно и ответила ровно, как читают регламент:
— Система защиты всегда тестирует хозяйственный отдел. И смену допуска, и метеосводку, и усталость оператора, и ошибку в реестре, и чужую глупость. Цель — самая громкая часть испытания. Не единственная.
Крайнов уже глядел на коптер.
— Фамилия техника?
Глеб сделал запрос:
— Мартынов. Бригада радиодальномера. Наряд открыт в девять десять.
— Кто дал чистый сектор?
— Служба полигона. С отметкой «без людей».
— Без людей. — Крайнов повторил это с холодной усмешкой. — А человек на мачте. Прекрасно.
Из динамика прорезался тот самый голос — обескураженный, перебитый ветром:
— Диспетчер, у меня коптер дурит, держит высоту через раз. Можно замену аккумулятора без спуска? Ветер тут зверь.
Глеб вдавил кнопку внутренней связи:
— Мартынов, замри. Платформа под запретом. Ты в секторе испытания.
— Какого испытания? — В голосе техника прорезалась осторожная оторопь.
Роман на секунду прикрыл глаза. Крайнов отнял руку от консоли и резко выпрямился.
— Остановить полигонные работы. Старшего допуска ко мне. В журнал: испытание сорвано из-за нарушения режима.
— Испытание проведено. — Таисия произнесла это спокойно, как очевидность.
— Цель ушла.
— Техник жив. Коптер цел. «Охотник» объяснил, почему не выстрелил, и оставил полные логи. Для моего раздела это успешный прогон.
Роман оперся плечом о стойку.
— Успешный прогон, при котором ударная цель проходит сектор. Свежая философия обороны.
Дальше они заговорили быстро, и Таисия знала этот ритм наизусть — они спорили так уже год. Роман повторял, что защита начинается с уничтожения угрозы; она — что угроза есть событие в среде, а среда состоит из людей. Слова были отполированы прежними ссорами и почти ничего не весили. Весило другое — Глеб, который слушал их, не отрывая глаз от мачты с Мартыновым.
— В реальном налёте у меня будет меньше времени. — Он перебил их без извинения. — Красная цель, высокий риск, жёлтая рамка. Мне жать или ждать?
Спор оборвался. Вопрос был не из их колоды.
— Вам нужен экран, который честно скажет, за что вы отвечаете, — повернулась к нему Таисия.
— Мне нужна команда, которую можно выполнить.
— Команда без цены превращает оператора в подпись под отчётом.
Глеб коротко, невесело хохотнул:
— Красиво. В отчётах такое любят.
— В отчётах любят фамилии. Я хочу, чтобы фамилия шла после понимания, а не вместо него.
Крайнов сухо стукнул пальцем по столешнице:
— Хватит. При массовом налёте ваш режим сомнения можно отключить?
— Можно отключить всё. — Она не повысила голоса. — Датчики, сирену, медицинский блок, свет в эвакуационном зале. Вопрос в другом: что вы получите взамен.
— Скорость.
— И слепоту.
Роман скрестил руки и принялся перечислять, что у системы остаётся и без её панели: радиоканал, тепло, оптика, траектория, база угроз, прогноз ущерба. Сбой приоритета у гражданской метки, добавил он, можно подавить коэффициентом.
— Мартынова тоже подавим коэффициентом? — спросила она.
— Тая.
— Роман. — Она шагнула ближе. — Там человек. Он попал в зону из-за ошибки реестра, машина увидела связь между его коптером и сектором — и не выстрелила. Это и есть защита.
— Защита — это сохранить объект. В объекте резервуары, связь, энергетика. Потеряем их — погибнут люди. Длинная пауза даст тот же счёт трупов, только позже.
Здесь он был прав, и она кивнула. Признать это вслух было важнее, чем выиграть реплику.
— Поэтому я не прошу лекций на экране. Я прошу три строки оператору. Что подтверждает угрозу. Что ей противоречит. Кого заденет необратимое действие. Три строки, Роман. При любой скорости.
Крайнов отошёл к узкому окну. За стеклом низкое учебное небо висело над заливом; на мачте маленький оранжевый Мартынов сидел, обхватив перила, а рядом на страховочном тросе болтался его коптер.
— Вы оба правы, и это хуже всего. — Он не обернулся. — Зотову нужны чистые данные. Вам — осмысленное решение. А в моём порту будут ветер, усталые люди, вражеские аппараты, дырявые реестры и приказ сверху: держать. Сегодня ваш «Охотник» спас техника. Завтра такая же остановка откроет проход ударной группе.
Он вернулся к столу.
— Учите её различать остановку и отказ. Остановка — лишняя задержка. Отказ — запрет на слепое действие.
— Сегодня был отказ, — обронила Таисия.
У второй станции Лина Шахова, младший аналитик, делала вид, что работает с логами, а сама ловила каждое слово.
— Можно? — Она не дождалась ответа и вывела график канала допуска; голос подрагивал, но цифры держались твёрдо. — Метка Мартынова пришла с задержкой в двадцать семь секунд. Служба допуска передала закрытие зоны, а коптер остался в активном списке техобслуживания. «Охотник» получил два противоречивых статуса разом: сектор чистый, аппарат присутствует. И включил сомнение.
— Откуда задержка? — Роман нахмурился; цифры он уважал больше, чем её саму.
— Узел синхронизации. Пакет прошёл через резервный канал и получил старый штамп. Для системы коптер выглядел как слабая гражданская метка у зоны поражения.
— Значит, резервный канал хромает. — Крайнов произнёс это тихо.
— Значит, объект живой. — Таисия наконец отвернулась от экрана. — Он хромает всегда. Вопрос в том, видит ли это защита.
Глеб провёл ладонью по лицу:
— Я бы ударил. По регламенту — подтвердил бы. Красная цель, девяносто одна сотая, сектор чистый. Ударил бы.
— Для этого и нужен честный экран.
— Экран был честный. Просто я смотрел бы на другую строку.
— Значит, строку надо поднять выше.
Роман вздохнул — мол, опять загромождать оператору основной вид. Глеб обернулся к нему и отрезал: если строка про человека на мачте, пусть загромождает. Роман развёл руками и уступил. Победа вышла маленькая, без фанфар; в командном модуле такие не замечали, а двигали проект именно они.
Служебная связь щёлкнула, и на стеновом экране сменился канал. Дежурный диспетчер порта проступил бледным лицом в полосах помех; за его спиной мигали карты погоды и графики эвакуации.
— «Гавань-9» для полигона. Подтверждаем штормовое второй степени. В северных посёлках подтопление. С семнадцати ноль-ноль переводим спасательные платформы на аварийный режим. Запрашиваем готовность «Охотника» к смешанному трафику: спасатели, гражданские коптеры, служебные борта.
Крайнов переменился. Раздражение ушло вглубь, голос отвердел до командного:
— Сколько бортов в воздухе?
— До тридцати двух спасательных по плану. Гражданских — под полсотни при самостоятельной эвакуации. Плюс медицинские контейнеры. Видимость падает, радиошум растёт.
— Угроза внешнего воздействия?
Диспетчер помедлил:
— Мониторинг отмечает активность неизвестных малых платформ за дальним буем. Идентификация ведётся.
Роман глянул на Таисию, и впервые за утро в его взгляде не было насмешки. Была работа.
Крайнов раздал смену короткими фразами, как сбрасывают карты: полигон закрыть, логи — в его канал, Зотову — оценку автономного режима для смешанного трафика, Нечаевой — её предупреждения привести к виду, который оператор поймёт за секунду, Шаховой — реестры гражданских аппаратов и резервные каналы, каждую странность на стол. Глеб уже гасил учебный сценарий. Красная «Сойка» исчезла из списка, и на её месте раскрылась карта настоящего порта: причалы, мачты, склады, медицинский модуль, эвакуационный зал, паутина низких маршрутов. Метки двигались, пересекались, спорили друг с другом. В этом хаосе жила «Гавань-9».
Таисия задержалась на строке режима сомнения. Жёлтая рамка давно погасла, но система сохранила запись: блокировка признана обоснованной, цена необратимого действия — поражение гражданской метки, ответственное подтверждение отменено системой.
Отменено системой. В реальном небе этой формулировки не хватит. Кто-то захочет подпись. Кто-то скажет: времени нет. Кто-то попросит выключить жёлтую рамку ради красной цели и назовёт сомнение слабостью, а скорость — мужеством. И каждый будет по-своему прав, пока первая ошибка не получит фамилию.
Роман подступил сбоку, понизив голос:
— Ты понимаешь, что Крайнов сегодня запросит право обхода.
— Понимаю.
— Если задержка убьёт людей, это тоже будет твоя подпись.
— Да.
За стеклом Мартынова снимали с мачты. Он шёл по площадке, держась за трос, и оглядывался на учебное небо с лицом человека, ещё не понявшего, как близко прошла мимо чужая уверенность. Сервисный коптер волокли на тележке — сломанный, жалкий, спасённый.
Таисия закрыла файл прогона. Система присвоила ему имя автоматически: «Прогон 14-А. Блокировка поражения». Она стёрла последнее слово и набрала другое — «Спасение». Машина запросила подтверждение изменения записи. Таисия поставила подпись.
В дверях Крайнов задержался:
— Нечаева. В реальной атаке я не позволю системе останавливать поражение, если пауза откроет путь удару.
— И правильно.
Он нахмурился, не ожидав согласия.
— Я говорю только, что у остановки тоже должна быть цена, — добавила она. — Как у выстрела.
Крайнов подумал недолго, кивнул и вышел в коридор, уже отдавая распоряжения по закрытому каналу. За окном учебная вода темнела, и ветер тащил с залива новый запах — железный, соленый, штормовой.
Глава 2. Кнопка без имени
Командный зал «Гавани-9» сидел под портом, в бетонной складке между энергоблоком и узлом связи. Сверху были ветер, солёная вода, краны и люди, которых свезли сюда из низовых посёлков. Внизу — карты, каналы, протоколы и та разновидность тревоги, что пахнет горячим пластиком и кофе из автомата.
Таисия вошла последней, у шлюза стряхнула с рукава капли. Зал уже перестал быть учебным, и это читалось по тому, куда смотрели люди. В учебном смотрят на экран. В рабочем — на удаленное управление: на палец оператора у клавиши, на губы начальника перед приказом, на табло времени, где каждая секунда становится имуществом службы безопасности.
Глеб занял главное кресло и развернул боевую карту. «Гавань-9» открылась целиком — причалы, энергоблок, медицинский модуль, склады, эвакуационный зал, вышка связи, низкие маршруты спасателей. Серые метки уже поднимались с крыш и площадок, тянулись к пунктам сбора, висели у посадочных зон, спорили с ветром и регламентом. Крайнов стоял у стола совещаний; влажная куртка темнела у плеч. Он принёс с собой запах моря. В голове уже прокручивался готовый приказ.
— Сорок минут до пикового трафика. — Он не сел. — За дальним буем — подозрительные малые платформы. Шторм идёт к порту. Эвакуация начата. Я хочу понять, что ваш «Охотник» делает сам, где просит подпись и где имеет право остановить поражение.
Роман подключил планшет к боковой панели и доложил коротко: базовый режим готов, по чистой цели система работает без оператора — подавление, увод, сетка, принудительная посадка; поражение — только по ответственному подтверждению, когда в зоне есть гражданская активность.
— Меня интересует красный протокол. — Крайнов отмёл остальное движением ладони. — Массовая атака. Потеря связи. Времени на решение меньше, чем реакция оператора.
— Тогда автономный режим расширяется, — отозвался Роман. — Система получает право на поражение при достоверности выше порога и угрозе критическому объекту.
Глеб скривился:
— Кто отвечает за порог?
— Модель, регламент и начальник смены.
— Модель в суд не вызовут.
Таисия подошла к свободной станции, открыла блок подтверждения и растянула на весь экран. На сером фоне горела одна зелёная кнопка: «ПОДТВЕРДИТЬ». Большое слово, никакой биографии решения за ним. Она смотрела на эту опрятную пустоту и думала, что катастрофы рождаются именно из неё, — но вслух выбрала проще:
— Вот это надо менять.
Крайнов бросил взгляд на экран:
— Кнопку?
— Имя кнопки.
— У неё есть имя.
— Нет. «Подтвердить» — служебная вежливость. Она прячет действие. — Таисия постучала ногтем по зелёному полю. — Оператор должен видеть, что именно подтверждает: поражение, мягкий перехват, отказ, риск для сектора, обход режима сомнения. Разные поступки нельзя складывать под один глагол.
Глеб наклонился к экрану. Эту мысль он принял сразу — она была про его палец.
— Тут я с вами. В стрессовой смене «подтвердить» превращается в дыру. Туда падает всё.
Роман потёр переносицу и заметил, что если расписать каждую кнопку юридическим языком, оператор получит договор страхования вместо интерфейса.
— Не юридическим, — качнула головой Таисия. — Человеческим. Три строки.
Она набрала, и буквы легли на серый фон тяжелее, чем зелёное слово до них: действие — поражение цели; цена ошибки — гражданская метка в зоне; противоречие — акустика цели не совпадает с ударным профилем.
Глеб прочитал вслух и кивнул:
— Это можно понять.
— За сколько секунд? — прищурился Роман.
— За одну, если строка на месте.
— А если целей двенадцать?
— Тогда я тем более хочу знать, где среди них человек.
Лина подняла глаза от своей станции, по которой шёл поток реестров — гражданские борта, спасатели, служебные коптеры, старые маяки, забытые заявки.
— Можно цветом. — Голос у неё всё ещё спотыкался, но мысль была своя. — Красный — угроза, жёлтый — цена ошибки, синий — мягкое действие. Оператор видит главный риск сразу, текст раскрывается касанием.
Роман ткнул стилусом в схему:
— И ещё один слой поверх боевой карты.
— Это место для моей фамилии, — обронил Глеб.
Крайнов посмотрел на него с интересом:
— Поясните.
— Я ставлю подтверждение — в журнале остаётся «Назаров». Без строки о цене это читается как «Назаров согласился». А я хочу, чтобы журнал знал, с чем именно я согласился.
Таисия промолчала. Глеб говорил её языком, вообще-то считая этот язык лишним, и спорить с такой удачей не стоило.
Крайнов провёл ладонью по крышке стола:
— Хорошо. Кнопки переименовать. Но красный протокол за мной. Допустим, рой идёт на энергоблок. Связь с оператором рвётся. Медблок на резерве. «Охотник» видит цель с достоверностью девяносто пять. Гражданских меток в зоне нет. Он бьёт?
— Да, — ответил Роман без заминки.
Таисия открыла боковой блок:
— С оговоркой. Система обязана проверить, откуда взялась пустая зона. Гражданских меток нет — или умер канал, который их показывает? Это разные вещи.
— На экране результат один. — Крайнов не уступал. — Пусто.
— Для плохой системы — один. Для нашей — два. «Пусто, данные живы» и «пусто, данные потеряны».
Лина быстро внесла пометку и предложила выводить это как состояние среды — живая, неполная, отравленная.
— Отравленная? — переспросил Крайнов.
Таисия повернула к нему экран с логами полигона. Когда данные приходят с задержкой, с внедренным штампом, в удобной для модели форме — среда отравлена, объяснила она. В такой среде красная цель может быть настоящей. И ловушка тоже может быть настоящей.
Роман сухо заметил, что любую неопределённость можно довести до паралича. Глеб, не глядя на него, ответил, что любую уверенность можно довести до приговора, — и сам услышал, что вышло резче, чем хотел, и увёл взгляд к карте. Крайнов поднял руку, обрубая спор:
— Мне нужна рабочая схема. Без философского кружка.
Таисия взяла маркер и разнесла на прозрачной доске три столбца. Среда: живая — все каналы подтверждены; неполная — часть потеряна, выводы ограничены; отравленная — признаки подмены, задержки, ложного штампа, слишком удобных данных. Действие: мягкое — увод, посадка, сетка, подавление; жёсткое — поражение в безопасном секторе; окончательное — поражение при риске для людей или спасательной инфраструктуры. И подпись: автоматическая — при живой среде и чистой цели; ответственная — оператор, видна цена ошибки; командный обход — подпись начальника объекта, причина пишется в журнал до действия.
На словах «командный обход» лицо Крайнова застыло.
— Вы хотите, чтобы я лично подписывал отключение вашего режима.
— Да.
— В момент атаки.
— В момент атаки особенно.
— Это удар по скорости управления.
— Это удар по безымянности.
Глеб тихо присвистнул. Роман покачал головой и сказал, что командир будет смотреть не в журнал, а в небо.
— Командир посмотрит в одну строку. — Таисия не отступила. — «Обход приведёт к поражению без проверки гражданских данных». Сочтёт допустимым — подпись его.
Крайнов разглядывал доску. Раздражение держалось на лице крепко, но за ним работал рассудок: он был из начальников, что спорят до хрипа и при этом ловят каждую полезную фразу.
— Ладно. Командный обход — моя подпись. Но при атаке на энергоблок с временем меньше трёх секунд «Охотник» действует сам, если среда живая.
— Согласна, — кивнула Таисия.
Роман вскинул брови:
— Ты согласна?
— Чистая цель, живая среда, критический объект, окно меньше реакции оператора. Пусть действует. Я против слепой автоматики, не против быстрой.
— На экране это трудно различить.
— Поэтому мы здесь.
Лина вдруг застыла над клавиатурой:
— Странность в реестре.
Все повернулись к ней — с тем выражением, с каким в командном зале встречают новое повреждение мира.
— Говорите, — велел Крайнов.
— Гражданский канал подтянул список аппаратов для аварийной эвакуации. Один идентификатор прошёл через резервную базу и получил приоритет спасательной платформы. Запись выглядит исправной, но дата обслуживания стоит завтрашняя.
Роман подошёл к её станции, бросил на ходу — ошибка синхронизации.
— Возможно. — Лина не сдалась. — Только подпись техслужбы подлинная, а маршрут загружен через старый протокол. Аппарат идёт в группу медицинских доставок.
До этой секунды они спорили о правилах. Теперь правило пришло с именем. Таисия почувствовала, как сместился вес разговора, ещё до того, как Лина вывела карточку: «Белый-17», спасательная платформа среднего класса, груз — аварийный модуль питания, получатель — медблок «Гавани-9», статус допуска ожидает подтверждения.
На отдельном экране мигнул вызов медицинского модуля. Крайнов принял. Появилась Саида Акбарова — узкое лицо, тёмные круги, шапочка с эмблемой спасательной службы; за плечом кто-то катил каталку, кто-то спорил с генераторщиком.
— Крайнов, у меня третий блок на резерве. — Она обошлась без приветствия. — Нужен модуль питания. Наш борт задержан ветром, диспетчер дал замену — «Белый-17». Дайте ему приоритетный коридор.
— Запись в реестре с ошибкой.
— У нас всё с ошибкой, Игорь. — В её голосе не было ни капли просьбы. — Люди приехали промокшие до нитки, дети орут, старики мёрзнут, генератор кашляет. Почините вашу систему быстрее, чем сядет мой третий блок.
Связь дрогнула. Саида наклонилась к камере и добавила, что по северной дороге идёт колонна, но мост закроют из-за воды, и модуль нужен до закрытия причала — иначе эвакуационный зал станет складом тележек с пациентами. Экран погас. Никакой торжественности: жизнь предъявила накладную и потребовала подпись.
Роман открыл техкарточку «Белого-17» и предположил, что запись можно почистить, маршрут проверить, дату сбросить — скорее всего, старый буфер.
Лина качнула головой:
— У старого буфера грязь разная. А тут ошибка слишком удобная. Порт принимает аппарат, медканал просит приоритет, резервная база даёт старый протокол, дата выводит запись за предел проверки смены. Такая ошибка сама себя прикрывает.
— Хорошая формулировка, — отметила Таисия.
Лина смутилась:
— Я ещё проверю.
Крайнов вернулся к доске и распорядился: «Белому-17» — временный серый статус, держать на внешнем коридоре до проверки; Шахова копает происхождение записи, Зотов — технический профиль, Нечаева смотрит, как это ляжет на режим сомнения, Назаров ведёт маршрут только через внешний коридор, без захода над энергоблоком.

