# `2.4.0` Workspace Contract Pivot Status: Done ## Goal Make the public product read as a workspace-first sandbox instead of a task-flavored alpha by replacing the `task_*` surface with `workspace_*`. ## Public API Changes - CLI: - `pyro workspace create` - `pyro workspace sync push` - `pyro workspace exec` - `pyro workspace status` - `pyro workspace logs` - `pyro workspace delete` - SDK: - `create_workspace` - `push_workspace_sync` - `exec_workspace` - `status_workspace` - `logs_workspace` - `delete_workspace` - MCP: - `workspace_create` - `workspace_sync_push` - `workspace_exec` - `workspace_status` - `workspace_logs` - `workspace_delete` Field renames: - `task_id` -> `workspace_id` - `source_path` on create -> `seed_path` - `task.json` / `tasks/` -> `workspace.json` / `workspaces/` No compatibility aliases. Remove `task_*` from the public contract in the same release. ## Implementation Boundaries - Keep current behavior intact under the new names: - persistent workspace creation - create-time seed - sync push - exec/status/logs/delete - Rename public result payloads and CLI help text to workspace language. - Move on-disk persisted records to `workspaces/` and update rehydration logic accordingly. - Update examples, docs, and tests to stop using task terminology. ## Non-Goals - no shell sessions yet - no export, diff, services, snapshots, reset, or secrets in this release - no attempt to preserve old CLI/SDK/MCP names ## Acceptance Scenarios - create a seeded workspace, sync host changes into it, exec inside it, inspect status/logs, then delete it - the same flow works from CLI, SDK, and MCP with only workspace-first names - one-shot `pyro run` remains unchanged ## Required Repo Updates - replace task language in README/install/first-run/public contract/help - update runnable examples to use `workspace_*` - add one real Firecracker smoke for create -> sync push -> exec -> delete