The executor runs in an isolated MicroVM with a lifetime ≤8 hours per generation. Each reset_executor or generation timeout triggers a fresh lifecyle cycle.
/dev/vdc/servitors/{dubsar_id}/lifecycle/
├── setup.py # Runs once on each new generation
└── teardown.py # Runs before executor shuts down
Runs on new generation boot. The platform mirrors the lifecycle folder from S3, then executes setup.py. This is where you restore repo caches, shared files, and other durable state into /tmp/workspace.
setup.py cannot redeem vault credentials because the orchestrator is not available during lifecycle. Private git pulls/clones must happen on first wake.Runs before executor shutdown. Push caches back to Library so the next generation starts fast.
When debugging lifecycle: reset_executor then shell with no_setup=true. Fetches the lifecycle bundle but skips setup.py.
/tmp/workspace survives across shell calls and suspension within the same generation (≤8h). For artifacts that must survive reset_executor, use the House Library.
The standard approach for private git repos: push the full working tree to Library on teardown, restore on setup, then do a fast git pull on first wake with a fresh PAT. See repo-lifecycle-pattern.md in the shared Library for full details.