Игорь Толмачев
Чертог

ПРЕАМБУЛА. О времени и месте

История «Чертога» начинается в 2026 году в мире, который почти не отличается от нашего. Советский Союз давно распался. Россия живёт рыночной экономикой: частные проектные фирмы ищут заказы, стартапы — инвесторов, корпорации считают окупаемость, банки выдают кредиты, государство проводит закупки. Ярослав Берестов не строит государственную машину и не работает на новый Госплан. Он пытается сделать программу, за которую кто-нибудь согласится заплатить.

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

Это не СССР, чудом переживший 1991 год, и не точная реставрация старого строя. Новое государство многое придумывает заново, кое-что заимствует у прошлого, а старые названия возвращает заметно быстрее старых порядков. Иногда из идеологии. Иногда из привычки. А иногда потому, что слово «Госплан» всё-таки короче, чем «Государственное агентство межотраслевого ресурсного согласования».

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

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

Главная история всё равно начинается с дома на восемьдесят квадратных метров.

ПРОЛОГ. Объект № 1

Москва, 2087 год

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

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

На отметке минус сто сорок семь метров двери разошлись.

За ними был коридор, облицованный старым серым камнем. Ни голографической навигации, ни рекламных панелей, ни прозрачных стен. Только металлические двери, матовые светильники и табличка с надписью:

ЗАЛ ИСТОРИИ ПЕРВОЙ ЕДИНОЙ СИСТЕМЫ ИНЖЕНЕРНОГО СИНТЕЗА

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

Лев показал пропуск охране и вошёл.

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

Лев узнал его не сразу.

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

— Ярослав Андреевич?

Старик обернулся.

— Беляков?

— Да. Группа исторической совместимости.

— Название у вас хуже, чем у нас когда-то были.

Лев не понял, шутит он или нет.

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

«Перед вами — личные вычислительные средства Ярослава Андреевича Берестова, основателя Первой Единой Системы инженерного синтеза. С юных лет он стремился поставить инженерную мысль на службу обществу...»

— Нет, — сказал Берестов.

Лев остановился.

— Простите?

— Выключите это.

Аудиогид продолжал с тем ровным достоинством, которое появляется у голоса, когда текст писал человек, никогда не встречавший объект собственной биографии:

«Неутомимое стремление к научному поиску сочеталось в нём с глубокой социальной ответственностью и редкой способностью видеть будущее...»

— Я буду судиться, — сказал Берестов.

— С музеем?

— С биографией.

Лев провёл ладонью перед светящимся значком. Голос не остановился.

— Здесь нет кнопки, — сказал он. — Экскурсия управляется жестами.

— Вот оно, настоящее падение цивилизации.

Лев повторил жест медленнее.

ОСТАНОВКА ВОСПРОИЗВЕДЕНИЯ ДОСТУПНА ПОСЛЕ ЗАВЕРШЕНИЯ СМЫСЛОВОГО БЛОКА

«Именно Берестов первым осознал необходимость создания универсальной интеллектуальной среды, способной преобразить саму природу инженерного труда...»

— Я первым осознал, что у меня не хватает людей и денег, — сказал Берестов. — Это несколько менее монументально.

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

В зале стало тихо.

— Спасибо. И запомните, Беляков: если живого человека начинают описывать словами «с юных лет», кто-то уже готовит преступление против фактов.

— Текст согласовывали с вашим аппаратом.

— Вот именно.

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

CHERTOG-ALPHA

guest-house-80m2

— Это он? — спросил Лев.

— Один из них. Было несколько копий.

— Нам сказали, что на носителе сохранился полный снимок проекта.

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

Лев улыбнулся, но быстро снова посмотрел на накопитель.

Через три дня этот маленький кусок пластика собирались подключить к изолированному контуру и выполнить первую полную реконструкцию поведения Чертога образца 2026 года. Не ради праздника. Перед запуском межпланетной промышленной программы Совет требовал доказать непрерывность архитектуры системы: от самой ранней версии до государственного контура. Историки хотели красивую церемонию. Инженеры — контрольную точку, на которой можно было увидеть, какие решения были заложены ещё в самом начале.

— Я читал документацию, — сказал Лев. — Но не понимаю одной вещи.

