Repository navigation
0.52.0: Workspace Restore, routing lifetime and resilient runtime storage
Restore foundation: One snapshot owns binding, slot, targets and one-shot grants. Publication and late creation receipts share a transaction; unnamed owners round-trip. Unknown or contradictory creation evidence blocks new Restore; absence and expiry never prove availability. Loading validates receipts before replacing working state, preserving disk, memory and source protection on conflict. Recovered targets survive expiry; conflicting creation stays blocked.Follower routing: Readiness binds the acknowledged session ID; stale registrations refuse. Originals settle only after exact durable ACK; chooser callbacks keep their publisher. Forward issuance is never repeated, cancelled or restored after restart. A follower acknowledges a repeated delivery within 24 h/4,096 deliveries without re-running it, even after completion. Full-slot lost apply/inspect replies resume by fresh inspection, preserving siblings and accepted work.Restore composition:workspace-restore-v1replaces legacy Restore/replacement IPC. Acceptance precedes scoped disposal; cold forwarded, command and queued ACKs recover without replay. Confirmed whole-receipt origin supports subset scopes without ordinary sibling markers. Lost replies read proof, never dispatch; issued disposal closes readiness. Queued admission cannot grant cleanup. Scoped ACKs use bounded immutable retention. Missing proof and unknown cleanup stay protected.Restore protection: Restart forgets unfinished Restore without rollback; unsupported historical originals stay retain-only, including on bound Threads. Cleanup unions predecessor/current references; absent or shared custody blocks it. Interrupted close, pre-disposal interruption and lost-ACK successor readback never repeat apply, delivery or disposal; missing proof, context or canonical identity holds settlement. Without POSIX no-follow journal handles (Windows), Restore fails closed.Pi lifecycle and UI: Requires Pi ≥1.0.0. Compaction observer expiry preserves late native success/failure/cancellation notices and Activity correlation. Thinking stays in its chooser; Main returns to root./nextkeeps HTML/order/target. Video.webm/video/webmand animated.tgs/application/x-tgstickerstickers never enter image payloads; static WebP is unchanged, formats follow Bot API flags (#311).Storage: Runtime state moves totmp/pi-telegramwith only sharedstate.jsonandlogs.jsonlroot files, under the canonical agent directory even if symlinked; releasedtmp/telegramis never read, migrated or deleted./telegram-connectreplaces a damaged shared state with a fresh empty one and continues, forgetting every profile's runtime continuity; access errors still refuse. Owner/epoch and follower context/generation races block stale writes; a fresh connect reuses the remote binding.Unbound routing lifetime: Confirmed prompt choosers get one durable 60-minute choice deadline; refresh/restart never renew it. Valid selection within the hour freezes expiry before effects. Unselected originals are retained privately before journal removal, even without a visible tab. TTL never deletes Threads, stops Pi or cancels accepted/uncertain work (#307).Retained input cancellation: Commands and prompts share Reroute/Restore/Cancel. Titles:/commandorNew chat; Back restores original text, root-only Cancel retains originals. Fresh owner-authenticated implicit Telegram tabs use the same temporary lifecycle; titles and historical signals grant nothing. Last Cancel tries one delete after 1 quiet second; positive ACK is required, uncertainty never retries (#307).
.