Complete the 2.6.0 workspace milestone by adding explicit host-out export and immutable-baseline diff across the CLI, Python SDK, and MCP server. Capture a baseline archive at workspace creation, export live /workspace paths through the guest agent, and compute structured whole-workspace diffs on the host without affecting command logs or shell state. The docs, roadmap, bundled guest agent, and workspace example now reflect the new create -> sync -> diff -> export workflow. Validation: uv lock, UV_CACHE_DIR=.uv-cache make check, UV_CACHE_DIR=.uv-cache make dist-check, and a real guest-backed Firecracker smoke covering workspace create, sync push, diff, export, and delete.
49 lines
1.3 KiB
Markdown
49 lines
1.3 KiB
Markdown
# `2.6.0` Structured Export And Baseline Diff
|
|
|
|
Status: Done
|
|
|
|
## Goal
|
|
|
|
Complete the next explicit host-crossing step by letting a workspace export
|
|
files back to the host and diff itself against its immutable create-time
|
|
baseline.
|
|
|
|
## Public API Changes
|
|
|
|
- CLI:
|
|
- `pyro workspace export WORKSPACE_ID PATH --output HOST_PATH`
|
|
- `pyro workspace diff WORKSPACE_ID`
|
|
- SDK:
|
|
- `export_workspace`
|
|
- `diff_workspace`
|
|
- MCP:
|
|
- `workspace_export`
|
|
- `workspace_diff`
|
|
|
|
## Implementation Boundaries
|
|
|
|
- Capture a baseline snapshot at `workspace create`.
|
|
- `workspace diff` compares current `/workspace` against that baseline.
|
|
- `workspace export` exports files or directories only from paths under
|
|
`/workspace`.
|
|
- Keep output structured:
|
|
- unified patch text for text files
|
|
- summary entries for binary or type changes
|
|
|
|
## Non-Goals
|
|
|
|
- no named snapshots yet
|
|
- no reset yet
|
|
- no export outside `/workspace`
|
|
|
|
## Acceptance Scenarios
|
|
|
|
- seed workspace, mutate files, diff against baseline, export a file to host
|
|
- sync push content after create, then confirm diff reports the synced changes
|
|
- unchanged workspace returns an empty diff summary cleanly
|
|
|
|
## Required Repo Updates
|
|
|
|
- docs that distinguish seed, sync push, diff, and export
|
|
- example showing reproduce -> mutate -> diff -> export
|
|
- real Firecracker smoke for diff and export
|