Добавить дизайн Invest Harness и контракты платформы
This commit is contained in:
1 parent
5d31a39aae
commit
2af6dd78ba
21 files changed
+1322
-2
No files matched your search
@@ -0,0 +1,44 @@
|
||||
# Модель данных
|
||||
|
||||
Типы в этой таблице определяют семантику API. JSON Schema ниже задают машиночитаемую основу контракта; дополнительные межресурсные проверки выполняются сервисами.
|
||||
|
||||
| Сущность | Ключевые поля | Владелец |
|
||||
|---|---|---|
|
||||
| Tenant | id, name, policyRevision | Platform API |
|
||||
| Membership | tenantId, userId, roles | Identity / Platform API |
|
||||
| Package | id, tenantId, kind, name, visibility, ownerId | Catalog |
|
||||
| PackageVersion | id, packageId, version, manifest, artifactDigest | Catalog |
|
||||
| VersionPolicy | versionId, status, reason, revision | Catalog |
|
||||
| Agent | id, tenantId, ownerId, name, currentRevision | Platform API |
|
||||
| AgentRevision | id, agentId, revision, templateVersionId, config, connections, schemaDigest | Platform API |
|
||||
| Connection | id, tenantId, provider, scopes, encryptedSecretRef | Secrets / Platform API |
|
||||
| Run | id, tenantId, agentRevisionId, status, specDigest, parentRunId | Platform API |
|
||||
| Attempt | id, runId, runnerId, leaseEpoch, leaseUntil, status | Dispatcher |
|
||||
| RunnerPool | id, tenantId, trustPolicy, quotas | Dispatcher |
|
||||
| Runner | id, poolId, capabilities, credentialStatus, lastSeenAt | Dispatcher |
|
||||
| Artifact | id, runId, attemptId, objectKey, digest, sizeBytes, mediaType | Platform API |
|
||||
| Schedule | id, agentId, cron, timezone, nextRunAt, overlapPolicy | Dispatcher |
|
||||
| Outbox | id, aggregateId, eventType, payload, deliveredAt | Пишущий сервис |
|
||||
|
||||
## Инварианты
|
||||
|
||||
- Между БД нет внешних ключей: идентификаторы проверяются API. Каждый сервис владеет своими транзакциями и outbox.
|
||||
- Run ссылается на immutable AgentRevision и ExecutionSpec; повторная проверка прав не изменяет их содержимое.
|
||||
- Published PackageVersion не перезаписывается. Политика блокировки хранится отдельно.
|
||||
- Попытка имеет только одного текущего владельца lease; epoch монотонно растёт при новом назначении.
|
||||
- Terminal report и смена состояния сохраняются одной транзакцией вместе с событием outbox.
|
||||
- Resource ID не является доказательством доступа. Tenant scope проверяется независимо.
|
||||
- ConnectionRef никогда не содержит значение секрета.
|
||||
- Artifact считается готовым после проверки объекта и digest, а не после выдачи upload URL.
|
||||
|
||||
## Схемы
|
||||
|
||||
- [Манифест пакета](package-manifest.schema.json) — общий envelope четырёх видов пакетов.
|
||||
- [ExecutionSpec](execution-spec.schema.json) — конкретный состав запуска.
|
||||
- [Событие](run-event.schema.json) — события исполнителя.
|
||||
- [Пример manifest](examples/template-manifest.json).
|
||||
- [Пример ExecutionSpec](examples/execution-spec.json).
|
||||
|
||||
Id — opaque string. Version — SemVer строка; разрешение диапазонов выполняет resolver до фиксации ExecutionSpec. Digest — SHA-256. Timestamps — RFC3339 UTC. UUID не навязывается публичным контрактом.
|
||||
|
||||
Package manifest с kind=template обязан указать harnessVersionId, configSchemaRef и зависимости. Harness обязан указать entrypoint и executionKind. Plugin и skill указывают совместимость supportedHarnesses. Отсутствующая optional capability означает, что возможность недоступна; поле не может быть выведено из названия пакета.
|
||||
Reference in new issue
Block a user