Files
invest-harness/designDocument/contracts/domain-model.md
T

3.9 KiB
Raw Blame History

Модель данных

Типы в этой таблице определяют семантику 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.

Схемы

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 означает, что возможность недоступна; поле не может быть выведено из названия пакета.