ADR: Python и C++ как first-class runtime surfaces
1. Статус и назначение
Статус: принято.
Этот ADR теперь фиксирует только верхнеуровневое архитектурное решение. Подробное описание capability вынесено в function-level набор:
Такой split сделан намеренно, потому что тема C++ / Python local / remote
затрагивает не только архитектурный выбор, но и product scope, service
contracts, release order и parity review.
2. Контекст
В проекте уже существует canonical implementation на C++:
-
domain model;
-
lifecycle
Draft/Published; -
deterministic render.
При этом целевая product model предполагает:
-
first-class local access из
C++; -
first-class local access из
Python; -
отдельную remote boundary через
Prompt Server; -
future remote clients как для
C++, так и дляPython.
3. Принятое решение
Принято следующее:
-
C++ engineостаётся canonical implementation; -
source of truth живёт в engine/domain semantics, а не в language wrapper;
-
C++ localиPython localрассматриваются как first-class local surfaces; -
C++ remoteиPython remoteрассматриваются как first-class remote surfaces; -
parity оценивается по capability и semantics внутри boundary;
-
различия между
localиremoteдопускаются как intentional boundary difference.
4. Почему это лучше альтернатив
Этот подход лучше, чем:
-
делать
Pythonтолько thin client к server; -
делать
Pythonглавным источником API-истины; -
держать всю тему только в одном архитектурном
ADR.
Причина:
-
сохраняется canonical роль
C++; -
Pythonне становится вторичным; -
Prompt Serverне деформируется под FFI convenience; -
detailed contracts живут в function-level pipeline, где им и место.
5. Последствия
Положительные:
-
архитектурный уровень стал короче и чище;
-
capability описана детальнее в отдельном наборе документов;
-
легче проводить release review и parity review.
Компромиссы:
-
нужно поддерживать согласованность между архитектурным уровнем и function docs;
-
planned status должен оставаться честным до появления реализации.
6. Связанные документы
Отрицательные:
-
выше стоимость API design;
-
выше риск частичного расхождения между wrappers, если не держать discipline.
8. Что это означает practically
На ближайшую перспективу это означает:
-
Prompt Serverdocs должны говорить не только про Python client, но и про dual-language remote access; -
отдельный future document должен описать
local bindings strategy; -
parity нужно валидировать по capability matrix, а не только по названию методов.