Читать книгу «Слепое пятно» онлайн полностью📖 — Оливия Кросс — MyBook.
image
cover

Оливия Кросс
Слепое пятно

ЭПИГРАФ

Подпись живёт дольше

человека.

Чернила не меняются.

Меняется только то, что

однажды написанное начинает

работать само.

Глава 1

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

Дежурный посмотрел поверх стекла. Лицо у него было красное от ветра, глаза – внимательные, без желания разговаривать.

– Марков? – спросил он, будто сверял не имя, а интонацию.

– Да.

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

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

Он отметил время, не глядя на часы – привычка считать такты в голове. Если турникет держал его на полторы секунды дольше нормы, это ничего не значило. Если считать, что это было «ничего», легче жить. Но привычка всё равно записала задержку в ту же тихую полку, где лежали другие мелочи, не стоившие разговора. Щелчок реле где-то в нутре турникета отозвался короткой памятью: старый цех, облупленная краска, стенд, который «повис» в тишине, и тот самый раз – когда тишина оказалась громче любого аварийного зуммера.

Рабочее место нашлось без блужданий. Ему выдали ключ от ящика, временную наклейку на ноутбук и бумагу со словами «подпись здесь и здесь». Бумага шуршала сухо, как линейка по хрусткому ватману. Он расписался – не вчитываясь в формулировки, которые и так помнил: ответственность, конфиденциальность, допуск. Потом – коридор, два пролёта вверх, стеклянная дверь без опознавательных знаков, и за ней – их комната.

Четыре стола, по два монитора на каждом. Короткие бирки на кромках столешниц с фамилиями и четырёхзначными кодами. У окна – место, где по плану сидеть ему. Из окна – серый прямоугольник полосы и тёмная линия леса за ней. Солнца не было, но яркость отсвечивала от клина облаков, делая всё нарочито чистым, как в буклете.

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

Пока грузились инструменты, он пошёл за кофе. Автомат у стены работал яростно, как будто спорил с кем-то. Кофе вышел водянистым и горячим, зато сработало главное: пальцы оттаяли. Вернувшись, он подвёл стул. Стул был новый и тугой, пружина щёлкнула – чуть громче, чем следует в пустой комнате.

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

Он наклонился ближе. Разница прыгнула, потом встала на «0.027 с» и замерла. Система приняла это как норму и отметила зелёным. Он сделал скрин, не зная ещё, пригодится ли. Скорее всего – нет. Но если пригодится, потом будет поздно вспоминать. Он сохранил и на внешний диск, небольшой серый прямоугольник с тёплым корпусом. Щёлк – и файл лёг туда, где лежали другие «мелочи».

Расписание испытаний открылось отдельным окном. Утро – калибровка по эталонной цели. Днём – короткий вылет с минимальной РЭБ. Вечером – резерв. «АРЕС: режим помощника» – приписка мелким шрифтом, та, что всегда вызывала раздражение. Он не любил слово «помощник» в софте. Софт не помогает. Софт делает, что ему велят. Или то, на что настроили.

В соседнем окне мигнул статус подсистем. Диагнозов нет. Жёлтых зон нет. Подсистема предикции молчала. Дверь открылась бесшумно. Вошёл Петров, снял с шеи шарф, кинул на спинку стула.

– Добрался? – спросил он без приветствия.

– Добрался.

– Через полчаса – ангар. Громов уже там. Зайцев подтянется к разбору.

Марков кивнул. Петров не спросил ни про дорогу, ни про кофе, ни про вечер. И это было правильным.

Пока шли по коридору к лифту, Петров говорил про график и про «окно».

– Окно узкое, – сказал он. – Без самодеятельности. Режим помощника – и по листу.

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

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

Дрон висел под потолком на стропах, как рыбина, которую ещё не решили – пустить в дело или повесить на стену. Техники, не поднимая глаз, проверяли разъёмы. Громов стоял чуть в стороне, опираясь ладонью о край стола с планшетом. Перед тем как надеть гарнитуру, он прикоснулся к её амбушюру и дважды коротко стукнул по пластику ногтем – как тест микрофона без звука. Не ритуал – привычка. На экране рядом с ним был открыт не общий «красивый» вид, а сырые числа: скорости, углы, время. Он смотрел туда, где картинка ещё не соединена в историю.

– По плану маршрут без фокусов, – сказал Петров. – Проверяем коридор, закрепляем параметры. Всё по листу.

– Принял, – Громов кивнул, усмехаться не стал. Лицо спокойное, взгляд чистый, как у человека, который всегда слышит метку времени раньше, чем голос.

