Implement the 2.8.0 workspace milestone with named snapshots and full-sandbox reset across the CLI, Python SDK, and MCP server. Persist the immutable baseline plus named snapshot archives under each workspace, add workspace reset metadata, and make reset recreate the sandbox while clearing command history, shells, and services without changing the workspace identity or diff baseline. Refresh the 2.8.0 docs, roadmap, and Python example around reset-over-repair, then validate with uv lock, UV_CACHE_DIR=.uv-cache make check, UV_CACHE_DIR=.uv-cache make dist-check, and a real guest-backed create/snapshot/reset/diff smoke test outside the sandbox.
1.3 KiB
1.3 KiB
2.8.0 Named Snapshots And Reset
Status: Done
Goal
Turn reset into a first-class workflow primitive and add explicit named snapshots, not only the implicit create-time baseline.
Public API Changes
- CLI:
pyro workspace snapshot createpyro workspace snapshot listpyro workspace snapshot deletepyro workspace reset WORKSPACE_ID [--snapshot SNAPSHOT_ID|baseline]
- SDK/MCP mirrors
Implementation Boundaries
- Baseline snapshot is created automatically at workspace creation.
- Named snapshots are explicit user-created checkpoints.
workspace resetrecreates the full sandbox, not just/workspace.- Reset may target either the baseline or a named snapshot.
Non-Goals
- no secrets in this milestone
- no live host-sharing or mount semantics
- no branching/merge workflow on snapshots
Acceptance Scenarios
- mutate workspace, create named snapshot, mutate again, reset to snapshot, confirm state restoration
- mutate service and
/tmpstate, reset to baseline, confirm full sandbox recreation - diff after reset is clean when expected
Required Repo Updates
- docs that teach reset over repair explicitly
- example showing baseline reset and named snapshot reset
- real Firecracker smoke for snapshot create -> mutate -> reset