Ошибка на карте
Ошибка на карте

Полная версия

Ошибка на карте

Язык: Русский
Год издания: 2026
Добавлена:
Настройки чтения
Размер шрифта
Высота строк
Поля
На страницу:
2 из 4

— Инвентаризация проверяет состояние прибора, — сказал он. — Не измерения.

— Если прибор считает, что измерение не закончено.

Рая вернула кабель и запустила калибровку по двум точкам. Максим навёл объектив сперва на её серебристый служебный знак у стены, затем на металлический шкаф. Инвентаризация увидела незавершённое измерение и не включила временную историю в отчёт.

Через восемь секунд значок удалённого доступа погас.

Рая убрала знак.

— Теперь прибор будет держать пакет, пока калибровку не завершат или не отменят.

— До следующей проверки.

— То есть у нас меньше суток. Как ты и хотел.

Максим сохранил отчёт: он фиксировал незавершённое измерение до возможного изъятия стенда.

Они поднялись не вместе. Рая ушла первой с маршрутным модулем. Камеры уже записали достаточно.

В служебной столовой они выбрали стол без проекционной панели. Профиль Златина исчез с модуля после отключения кабеля.

— Что считается независимым слоем? — спросил Максим.

— Не каталог «Меридиана», не пакет Лидии и не твой городской архив.

— Публичный отчёт о калибровке резервного флота?

— Слишком грубый. Там будут углы по секторам, не улицы. Но нам улицы не нужны.

Максим нарисовал на салфетке две стрелки: вертикальную и повёрнутую.

— Если отчёт подтвердит историческую ориентацию сектора A12 и ширину коридора, мы сможем предсказать обе компоненты сдвига. До того как увидим карту.

— Где возьмёшь сам факт сдвига?

— В независимом подписанном отказе. Экстренные системы обмениваются не маршрутами, а причинами несовместимости при трансграничной помощи. Если рубежская машина не принимает сектор Златина, она получает величину поправки без адреса.

— Запросишь тест совместимости на смене?

— Нет. Новый тест станет новым вопросом к Златину, а мы не знаем, кому он даст право. Нужен уже существующий отказ.

Она говорила так, будто право запроса было не строкой в протоколе, а ключом от двери её дома.

— Архив учебных тревог, — сказал Максим. — Там должны быть обезличенные обмены.

— За какой период?

Он вспомнил дату появления изгиба: второе ноября 2039 года. Маркер `ЛВ-6.40`. Если профиль Златина был создан той же процедурой, первый отказ мог появиться рядом с обновлением.

— Три года назад. Неделя после второго ноября.

— Архив хранится в центре экстренной навигации. Я могу открыть его на смене. Ты не можешь войти.

— Тогда выгрузи отказ.

— И ты получишь файл, созданный мной. Не независимый слой.

Любая копия из рук Раи позволяла сказать, что они изготовили подтверждение после посмертной проверки.

— Нужен свидетель процедуры, — сказал он. — Кто-то, кто выдаст нам архив по обычному основанию и подпишет цепочку.

— Не Златина. Наш хранитель учебных тревог.

Рая впервые улыбнулась.

— Хранитель — Ян Корта. «Меридиан» обслуживает общий архив.

Максим знал это имя по подписям алгоритмов совмещения. Обратиться к Корте означало показать консорциуму, что задача Лидии пережила первый час.

На стене столовой вспыхнула новостная строка: в полдень «Меридиан» проведёт внеплановую сверку транспортных слоёв Рубежа после обнаружения неподписанного изменения. Имя автора не называли.

Максим посмотрел на часы. До сверки оставалось два часа девятнадцать минут.

— Они назвали моё изменение неподписанным, — сказал он. — Хотя журнал дал ему мою биометрию.

— Где ошибка?

— В том, что обе версии удобны. Для внутренней проверки я автор. Для публичного сообщения подписи нет. Значит, они могут выбрать виновного после того, как увидят наши действия.

Рая забрала салфетку, сложила её рисунком внутрь и опустила в стакан. Чернила расплылись двумя серыми облаками.

— Тогда не просим архив у Корты, — сказала она. — Заставляем архив ответить в штатной процедуре, которую он не сможет отменить задним числом.

— Где?