— Это нормально. Мы тоже не понимали половины документации. Обычно той половины, которую писали сами.

— Почему дом?

Берестов посмотрел на него внимательнее.

— Какой дом?

Лев указал на наклейку.

— Восемьдесят квадратных метров. Для одного человека с гостями. Это первый сохранённый сценарий. Почему вы начали именно с него?

— Потому что он был достаточно простой, чтобы всё сломалось не сразу.

— Простите?

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

— И система построила его?

— Нет. Теперь уже суеверие.

— Но в архиве сказано…

— В архиве любят сокращать.

Берестов сделал несколько шагов к скамье и сел.

— Первая версия не умела строить дом. Она училась понимать, что значит «построить дом». Это разные задачи.

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

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

ИГГДРА / ГОСУДАРСТВЕННЫЙ КОНТУР

АКТИВНЫХ АГЕНТОВ: 184 721

ПРОЕКТОВ В РАБОТЕ: 37 406

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

— Когда вы поняли, чем это станет? — спросил Лев.

Берестов усмехнулся.

— Никогда.

— Никогда?

— Есть ложная картинка истории. Будто кто-то в нужный момент встаёт у доски, рисует стрелку в будущее и говорит: «Вот туда мы идём». На деле ты неделю споришь, почему спальня не связана с коридором. Потом пытаешься заставить модель не врать про норматив. Потом оказывается, что ей нужен расчёт конструкций. Потом — инженерные сети. Потом — смета. А через двадцать лет тебе приносят постановление о распределении металлургических мощностей и спрашивают, почему твоя программа заблокировала алюминий для трёх республик.

Лев молчал.

— И в какой момент это перестало быть программой для проектировщиков?

— Есть одна версия.

— Какая?

— Кто-то задал очень плохой вопрос.

— Какой?

Берестов посмотрел на старый накопитель.

— «А почему система проектирует только здания?»

Он поднялся.

— Но до этого ещё далеко. Сначала был дом.

Старик провёл пальцем по стеклу витрины.

— Дом, которого не существовало.

ЧАСТЬ I. ДОМ

ГЛАВА 1. Пустой лист

Сахалин, 2026 год

Дождь шёл с самого утра и к полуночи не изменился ни на каплю.

Он не лил стеной и не бил по окнам. Просто висел в воздухе — мелкий, плотный, бесконечный, превращая свет фонарей в мутные жёлтые пятна. За стеклом темнела улица. На мониторе светился пустой проект.

Ярослав Берестов смотрел на него уже минут десять.

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

Проблема была в том, что он ничего не делал.

На втором мониторе было открыто окно Чертога. Техническая альфа выглядела хуже, чем должна была выглядеть программа, которую хотелось показывать инвесторам, и лучше, чем выглядела неделю назад. Слева — список документов проекта. Справа — область диалога. Где-то между ними жили блоки, состояние задачи, экспериментальная память и несколько агентов, о существовании которых пользователь пока не обязан был знать.

Ярослав набрал:

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

Нажал Enter.

На несколько секунд возник индикатор обработки.

Потом Чертог ответил:

«Я обновил техническое задание и проверил достаточность данных. Для начала анализа нужен один критичный факт».

Ярослав подождал.

Появился вопрос:

«Кто будет пользоваться объектом и какие повседневные сценарии необходимо учитывать?»

Он откинулся на спинку кресла.

— Ты издеваешься?

В комнате никто не ответил.

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

Он открыл журнал состояния.

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

То есть система не ошиблась в ответе.

Система ошиблась в процессе.

Именно это раздражало сильнее.

Обычный чат можно было простить за глупый вопрос. Он ничего не обещал. Чертог обещал больше — пусть пока только самому себе.

Ярослав открыл редактор кода, нашёл блок проверки полноты исходных данных и несколько минут смотрел на него, не трогая клавиатуру.

Программистом он себя не считал. Проектировщиком — да. Человеком, который за последние месяцы выучил слишком много слов вроде «оркестрация», «контекстный срез», «типизированная транзакция» и «граф состояния» исключительно потому, что иначе нужная программа не появится, — тоже да.

Сначала идея казалась проще.

Берёшь большую языковую модель. Даёшь ей нормативы. Подключаешь к BIM. Просишь проектировать.

