Repository navigation
feat(runtime): bootstrap revision configuration from durable bundles - #3515
Conversation
Signed-off-by: Jet Chiang <pokyuen.jetchiang-ext@solo.io>
Signed-off-by: Jet Chiang <pokyuen.jetchiang-ext@solo.io>
Signed-off-by: Jet Chiang <pokyuen.jetchiang-ext@solo.io>
This comment has been minimized.
This comment has been minimized.
Signed-off-by: Jet Chiang <pokyuen.jetchiang-ext@solo.io>
Signed-off-by: Jet Chiang <pokyuen.jetchiang-ext@solo.io>
Signed-off-by: Jet Chiang <pokyuen.jetchiang-ext@solo.io>
|
Addressed all the comments in e011377 |
This comment has been minimized.
This comment has been minimized.
| // bundle for the active desired source. Identical retries renew a two-minute lease; | ||
| // conflicting bytes and deleting revisions fail. The lease expires naturally so | ||
| // abandoned or ambiguous compute requests cannot race immediate collection. | ||
| func (c *Client) PublishBootstrapRevision(ctx context.Context, revision RuntimeRevision, bundle *runtimev1.BootstrapBundle) error { |
There was a problem hiding this comment.
Do we need preparing_until at all? As far as I can tell it exists because the revision row and bundle are now written before CreateActorTemplate, which opens a window where GC can collect a revision whose template is still being created. But the service already returns Unavailable("binding is pending") until the template UID is recorded, and both loaders retry on Unavailable. If the bundle were inserted inside RecordRuntimeRevision (same transaction that already writes runtime_revision, agent_revision, and the UID), I think we could drop PublishBootstrapRevision, the lease, the GC "unpublished" branch, and the COALESCE(NULLIF(...)) UID guard. The only change I see is mapping a missing binding to Unavailable instead of PermissionDenied in Get. Along the same lines, GetBootstrapBinding + GetBootstrapBundle could probably be one query. Is there a case I'm missing that requires the row to exist before the template?
Comment left by Claude on behalf of @EItanya
There was a problem hiding this comment.
Agree with this suggestion, I've simplified that and also merged GetBootstrapBinding and GetBootstrapBundle
Signed-off-by: Jet Chiang <pokyuen.jetchiang-ext@solo.io>
Signed-off-by: Eitan Yarmush <eitan.yarmush@solo.io>
Main added an exact assertion on the generated Substrate preview list. Runtime bootstrap also enables GoldenEgressPolicy, so update the expectation and document both gates for Helm users. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Signed-off-by: Eitan Yarmush <eitan.yarmush@solo.io>
This comment has been minimized.
This comment has been minimized.
MaterializeFromEnv was replaced upstream in kagent-dev#3515. Signed-off-by: Dmytro Rashko <dimetron@me.com>
kagent 1.0.0-rc3 no longer passes KAGENT_CONFIG_JSON and KAGENT_AGENT_CARD_JSON to a runtime (kagent-dev/kagent#3515). It passes a descriptor in KAGENT_BOOTSTRAP_JSON, and the runtime fetches the bundle from the controller and keeps it on the durable /data volume. Without this, the harness exits at start, Substrate's wakeup probe on :8081 never answers, and the judges' golden snapshots fail. - Load the config and card with kagent's bootstrap package, as its own Claude harness does. - Give /data to the runtime user in the image, as kagent's images do. - The config test loads a bundle built with kagent's NewBundle. Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
Summary
Closes #3468. Deliver compiled config and Agent Cards to runtimes through immutable Postgres-backed bundles instead of ActorTemplate env vars. This removes Substrate’s per-value env limit for config, with a combined bundle payload limit of 256 KiB (can be increased as needed in the future).
Golden runtimes fetch their bundle through an actor-authenticated bootstrap RPC, verify it, and save it durably before readiness. Sessions and forks inherit the pinned configuration; restarts and volume restores load it without contacting bootstrap (cached in durable dir).
Changes
Requires bootstrap-capable runtime images; there is no legacy environment-payload fallback.