— На учениях через два часа. Для всех столиц сети публикуется проверка совместимости без адресов. Если сектор A12 даст ту поправку, которую мы уже рассчитали, у нас будет независимый слой с общей временной подписью.

— Для кого проводится проверка?

— Для машин, не для людей. Пока это самый безопасный ответ.

У Максима был пакет, предсказание величины и направления ошибки и два часа до события, способного подтвердить их независимо. Доказательство находилось не в переписываемом прошлом, а в будущем.

Но до начала учений «Меридиан» собирался сверить слой Рубежа.

Им предстояло получить независимый ответ раньше, чем исходную ошибку объявят исправленной.

Глава 3. Слепая скорая

В центре экстренной навигации не было окон. Полдень наступил по смене цвета на стене: ночная синяя сетка побледнела, и над рабочими местами загорелись номера столиц.

Максим сидел в гостевом кресле за спиной Раи. На столе перед ним лежал временный допуск с одним разрешённым действием: присутствовать при проверке совместимости картографических слоёв. Допуск выдал дежурный координатор, не Рая. В журнале стояли имя координатора, время и основание — внеплановая сверка после неподписанного изменения. Именно то основание, которое «Меридиан» приготовил против Максима, теперь позволяло ему видеть процедуру.

— Руки на столе, — сказала Рая, не оборачиваясь.

— Я ничего не трогаю.

— Это не просьба. Камера должна видеть.

Он положил ладони по обе стороны пропуска.

На главной стене двенадцать городов одновременно отправляли учебные вызовы. Адреса были заменены одноразовыми номерами, улицы — прямоугольниками допуска. Система проверяла не путь, а способность чужой машины принять местные правила: высоту, ширину, тип сигнала, право войти в сектор. Отказы появлялись серыми строками и через десять секунд уходили в общий архив.

Над архивом стояла подпись обслуживающего узла: `MERIDIAN-JK-04`.

Ян Корта был здесь, хотя его самого в помещении не было.

— Сектор A12 когда? — спросил Максим.

— В третьей серии.

— Нас могут отключить до неё.

— Могут.

— И всё?

— Ты хотел независимую процедуру. В независимой процедуре я не командую временем.

Первая серия прошла без ошибок. Во второй столица Норн отказала рубежской пожарной машине из-за массы; Златин не принял медицинский модуль Керны из-за несовместимого светового маяка. Каждая строка получала подпись города-источника, подпись города-получателя и общую временную метку. Подделать один отказ после учений означало бы переписать журналы всех участников.

На боковом экране началась внеплановая сверка Рубежа. Прямая линия улицы Жестянщиков легла поверх смещённой. Жёлтый контур назвали «обнаруженным расхождением», красный — «кандидатом на исправление».

До применения исправления оставалось одиннадцать минут.

— Они не ждут аудитора, — сказал Максим.

— Они считают, что аудитор уже внёс ошибку.

— Исправление должно быть заблокировано до разбора подписи.

— Для обычной улицы. Экстренный слой обновляется по угрозе доступности.

На стене возникла третья серия. Рубеж отправлял в Златин учебную машину без внешнего ориентира. Сначала появился сектор `A11`, затем `A12`.

Максим задержал дыхание.

Система нарисовала прямой коридор и почти сразу перечеркнула его серой диагональю.

ОТКАЗ: НЕСОВМЕСТИМАЯ ПОПРАВКА ПОЛОЖЕНИЯ.

В двух полях стояли компоненты: 5,98 и 2,27 метра. Ни адреса, ни названия улицы. Только величина, ориентация старого сектора и причина отказа.

Рая раскрыла карточку до того, как она ушла в архив. Подпись Златина была действующей. Рубеж подтвердил получение. Общая временная метка легла третьей.

— Длина? — спросила она.

Максим уже считал на бумаге, хотя ответ знал заранее.

— Шесть сорок.

— Направление?

— Историческое магнитное склонение Златина.

Рая нажала «завершить просмотр». Карточка закрылась и через общий узел ушла всем участникам учений. Они получили доказательство, созданное не Лидией, не Максимом и не Раей. Профиль из посмертного пакета предсказал подписанный отказ до его появления.

На гостевом терминале вспыхнуло уведомление: основание доступа исполнено, сеанс завершится через тридцать секунд.