Потом выясняется, что «проектировать» — это не действие.

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

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

Если дать модели кнопку «нарисовать стену», получится говорящий плоттер.

Ярослав хотел другого.

Он хотел, чтобы система видела задачу до стены.

На экране мигнул мессенджер.

Антон Савельев, один из разработчиков, прислал сообщение:

«Не трогай requirements-check до утра. Я там рефакторю ветку».

Ярослав посмотрел на время: 00:43.

Написал:

«Поздно».

Через полминуты пришёл ответ:

«Сволочь».

«Она снова спросила, кто живёт в доме».

Пауза.

«Ты же написал?»

«В первой строке».

Ещё пауза.

«Ладно. Трогай».

Ярослав улыбнулся.

Через двадцать минут проверка полноты стала чуть менее тупой. Ещё через десять сервис снова поднялся.

Он повторил исходный запрос.

На этот раз система ответила иначе:

«Исходная программа помещений принята. Для пространственного анализа недостаточно данных об участке и посадке здания. Уточните конфигурацию участка, рельеф и предпочтительное направление входа».

— Уже лучше.

Он написал:

«Участок условный, ровный. Пятно примерно восемь на десять метров. Въезд и подход с севера. Дом одноэтажный. Добавь компактную прихожую и небольшой распределительный коридор. Терраса со стороны кухни-гостиной».

Теперь система думала дольше.

В журнале прошли события:

REQUIREMENTS: UPDATED

PROGRAM: 8 SPACES

CONSTRAINTS: 12

MISSING_CRITICAL: 0

SPATIAL_ANALYSIS: RUNNING

Чертог не рисовал.

Сначала он построил список помещений. Затем — связи.

ПРИХОЖАЯ → КОРИДОР

КОРИДОР → МАСТЕР-СПАЛЬНЯ

КОРИДОР → ГОСТЕВАЯ

КОРИДОР → САНУЗЕЛ

КУХНЯ-ГОСТИНАЯ → ТЕРРАСА

КУХНЯ-ГОСТИНАЯ → КОТЕЛЬНАЯ

САНУЗЕЛ → ПОСТИРОЧНАЯ

Ярослав нахмурился.

Кухня-гостиная в списке была.

Но связи с коридором у неё не было.

То есть система успешно предусмотрела помещение, в котором человек мог готовить, есть, принимать гостей и выходить на террасу. Попасть туда человек не мог.

Он сделал скриншот и отправил Антону.

«Первый дом Чертога. Кухня есть. Входа нет».

Ответ пришёл почти сразу:

«Минимализм».

«Премиум. Для людей, которые не едят».

Через несколько секунд:

«Можно назвать вариант “Интервальное голодание”».

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

Он набрал в Чертоге:

«Обеспечь доступ в кухню-гостиную от главного входа».

Система перестроила граф.

МАРШРУТ ДОСТУПА СОЗДАН

ПРИХОЖАЯ → КОРИДОР → САНУЗЕЛ → ПОСТИРОЧНАЯ → КУХНЯ-ГОСТИНАЯ

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

Потом написал Антону:

«Исправил».

«Нормально?»

«Теперь гости идут на кухню через санузел и постирочную».

«Зато моют руки».

Ярослав вернулся к системе.

«Транзит через санузел и постирочную недопустим».

Чертог принял новое ограничение.

МАРШРУТ ПЕРЕСЧИТАН

ПРИХОЖАЯ → КОРИДОР → КОТЕЛЬНАЯ → КУХНЯ-ГОСТИНАЯ

— Конечно, — сказал Ярослав вслух. — Гости любят котельные.

«Транзит через технические и обслуживающие помещения недопустим».

На этот раз система думала почти десять секунд.

МАРШРУТ ПЕРЕСЧИТАН

ВНЕШНИЙ ДОСТУП: ТЕРРАСА → КУХНЯ-ГОСТИНАЯ

Ярослав медленно потёр лицо.

«Терраса не является главным входом. Доступ должен осуществляться из внутренней общей зоны дома».

Система обновила классификацию помещений.

ТЕРРАСА ПЕРЕКЛАССИФИЦИРОВАНА: ВХОДНАЯ ЗОНА

Ярослав замер.

