Repository navigation
Back up and restore hosted channels #178
Description
Provide a documented, exercised per-channel backup and restore path before relying on hosted channels for permanent work. ace backup currently snapshots local SQLite channels; a hosted channel's pi state lives in its cell.
Acceptance
- Choose and document the recovery mechanism supported by the deployed runtime, including provider-native Durable Object backup/point-in-time recovery where appropriate. Define the recovery scope, retention, consistency and operator prerequisites; do not require a bespoke export API when a provider-native mechanism meets the need.
- Back up or establish a recovery point for an existing deployed channel, then exercise restoration in an isolated destination or other verified recovery procedure that preserves the source. Verify identity, metadata, chats, messages, child ownership, tool results, usage, model configuration and unfinished/aborted run state.
- Explain identity/location handling and prevent restored copies from accidentally executing the same channel concurrently. Check interrupted/failed recovery preserves available source data and provides a clear continuation path.
- Keep project files and lane worktrees explicitly separate from channel-state backup. Record the workspace/path information required for recovery without claiming that backing up the cell saves the checkout.
- State which recovery/portability needs, if any, require pi state export/import beyond provider-native recovery. Reuse the bounded same-version CLI movement representation from Move channels between local and hosted with the same workspace #181 where appropriate; broader portable recovery stays here. Do not add a second authoritative channel store.
- Resume real model/tool work after the exercised restoration. Document operator commands, verification steps and limits. Every stored-format change has a versioned migration and a check against an existing-channel backup.
Keep pi-durable authoritative for messages, runs and chats. The acceptance target is a recovery path that operators have actually exercised against real channel state, not the existence of an untested provider feature or a particular custom implementation.
Priority 3 under #13. Pilot #176 provides the first deployed acceptance evidence. The initial idle local ↔ hosted CLI roundtrip in #181 is separate work and has no automatic backup requirement or dependency on this issue, by the user's explicit choice. This issue retains the future backup/restore work; execution-host handoff remains #49.
Activity
iamnbutler commentedon Oct 15, 2026
Context from code; the acceptance below is unchanged and none of it is done yet. This issue is now tracked by #58, since #13 is closed.
ace backuprefuses hosted channels ("Hosted channel backups must be taken on the hosting service",apps/host/src/backup.ts), anddocs/data.mdsays the same.ace backupcan then snapshot. It isn't a backup procedure, and no one has exercised it as one.computerecord, so their pi state lives only in the channel's Durable Object. Their files are covered separately by the compute checkpoint (Preserve and recover cloud workspace files beyond the pilot checkpoint limit #413), which matches this issue's split between channel state and workspace files.POST /channels/:id/transfer(freeze/export) already produces the verified snapshot format, so an export-based backup could reuse it if provider-native Durable Object recovery doesn't meet the acceptance.Given cloud compute, this now matters for any team using the beta for real work.
iamnbutler commentedon Oct 15, 2026
Decision (October 15): option B. Backups are export-based, so
ace backupworks for hosted and cloud compute channels, reusing the transfer snapshot format. Cloudflare's own Durable Object recovery may come later as a safety net. Implementation picked up by the issue watcher.iamnbutler commentedon Oct 15, 2026
#435 adds
ace backupfor hosted and cloud compute channels: a newbackuptransfer action reads one consistent pi snapshot without freezing the channel. It also addsace restore, which imports any backup as a new local channel with a new ID and lane prefix, and it was exercised against local wrangler dev with real model runs. The deployedservices/channelandservices/computeneed redeploying for the new action; workspace files remain the compute checkpoint's job (#413).