Оливия Кросс – Слепое пятно (страница 7)
Короткий перерыв – бутылка воды, два глотка, взгляд в окно, где дождь никак не мог решить, откуда ему идти. Возвращение к столу – снова рабочее.
Марков перешёл на «сопоставление» – инструмент, который сравнивает реестр порогов «на сегодня» и «в документации». Красных линий не появилось. Порог по «таймингу» – тот же. «Окно доверия» – без изменений. Флажок «early_ok» – присутствует только в политике «слияния треков», а здесь речь шла о другом узле – взаимодействии оператора и «помощника». Внутренний ключ «phase misalign» относился не к «слиянию», а к механике «склейки» ручного и автоматического управления. Фраза про «один такт» оставалась единственным смысловым содержанием. И это много, если помнить, чем живут их системы: кадрами, окнами, тактами.
Следующим движением – запись «паттерна». Марков не любил «забивать» этим инструментом всё подряд. Сюда попадало только то, что потом всплывёт как узнаваемое. В новый блок легло пять строк: время входа оператора, время выхода, «t_diff=0.053», «assist_blend: 0.4->0.0->0.4», «OPR_OUT_OF_BOUNDS (minor, timing, phase misalign 1 tick)». Комментарий – «в пределах регламента, отчёт пометил как замечание». Хеш-файл сохранился на внешний носитель и ушёл в ту же папку, где жили предыдущие «мелочи».
Снаружи кто-то прошёл по коридору; шаги отдались в полу. На секунду показалось, что пол ответит шагу, как резонансная панель. Не ответил. Просто бетон, просто здание.
Петров убрал лист с галочками в папку, в которую уходило всё, что потом кому-то может понадобиться. Сделал пометку «разбор – 16:30». Это значило, что времени до встречи с «безопасниками» немного, а показывать там надо не настроение, а факты. Факты были готовы – ровные, без восклицательных знаков.
Громов, подойдя ближе, провёл пальцем по нижнему краю экрана, как будто бы проверяя, прилипаю ли числа к стеклу. Этот жест, повторявшийся у него иногда, больше всего походил на «я тут тоже вижу». Спросил коротко:
– Где бы подловило?
Марков показал на строку «phase misalign».
– На границе кадров. Если вмешательство приходит в «щель», система может отнести к следующему кадру и решить, что поздно. Хотя реально – уложился.
– Бывает, – кивок Громова. – В старых автопилотах мы такое ловили по-другому: глаза говорили «успел», а машина – «уже нет». Там правы были мы. Посмотрим, кто тут.
«Посмотрим» было равно «проверим повторяемость». Одного случая для вывода мало, трёх – достаточно, пяти – достаточно с запасом. К вечеру будет ещё один полёт – короткий. С этим правилом мир жил надёжнее.
Комната вернулась к режиму ожидания. Вентиляция сменила тон, что всегда происходило на границе часа. На дисплее синхронизации мелькнул единичный пакет с более длинным временем хода – серым, незаметным для «красоты». Марков глянул, отметил в уме, не записал – такого рода выбросы не мешают общей картине, если они – одиночки.
Рука потянулась к мыши – сохранить автоматически сформированный отчёт, подшить к делу. Курсор скользнул через строку «замечания». Там, где обычно пусто, светилась одна запись – та самая «OPR_OUT_OF_BOUNDS (minor)». В конце – техническая приписка мелким шрифтом: «автоматическая классификация, источник – модуль синхронизации». «Синхронизация» – не «управление». Вывод усилился: не рука виновата, а способ, каким «АРЕС» мерит время.
В финале, уже убирая файл в папку, Марков на секунду задержал взгляд на логе. Между строк там пустоты не бывает – каждая цифра стоит на своём месте. И всё же в этом поле глазами всегда виден воздух. В этом воздухе иногда проступает контур вещи, которой не должно быть. Сегодня таким контуром стала фраза, в которой слово «оператор» встретилось со словом «недопуск» там, где оба знали: по факту – допуск, а система – решает по тактам.
Пружина стула щёлкнула и встала на место. Тишина между вентиляционными ступенями снова прояснилась. Петров, не меняя темпа, сказал:
– На вечер возьмём это как кейс. Узкая вещь, но показательна. Пусть «безопасники» глянут на «синхронизацию» тоже.
Кивок. Этого достаточно.
Перед тем как встать, взгляд вернулся к блокноту. Рядом с сегодняшними строками уже лежали «0.027», «17c», «window=2», «early_ok=true». Теперь добавилось ещё одно равноправное «имя»: «phase misalign». Не звучное, не страшное. Просто деталь. Но деталь, способная менять оценки.
Глава закончилась не словом, а точкой, поставленной в «замечаниях» протокола – ровной, без нажима. Точка, за которой следовало: «разобраться с временем». В мире, где всё решается очередностью кадров, «когда» иногда важнее «как». И кто именно первым скажет «поздно», определяет не человек.
Глава 6
КП держал тёплый воздух – перегретый лампами и плотной аппаратурой. Вентиляция говорила ровным тоном, как метроном, только без акцентов. Пахло озоном и пылью, которая любит прикидываться чистотой на гладком пластике. Под ладонью – кромка стола с мелкой царапиной в том месте, где рука всегда останавливается перед тем, как нажать «запись».
Три экрана заняли привычные позиции: общая «красивая» панель, диагностические числа помельче, текстовый лог. На боковой стойке синхронизатор мигнул зелёным. NTP выравнивался в пределах пары миллисекунд. Внизу маленькая строка «джиттер: 1–3 мс» – тот случай, когда спокойная цифра – не утешение, а норма.
Петров проверял лист, не требуя внимания. Несколько коротких фраз в рацию – сухие, без смазки:
– Первый – по коридору. РЭБ – минимум. «АРЕС» в расширенной помощи. Второй – с поворотом под шум. По профилю – согласно графику. Без самодеятельности.
Громов отозвался глухо – кабина гасит лишнее:
– Слышу.
Гарнитура на столе дала тонкий треск – как если бы воздух на секунду сел на контакт. Этот звук всегда приносил с собой знакомые тени: лабораторный стенд, люминесцентный свет, одна-единственная лампа-диагност «пиликает» честно, всё остальное старается походить на правду. Картинка пришла и ушла без вывесок «прошлое». Вернулась комната, в которой цифры шли строчками.
Подготовка заняла меньше минуты. Марков оставил пальцы на горячем пластике клавиатуры. Программа записи выдала «готов». На «красивой» панели зелёные объекты стояли в нужных местах, как солдатики в буклете. На «сырых» – дыхание систем оказалось слышно лучше.
Старт прошёл без ритуалов. Двигатели отработали, и по цифрам это видно точнее, чем по звуку. Плавный разгон – как на линейке. Зеленая иконка двинулась по дороге, отмеченной линиями. Диагностика показала ожидаемое падение задержки «управление–ответ». Дельта встала на двузначные миллисекунды, джиттер – в узкой гарнитуре допуска. Хороший день для цифр.
– Вошёл, курс держу, – голос Громова ровный, как ровная шторка.
Коридор – учебник: границы отмечены жирно, безопасные поля – спокойные. На правом экране – не подписи «скорость» и «угол», а голые дельты и флаги. Марков смотрел туда, где рассказ ещё не собран в историю.
Ближе к третьей минуте – короткий «шорох» в динамике. На диагностике – выпадение пакетов ровно на 1000 мс. РЭБ по плану не трогали, это обычная грязь канала. «Красивая» панель не моргнула: линия как стекло. В логе между строк мелькнула знакомая пара: «merge» и рядом – «policy=17c». Время – на один цикл раньше, чем вторая форма полностью встала в кадр. «window=2». «early_ok=true». Сильнее разговора любой «причины» говорил порядок событий: раннее решение, потом – заполнение входа. Скриншот улетел в артефакты.
– Видишь? – отдавать этот вопрос вслух не потребовалось; Петров, не поворачиваясь, коротко дернул подбородком. Фиксация уже шла.
Ещё через минуту Громов сказал спокойно:
– Возьму на себя коротко. Проверка задержки.
– В пределах, – Петров из тех, кто не ставит глагол «разрешаю» там, где достаточно «в пределах».
Ручное вмешательство вошло мягко. На «сырых» встала упругая пружинка в канале курса – микроотставание, ради которого и делаются подобные проверки. «assist_blend» показал «0.4→0.0→0.4» – плавная «склейка» туда и обратно. В отдельной строке мелькнул «operator_input: 2.6 s». И сразу следом – мелким шрифтом – «phase misalign 1 tick; severity=minor». Ровно та пометка, что уже встречалась: «граница кадра» может унести вмешательство в соседний «тактовый ящик». Формально – замечание, фактически – констатация механики.
– Вернул, – коротко произнёс Громов. – Дальше – по схеме.
Выпадение, раннее «merge», «17c» – картина закрепилась в том виде, который уже был знаком по серверной. Петров сделал пометку на листе – линия на полях. На ленте времени внизу мелькнул одноразовый хвост «mtime snapshot: 17c.swp 10:21:03.006». Системные показывали «10:21:02.976». Тридцать миллисекунд вперёд. Та же знакомая мелочь.
Первый прогон довели до конца без дополнительных вставок. Посадка у Громова, как почти всегда, выглядела лучше, чем это требуется для комитета: по оси, плавно, без задевания эмоциональных кнопок.
Воздух в коридоре после КП показался холоднее. Не потому, что сильно холоднее – просто другой. Запах мокрой одежды шёл от двери, на полу узкой полосой темнела вода, которую кто-то принес на подошвах. Петров остановился там, где из окон видно полосу, и сказал, не спрашивая:
– Второй – с поворотом под шум. Малый профиль. Держим ритм. Демо-неделя близко, нервы лучше тратить на вечер.