Статус: Draft Дата: 2026-04-29
1. Runtime modules
1 2 3 4 5 | |
Все модули используют одну БД resource_catalog_db.
2. api
Назначение:
- обслуживает UI и внешние clients;
- предоставляет resource/topology/capability queries;
- принимает catalog-level commands;
- принимает final resource updates от
control-plane-service; - возвращает read models для графов.
Основные группы handlers:
- resources;
- resource types;
- topology;
- relationships;
- desired/observed state;
- capabilities;
- health;
- graph queries.
Правила:
- API не запускает операции напрямую.
- Для long-running action API должен возвращать ссылку на
control-plane-serviceaction/intent flow. - Команды update должны поддерживать
expected_version.
3. worker
Назначение:
- потребляет Kafka events;
- применяет projection updates;
- поддерживает eventual consistency read models;
- публикует catalog domain events через outbox.
Потребляет:
operation.completed;operation.cancelled;evidence.recorded;artifact.created;- future integration events from observers/agents.
Публикует:
resource.created;resource.updated;resource.deleted;resource.health_changed;capability.definition.published;capability.provided;
Правила:
- worker не должен вызывать runners.
- worker должен быть idempotent по
event_id. - worker не должен перезаписывать более свежую resource version.
4. observer
Назначение:
- получает observed state из внешних control surfaces;
- обновляет
resource_observed_state; - создает health observations.
Источники:
- Kubernetes API;
- cluster agents;
- cloud APIs;
- service discovery;
- metrics/health endpoints.
Правила:
- observer не меняет desired state;
- observer не делает remediation;
- observer не хранит secrets, только использует refs через безопасный adapter;
- observer records должны иметь source и observed_at.
5. projector
Назначение:
- строит read models для UI;
- агрегирует resource graph, topology graph, capability graph;
- поддерживает resource operation summary projection из событий control-plane.
Read models:
1 2 3 4 5 | |
Правила:
- projector можно пересобрать из canonical tables и events;
- read model не является source of truth;
- UI должен читать сложные графы из read model, а не собирать их цепочкой запросов.