- -
- 100%
- +
Позже продавец прислал встречное условие: цену оставлял прежней, зато соглашался взять на себя часть расходов, если освободившуюся площадь не удастся быстро заполнить. Сделка снова становилась приемлемой, хотя уже по другим причинам. Лукас уточнил одну цифру у Элизы, перечеркнул собственную пометку и написал рядом новую.
Когда Феликс попросил назвать окончательную позицию, Лукас машинально посмотрел на строку справа. Желание отказаться возникло быстрее, чем он успел вернуться к цифрам, и этого оказалось достаточно, чтобы понять причину.
Феликс заметил паузу и перестал листать документы.
— Если тебе нужно ещё пять минут на расчёт, возьми. Нам сейчас дешевле посидеть, чем потом объяснять, почему торопились.
Лукас провёл пальцем по краю листа, ещё раз посмотрел на итоговую сумму и поднял глаза.
— Покупку поддержу. Компенсацию продавца фиксируем в договоре, уход арендатора считаем реальным риском. Срок заполнения первого этажа пересчитаем без надежды на чудеса. Если он принимает эти условия, идём дальше.
Феликс сразу повернулся к Элизе и начал формулировать пункты для продавца. Оскар остался у окна и не вмешивался. Когда разговор уже продолжился, Лукас ещё раз посмотрел на предварительную позицию: она осталась правильной.
После встречи охрана запросила подтверждение того, что в 08:47 Лукас физически находился вне здания. Он разрешил приложить журнал поездки автомобиля. Для самого спора хватало времени и положения машины; историю маршрута система добавила к файлу автоматически.
В 11:17 обращение прошло первичную проверку и попало в очередь спорных состояний профиля. Корпоративная учётная запись подтверждала присутствие Лукаса в офисе, а журнал автомобиля показывал его в другой части города. Такие противоречия автоматика дальше не решала — их разбирали люди.
За окнами снег окончательно перешёл в дождь. Трамваи проходили перекрёсток, оставляя блеск на мокрых рельсах. Макс разговаривал с женщиной, которая хотела закрыть профиль умершего отца, сохранив семейные фотографии и покупки. Нора стояла у соседнего отдела с папкой под мышкой и спорила с кем-то через перегородку. Алекс закончил предыдущую заявку, попробовал кофе, понял, что тот окончательно остыл, и открыл следующую карточку.
Имя Лукас Верн сначала ничего ему не сказало. Фотография — сразу.
Мужчина из синего седана выглядел на корпоративном снимке заметно свежее, чем утром во дворе. В истории стояло прибытие в 08:47, заказ кофе в 08:51, публикация предварительной позиции в 08:56 и фактический проход после ручного сброса в 09:08. Алекс видел, как Лукас утром выезжал со двора, и достаточно хорошо представлял дорогу до делового квартала, чтобы первая отметка сразу выглядела неправильной.
Он открыл исходные события и через несколько минут позвал Тео. Тот не отозвался сразу: закончил строку на своём экране, сохранил работу, взял чашку и только после этого подошёл.
Алекс развернул временную шкалу так, чтобы были видны обе отметки входа.
— Пользователь живой, я его утром видел. Посмотри сначала физический вход. Здесь профиль считает, что он оказался в офисе минут на двадцать раньше, чем мог туда доехать. Остальное специально не пересказываю — хочу сначала увидеть, откуда взялся статус.
Тео поставил чашку подальше от клавиатуры. После первого взгляда на времена выражение у него стало рабочим. Он открыл запись турникета, затем камеру главного холла и пошёл назад к источнику статуса. Алекс не вмешивался. Тео работал молча, пока не вывел рядом две записи.
— В 08:47 физического прохода нет. Турникет Лукаса не считывал, камера тоже. Статус пришёл из парковочного контура. Здесь старая проблема в том, как два сервиса понимают одно слово. Для парковки «подтверждено» означает, что место закреплено за машиной и расчётное время попало в нужное окно. Офис когда-то связал тот же статус с фактическим прибытием сотрудника. Обычно расхождения почти нет, поэтому ошибку никто не видит. Сегодня машина приехала позже, а статус — вовремя.
Тео прокрутил историю ниже. Кофейня и рабочий помощник включились после ложного присутствия.
— Дальше всё штатно. Кофейня увидела человека в здании и отправила обычный заказ. Помощник решил, что участник уже на месте, до встречи осталось несколько минут, и вынес сохранённый черновик в общие материалы. Исправляем одно соответствие статусов, остальная цепочка перестаёт запускаться раньше времени. Остальные сервисы я бы не трогал.
Алекс начал заполнять комментарий. Один ошибочный переход объяснял всё, ради чего пользователь обратился в поддержку. Интеграцию он сразу пометил для Тео, а в заявке оставил, что последующие действия сервисов соответствовали полученному состоянию. Тео прочитал формулировку через плечо, кивнул и добавил только, что до исправления парковочный прогноз лучше вообще не использовать как подтверждение физического присутствия.
Для закрытия оставалось проверить журнал автомобиля. Алекс открыл файл, нашёл нужную отметку и увидел машину в нескольких километрах от офиса. Можно было возвращаться к заявке.
Чуть выше на карте была видна более ранняя часть поездки. Первоначальная линия шла через Южную набережную, затем уходила в сторону, возвращалась и менялась снова. Рядом с пересчётами сохранились идентификаторы внешних транспортных событий.
Тео успел забрать чашку и сделать несколько шагов к своему месту, когда Алекс попросил его задержаться.
— Это уже не про ложный вход. Первый объезд Лукасу предложили около восьми тридцати одной, а официальное сообщение об обрушении появилось позже. Проверь только одно: могло прийти служебное ограничение, которого водитель ещё не видел. Если да, на этом закончим.
Наиболее вероятной Тео тоже считал именно эту версию. Он вернулся без комментариев, открыл служебную диагностику и некоторое время искал идентификатор причины. Навигация принадлежала внешней системе, поэтому её внутренние журналы оставались недоступны. Партнёрам сохранялась только часть данных, использованных при пересчёте.
— Перекрытия здесь нет. Есть небольшое снижение оценки участка, без аварийного статуса. Глубже мы отсюда не видим, но сохранилась ссылка на техническую сводку. Если источник ещё доступен, хотя бы поймём, какой класс данных пришёл.
Тео открыл ссылку и задержался на списке событий. Над пересчётом Лукаса находились более ранние записи того же типа. Он проверил время ещё раз и придвинулся к экрану.
— Лукасу новый путь предложили не первому. В выборке уже есть машины, которым маршрут менялся раньше. Давай сначала разберёмся с этим, а потом решим, стоит ли вообще чему-то удивляться.
Техническая сводка была короткой. После прошлогодней проверки несколько старых зданий этого квартала подключили к городскому контуру технического риска. Транспорт не получал показания датчиков или изображение с камер; ему передавалась только итоговая оценка участка, чтобы при равных маршрутах учитывать возможные ограничения ещё до появления полноценного дорожного события.
До обрушения оценка немного снизилась. Мониторинг здания отметил отклонение вибрации, а камера через улицу чаще обычного корректировала положение одной точки фасада. Оба показателя оставались ниже тревожного порога. Для инженера это означало наблюдать дальше, для транспортной модели — лишь сделать участок немного менее привлекательным по сравнению с соседним.
Тео открыл несколько ранних пересчётов и проверил, что происходило дальше. После первых изменений маршрута часть автомобилей ушла на соседние улицы. Фактический поток на перекрёстках изменился, регулирование подстроилось под новое количество машин, и следующие расчёты получили уже другие времена проезда.
Он не стал превращать увиденное в объяснение шире тех данных, которые лежали перед ним.
— В доступной выборке до официального ограничения пересчитано двадцать семь маршрутов в сторону соседних улиц. Что сделали водители после предложения, мы не знаем. Полного городского журнала у нас тоже нет. Я могу подтвердить только порядок: техническая оценка начала меняться раньше, потом появились первые объезды, после них изменился поток.
Алекс некоторое время смотрел на список, затем открыл карточку Эмиля Тарена.
Тео заметил фамилию и откинулся на спинку. Шутить не стал.
— Если ты открыл его из-за ощущения, что структура похожа, понимаю. Но технически это пока разные истории. У Эмиля два правила мешали друг другу. Здесь транспорт, судя по тем данным, которые у нас есть, делает обычную работу. Поэтому с общими выводами я бы не торопился.
Алекс оставил обе карточки рядом и провёл пальцем по краю мыши.
— Общий вывод мне сейчас не нужен. С Эмилем мы искали место, где появилась задача вернуть профиль в активные связи. Здесь хочу найти первую команду убрать машины именно с Южной набережной. Если она была раньше пересчётов, вопрос закрывается.
Такая постановка Тео устроила. Он убрал карточку Эмиля, освободил экран и начал искать доступные городские отметки. За это время Макс закончил разговор и подошёл к принтеру. Нора вернулась к своему столу, обнаружила, что где-то оставила папку, и снова ушла в соседний отдел. Алекс попробовал кофе и поставил чашку обратно — пить его уже не имело смысла.
Первая прямая команда нашлась в 08:40:03. После сообщения об обрушении городской диспетчер дал распоряжение перекрыть Южную набережную и две прилегающие улицы. В доступной транспортной выборке автоматические пересчёты начинались около 08:28.
Тео проверил обе отметки, затем свернул лишние окна.
— В рабочий комментарий я бы написал только то, что можем защитить. До аварии появились слабые технические отклонения, из-за них изменилась оценка участка. Транспорт начал пересчитывать часть маршрутов раньше официального ограничения. В наших данных до 08:40 нет прямого распоряжения увести машины с набережной, но город целиком мы не видим. И никакого прогноза падения здания здесь тоже нет: все найденные сигналы уже существовали в момент реакции.
Он перевёл взгляд на заявку Лукаса и вернулся к той части, за которую действительно отвечал.
— Пользователю это всё равно не нужно. Его проблема — парковочный статус, который офис принял за присутствие. Я заберу интеграцию. Маршрут к ложному входу отношения не имеет, и тащить его в ответ пока бессмысленно: только создадим вопрос, на который сами не можем нормально ответить.
Алекс согласился. Для обращения действительно требовалось другое: подтвердить местоположение Лукаса в 08:47, объяснить ошибочное состояние профиля и сообщить, что связку парковки с офисным присутствием исправят. Всё необходимое уже лежало в карточке.
Тео забрал чашку и вернулся к своему столу. Алекс открыл форму закрытия. В поле причины уже стояло: **ошибка синхронизации статуса**. Ниже был готов стандартный ответ пользователю. Журнал автомобиля подтверждал нужную временную отметку, а всё, что находилось выше неё, к жалобе Лукаса формально не относилось.
Алекс ещё раз посмотрел на 08:28, отвёл мышь от кнопки и оставил окно на экране.
Карточку он оставил открытой.
Глава 7. Связи
К половине восьмого дождь почти закончился. За день февральская оттепель успела съесть тонкий слой свежего снега на проезжей части, оставив вдоль бордюров рыхлые серые валы, песок и воду. Алекс поставил машину во дворе клиники, заглушил двигатель и посмотрел на три освещённых окна второго этажа. До записи оставалось четыре минуты. Телефон уже был в руке: можно было написать сестре, что передумал. Алекс представил следующий разговор, убрал телефон в карман и пошёл к входу.
В коридоре пахло мокрыми пальто и кофе. За стойкой приёмной никого не было, из соседней комнаты доносились голоса и скрип передвигаемых стульев. Номер кабинета Алекс увидел почти сразу.
Дверь открыл Марк.
— Алекс? Заходите. Пальто можно оставить здесь. Вода на столе. Кофе я бы сегодня не советовал: автомат внизу вторую неделю ведёт собственную борьбу с посетителями.
Кабинет был небольшим: два кресла, низкий стол, шкаф с книгами, растения у запотевшего окна. Радиатор под подоконником грел ощутимо сильнее, чем требовал февраль.
Алекс повесил пальто.
— Для места, где людям помогают разобраться в себе, указатели могли сделать понятнее. А кофе пропущу. Одного специалиста на вечер достаточно.
Марк усмехнулся, убавил батарею и сел напротив. На фотографии клиники он выглядел моложе. Вживую у висков была заметна седина, ремешок часов давно потёрся на сгибе. Никакой демонстративной мягкости или особенного взгляда, которым психолог должен был за несколько секунд определить все детские травмы посетителя, Алекс не обнаружил.
Он выбрал кресло ближе к двери. Марк оставил блокнот закрытым.
— Я давно перестал начинать с анкет. За двадцать с лишним лет люди убедили меня, что заполняют их обычно про одно, а через десять минут говорят совсем про другое. Поэтому проще спросить: зачем вы сегодня сюда приехали?
Ответ Алекс придумал ещё в машине.
— Не хотел спорить с сестрой. Она решила, что мне полезно поговорить с психологом. Я прикинул, сколько времени уйдёт на доказательство обратного, и понял, что один визит выйдет дешевле. Она умеет через неделю вернуться к разговору ровно с того места, где ты давно решил, что тема закрыта. Так что теперь смогу сказать: сходил, поговорил, ничего опасного не нашли.
Марк выслушал спокойно, не потянувшись за ручкой.
— Вполне обычный повод для первого визита. Иногда близкие успевают надоесть человеку раньше, чем собственная проблема. Час у нас всё равно есть. Если в конце решите, что зря его потратили, это тоже будет результатом.
Алекс ожидал большего давления. Возможно, разговора о сопротивлении, возможно, попытки немедленно найти за иронией что-нибудь вытесненное. Марк ничего такого не сделал, и привычная оборона осталась без применения.
За стеной кто-то прошёл по коридору. Марк открыл блокнот.
— Возьмём последние недели. Что-нибудь возвращается в голову чаще, чем вы привыкли? Работа, событие, решение. То, что формально уже должно было закончиться.
Алекс провёл большим пальцем по шву подлокотника.
— Работа. У нас регулярно появляются случаи, которые сначала выглядят сложнее, чем есть. Один сервис обновил состояние, другой ещё живёт со старым. Где-то неверно поняли статус, где-то человек сделал что-нибудь в неожиданном порядке. Обычно находишь первое расхождение, и дальше всё становится скучным. Последнее время было несколько таких историй. Причины нашли. Для закрытия задач их достаточно.
Марк положил блокнот на край стола.
— Для задач — достаточно. Для вас, похоже, нет.
Алекс посмотрел на него внимательнее.
— Вот сейчас мы упрёмся в перевод. Я работаю с цифровыми профилями и связями между сервисами. Если начну нормально объяснять, через пять минут вы будете вежливо кивать и понимать половину. Потом вы ответите чем-нибудь профессиональным, и кивать уже буду я.
Марк развернул к нему чистую страницу.
— Тогда не будем обмениваться дипломами. Назовите участников. Кто есть в этих историях и что делает.
Так было проще.
— Есть человек. Он чего-то хочет, выбирает маршрут, покупку, кому написать. Есть навигация. Цифровой профиль. Рекомендации. Городские сервисы получают свои данные. У каждого своя задача.
Марк поставил на листе несколько точек.
— Теперь возьмите только то, к чему возвращаетесь.
Алекс ненадолго замолчал. Начать с конкретного случая оказалось легче, чем пытаться сразу объяснить, что именно связывает их у него в голове.
— Был запрос семьи на полное удаление профиля умершего человека. Обычная процедура. Мы закрывали старые связи одну за другой. Потом кто-то загрузил фотографию многолетней давности. Другой сервис штатно узнал на ней лицо и снова связал фотографию с профилем, который в это время удалялся.
Марк слушал, не записывая.
— Там нет одной большой ошибки, — продолжил Алекс. — Один процесс удаляет связь, потому что должен удалить. Другой создаёт её, потому что должен распознать человека на фотографии. Оба делают ровно то, для чего написаны.
Он немного помолчал, прежде чем перейти ко второму случаю.
— Несколько дней назад человек приехал в офис позже, чем офис решил, что он приехал. Там причина нашлась быстро. Парковочный сервис использовал статус в одном значении, офисная система поняла его в другом. Из этого дальше совершенно нормально выросли кофе, рабочий черновик и ещё несколько действий. Исправляем конкретную ошибку, пользователь получает ответ, разработчик знает, что менять. Всё.
Последнее слово прозвучало суше, чем Алекс собирался.
— Но в журнале поездки была другая история. Навигация заранее несколько раз предлагала ему уйти с дороги, где потом обрушилась часть здания. Мы полезли смотреть, почему. Нашли слабые технические сигналы, изменение оценки участка, первые пересчитанные маршруты. Потом изменился реальный поток, и следующие расчёты получили уже другую дорожную обстановку. Каждая ступень сама по себе объяснима.
Марк чуть наклонил голову.
— А вас не устраивает именно то, что объяснима каждая ступень?
— Меня не устраивает итог. Я привык раскручивать события назад. Если произошло действие, до него изменилось состояние, пришёл запрос, появилась информация. Рано или поздно доходишь до места, после которого всё становится понятным. Здесь я дохожу довольно далеко и всё равно не вижу, где кто-то хотел получить именно такой финал.
Ручка Марка зависла над точками.
— То есть вас интересует место, где вся последовательность известна целиком. Где кто-то понимает, к чему она должна прийти.
Алекс вернулся глубже в кресло.
— Да. Вот это ближе.
Марк не спешил с продолжением. За стеной снова задвигали мебель, потом кто-то рассмеялся у самой двери.
— Есть ещё одна возможность, которую стоит проверить, прежде чем искать дальше управляющий уровень. Иногда результат появляется из взаимодействия частей, хотя ни у одной из них нет полного плана. В психологии и исследованиях сложных систем это не новая идея. Но объяснять её вам сейчас словами будет довольно бессмысленно.
Алекс посмотрел на стену, за которой опять раздался скрип стула.
— И поэтому там за дверью уже приготовили людей.
Уголок рта Марка дрогнул.
— Совпало удачно. У коллеги по четвергам группа. Под конец они иногда используют простое пространственное моделирование. Не для диагностики и точно не для получения тайных знаний о чужой семье. Можно взять пятерых добровольцев и вынести вашу схему из блокнота в комнату.
Алекс почесал бровь.
— Если это те самые расстановки, где незнакомая женщина внезапно чувствует, что мой покойный дед кого-то не любил, я лучше всё-таки продолжу с блокнотом.
Марк рассмеялся негромко.
— За двадцать лет я видел достаточно методов, чтобы относиться к таким вещам осторожно. Здесь никто ничего не будет чувствовать за вашу систему. Люди станут точками в пространстве. Кто кого видит, кому кто мешает, что меняется после движения. Всё.
Он закрыл блокнот.
— Первые минуты это всё равно выглядит как плохой театр. С этим я ничего не могу сделать. Дайте ему десять минут. Потом сами решите, было ли в этом хоть что-нибудь полезное.
Алекс посмотрел на дверь.
— Хорошо. Но если кто-нибудь спросит про отношения с матерью, отвечать будете вы.
Марк поднялся.
— С этим справлюсь.
Через пару минут он вернулся вместе с Ларой. Пятеро участников согласились задержаться ещё ненадолго; им объяснили только, что речь идёт о внешней модели рабочей задачи. Личных историй никто не спрашивал. Можно было выйти в любой момент.
В соседней комнате стулья уже стояли вдоль стен. На столе оставались пластиковые стаканы, бутылки воды и три половинки печенья. Девушка дописывала сообщение, высокий мужчина надевал свитер, женщина искала под стулом шарф. Никто не выглядел человеком, который собирался сообщить Алексу тайну устройства мира.
Лара попросила оставить центр свободным.
Марк остановился возле стены.
— Назовите элементы.
— Человек. Система. Навигация. Цифровой профиль. Городские данные.
— «Систему» пока уберём.
Причину Алекс понял почти сразу.
— Потому что я уже назвал целое, существование которого пытаюсь проверить.
Марк кивнул.
— Что поставить вместо него?
Алекс посмотрел на свободное место между людьми.
— Намерение. То, чего человек хочет или собирается сделать.
Невысокому мужчине достался Человек, женщине в сером — Намерение, остальным три технологических элемента. Алекс расставлял их сам: Человека почти в центре, Намерение перед ним и немного справа, Навигацию ближе к выходу, Профиль за левым плечом, Городские данные дальше остальных.
Он отступил.
Получилась обычная схема, только вместо кружков и стрелок стояли люди.
Лара прошла вдоль стены.
— Никто ничего не изображает. Говорите только о том, что действительно видите: кто закрывает обзор, к кому приходится поворачиваться, где стало тесно. Если после чужого движения захотите сменить положение, объясните причину.
Человек видел Намерение и Навигацию. Профиль — Человека сбоку. Городские данные почти полностью закрывала Навигация.
Лара обратилась к женщине, обозначавшей Городские данные:
— Переместитесь так, чтобы Навигацию было видно лучше.
Женщина сделала два шага в сторону. Навигация повернулась к ней и оказалась слишком близко к Намерению. Та отступила. Человек вслед за изменившейся фигурой немного сдвинулся вправо, чтобы не потерять Навигацию из поля зрения.
Алекс остался у стены.
Пятеро взрослых людей переместились на несколько шагов. Пока ничего, кроме геометрии комнаты, здесь не происходило.
— Они понимают, что упражнение должно что-то показать, — сказал он. — Один двигается, остальные подхватывают. В конце кто-нибудь обязательно сделает ещё один шаг, иначе всё это будет выглядеть бессмысленно.
Марк не стал защищать метод.
— Возможно. Как проверите?
Алекс посмотрел на участников.
— Вернитесь обратно.
Теперь он сам восстанавливал исходную фигуру. Навигацию попросил сместиться левее, Профиль поправил на полшага.
— Нет, вы стояли чуть дальше. Вот здесь.
Когда все вернулись на места, Алекс прошёл вокруг них, проверяя расстояния.
— В прошлый раз Городские данные ушли вправо. Теперь пойдите в другую сторону. Условие прежнее: нужно видеть Навигацию. Остальных не учитывайте.
Он посмотрел на Марка.
— Человеку ничего не говорим.
Марк молча отошёл ближе к Ларе.
Городские данные двинулись влево. Навигация развернулась. Новое положение перекрыло часть обзора Профилю; мужчина сначала попытался остаться на месте, затем сместился. Намерение оказалось между ними и тоже отошло.
Человек пока не двигался.
Алекс смотрел только на него.
Мужчина повернул голову, оценил освободившееся пространство и шагнул назад.
В первый раз он ушёл вправо. Теперь оказался позади исходной точки.
— Останьтесь так.
Алекс подошёл ближе. Прошёл от Городских данных к Навигации, затем к Профилю. На полу не было стрелок, но теперь их почти не требовалось.
— Кто из вас решил, что он должен оказаться там?
Мужчина-Человек пожал плечами.
— Никто. Впереди стало неудобно. Сзади было свободно.
Навигация указала на Городские данные.
— Я вообще двигалась из-за неё.
Профиль объяснил свой шаг потерянным обзором. Намерение — расстоянием до остальных.
Причины были мелкими и совершенно бытовыми.
Алекс ещё раз обошёл фигуру. Несколько дней назад он искал в журналах именно то, чего здесь не существовало: команду, в которой кто-то заранее знает последнюю позицию.
— В реальности всё сложнее, — сказал он. — Здесь люди слышат инструкции, видят друг друга и знают, что участвуют в эксперименте.
Марк кивнул.
— Конечно. Эта комната ничего не доказывает про ваши сервисы.
— Но показывает, что сам вопрос про того, кто отдаёт последнюю команду, может быть неправильным.
Марк не ответил сразу.
— Может быть недостаточным.
Этого уточнения хватило.
Лара закончила упражнение. Через минуту Человек уже надевал свитер, Навигация проверяла телефон, Намерение наконец нашло шарф. Схема исчезла вместе с задачей, хотя все её части остались в комнате.
Алекс задержался в центре.
— В теле ведь похожая история.
Марк взял свой блокнот со стула.
— Продолжайте.
Алекс посмотрел на людей у двери.
— Клетка не знает, куда человек собирается ехать. Нерв тоже. Сердце вообще занимается своим. Каждая часть получает то, что касается её, а человек всё равно встаёт и идёт куда-то целиком.
Он потёр подбородок.
— Что-то вроде организма...
Само слово заставило его замолчать.
Марк не стал подхватывать.
— Для аналогии годится. В качестве вывода — пока нет. Хорошие аналогии опасны тем, что очень быстро начинают объяснять больше, чем мы реально проверили. Если завтра вы решите, что город — живой организм, потому что пять человек подвигались по комнате, значит, вечер прошёл зря.