Марков разложил бумаги на металлической поверхности стола. Пальцы чуть прилипли к холодной стали. Открыл ноутбук, поднял интерфейс наблюдения. АРЕС отображался отдельным блоком – статус «готов», зелёный свет, активные каналы подсветились тонкими пиктограммами. Перечень алгоритмов подал короткий список: фильтрация – в норме, классификация – в норме, предикция – пусто.

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

– Переходим в коридор, – сказал Петров.

Зал, где шёл прогон, был шире, звук – с эхо. На стене – карта сектора, линии изолиний, подписи, которые никто не читает, потому что все помнят. Оператор у пульта поднял глаза, коротко кивнул. Громов надел гарнитуру, на секунду прикрыл левое ухо ладонью – отсёк всё лишнее – и посмотрел на экран сырых данных ещё раз, как на исходный документ.

Когда цель вошла в сектор, зелёная точка появилась там, где должна. Ещё одна – на долю градуса правее. Марков едва заметил – отсюда не увидишь, если не знаешь, что искать. Вторая отметка мигнула и пропала, как пузырёк воздуха под плёнкой. На панели АРЕС вспыхнула строка: «объединение треков», и погасла. Предупреждения не было. Вообще не было – даже мягкого серого намёка, который разрабатывали, чтобы не пугать никого лишнего.

– Видел? – спросил он тихо, не отвлекаясь от монитора.

– Что? – Петров не отводил взгляд от общей картины.

– Ничего, – сказал Марков. Он уже знал, что вернётся к этому в серверной.

Остальной прогон прошёл без сюрпризов. Имитация порыва ветра, короткий провал канала на ровно одну секунду – «как в паспорте», сказал кто-то у стены – и снова всё в пределах. Голос Громова в гарнитуре был ровным, без усилий, как если бы он разговаривал с комнатой. Он не любил заполнять тишину – говорил только отмеренное.

На выходе из ангара влажный воздух тянулся следом, как запах, который не сразу отстаёт. Петров говорил что-то про график, про визит на следующей неделе. Марков слушал половиной уха. В голове шёл другой процесс: как именно алгоритм принял решение, что два трека – это один? Где стоял порог? И на основании какой истории данных? Документация говорила об одном. Экран – о другом.

В комнате он сел и открыл логи. Ленты побежали ровно, будто кто-то разметил их линейкой. Он прокрутил до нужного момента. Там, где появлялась вторая отметка, запись о «слиянии» стояла на кадр раньше. Предиктор сообщил о действии прежде, чем во входном потоке «родилась» вторая отметка. Разница – двадцать семь миллисекунд. Та же цифра. Она повторилась с таким спокойствием, как будто её так и задумали.

Он остановил ленту, отмотал на пять секунд вверх, запустил снова. То же. Ещё раз. Та же последовательность. Он сделал снимки экрана, сохранил копию лога на внешний диск. В углу монитора на миг вспыхнуло «Доступ ограничен». Он кликнул – сообщение исчезло, будто не включалось. Он не стал спорить с интерфейсом. Он просто записал это – сначала в файл, потом в голову.

Папка легла на стол без слов. Тот же плотный картон с привычным запахом типографской краски.

– На подпись, – сказал голос у двери и ушёл.

Он не открыл. Сначала – логи. Потом – бумага.

Он пробежал глазами через блок самодиагностики. Подписи были аккуратные, как будто их ставила одна невидимая рука. «NOFAULT». «NOFAULT». «NOFAULT». Он сверил время самодиагностики с временами завершения тестов. И увидел, что в одном месте подпись пришла раньше. На один такт. Мелочь, если не привык считать такты. Если привык – это другой порядок вещей.

Он вынул листок из кармана – клочок с цифрами, куда отметил утренние 0.027. Положил рядом с монитором. Сравнил. Слишком хорошо совпадало, чтобы быть совпадением. Или, наоборот, слишком ровно, чтобы пытаться докопаться до «почему» прямо сейчас.

Вентиляция в потолке на секунду остановилась и снова пошла. Эти паузы были ничем. Если считать, что они – ничто.

Он закрыл логи, открыл ещё раз, уже через другой инструмент – без графики, чистый текст. Когда он читал голые строки, ему было легче. Из текста исчезало всё, что пытается быть умнее, чем есть. Метки времени снова выстроились, как шпалы: ровно, повторяясь. И одна из них – «NOFAULT» – приходила на миг раньше последней команды теста. Как если бы кто-то решил, что конец уже известен, и не стал ждать.

