## Thinking Path
- #20100 proposed sending only the changed files on per-turn follow-ups,
with the repository seed held inside Daytona in a snapshot or a volume.
It asked for one measured experiment before building.
- Snapshot and volume operations were blocked by our Daytona key's
permissions. A restricted key with those permissions now exists, so the
experiment has run.
- This PR records the numbers and the decision in the design doc.
## Linked Issues or Issue Description
Refs #20100
**What happened?**
The #20100 design's seed-location choice was unmeasured: snapshot build
time and volume read speed were both open questions.
**Steps to reproduce**
1. Run the SDK timing of direct upload, volume extract, and snapshot
build and create on the paperclip seed (58.7 MB gzip) in Daytona `us`, 2
vCPU.
**Expected behavior**
The design doc states the measured winner, the per-turn saving, the
one-time cost, and the work needed to build it.
## What Changed
- `doc/plans/2026-11-08-incremental-per-turn-workspace-upload.md`:
- The status now reads: measured; snapshot chosen; not built.
- New "Experiment results" table:
- direct upload: 6.4 s per turn;
- volume: 6.8 s per turn, which rules it out;
- snapshot: about 2–3.5 s per turn, after a 177 s build per seed
generation.
- Findings: fork is unsupported, compression is exhausted, and the
snapshot builder runs as `daytona` and does not extract archives.
- New "Work to build the snapshot seed" list: lifecycle, sandbox
creation, verification and fallback, expiry and cleanup, and rebuild
policy.
## Verification
Docs only. Every Daytona resource the experiment created was deleted,
and an account-wide listing confirmed none remained.
## Risks
None at runtime.
## Model Used
Claude Opus 5.5 (`claude-opus-5-5`, Anthropic), 1M context window, tool
use and code execution, via Claude Code.
## Checklist
- [x] I have included a thinking path that traces from project context
to this change
- [x] I have specified the model used (with version and capability
details)
- [x] I have checked ROADMAP.md and confirmed this PR does not duplicate
planned core work
- [x] I have searched GitHub for duplicate or related PRs and linked
them above
- [x] I have either (a) linked existing issues with `Fixes: #` / `Closes
#` / `Refs #` OR (b) described the issue in-PR following the relevant
issue template
- [x] I have not referenced internal/instance-local Paperclip issues or
links (only public GitHub `#NNN` / `github.com/paperclipai/paperclip`
URLs)
- [x] My branch name describes the change (e.g. `docs/...`, `fix/...`)
and contains no internal Paperclip ticket id or instance-derived details
- [x] I have run tests locally and they pass
- [x] I have added or updated tests where applicable
- [x] I have updated relevant documentation to reflect my changes
- [x] I have considered and documented any risks above
- [ ] All Paperclip CI gates are green
- [ ] Greptile is 5/5 with no open P2s, recommendations, or follow-ups
- [x] I will address all Greptile and reviewer comments before
requesting merge
🤖 Generated with [Claude Code](https://claude.com/claude-code)
---------
Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>