Статус: Draft Дата: 2026-04-29 Роль: source of truth для scenarios, intents, plans, operations, gates, interventions, PlanPatch и operation history.
1. Назначение
control-plane-service отвечает на вопрос "что мы хотим сделать, какой план построен и как идет операция".
Сервис принимает intent пользователя, выбирает scenario, строит capability-aware DAG plan, запускает operation, управляет gates/interventions/patches и отдает UI полную историю выполнения как GitLab-like pipeline view.
Temporal используется как durable runtime, но не является source of truth. Все продуктовые состояния живут в PostgreSQL control_plane_db.
2. Граница ответственности
Владеет:
- scenario registry;
- ScenarioPack, Scenario, PlanTemplate, JobTemplate;
- Intent;
- CapabilityRequirement;
- ResourceBinding;
- Plan и PlanNode;
- Operation и OperationNodeRun;
- Gate;
- Intervention;
- PlanPatch;
- artifact/evidence metadata;
- operation timeline;
- local projections из resource-catalog.
Не владеет:
- canonical resource metadata;
- provided capabilities как catalog fact;
- raw execution attempts;
- runner leases;
- secret values;
- artifact blobs;
- audit trail как independent compliance store.
3. Модули
1 2 3 4 5 6 7 8 9 | |
Подробно: Modules.
4. Основной flow
flowchart TB
UI[Web App] --> API[api]
API --> Intent[Intent]
Intent --> Planner[planner]
Registry[scenario-registry] --> Planner
Projection[catalog projections] --> Resolver[capability-resolver]
Planner --> Resolver
Resolver --> Plan[Plan DAG]
Plan --> Operation[operation-manager]
Operation --> Workflow[workflow-worker / Temporal]
Workflow --> Execution[execution-plane-service]
Execution --> Result[ExecutionResult]
Result --> Operation
Operation --> Timeline[operation timeline]
Operation --> Catalog[resource-catalog-service final updates]
5. Product API requirement
UI должен видеть:
- список operations;
- history по resource;
- DAG plan;
- stages/jobs statuses;
- attempts/retries/duration;
- logs refs;
- artifacts;
- evidence;
- gates/approvals;
- interventions;
- AI/agent PlanPatch history в будущем.
UI не должен читать Temporal UI/history напрямую.
6. Инварианты
- Running plan нельзя тихо менять: только через PlanPatch.
- Job считается successful только после подтверждения output contract evidence.
- Scenario registry не выносится в отдельный микросервис.
- Temporal не является domain source of truth.
- Kafka не является workflow engine.
- Operation history audit-friendly: факты append-only.
- Resource catalog updates выполняются только через explicit final commands.
- Local catalog projections ускоряют planning, но command boundary требует свежей проверки.