Максим поднялся.

— Нам нужна квитанция.

— Она в общем архиве.

— Который обслуживает Корта.

— Уже не только там. Каждый город получил корень журнала.

Рая показала на принтер неизменяемых событий. Из узкой щели вышла полоска с номером серии, тремя отпечатками подписей и контрольной суммой. Без содержания отказа она ничего не доказывала, но позволяла позднее проверить любую предъявленную карточку.

Максим не успел взять полоску.

Все прямоугольники на стене погасли. Вместо них развернулась карта Рубежа. Красный кандидат на исправление стал зелёным.

ИЗМЕНЕНИЕ ПРИМЕНЕНО К ЭКСТРЕННОМУ КОНТУРУ.

— Одиннадцать минут не прошло, — сказал Максим.

— Сверка закончилась досрочно.

Рая посмотрела на список активных вызовов. Один номер мигал янтарным: медицинская машина резервного флота потеряла внешний ориентир в промышленном секторе. Система перевела её на таблицу локальных поправок.

— Это часть учений? — спросил Максим.

— Нет.

— Где?

— Для кого, — отрезала Рая и открыла карточку вызова.

Пациент был скрыт за медицинским допуском. Видны были только класс срочности и время: подозрение на внутреннее кровотечение, допустимая задержка — шесть минут. Машина находилась в четырёх минутах от улицы Жестянщиков.

Исправленная карта вела её по прямой.

— Фактический проезд прямой, — сказал Максим. — Это же правильно.

Рая вывела не дорожный слой, а схему старого промышленного объекта. На месте, куда упиралась прямая, значился въезд в тоннель. Рядом стояла дата консервации — двадцать один год назад. Ворота были заварены, пространство за ними залито противопожарной смесью.

Смещённая линия обходила тоннель по сервисному карману. Прямая считала ворота проездом.

— При обычной навигации машина увидит препятствие, — сказал Максим.

— Она слепая. Внешний ориентир потерян. Резервный модуль держит направление по подписанной таблице и счёту колёс.

— Водитель остановится.

— Машина беспилотная. Экипаж с пациентом в салоне.

На стене тонкая белая метка ползла к закрытому комбинату.

Рая запросила отмену автоматического исправления. Система потребовала два подтверждения: оператора экстренной навигации и владельца исправленного слоя. Своё она поставила сразу. Второе поле заполнилось именем служебного контура «Меридиана».

Запрос ушёл.

Ответ пришёл через две секунды: слой прошёл внеплановую сверку, оснований для отката нет.

— Объявляй препятствие, — сказал Максим.

— По какому источнику?

— Схема консервации.

— Она архивная. Для экстренной блокировки нужен живой датчик или два независимых сообщения.

— Там заваренные ворота.

— Карта говорит, что их нет.

Максим понял, почему Лидия оставила ошибку в геометрии, а не предупреждение. Предупреждение можно было признать устаревшим. Изгиб заставлял слепую машину физически миновать точку, которую система считала свободной.

На таймере вызова осталось пять минут двадцать секунд.

Рая связалась с машиной. Ответил медик из салона; шум колёс размывал слова.

— Переведите модуль в ручной режим, — сказала она.

— Управление снаружи, — ответил медик. — Кабина опечатана, мы в лечебном отсеке.

— Выполните аварийную остановку.

— У пациента падает давление. После остановки перезапуск займёт четыре минуты.

Рая закрыла микрофон ладонью.

— Остановим — не успеют.

— Не остановим — войдут в ворота.

— Где объезд?

Максим наложил схему комбината на новую карту. Сервисный карман, по которому шла смещённая линия, исчез из дорожного слоя вместе с «ошибкой». Но его покрытие оставалось в коммунальном: под пустым местом тянулся кабель обогрева, рассчитанный на тяжёлую нагрузку.

— Здесь, — сказал он.

— Там нет дороги.

— В дорожном слое нет. Кабель повторяет изгиб. Иначе его проложили бы прямо.

Рая запросила коммунальный статус. Доступ отказали: медицинский вызов не давал права читать промышленную сеть.

Машина вошла в последний прямой участок. До ворот — семьсот метров.