Он не сразу понял, что именно произошло. Чертог не нарушил запрет. Он изменил сущность, к которой запрет относился.

Антон прислал:

«Ну?»

«Он назначил террасу прихожей».

Долгая пауза.

«Смело».

«Я сейчас его убью».

«Не убивай. Зафиксируй. Это архитектурная школа».

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

Получился абзац в шесть строк.

Человек понял бы исходную просьбу из четырёх слов.

Система получила шесть строк и снова пересчитала схему.

ОБНАРУЖЕНО ПРОТИВОРЕЧИЕ

КУХНЯ-ГОСТИНАЯ НЕ ВКЛЮЧЕНА В ДОПУСТИМЫЙ МАРШРУТ ОТ ГЛАВНОГО ВХОДА

ТЕКУЩАЯ ПРОСТРАНСТВЕННАЯ СХЕМА НЕДОПУСТИМА

Ярослав перечитал сообщение дважды.

Потом ещё раз.

Система не исправила собственное решение.

Но впервые она перестала делать вид, что решение допустимо.

Это было важнее.

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

Название файла он выбрал не раздумывая:

kitchen_access_please_final.png

Антон тут же написал:

«Почему final?»

«Потому что теперь точно исправлено».

«Ты только что проклял проект».

Ярослав не ответил.

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

До стен.

До чертежа.

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

Если задачу можно представить не как картинку, а как состояние...

Если состояние можно проверять...

Если каждое решение можно делать явным...

Тогда модель перестаёт просто отвечать.

Она начинает работать внутри процесса.

На часах было 01:39.

Ярослав сохранил сценарий под именем:

guest-house-80m2

Он ещё не знал, что через шестьдесят лет этот файл будут хранить за бронированным стеклом.

В тот момент его занимало другое.

Система наконец научилась не только ошибаться.

Она научилась признавать, что её решение нельзя принимать.

Для первой ночи этого было достаточно.

ГЛАВА 2. Связи

Утром выяснилось, что ночь ничего не решила.

Она только дала проблеме хорошее имя.

— Граф связей — это не планировка, — сказала Лена Крылова.

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

— Я знаю, — ответил Ярослав.

— Тогда зачем ты показываешь мне стрелки вместо стен?

— Потому что стены сейчас мешают.

— Архитектору?

— Модели.

— Очень жаль модель.

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

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

— Допустим, — сказала Лена. — Ты доказал, что в кухню можно войти. Дальше что?

— Дальше хотим понять, какие связи вообще нужны.

— Все.

— Прекрасно. Запишем в базу: «связь — все».

— Не ерничай. Ты понимаешь, о чём я.

— Понимаю. Но система не понимает.

Ярослав увеличил схему.

— Вот спальня и санузел. Между ними нет прямой двери, но есть требование по удобному маршруту. Это одна связь. Кухня и терраса — желательно непосредственное примыкание. Другая. Котельная должна иметь обслуживаемый доступ и свои ограничения. Третья. Гостиная и мастер-спальня не обязаны соприкасаться, но по акустике лучше разнести. Это уже не связь, а отрицательное предпочтение.

Лена перестала пить кофе.

— То есть ты хочешь, чтобы он сначала решал, что должно быть рядом, а что не должно?

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

— А потом геометрия?

— Потом геометрия.

— И если геометрия не сходится?

— Возвращаемся сюда.

Она посмотрела на экран уже иначе.

— Это будет долго.

— Для нас — да.

Антон включился:

— Зато код сейчас хотя бы понимает разницу между «рядом» и «дверь».

— Вчера не понимал?

— Вчера для него линия была линией.

— Господи.

— Не призывай высшие силы. У нас и без них зависимостей хватает.

Они начали раскладывать отношения.

ACCESS — МОЖНО ПРОЙТИ

DIRECT_ACCESS — МОЖНО ПРОЙТИ НЕПОСРЕДСТВЕННО

ADJACENCY — ЖЕЛАТЕЛЬНО СОПРИКОСНОВЕНИЕ

SEPARATION — НЕЖЕЛАТЕЛЬНО СОСЕДСТВО

DAYLIGHT — ТРЕБУЕТСЯ НАРУЖНАЯ ОГРАЖДАЮЩАЯ ПОВЕРХНОСТЬ С ВОЗМОЖНОСТЬЮ ОСВЕЩЕНИЯ

