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

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