Снаружи ветер гонял по плитам воды узкие тени. Серый свет не менялся. Здесь время было другим: оно мерилось циклами, кадрами, кадрами в кадрах. Он смотрел на экран и поймал себя на том, что улыбается. Неправильно. Он это знал. Но улыбка всё равно осталась на лице – как отметка на экране, которая не должна была появиться. Он коснулся пальцем угла монитора, убрал руку, записал ещё одну строчку в файл с сегодняшними мелочами. Потом взял папку. Бумага поддалась с сухим шорохом. Он подписал там, где нужно было подписать, и ещё раз взглянул на время в углу: 0.027 с.

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

Глава 2

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

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

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

Петров стоял с блокнотом, что-то помечал, не отрываясь. Когда Громов подошёл к столу, бросил короткий взгляд на сырые данные, коснулся амбушюра гарнитуры и дважды постучал по пластиковой чашке ногтем – проверка без участия системы. Жест не был адресом. Это была его собственная точка входа в работу.

– По дорожке идём так же, – сказал Петров. – Начнём с короткой. Дальше – по факту. Без импровизации.

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

Эталонную цель подняли без зрелища. На экране она появилась как точка, за ней – подпись скорости и курса, всё в пределах ГОСТа, который здесь никто вслух не называл. Первые минуты были ровные. Марков отслеживал кадры, выискивая в них не предательскую ошибку, а те самые «мелочи», из которых потом складывается вывод. Колебание частоты выводов – в пределах. Плавность фильтра – та, что заявлена. АРЕС молчал там, где должен, и докладывал там, где положено.

Громов говорил мало. Короткие фразы, без прилагательных, без «кажется» и «наверное». Когда он брал голосом на себя что-то, это слышалось и по воздуху, и по тому, как менялся рисунок тишины между словами.

– Заходим в коридор, – сказал Петров.

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

Когда цель вошла в сектор, точка появилась там, где должна. Почти одновременно – в правом нижнем углу – лёгкая вспышка вторичной, на долю градуса правее. Если бы не знать, что смотреть, можно было бы не увидеть. Вторая отметка мигнула и исчезла так тихо, что не оставила следа в общей картине. На панели АРЕС на долю секунды вспыхнула строка «слияние треков» – и погасла. Никакого предупреждения. Даже серой плашки, которую они обсуждали ещё в институте: «не пугать, но запомнить».

– Есть, – сказал Громов в гарнитуру, не меняя тона. – Держу.

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

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

Канал вернулся так же сухо, как ушёл. В этот момент на экране снова на миг треснула картинка – маленькое двойное эхо. АРЕС объединил отметки до того, как второй пик полностью сформировался. «Слияние» вспыхнуло и исчезло. Громов молчал. Его ладонь двинулась на долю сантиметра – как если бы он положил невидимую тяжесть на правую сторону шкалы.

– Фиксируем, – сказал Петров негромко.

Эта фраза значила «идём дальше».

Остальная часть прогона прошла чисто. Порыв – отмечен, компенсация – штатная. По диаграмме заметно, что фильтр предпочитает сгладить редкий выброс, а не удержать «остроту» сигнала – согласно настройкам. Марков поймал взгляд Зайцева через стекло: тот стоял у двери и слушал в пол-уха. Кивка не было. Лицо – как у человека, который пришёл не мешать.

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

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

Он открыл файл лога. Строки шли ровно. Метки времени были как надо: аккуратно увеличивались, не пропуская тактов. В нужном месте – заметный «впад» канала. Так и записано: «telemetry: drop 1000 ms». Ровно, без лишних слов. Ещё через пару десятков строк – «trk: merge». Параметры в скобках. Он остановил ленту, вернулся на десять секунд, включил построчный просмотр.

Запись называлась не так, как в документации. Не «fuse_simple», не «fuse_weighted». Внутри стояло: «policy=17c». Он прочитал дважды. Для верности – ещё раз.

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

Он покрутил колесо мыши. Рядом со строкой висели параметры. «theta=0.61». «window=2». «early_ok=true». Этих слов не должно быть в тестовой сборке. В документации для полигона это место выглядело иначе: «слияние при условии достаточной близости по азимуту, скорости и одной дополнительной метрике уверенности». Без чисел. Без флажка «раньше можно».

Он сделал снимок экрана, сохранил отдельным файлом. Потом открыл рабочую вики. Поиском пробежался по словам «17c», «theta», «early_ok». Ничего. Поисковик предложил «имеете в виду 17?». Он не имел в виду «17». Он имел в виду букву рядом с номером, которой не должно быть.











...
5

На этой странице вы можете прочитать онлайн книгу «Слепое пятно», автора Оливия Кросс. Данная книга имеет возрастное ограничение 16+, относится к жанру «Классическая проза». Произведение затрагивает такие темы, как «психологическая проза», «психологическая фантастика». Книга «Слепое пятно» была написана в 2026 и издана в 2026 году. Приятного чтения!