Виктор Алеветдинов – Тихоокеанский контур. Книга 1: Война узлов (страница 5)
Контур подключил Контур-Скан. Экран ожил, собрал три ветки и повёл задержки по кругу: свет, навигация, питание.
Первые секунды узел показывал обычную картину рабочего пролёта. Потом свет выскочил вперёд на долю такта. Навигация подтянулась следом. Питание закрепило уже сложившийся порядок.
– Видишь? – спросил Тимур.
Контур видел слишком хорошо. Вчера на линии ложный профиль ещё искал старший ритм. Здесь искать уже было нечего. Узел держал навязанный порядок внутри себя: через фазовую таблицу в контроллере, через кэш последних подтверждений, через меченый сервисный слой в стыке питания. Внешний поводырь мог исчезнуть на несколько циклов – система всё равно продолжала бы воспроизводить его манеру локально.
Сверху прошёл автобус. Металл над головой глухо отозвался. Контур на миг поднял взгляд к перекрытию. Над ними ехали живые люди. Никто из них не знал, что узел уже начал путать штатное подтверждение с чужой правкой.
– Размыкаю? – спросил Тимур.
Вопрос был короткий. Цена – длиннее.
Контур вспомнил старый учебный стенд в Хабаровске, где наставник однажды сунул ему в руки перегретую шину и сказал: «Бояться надо не искры. Бояться надо уверенности, что всё под контролем». Тогда речь шла о цехе. Теперь над головой был город.
– Размыкай на треть. Только не по всей ветке. Через нижний стык.
Тимур кивнул. Не споря, снял крышку фазового узла, вывел зонд в сервисный разъём и отсёк нижнюю подпорку через резервный путь. Внутри шкафа щёлкнул силовой отсекатель. Контур-Скан сразу перестроил картину.
На мгновение световая ветка просела, питание дало хвост, и Контур уже решил, что узел сейчас уйдёт в необратимый отказ. Но вместо обрыва контроллер поднял тот же порядок локально. Не так чисто, как до размыкания, но с той же очередностью.
Тимур увеличил нижний слой.
– Вот, – сказал он. – Не внешний поводырь. Смотри сюда.
Между штатными метками питания шёл дополнительный сервисный слой – почти незаметный, впаянный не поверх платы, а в самый стык между силовой опорой и таблицей фазовых подтверждений. Чужая подпись не гнала сигнал напрямую. Она делала другое: подсовывала контроллеру “правильный” порядок задержек, а тот уже сам собирал из него действующий цикл.
– После частичной отсечки он не ищет старший ритм заново, – тихо сказал Тимур. – У него уже есть шаблон. Несколько подтверждений – и кэш начинает считать его штатным. Ещё пара часов на трафике, и он сам перепишет себе норму.
Ника выругалась шёпотом.
– Наверху растёт сдвиг. Огни уже подают коридор с упреждением. Ещё два-три цикла – и автоматика решит, что так и должно быть.
Контур вогнал WORM-блок в порт съёма и снял слепок. Руки двигались быстро, мысли – ещё быстрее. Если лезть грубо, можно было погасить узел и устроить аварию прямо сейчас. Если не лезть, он продолжит закреплять ложный порядок на реальном трафике. Оба решения были плохими. Война вообще любила выдавать два плохих решения и требовать немедленно выбрать одно.
Тимур присел к нижней шине ещё ниже, почти лёг на настил, и через фазовый зонд проверил сервисный стык.
– Причина здесь, – сказал он. – Впаяли сервисную подпись в опорную пару. Она подправляет старшинство импульсов. Контроллер сам делает остальное.
Сверху внезапно завизжал тормозной модуль. Потом второй. Где-то левее ударил тревожный городской сигнал. Ника подняла голову.
– Пошло.
На планшете вспыхнули первые отклонения: мостовые огни выдали неверное окно, автономный автобус взял поправку с задержкой, грузовой дрон на речном коридоре получил пересекающийся световой приоритет. Пока ещё без столкновения.
Контур резко выпрямился.
– Ника, вверх. Ручной аварийный профиль. Снимай автоматику с доверия. Тимур, остаёшься со мной на питании. Нужно выдрать сервисный слой без обрушения узла.
– Принял, – сказал Тимур.
Ника уже рванула к лестнице.
Контур ещё раз посмотрел на экран. После этой секунды расследование под мостом закончилось. Дальше речь шла не о доказательстве, а о том, успеют ли они лишить систему возможности подменять реальный маршрут.
Над Амуром, на узле заградогней, ветер хлестал в лицо холодной речной влагой. Под ногами дрожал металл моста, сверху шёл поток машин, впереди над водой уже сходились две траектории. До конца служебного окна оставалось меньше сорока минут. Ещё один неверный рисунок – и город получит аварию в действующем коридоре.
Красный сектор на Свет-Шкале вспыхнул в тот миг, когда Ника выскочила на верхний настил. Она скинула на перила кабельный жгут, вогнала сервисный ключ в боковой порт и перевела Свет-Шкалу в аварийный профиль.
Главный контроллер сразу попытался вернуть себе управление. Панель выдала образцовый световой цикл: чистые интервалы, выверенные окна, спокойная геометрия. На экране всё выглядело безупречно. Над рекой эта безупречность уже тянула транспорт в чужую точку.
– Контур, верхние линии врут, – сказала Ника в гарнитуру. – Сажусь на ручной профиль.
Снизу сразу ответил его голос:
– Держи участок. Тимур режет нижнюю подпись. Если выдернем её чисто, у тебя появится окно.
– У меня его уже нет.
– Значит, сделай.
Она отрезала автоматику от подтверждения и повела рисунок сама. Свет для Ники никогда не был оформлением. Ещё в учебной ночи, много лет назад, инструктор заставил её вручную провести малую переправу после отказа оптики. Тогда одна поздняя команда сорвала заход, и ледяная вода забрала у двух рыбаков не жизнь, но полгода лечения и весь сезон. С тех пор любой световой коридор она сначала проверяла на внутренние ощущения, перед тем, как понять ошибку.
На дальнем подъезде автономный автобус уже принял упреждающее окно. С речного сектора шёл грузовой дрон с контейнером ночной доставки. Их маршруты тянулись к одной точке.
Ника разбила участок на три окна, убрала ложное упреждение с левого сектора и повела аварийную серию через локальный обход: белый, пауза, жёлтый сдвиг, короткий синий отбой для верхнего коридора. Свет-Шкала дрожала в ладони, споря с городским профилем. Контроллер уже успел запомнить чужую фазовую таблицу и теперь настойчиво подсовывал ей свой рисунок.
– Ника, у тебя сдвиг по правому плечу, – подал голос Тимур. – Дрон уже клюнул на старший свет. Я вижу его по обратной фазе.
– Вижу.
Она сорвала прозрачную крышку ручного блока, перебросила канал на резервную линию и вогнала в схему жёсткое подтверждение. Автоматика ответила встречным импульсом. Верхний заградогонь мигнул прежним профилем, автобус на секунду взял неверный вход.
Сейчас всё решала не теория. Длина паузы, порядок вспышек и право света сказать автобусу, дрону и дороге одну правду.
Ника дала короткий аварийный крест по мостовому сектору, заблокировала преждевременное окно и вручную подняла коридор для автобуса на внутреннюю полосу. Следом сместила речной проход на полтора градуса и выдала дрону жёсткий отвод к восточному плечу.
На планшете две линии дрогнули, снова сблизились, потом наконец разошлись по высоте и времени.
Сверху ударил длинный сигнал тормозного модуля. Автобус сбросил скорость. Дрон ушёл в боковой коридор. Контейнер под ним качнуло, однако маршрут устоял.
Ника выдохнула только после этого. Ветер трепал волосы, пальцы скользили по мокрой панели, по спине стекал холодный пот. Свет-Шкала всё ещё билась у неё в руках. Контроллер внизу продолжал собирать себе ту норму, которую ей сейчас приходилось ломать вживую.
– Контур, живы, – сказала она. – Пока живы. Но центр уже увидел перевод.
На панели связи вспыхнули сразу три запроса: транспортный диспетчерский контур требовал объяснения по аварийному режиму; портовой маршрут просил сверку по световому окну; городская система движения отмечала рассинхрон между мостом, речным проходом и наземным потоком.
Контур ответил быстро:
– Сохраняй ручной профиль. Идём в центр.
Ника глянула на реку, на огни, на тонкие дорожки света, которыми люди пользовались каждый день, даже не думая об их цене. Теперь цена была ясна. Один ложный цикл – и чужая норма начнёт выбирать, кто доедет, а кто нет. Она забрала Свет-Шкалу и пошла к лестнице.
***
Первое, что увидел Контур в диспетчерском центре, – беде уже успели придать офисную форму.
Центр движения жил на втором уровне городского узла, над рекой и мостами, в здании со стеклянными стенами. На экранах текли маршруты, сигналы, транспортные нити, сводки по речному плечу, мосту и наземным потокам. После сырого техкоридора здесь всё раздражало чистотой.
Ника вошла первой, с мокрыми волосами и Свет-Шкалой под мышкой. Тимур принёс кейс с нижним слепком узла и уже на ходу разворачивал фазовую карту стыка питания. Контур поставил WORM-блок прямо на центральный стол смены.
Дежурный начальник центра, седой мужчина в аккуратной жилетке, увидел капсулу и сразу помрачнел.
– Это здесь лишнее, – сказал он. – Сначала разберёмся в масштабе. Потом оформим.
Контур подключил WORM-log к боковому терминалу.
– Масштаб уже едет по мосту, летит над водой и идёт в порт.
На стене раскрылся городской контур. Красные и жёлтые отклонения пульсировали по трём слоям сразу: световой рисунок, навигационные подтверждения, задержки питания на узлах движения. Картина собиралась неприятная. Ложный эталон уже не сидел под одним мостом. Он расталкивал сеть, приучая её к своей очередности.