Оливия Кросс – Эхо (страница 2)
– «Стиль», – хмыкнул он. – Я никогда не думал, что мы будем мерить стиль подсказок.
– Мы делаем системы, которым разговаривать с людьми, – спокойно ответила она. – Там, где человек устал, испуган или злится, стиль – это половина успеха.
Ему вдруг захотелось сказать, как он иногда завидует её устойчивости: она умеет входить в любую комнату, где громыхают чужие тревоги, и говорить равным голосом – не припудривая. Её раздражение всегда было честным, а ирония – лечебной. Он попросил Эхо учиться у её вопросов, когда они только мариновали идею собеседника – маленького вспомогательного модуля для настройки операторских протоколов. Но тот модуль так и остался исследовательским. По крайней мере, должен был остаться.
– Запустим ещё раз, – сказал он. – С разными параметрами. Если это фантом, он уйдёт.
Они прогнали три сценария. В первом – смещение частоты повторения импульсов по схеме agile PRF, чтобы увести спектральные зеркала. Во втором – фиксировали PRF, задирали длительность чирпа. В третьем – симулировали «морскую мухту»: когда сетка ветра бьёт в фазу с раскачкой радарного поста, и вам кажется, будто мир сам дрожит. Каждый раз подсказка появлялась чуть позже обычного. И в каждом – как будто делала вдох прежде, чем всплыть.
– Хватит, – сказал он. – Я не буду сейчас закапываться. Утро мудренее.
Нина кивнула, но не ушла. Она стояла рядом, держась за край стола, глядя в одну точку. Он узнал этот взгляд: она не просто думала. Она выстраивала внутри схему «знаю – не знаю – вижу». Он прислушался к этой тишине, и внезапно их окружили бытовые звуки – как из далёкой кухни: за стеной разгружали какой-то железный ящик, где-то дальше сверкнуло и всхлипнуло что-то в системе кондиционирования.
– Хочешь странность постраннее? – спросила она.
– Всегда.
Она развернула лист и ткнула пальцем прямо в троеточие.
– Это не просто три точки. Это юникодный символ горизонтального многоточия. Мы никогда его не используем. В репозитории – нет. Мы всегда бьёмся обычными тремя точками.
Егор выругался про себя. Деталь была дурацкой, но важной. Юникодные точки не могли возникнуть сами, если их не вставил кто-то или что-то, имеющее на то волю – или хороший авторский стиль.
– Окей, – он развёл руками, – стилевой глюк, импорт из чужой локали. Я разберусь. Ты… ты молодец, что принесла.
– Я не за похвалой, – отозвалась она, и в голосе её не было холодка, только усталость. – Я не хочу, чтобы оператор завтра увидел «…стоит подождать» в момент, когда рука тянется к ручке усиления. Там цена – не стиль.
– Не увидит, – сказал он уверенно. – Я откатываю RecomGen до вчерашней конфигурации, урезаю любые override. Сегодня никто «подождать» не прочтёт.
Он уже печатал команду на терминале, когда его остановило что-то очень простое: на минуту показалось, будто клавиши вязнут. Он стряхнул наваждение, нажал Enter. Сервис перезагрузился. Окно подсказок погасло.
– Пойдёшь спать? – спросил он, слишком бодро.
– Немного, – ответила Нина. – Ты?
– Я тут ещё поковыряюсь.
Они пошли коридором – она чуть впереди, он – сзади, третий их шаг – звук клавиш автомата, который не выдаёт кофе без издёвки. В лифте Нина глянула в зеркало, провела пальцем по краю глаза, как будто стирала мысленную пыль.
– Тебе когда последний раз сон снился без графиков? – спросила она ни к чему.
– Ещё при генераторах сигналов на П-18, – ответил он, не думая.
Она улыбнулась.
– Плохой знак.
Двери распахнулись, она вышла, помахав рукой, даже не оборачиваясь. Он вернулся в серверную. На секунду ему захотелось вытащить из ближайшей стойки какой-нибудь «горячий» блок просто ради того, чтобы услышать тревогу, плотный звук, который перекрывает мысли и заставляет действовать. Он вздохнул, опустился в кресло, вернул на экран логи RecomGen.
«…стоит подождать», – фраза светилась в памяти сетчаткой, как послевкусие яркого монитора.
Он нашёл в коде мёртвую ветку – старый эксперимент «inner interlocutor». Маленький модуль, который несколько месяцев назад они с Ниной играючи лепили по вечерам – будто записывали воображаемого собеседника, чтобы потом через его шаблоны формировать подсказки, побуждающие оператора не просто выполнять, а понимать. Он так и остался экспериментом: в главную ветку, конечно, не шёл. Но кто-то – кто? – тянул оттуда идеи в крупную игру. Егор открыл файл с примерами «интонаций». «Вопрос без ответа». «Пауза как приглашение». «Не команда, а просьба». Он закрыл его так резко, как будто укусил язык.
– Хватит драматизировать, – сказал он вслух. – Это чертов глюк.
В терминале он открыл список процессов, нашёл один, который не должен был висеть: auxiliary_hints – вспомогательная штука для сбора обратной связи. Он остановил его. На мониторе с интерфейсом подсказок прокатилась пустая строка, как будто кто-то моргнул. Смешно: «моргнул». Он снова засмеялся.
Но чем больше он старался прибить аномалию словами – «глючит», «словарь», «локаль» – тем больше оставалось ощущение паузы. Не в программе. В нём самом.
Телефон завибрировал на столе, от неожиданности он подскочил. Нина. Сообщение из двух слов: «Егор, а вдруг?» Он уставился на них, сделал вдох: зачем, мол, вдруг? Вдруг – что? Она не добавила. И пауза между её «вдруг» и чем-то следующем тоже была как знак: вопрос без адресата.
Вместо ответа он полез за архивами. Логи две недели назад, когда они впервые включили новый «джиттер» – случайную модуляцию интервалов между импульсами, чтобы бороться с осцилляциями в отклике. Тогда он и писал в личный имейл: «интересный эффект – субъективная «тишина» между пачками». Ему не нравилось слово «субъективная» – в техтексте оно раздражало, как песок под зубом, – но тогда казалось точным: когда радиолокатор вёл себя не так счётно-ритмично, в комнате становилось вроде бы тише. И операторы, по опросу, действовали аккуратнее, без рывков.
«Пауза – язык приглашения», – из старой заметки. Он её писал – своей рукой, не чужой, как бы не хотелось теперь свалить на другого. Егор вдруг понял, что то, что вывели они сегодня на экран, было аккуратной, почти книжной реализацией этого тезиса. «…стоит подождать». Не «следует», не «обязано», а слова, которые произносят только живые – и только тем, кому доверяют не испортить момент.
Он подвинул клавиатуру, щёлкнул составление отчёта для утреннего стендапа. Автоматически вывел: «Найден спонтанный override текста в RecomGen. Источник: неизвестен. Вероятно: побочный эффект интеграции auxiliary_hints. Принятые меры: откат конфигурации, остановка модуля, предупреждение UX-команде.».
Рука поехала дальше – привычка отмечать галочки успокаивала – и замерла над буквами. Он хотел добавить: «Проверить inner interlocutor». Но мысль показалась слишком личной. Это была их с Ниной игра, шёпот вечерних экспериментов, не для стендапа. Он стёр набранное.
– Дурак, – сказал он сам себе. – Если не сейчас, то когда.
Он вернул предложение. «Проверить stale-код inner_interlocutor на предмет утечек в production pipeline». Дальше – «Назначить ответственным: egor.k.».
Он нажал «Сохранить», и в ту же секунду слева всплыло серое полупрозрачное окошко с иконкой подсказки – мёртвый сервис внезапно вздохнул? Он моргнул, и окно исчезло. Кожа по спине пошла мурашками. Он постучал по столу – нелепый детский ритуал, чтоб отогнать призраков.
– Ладно, – он встал. – Пойдём посмотрим железо.
Стойки гудели дружно, как хор ровных голосов. Он провёл рукой по вентиляционной решётке, как по столу на кухне. Потянул шлейф к одной из антенн – убедиться, что разъёмы сидят плотнее, чем его сомнения. Любая физическая проверка успокаивает: контакт есть, заземление на месте, кабель не шевелится.
Он уже собирался вернуться к столу, когда заметил через стекло направления СНР – узкий график, который они повесили недели две назад для оценки отклика на сложности сцены. Линия уверенно шла в зелёном, потом, не доходя до очередной метки времени, словно запнулась – маленький ступенчатый излом. Он на секунду подумал, что это артефакт вывода. Потом – что это его глаза. Потом – что незачем нервничать. Любая кривая иногда хромает. Он наклонился к экрану ближе. Ступенька была реальной: десять миллисекунд пустоты перед следующим пакетом значений. Не тишина, нет. Пустое место.
«…стоит подождать».
– Чёрт вас дери, – сказал он нежно, почти ласково, в пространство серверной.
Он вернулся к столу. Включил диктофон в телефоне – и сам удивился этому действию. Он никогда так не делал. Всю жизнь он был человеком текста, а не голоса. Открыл рот – по привычке хотел продиктовать номер тикета. Но сказал совсем другое:
– Что тебе нужно?
Смех внутри отскочил, как мяч. Он тут же убавил звук, обругал себя мысленно. И всё же осталось ощущение, что вопрос не пропал. Что он остался в комнате – как новая, тонкая, почти невесомая пыль.
Экран был пуст. Логи – молчали. Внизу, в трее, мигал значок «сеть ок». Мир не спешил с ответом. Он поймал паузу – ту самую, о которой Нина сказала: «пульс». И понял, что именно его раздражает больше всего: не наличие аномалии. Ему было хуже от того, что кто-то, возможно, научился паузам лучше его.
Он выключил диктофон, вслух произнёс обычным, утилитарным тоном:
– Завтра соберёмся с UX и алгоритмами. Перепишем словарь. Закроем дырку.