mirror of
https://github.com/agent-substrate/substrate.git
synced 2026-11-10 10:13:50 +08:00
Part of #1131. The substrate ActorTemplate's Volume union (#824, #1026) predates the systemInfo volume source (#803, trustBundle in #941): it only had durableDir and externalVolumeTemplate, so a template created through the substrate API could not carry SystemInfo projections. This PR adds: - `SystemInfoVolumeSource` with the `actorMetadata` and `trustBundle` data sources, mirrored from the CRD types in the plain-field union shape (#962) that `Volume` already uses ("SystemInfo" joins the `type` discriminator). - Declarative validation tags (#1215) mirroring the CRD's kubebuilder rules: the SystemInfoDataSource one-of union, list bounds, string lengths, and unique projected fields, with generated validators and tests in controlapi. - Store contract round-trip coverage: the shared fixture now carries a systemInfo volume through both the redis and postgres backends. Not in this PR (tracked in #1131): the CRD's cross-item CEL rules (duplicate paths across data sources, at most one actorMetadata entry) and the clean-relative-path checks, which have no declarative tag equivalent and belong in the controlapi create/update handlers when ActorTemplate serving lands (#477), and conversion of the substrate resource in the actor-start path.