Оливия Кросс – Слепое пятно (страница 3)
В коридоре скрипнули двери. Ворвался тонкий свист – кто-то снова открыл одну из створок в ангар. Этот свист был как курсив: выделял мысль, но не менял смысл.
– Как? – Петров стоял у двери, не заходя.
– По данным – чисто, – сказал Марков. – Кроме одного.
– Что?
– «merge» с политикой, которой нет в документации. «17c».
Петров не изменился в лице.
– Разберёмся на разборе. Сейчас не ломаем темп.
Марков кивнул. Это был не отказ. Это был способ не превращать наблюдение в событие раньше времени. Он снова посмотрел на строку с «17c» и положил рядом с клавиатурой листок с короткими пометками: время, «drop 1000 ms», «двойная отметка, правее на долю», «слияние до появления полной формы», «policy=17c», «theta=0.61, window=2, early_ok=true».
Он вернулся к общей картинке на «красивом» экране. Ничего подозрительного. Если взять эту панель как единственный источник истины, сегодняшний день прошёл штатно. В этом и была её задача: пройти штатно. Работа Маркова была другой.
Он поднялся, чтобы размяться, прошёлся до окна и обратно. За стеклом по плитам тянулись узкие ленты воды – ветер толкал их боком, и они ломались на стыках. Вентиляция в потолке поменяла тон, как это иногда случается к полудню: будто система вспомнила о другой скорости.
Вернувшись к столу, он открыл последний файл – внутреннюю справку, которую ему прислали перед приездом. Там была короткая таблица с политиками слияния: пять штук, каждая с картинками, которые понравились бы «высоким». Ни одной буквы рядом с цифрами. Он закрыл справку. Открыл ещё один инструмент – монитор потоков. Поставил метку времени на тот кадр, где «слияние» случилось раньше, чем появилось второе эхо. И поймал себя на том, что ищет не «кто включил», а «когда решено, что включится».
Он не нашёл там подписи человека. Он нашёл там подпись решения. Короткая строка, которая гласила, что если оценка уверенности «выше порога» и «окно предсказания равно двум», то система имеет право объединить треки, не дожидаясь полного формирования второго. Такие правила пишут люди. Но не всегда эти люди потом вспоминают, что именно написали, и где это лежит.
Папка на краю стола снова напомнила о себе – он подвинул её локтем. Бумага не любила ждать. Логи – любили.
Он сделал ещё одну вещь, которую делал редко. Скопировал из лога несколько строк и положил их в отдельный файл – тот, где он хранил «паттерны». Не потому, что это было доказательством. Потому что через неделю, когда текстов станет слишком много, глаз может перестать видеть повторяющееся. А память – всегда пытается быть добрее, чем надо.
Гул в ангаре просел на тон. Где-то закрыли один из источников. Свист в воротах стих. В комнате стало слышно, как вентилятор в системном блоке набирает обороты – коротко и сдержанно, как вздох.
Он посмотрел на экран ещё раз. Строка с «policy=17c» стояла посреди ровного поля обычных событий. Она не выглядела особенной. Ни один цвет не выделял её среди других. Но цифры рядом были не теми, что должны быть «для полигона». И в оглавлении, которое знали все, этой политики не существовало. Он искал её название в голове – как ищут знакомое лицо в толпе – и не находил.
Значит, её не должно быть.
Но она была.
Глава 3
Переговорная была как коробка для звука: матовые стёкла, мягкий потолочный свет, стол, который не отражал, а поглощал. Маркер писал сухо, без жира, и всё равно пахло спиртом – отголосок лабораторий, где на столах стояли не ноутбуки, а катушки и осциллографы. Проектор гудел ровно и серебрил доску – как тонкий иней.
На шапке распечатанного протокола висела аккуратная строка: АО «ЗАСЛОН». Под ней – дата, время, список присутствующих. Чужие голоса были здесь уместны: в комнате, где обычно говорили «свои», они звучали как другой акцент, не мешая делу, но напоминая, что снаружи есть правила, не написанные их почерком.
– Коротко по утру, – сказал Петров, щёлкнул колпачком, провёл на доске линию по времени. – Эталон – штатно. Коридор – как в плане. Порыв – отработан.
Марков сидел ближе к проектору. На его экране был не «красивый» вид, а лента чисел. Сырые. Без подписи цвета. Он включил нужный отрезок. Строки побежали в такт дыханию.
– Здесь, – он коснулся тачпада, – перед сливанием. Вторая отметка на долю градуса правее. Появляется, не успевает сформироваться полностью, АРЕС объединяет.
Петров кивнул. Он держал маркер как указку, не как оружие.
– Без предупреждения?
– Без.
Громов был у стены, прислонившись плечом к матовому стеклу. Гарнитуры на нём не было, ладонь – свободна. Когда Марков показал «двойник», Громов чуть наклонился и прищурился не на яркую точку, а на цифры справа – те, что в соседней панели, с меньшим шрифтом. Он всегда смотрел туда, где картинка ещё не стала картинкой.
Дверь открылась, вошёл Зайцев. Без папок. Застегнул куртку на один ход выше, чем было нужно в помещении, сел в торце и положил ладони на стол – не переплетая пальцев, а параллельно. Помолчал. Потом спросил:
– Всё по регламенту?
Петров не посмотрел на него. Он посмотрел на Маркова.
– По факту – да, – сказал Марков. – По форме – есть вопросы к политике слияния.
– К форме – позже, – тихо сказал Петров. – Сейчас – матчасть.
Он подвинулся к доске. Нарисовал две кривые – первичный и вторичный трек. Подписал «азимут», «скорость», «дельта t». Повернулся:
– Гони без АРЕС.
Марков выключил блок предиктора и повторил отрезок на стенде, который сохранял сырые измерения. Сразу стало заметно, как линия скорости «дышит» – три–четыре процента гуляния в допуске. Картинка перестала быть гладкой. Это не было плохо. Это было честно.
– С АРЕСом, – сказал Петров.
Он вернул алгоритм в цепочку. Линия стала ровной, как транспортир. Идеальной ровности на полигоне не бывает. Но здесь была.
– Слишком красиво, – сказал кто-то у окна вполголоса.
– Красота нас не волнует, – отрезал Петров, не грубо. – Волнует соответствие.
Зайцев не двинулся. Его лицо ничем не выдало отношение. Он спросил ещё один короткий вопрос:
– Документально?
– Документально – режим помощника, – ответил Петров. – По плану. По листу. – И, словно отметив для «внешних», добавил: – В рамках регламента АО «ЗАСЛОН».
Маркер прошуршал по доске. Петров нарисовал окно слияния – «окно-2» – и заштриховал два ранних кадра.
– Если у нас ранняя уверенность падает выше порога, – сказал он, – мы имеем право склеить, не дожидаясь полной формы. Но порог – фиксированный. И название – фиксированное. В документации это «расширенная». Без букв.
– А у нас, – сказал тихо Марков, – в логе «полиси семнадцать-цэ». Порог – шестьдесят одна сотая. И допуск на раннее – «истина».
Он не спорил. Он называл то, что видел.
Петров кивнул. Повернулся к Громову:
– В полёте – что-то чувствовалось?
– Ровнее, чем бывает в такую влажность, – сказал Громов. – Секундный провал канал отработал без ощутимого хвоста. Руки – не понадобились.
Он сказал «ровнее», не «лучше». И это слово попало куда надо.
– Давай ещё по ADS-B, – сказал Петров.
Они прогнали симулятор – вторичный канал, «самолётный» ответчик. Синхронизировали метки. Без АРЕС кривые «шили» друг с другом, иногда расшивались, потом снова сходились – как это и бывает. С АРЕС – совпали до последнего знака после запятой в удобном интерфейсе, где дробные части прятались за красивой плашкой.
– Так не бывает, – сказал Марков больше себе, чем вслух. – На полигоне так не бывает. Петров сдержанно кивнул. Он не любил фразы «так не бывает» – они растягивают обсуждение до философии. Он любил факты.
– Фиксируем: с АРЕС совпадение избыточно стабильное. Без АРЕС – гуляние в допуске. Предупреждения – нет. – Он поставил точку. – Дальше – аудит.
Он снял колпачок, положил маркер на край стола рядом с протоколом, где в шапке всё так же стояло «АО “ЗАСЛОН”». Колпачок покатился и тихо упёрся в край бумаги.
Разговор свернули быстро. Зайцев поднялся, пожал плечами, как будто накинул на них что-то невидимое, и вышел первым. Громов задержался у двери. На секунду встретился взглядом с Марковым. Взгляд был без вопроса. Скорее – знак, что видел то же место, но со своей стороны.
Когда комната опустела, Марков выключил проектор и остался при своём экране. Он не любил смотреть на картинку, где всё идеально. Ему нужен был текст.
Он открыл цепочку сборок. Ночной прогон, триггер от расписания. Артефакты – чек-суммы, подписи. В колонке «комментарий» – нейтральное «минор апдейт параметров». Автор – сервисная учётка. Время – вполне нормальное. Никаких «минут вперёд» – это было бы слишком ярко для утра третьего дня.
Он провалился глубже – в состав пакета. Политики слияния лежали в отдельном каталоге. Их имена были знакомы, как фамилии в пропускном листе. И одно – нет. «policy_17c.bundle». Не файл настроек. Пакет. В этот момент взгляд поставил вокруг слова скобки, как на доске.
Он щёлкнул по нему. Содержимое не раскрылось – «нет прав». Он не удивился. Правильно, что нет. Неправильно – что файл здесь.
Он пошёл другим путём. Отпечатки. Контрольные суммы. Нашёл «хэш» в журнале сборки. Тот повторялся – раз, другой – за последнюю неделю. С неизменной подписью. Как повторяющаяся мелодия, которую слышишь сквозь шум.
Вики молчала. Поиск по «17c» дал ноль. Поиск по «окно» и «раньше» – выдал документ, где слово «раньше» стояло в контекстах, которые к ним не относились. В справочнике для полигона про ранний допуск не было и намёка.