Mirror systemInfo volumes into the ActorTemplate substrate resource - #1134
Merged
Zoe Zhao (zoez7) merged 2 commits intoAug 26, 2026
Merged
Conversation
Max Thompson (thompsonmax)
force-pushed
the
si-substrate-resource
branch
from
August 26, 2026 16:13
a308aa8 to
86ff111
Compare
The substrate ActorTemplate (agent-substrate#824, aligned with the CRD in agent-substrate#1026) predates the systemInfo volume source (agent-substrate#803, trustBundle in agent-substrate#941): its Volume union had only durableDir and externalVolumeTemplate. Add systemInfo with the actorMetadata and trustBundle data sources, following the plain-field union shape (agent-substrate#962), and extend the store contract fixture so round-trips cover it. The resource is schema+storage only today (no controlapi handlers), so the CRD's CEL validation and defaulting move to the create/update path when serving lands.
Max Thompson (thompsonmax)
force-pushed
the
si-substrate-resource
branch
from
August 26, 2026 19:45
86ff111 to
0657203
Compare
Max Thompson (thompsonmax)
marked this pull request as ready for review
August 26, 2026 20:18
Max Thompson (thompsonmax)
requested review from
Haven Xia (HavenXia),
Taahir Ahmed (ahmedtd) and
Zoe Zhao (zoez7)
August 26, 2026 20:18
Zoe Zhao (zoez7)
previously approved these changes
Aug 26, 2026
Mirror the CRD's kubebuilder rules onto the new ateapi.proto fields as +k8s: declarative validation tags (agent-substrate#1215): the SystemInfoDataSource one-of union, list bounds, string lengths, and unique projected fields. The cross-item CEL rules (duplicate paths across data sources, at most one actorMetadata entry) have no tag equivalent and stay with the controlapi handlers (agent-substrate#1131). CreateActorTemplateRequest.actor_template, ActorTemplate.volumes, and Volume.system_info gain optionality tags because validation-gen's lint requires them on every field on the path to a validated field; the rest of ActorTemplate stays untagged for now.
Zoe Zhao (zoez7)
approved these changes
Aug 26, 2026
Zoe Zhao (zoez7)
left a comment
Collaborator
There was a problem hiding this comment.
Approved. waiting for tests to pass.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
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:
SystemInfoVolumeSourcewith theactorMetadataandtrustBundledata sources, mirrored from the CRD types in the plain-field union shape (Remove oneofs from ate-apiserver API #962) thatVolumealready uses ("SystemInfo" joins thetypediscriminator).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.