— Подай временное препятствие перед тоннелем, — сказал Максим. — Не утверждай, что ворота существуют. Укажи конфликт геометрии.

— Конфликт уже исправлен.

— Между слоями. Дорожный ведёт прямо, коммунальный изгибается. Для машины это неопределённость покрытия.

— Нужна измеримая величина.

Он положил рядом полоску учений. В отказе Златина было то, что система только что объявила ошибкой: вектор длиной 6,40 метра. Независимая подпись доказывала, что такая поправка является действующим правилом совместимости, а не испорченной линией Максима.

— Прикрепи отказ.

— Златин не Рубеж.

— Но операция общая. Если два подписанных слоя расходятся на величину действующей межстоличной поправки, автоматическое исправление нельзя считать достовернее обоих.

Рая посмотрела на него, затем на белую метку.

— Это не откатит маршрут.

— Заставит модуль запросить выбор.

Она создала событие «неопределённость поверхности», добавила отпечаток отказа и две геометрии — прямую дорожную и изогнутую коммунальную. Система приняла событие, но присвоила низкий приоритет.

До ворот — четыреста метров.

— Недостаточно, — сказала Рая.

Максим увидел на схеме узкую поперечную линию перед тоннелем. Она не относилась ни к дороге, ни к воротам. Это была граница старых систем координат: внутри комбината высоты считались от заводского нуля.

— Смена высотной системы.

— Что?

— Резервный модуль должен подтвердить переход между вертикальными основами. После исправления точка перехода оказалась за воротами, но коммунальный слой оставил её здесь.

Рая добавила конфликт высоты. Теперь два независимых слоя требовали разных действий в одной точке. Янтарная метка машины стала красной.

ТРЕБУЕТСЯ ЛОКАЛЬНОЕ РЕШЕНИЕ ОПЕРАТОРА.

Поле владельца маршрута открылось на восемь секунд.

Рая выбрала изгиб коммунального кабеля.

Метка дрогнула, будто машина на карте задумалась, затем ушла с прямой. Медик в салоне вскрикнул: корпус резко накренился. На экране скорость упала, но не до нуля.

— Покрытие есть, — сказал медик. — Идём вдоль ограды. Вижу свет впереди.

Белая точка обогнула запечатанный тоннель и вернулась к основному проезду. Расчётное прибытие выросло на сорок три секунды.

Рая держала канал открытым, пока медик не подтвердил передачу пациента бригаде у временного входа. Только после этого она опустила руки.

В центре никто не аплодировал. Соседние операторы продолжали учения; два города обменивались отказом по высоте моста, третий проверял ширину разворота. На их фоне едва не случившееся выглядело одной красной строкой.

— Кто назначил машине резервный режим? — спросил Максим.

Рая открыла цепочку событий. Внешний ориентир исчез не из-за поломки. За тридцать секунд до выезда машина получила обязательную учебную конфигурацию. Её включили в межстоличную проверку как свободную единицу, а затем не сняли флаг, когда поступил настоящий вызов.

— Ошибка учений, — сказала Рая без уверенности.

— И совпадение по времени с исправлением?

Он поставил рядом три события: назначение слепого режима, досрочное применение прямой геометрии, медицинский вызов в секторе. Первое произошло до вызова. Второе — через девять секунд после него.

Кто-то не мог заранее знать, где понадобится скорая. Но мог подготовить машину и ждать любого вызова, который пройдёт через нужный коридор.

— Пациент был приманкой? — спросил Максим.

— Вызов настоящий. Медицинские показатели подписаны прибором.

— Значит, использовали не пациента. Использовали ожидаемое решение системы.

Исправление выглядело неизбежным: аудитор обнаружил смещённую улицу, «Меридиан» объявил её неподписанной, экстренный контур вернул линию на место. Любой добросовестный специалист сделал бы то же самое. После этого оставалось дождаться машины без внешнего зрения.

Максим раскрыл автора досрочного применения. Вместо имени стоял автоматический приоритет доступности. Но правило приоритета изменили сегодня в 11:41 — за минуту до начала внеплановой сверки.

Под изменением была подпись `MERIDIAN-JK-04`.

Рая молча распечатала вторую полоску. На ней были время, отпечаток правила и подпись узла Яна Корты.

— Где оригинал? — спросил Максим.

