mirror of
https://github.com/agent-substrate/substrate.git
synced 2026-11-10 10:13:50 +08:00
Part of #791 (PR 2 of the [implementation plan](https://github.com/agent-substrate/substrate/issues/791#issuecomment-5226674097)). Adds `LocalSnapshotInfo.content_scope` and records the template's `onPause` scope in `FinalizePausedStep`. A later suspend of a PAUSED actor needs to know what the local pause snapshot actually captured, to validate the requested scope conversion *before* the actor leaves PAUSED — even if the template's `onPause` is edited while the actor sits paused. The snapshot's on-node manifest (#810) remains the authoritative record at upload time; this control-plane copy is for early validation only. - `ateapipb` proto: `SnapshotContentScope content_scope = 3` on `LocalSnapshotInfo` + regen - `FinalizePausedStep`: sets `ContentScope` from `SnapshotsConfig.OnPause` when recording `LocalSnapshotInfo` - Unset for actors paused before this field existed (consumers fall back to the template's `onPause`) Tests: - New `TestFinalizePausedStep_RecordsContentScope` (OnPause Data/Full/unset→Full, through a real store with a worker) - `TestFinalizePausedStep_WorkerGone` now seeds the template the step reads - `TestPauseActor`: expected `ContentScope` added — which exposed a latent test bug: the custom `snapshot_prefix` comparer was asymmetric (`strings.HasPrefix(y, x)` only); go-cmp requires Comparers to be symmetric and probes them with swapped arguments, and the new field shifted the comparison order so the probe finally landed on it. Fixed by matching the prefix in both directions. Verified end-to-end on a GKE deployment: a paused actor's Valkey record now carries `"contentScope": "SNAPSHOT_CONTENT_SCOPE_FULL"` in `localSnapshotInfo`. `go test -race ./cmd/ateapi/...`, `go vet`, `gofmt` clean. Independent of #810; no dependencies. 🤖 Generated with [Claude Code](https://claude.com/claude-code)