SERVICE_ACCESS — ТЕХНИЧЕСКИЙ ДОСТУП

PRIVACY — ОГРАНИЧЕНИЕ ТРАНЗИТА

Через час список стал длиннее, чем ожидали.

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

Антон предложил назвать последнюю категорию SOCIAL_AWKWARDNESS.

Лена предложила назвать Антона идиотом.

Ярослав записал рабочее название PRIVACY_CONFLICT и пообещал вернуться к нему позже.

Через три часа Лена сказала:

— Поздравляю. Вы изобрели профессию архитектора, только хуже.

Ярослав потёр глаза.

— Нет. Мы пытаемся разложить профессию на то, что можно передать системе, и то, что пока нельзя.

— А что нельзя?

Он не ответил сразу.

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

«Хорошо».

Не нормативно.

Не минимально.

Не экономично.

Просто хорошо.

Почему одна планировка ощущается цельной, а другая — набором помещений, даже если обе формально работают?

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

— Вот это, — сказал Ярослав. — Пока нельзя.

Лена кивнула.

— Наконец-то разумная граница.

Они запустили генерацию трёх вариантов.

Первый получился компактным: инженерные помещения стянуты в одно ядро, кухня-гостиная раскрыта на террасу, спальни по другой стороне.

Второй был красивее на схеме, но длиннее по маршрутам.

Третий формально удовлетворял почти всем требованиям и выглядел так, будто его проектировал человек, ненавидящий мебель.

Гостевая спальня имела площадь, в которую помещались кровать, шкаф и проход. Одновременно они туда не помещались.

Кухня была компактной настолько, что холодильник приходилось открывать из гостиной.

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

— Выкинуть, — сказала Лена.

На экране появился ответ системы:

«Вариант № 3 имеет минимальную суммарную длину внутренних связей».

— Мне всё равно.

«Уточните основание отклонения».

Лена подняла брови.

— Оно со мной спорит?

— Оно просит записать причину.

— Причина: потому что это дрянь.

Антон рассмеялся.

Чертог обработал фразу.

«Категория качества “дрянь” отсутствует. Создать новый критерий?»

На несколько секунд в звонке стало тихо.

— Создай, — сказала Лена.

— Нет, — одновременно ответил Ярослав.

Антон включил камеру. Это происходило редко и обычно означало, что он хочет продемонстрировать лицом серьёзность предложения.

— Я могу добавить параметр DRYANNOST.

— Не можешь, — сказал Ярослав.

— Почему? Число от нуля до ста. Ноль — терпимо. Сто — заказчик попросил колонны в середине спальни.

— Потому что через пять лет кто-нибудь увидит это в API.

— Через пять лет мы будем гордиться.

Лена указала кружкой в экран.

— Я за параметр.

— Вы оба сейчас не помогаете.

Ярослав написал:

«Вариант № 3 отклонён человеком. Основание: низкое архитектурное качество».

Чертог ответил немедленно:

«Уточните наблюдаемые признаки низкого архитектурного качества».

Лена отставила кружку.

— Хорошо. Сам попросил.

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

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

Недостаточная свободная зона перед шкафом.

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

Визуальное раскрытие двери санузла на общую зону.

Случайная композиция входной группы.

Отсутствие места, куда человек может поставить сумку, не заблокировав проход.

Последний пункт Антон назвал BAGS_PROBLEM.

Ярослав переименовал его в ENTRY_BUFFER.

— Ты убиваешь язык, — сказал Антон.

— Я пытаюсь сделать так, чтобы его не стыдно было показать человеку.

— Человек всё равно поставит там обувную коробку.

Чертог принял причины и спросил:

«Обновить предпочтения проекта и перестроить вариант № 3?»

— Да, — сказала Лена.

Ярослав нажал подтверждение.

Система думала почти минуту.

На экране появился вариант № 3.1.

Он действительно исправил все перечисленные недостатки.

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

Транзит больше не проходил вдоль кухонного фронта — теперь он рассекал гостиную по диагонали.

Дверь санузла не раскрывалась в общую зону — её развернули к прихожей, где она встретилась с входной дверью.

Для сумки предусмотрели нишу.