— В общем архиве.

— Для кого?

Она впервые не ответила своей формулой.

На боковом экране зелёное исправление улицы Жестянщиков получило отметку «успешно проверено реальным маршрутом». Система приняла объезд, созданный Раей, не как опровержение прямой линии, а как локальное вмешательство оператора. Для всех следующих машин тоннель оставался открытым.

Максим взял обе полоски: независимый отказ Златина и правило, применившее исправление раньше срока. Между ними лежало сорок семь минут и одна спасённая машина.

— Это не попытка скрыть ошибку, — сказал он. — Им нужно, чтобы её исправляли.

Рая посмотрела на прямую линию, заканчивавшуюся в запечатанных воротах.

Кто-то построил ловушку не на неверной карте.

Ловушкой была уверенность, что карту исправили.

Глава 4. Подпись наставницы

Первую квитанцию Максим спрятал в футляр от механического карандаша. Вторую сложил вдоль строки контрольной суммы и прижал к внутренней стороне ремня.

Он успел убрать руки за секунду до того, как двери центра закрылись.

На стенах ещё шли учения. Города обменивались отказами, мосты выдерживали чужие машины только на экране, операторы спорили о высоте и массе. Но гостевые терминалы вокруг Максима и Раи уже погасли. Над выходом загорелось белое кольцо служебной изоляции.

— Просьба оставаться на местах, — произнёс потолок. — Проводится сохранение журналов после внештатного вмешательства в экстренный маршрут.

— Сохранение, — повторила Рая. — Значит, сейчас их изымут.

У её принтера раскрылась нижняя панель. Ролик втянул оставшийся хвост бумаги, лоток опечатался. Два техника в серых жилетах вошли с разных концов зала. На груди у обоих был знак «Меридиана»: четыре линии, сходившиеся в одну.

На экране слепой скорой осталась только зелёная отметка «доставлено».

К ним подошёл старший техник.

— Ладин Максим Сергеевич?

— Да.

— Ваш гостевой ключ использован для предъявления неподтверждённой геометрии в контуре медицинского приоритета. Передайте носитель проверки и все полученные отпечатки событий.

— На каком основании? — спросил Максим.

— Совместное расследование оператора сети и консорциума.

— Номер события?

Техник показал планшет. Номер был, но категория стояла не транспортная и не медицинская: «нарушение целостности обучающей среды». Такая категория позволяла «Меридиану» собирать оборудование. Она не давала права забирать независимые квитанции городов.

— Мой носитель не подключался к вашей среде, — сказал Максим.

— Тогда его передача быстро это подтвердит.

Рая шагнула ближе.

— Вмешательство выполнила я с рабочего терминала. Ключ Ладина предъявлялся только для чтения отказа Златина.

— Ваш доступ будет рассмотрен отдельно.

На планшете техника появилось новое окно. Максим увидел своё имя, срок сдачи носителя — немедленно — и поле подписи.

— Если я откажусь?

— Ваш аудиторский допуск приостановят до выяснения. Все действия, совершённые этим ключом за последние тридцать дней, будут считаться непроверенными.

Тридцать дней означали десятки принятых слоёв. Если снять с них его подпись, города либо остановят обновления, либо переподпишут всё через «Меридиан».

— Носитель в моей мастерской, — сказал он.

— Адрес известен.

Техник знал, что Максим лжёт, но не стал ловить его. Он повернул планшет экраном вниз.

— У вас сорок минут. После этого доступ будет закрыт автоматически.

Белое кольцо над дверью погасло. Они вышли вместе с операторами. Рая молчала, пока камеры могли читать лица.

Они не поехали в мастерскую. Через двадцать минут вошли в Палату мер и оснований. В её подвальном зале города держали независимый офлайн-реестр: раз в сутки сюда доставляли корни подписанных журналов на одноразовых пластинах. Реестр ничего не знал о маршрутах, но подтверждал существование события, ключа и подписи.

У входа не было сетевого считывателя. Максим вставил служебную карточку в латунную щель. Механизм проколол в ней крошечное отверстие и вернул обратно.

— Доступ одноразовый? — спросила Рая.

— Теперь да.

— Удобно.

— Не для меня.

