Tasks, deployments, runs, VMs
Four nouns, one ownership chain. There is no "project" layer between a tenant and a task.
tenant → task → deployment → run → (VM)
Task
A standing name that lives forever. task:create reserves the slug and gives it a stable id. Nothing is built or run yet.
Deployment
Immutable and content-addressed. task:deploy uploads the source. The platform builds it once and dedups on the content hash, so the same bytes deployed twice reuse the first build.
Run
One job, started from one deployment, in its own MicroVM or a warm one of yours. task:run returns an id at once, and the VM boots behind it.
A VM is not a fourth thing you create. It is what a run boots into. Whether it is torn down after the run or kept warm is the residency axis, on The seven axes.
Why deployments are separate from tasks
A task is a name you keep. A deployment is one verified build under that name. The same source always resolves to the same deployment, so repeating task:deploy after a network error never builds a second copy.
Why runs are separate from deployments
One deployment run 500 times a day is 500 runs and one deployment. You pay the build once and each run every time. So task:delete reports both counts, and the entitlement gate asks different questions at deploy time and at run time.