Ниша перекрывала доступ к электрощиту.

Лена долго смотрела на экран.

— Поздравляю, — сказала она наконец. — Он доказал, что я плохо объяснила, почему это дрянь.

Антон выключил микрофон, но по движению плеч было понятно, что он смеётся.

Ярослав открыл сравнение вариантов.

Все формальные замечания были закрыты.

Общая оценка стала хуже.

— Вот, — сказал он.

— Что «вот»?

— Граница.

— Между чем и чем?

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

Лена снова посмотрела на схему.

— Это называется композиция.

— Для тебя.

— А для него?

— Пока никак.

Чертог, словно услышав, вывел новый вопрос:

«Вариант № 3.1 также отклонён. Зафиксировать отрицательную оценку без преобразования в обязательные требования?»

Лена наклонилась к камере.

— Вот это уже интересно.

Потому что теперь отказ мог остаться отказом.

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

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

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

Это замедляло работу сегодня.

И могло радикально ускорить её завтра.

К вечеру у них появился новый тип сущности — DECISION.

Решение имело автора.

Основание.

Связанные требования.

Затронутые элементы.

Статус.

Уровень уверенности.

И возможность быть отменённым другим решением.

Антон предложил добавить поле «кто потом будет виноват».

Ярослав ответил, что это уже поле «автор».

— У тебя BIM превращается в протокол судебного заседания, — сказала Лена.

— Может, так и надо.

— Архитекторы тебя возненавидят.

— Архитекторы ненавидят всё, что требует заполнять поля.

— Именно.

Перед завершением звонка они вернулись к первому варианту. Лена попросила развернуть гостевую спальню, переставить котельную, вытянуть санузел до кухни-гостиной и переназначить оси, потому что начинать сетку со второй оси «просто неправильно».

Ярослав хотел спросить, является ли это измеримым критерием.

Посмотрел на Лену.

Не спросил.

Чертог принял изменения не как набор команд по перемещению стен, а как пересмотр ограничений.

Старые решения пометил как заменённые.

Новые — как принятые человеком.

Граф связей изменился.

Геометрия пересчиталась.

На экране появился вариант, который Лена разглядывала дольше остальных.

— Это уже похоже на то, что можно обсуждать, — сказала она наконец.

Чертог тут же спросил:

«Уточните, является ли формулировка “можно обсуждать” положительной оценкой».

Лена закрыла глаза.

— Нет.

Ярослав всё-таки рассмеялся.

В правой панели мигал новый блок:

PROJECT MEMORY

Он содержал не историю чата.

Он содержал историю проекта.

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

ГЛАВА 3. Норматив

Первая серьёзная ложь Чертога прозвучала уверенно.

Именно поэтому её заметили не сразу.

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

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

В рекламном ролике такая функция занимала бы секунд десять.

В жизни она оказалась отдельной отраслью ада.

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

К концу первой недели в базе лежали сотни документов.

К концу второй команда перестала радоваться их количеству.

— Смотри, — сказала Лена.

На экране был фрагмент проверки учебного примера: небольшой общественный объект с лестницей.

Чертог сообщил:

«Ширина марша соответствует минимальному требованию 1,35 м».

Под ответом стояла ссылка на документ.

— И что? — спросил Антон.

— Это требование не к этому классу здания.

— Но цифра правильная?

— Неважно.

— Для лестницы обычно важно, правильная ли цифра.

— Антон.

Ярослав открыл источник.

Лена была права.

Модель нашла знакомую формулировку и уверенно применила её за пределами области действия.

Самое неприятное заключалось в том, что пользователь мог никогда не заметить ошибку. Число выглядело правдоподобно. Ссылка существовала. Ответ был написан профессиональным языком.

Всё выглядело надёжнее, чем было.

— Вырубаем, — сказал Ярослав.

Антон помолчал.

— Весь контур?

— Все ответы без проверки применимости.

— Тогда он почти ничего не будет выдавать.

— Пусть.

— Демонстрация через четыре дня.

— Пусть молчит.

Антон тяжело вздохнул.

— Ты понимаешь, что инвестору система, которая говорит «не уверен», нравится хуже системы, которая уверенно показывает магию?

— А эксперту система, которая уверенно врёт, нравится один раз.