За стеклом стояли четыре серых шкафа. Дежурная подняла глаза от бумажного журнала.

— Сетью не пользуемся, изображения не принимаем, запросы не сохраняем, — произнесла она. — Проверка по отпечатку или по пластине?

— По отпечаткам и переносному ключу.

— Содержимое ключа мне показывать не надо.

Максим положил на стойку футляр от карандаша. Выкатил первую квитанцию, разгладил. Вторую достал из-под ремня. На сгибе одна цифра побледнела, но контрольные прорези по краям не повредились.

Дежурная провела обе полоски через оптическую рамку.

— Первая квитанция, — сказала она. — Межстоличный отказ. Три действующих подписи, корень получен сегодня. Вторая — изменение правила доступности, одна служебная подпись консорциума, корень получен сегодня. Связь между ними реестр не устанавливает.

— Время изменения?

— Подтверждено в пределах окна доставки.

— Можно точнее?

— Можно, если предъявите соседнее событие из той же цепочки.

Максим вынул старый геодезический модуль Лидии. На корпусе оставалась царапина в виде короткой белой дуги.

Дежурная не взяла прибор.

— Сами вставляйте. Если там исполняемая процедура, шкаф её не запустит.

В боковой панели открылся узкий порт. Максим подключил модуль. На матовом стекле возникли три строки без названий:

КЛЮЧ ИЗДАТЕЛЯ: ДЕЙСТВОВАЛ.

ЦЕПОЧКА: НЕ РАЗОРВАНА.

ВРЕМЯ ПОДПИСИ: ДОПУСТИМО.

Он ждал четвёртой строки.

— Что именно вы проверяете? — спросила Рая.

— Что пакет действительно подписала Лидия.

— Ты сомневался?

— Система, которая предъявляет доказательство, не должна сама подтверждать его подлинность.

Максим выбрал сравнение с городским корнем. Шкаф загудел, перебирая пластины. Появилась дата ключа Лидии, затем дата отзыва.

— Вот, — сказала Рая. — Отозван после смерти. Всё сходится.

— Не всё.

Он запросил не время подписи, а время события, которому она соответствовала. В обычном документе это было одно и то же. В городских цепочках событие могло ждать своего условия: ключ заранее подписывал правило, а реестр помещал результат в журнал только после срабатывания.

Матовая поверхность очистилась.

ПРАВИЛО ПОДПИСАНО: 03.04.2042, 19:16:08.

Лидия погибла третьего апреля в 22:40. Максим помнил цифры из заключения транспортного следователя.

— Подлинная, — сказал он.

Рая кивнула.

Ниже появилась следующая строка.

СОБЫТИЕ СОЗДАНО: 04.04.2042, 00:12:51.

Между официальным временем смерти Лидии и созданием события прошло час тридцать две минуты.

Максим выбрал другой, городской корень. Цифры не изменились.

— Отложенная публикация, — сказала Рая.

— Тогда было бы время публикации. Здесь создано событие.

— Значит, подпись перенесли.

— Нельзя перенести подпись на другое событие, не изменив отпечаток.

Дежурная за стойкой перелистнула страницу журнала. Она не прислушивалась или умела выглядеть так, будто не прислушивается.

Максим запросил основание создания. Реестр выдал не содержание, а тип связи: событие появилось как ответ на другое событие. Идентификатор причины был закрыт, однако его корень лежал в той же суточной пластине.

— Она подписала не сообщение, — сказал Максим. — Она подписала условие.

— До смерти.

— Да. А условие исполнилось после.

Он вспомнил первое сообщение пакета: объект нужен для проверки права запроса, а не существования дороги. Тогда фраза показалась объяснением странной геометрии. Теперь она звучала как инструкция механизму. Лидия заранее не знала, кто откроет пакет и когда. Она знала, какое действие в системе должно его создать.

Рая указала на вторую квитанцию.

— Можно проверить, не изменение ли правила Корты было причиной?

Максим приложил её к рамке. Шкаф сравнил отпечатки и выдал отрицательное совпадение. Событие Лидии возникло не сегодня. Причина находилась в ночи после её смерти.

— Что произошло в ноль двенадцать? — спросила Рая.

— Первый автоматический пересчёт после закрытия расследования на месте аварии.

На страницу:
2 из 4