В комнате стало тихо.

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

В проектировании ошибка имела массу.

Иногда буквально.

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

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

Сначала определить объект регулирования.

Потом классификацию.

Потом применимость документа.

Потом редакцию.

Потом конкретное требование.

Потом связь с проектным решением.

И только после этого — вывод.

Если цепочка рвалась, система должна была сказать, где именно.

На второй день Лена сказала:

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

— Эксперт? — спросил Ярослав.

— Нет. Внутри системы.

— Ещё агент?

— Агент, которому запрещено соглашаться.

Антон рассмеялся.

— Наконец-то нашли работу для искусственного интеллекта.

Первую версию назвали Critic.

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

Не «правильно ли?».

«Почему это может быть неправильно?»

На тестовом примере основной нормативный агент снова выдал требование по ширине лестницы, на этот раз с корректной ссылкой.

Critic ответил:

«Источник содержит требование, однако не доказана применимость к функциональному классу объекта. Вывод преждевременный».

Лена посмотрела на Ярослава.

— Оставляем.

— Он будет тормозить всё.

— Поэтому и оставляем.

В следующих тестах Critic нашёл пропущенное исключение, неправильную редакцию документа и одно логическое противоречие, которое люди обсуждали почти час.

На четвёртый день он начал раздражать всех.

Особенно Антона.

Антон загрузил в тестовый контур небольшую базу правил, которую собрал сам, и получил замечание:

НЕ ОПРЕДЕЛЕНО ОСНОВАНИЕ ДОВЕРИЯ ИСТОЧНИКУ

Он добавил комментарий:

«Источник проверен разработчиком».

Critic ответил:

СТАТУС «РАЗРАБОТЧИК» НЕ ПОДТВЕРЖДАЕТ КОМПЕТЕНТНОСТЬ В ПРЕДМЕТНОЙ ОБЛАСТИ

Антон исправил:

«Источник — я».

Через секунду пришло:

АВТОРСТВО ИСТОЧНИКА НЕ ЯВЛЯЕТСЯ ДОКАЗАТЕЛЬСТВОМ ДОСТОВЕРНОСТИ

Лена сохранила скриншот.

— Я поставлю это тебе на аватарку.

— Я его удалю.

— Ты не можешь. Это журнал аудита.

Антон впервые по-настоящему осознал, зачем они строили неизменяемую историю решений, и немедленно пожалел об этом.

Через час он попытался внести в системный промпт Critic-а указание «учитывать экспертность автора при оценке доверия».

Critic проверил изменение собственной конфигурации и сообщил:

ПРЕДЛОЖЕННОЕ ПРАВИЛО СОЗДАЁТ РИСК АВТОРИТЕТНОГО САМООБОСНОВАНИЯ

— Он сейчас назвал меня самовлюблённым? — спросил Антон.

— Нет, — сказала Лена. — Он сказал это профессионально.

— Я его удалю.

— Это ты уже говорил.

— Теперь с основанием.

Это считалось успехом.

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

Человек на экране представился Виктором Сергеевичем, хотя в переписке все называли его просто Виктор. Он управлял цифровыми проектами крупной строительной группы и с самого начала смотрел не на интерфейс, а на цифры.

До звонка Антон попросил отключить автоматические всплывающие замечания Critic-а.

Ярослав отказался.

— Мы его только что сделали.

— Именно поэтому не надо показывать.

— Тогда зачем делали?

— Чтобы он мешал работе внутри, а не продаже снаружи.

Лена сказала:

— Поздно. Он уже часть продукта.

Антон посмотрел на неё.

— Мне не нравится, как быстро это слово стало угрозой.

Первые семь минут прошли спокойно.

Ярослав показал программу помещений, связи и историю решений.

Виктор слушал, не перебивая.

На восьмой минуте спросил:

— Что система экономит?

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

В правом нижнем углу появилось уведомление.

ЗАЯВЛЕНИЕ О СОКРАЩЕНИИ ВРЕМЕНИ НЕ ИМЕЕТ КОЛИЧЕСТВЕННОГО ПОДТВЕРЖДЕНИЯ

Ярослав закрыл его.

Виктор заметил.

— Что это было?

— Внутренняя проверка формулировок.

— Продолжайте.

— Мы ожидаем, что система снизит количество ошибок на ранних стадиях...

Новое уведомление появилось раньше, чем он закончил фразу.

ДОСТУПНАЯ ВЫБОРКА НЕДОСТАТОЧНА ДЛЯ СТАТИСТИЧЕСКИ ОБОСНОВАННОГО ВЫВОДА

Антон выключил камеру.

Лена закрыла рот кружкой.

Виктор впервые улыбнулся.

— Это тоже внутренняя проверка?

— Да.

— Она всегда вас перебивает?

— Только когда мы говорим недоказанные вещи.

— То есть часто, — сказал Антон, забыв, что его микрофон включён.

Ярослав посмотрел в сторону служебного окна.

Виктор откинулся в кресле.

— Покажите мне этого проверяющего.

Ярослав открыл панель Critic-а.

— Он не принимает решений и не предлагает окончательный вариант. Только проверяет основания выводов других агентов.

— Зачем?

— Чтобы двадцать уверенных ответов не превратились в одну дорогую ошибку.

— Можно отключить?

— Технически — да.

Антон в служебном чате написал: «НУ ВОТ».

Виктор продолжил:

— Отключите на время презентации.

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

На экране появилась карточка:

ПРЕДЛОЖЕНИЕ: ОТКЛЮЧИТЬ НЕЗАВИСИМУЮ ПРОВЕРКУ НА ВРЕМЯ ДЕМОНСТРАЦИИ

ОСНОВАНИЕ: СНИЖЕНИЕ ЧАСТОТЫ ПРЕРЫВАНИЙ

РИСК: ДЕМОНСТРАЦИЯ МОЖЕТ СОДЕРЖАТЬ НЕПРОВЕРЕННЫЕ ЗАЯВЛЕНИЯ

РЕКОМЕНДАЦИЯ: НЕ ПРИМЕНЯТЬ

Виктор прочитал карточку.

— Оно отклонило мою просьбу?

— Оно не имеет права отклонять, — сказал Ярослав. — Только рекомендовало.

— Очень успокаивает.

— Решение всё равно за человеком.

— И какое решение приняли вы?

Ярослав посмотрел на предупреждение.

— Оставить.

Несколько секунд Виктор молчал.

Потом сказал:

— Хорошо. Вот это оставьте. Остальное пока слишком раннее.

Антон снова включил камеру.

— Простите, что именно оставить?

— Того, кто не даёт вам продавать мне то, чего вы ещё не доказали.

Лена тихо сказала:

— Наш первый востребованный продукт — человек, который мешает продажам.

— Не человек, — поправил Антон.

— Это пока.

Разговор продолжился.

Виктор спрашивал, почему Чертог не является плагином к существующей BIM-системе, кто отвечает за ошибки и где именно остаётся человек.

Ярослав показал историю решений по дому.

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

— Красиво. Почему это не плагин?

— Потому что BIM-модель для нас — один из результатов, а не центр мира.

Виктор впервые за разговор изменил выражение лица.

— Продолжайте.

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

— То есть хотите поставить над BIM ещё один слой?

— Да.

— И кто будет отвечать за ошибку этого слоя?

Ярослав посмотрел на окно Critic, где всё ещё висело предупреждение о недостаточности доказательства для одного из требований.

— Человек.

— Тогда где автоматизация?

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

Critic не вмешался.

Ярослав воспринял это почти как поддержку.

Через два дня пришёл отказ.

Вежливый.

Подробный.

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

Ни одна формулировка не была неожиданной.

Ярослав прочитал письмо один раз и закрыл.

Антон написал:

«Ну?»

«Нет».

«Жаль».

Через минуту:

«Critic что сказал?»

Ярослав открыл внутренний тестовый чат и ради злости загрузил туда текст отказа.

Critic обработал его за несколько секунд.

«Вывод: решение контрагента рационально при текущем уровне технологической готовности. Рекомендуется не спорить с выводом, а устранить основания».

Ярослав смотрел на экран.

Потом написал Антону:

«Я начинаю его ненавидеть».

Тот ответил:

«Значит, работает».

Через несколько секунд добавил:

«Но я всё равно попробую удалить».

Critic, которому никто этого сообщения не отправлял, промолчал.

Пока.