You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
This issue tracks the progress towards the complete implementation of RFD-031.
Tasks
Phase 1: Change user-local storage path from <name>-<id> to <id>, add migration logic to merge existing per-worktree user-local directories, import existing workspace conversations into user-local, and update with_user_storage to drop the name parameter.
Phase 2: Teach FsStorageBackend / LoadBackend to load from both roots — deduplicate IDs, compute StoragePresence per conversation, resolve mtime conflicts for stream and metadata, and expose StoragePresence through LoadBackend.
Phase 3: Implement dual-write persistence — add Projection argument to PersistBackend::write, carry Projection on ConversationLock / ConversationMut, write both roots in FsStorageBackend, rework remove_stale_conversation_dirs to be per-root, and remove the stored conversation.user field.
Phase 4: Add external conversation import logic — copy workspace-only conversations to user-local on first write operation, and update jp conversation ls to display workspace-only conversations with appropriate indicators.
Phase 5: Change jp conversation edit --local toggling to copy-to-workspace / delete-from-workspace instead of the current move-between-storage-locations behavior, updating the carried projection state.
Phase 6: Update archive_conversation / unarchive_conversation to act on every root in which the conversation exists, deduplicate ls --archived, apply path-preference rule to jp conversation path and jp conversation edit (including immediate re-sync after managed editor commands), and confirm remove_conversation deletes all copies in both roots.
Phase 7: Add filesystem-specific tests for dual storage — projection on first persist, dual-write without cross-root clobber, stream-unit conflict resolution (including base_config.json-only edit), ID dedup, import on first write, and archive/unarchive across roots.
Phase 8: Update docs/architecture/ubiquitous-language.md with a "Workspace Projection" entry.
Tracking issue for RFD-031: Durable Conversation Storage with Workspace Projection.
This issue tracks the progress towards the complete implementation of RFD-031.
Tasks
<name>-<id>to<id>, add migration logic to merge existing per-worktree user-local directories, import existing workspace conversations into user-local, and updatewith_user_storageto drop thenameparameter.FsStorageBackend/LoadBackendto load from both roots — deduplicate IDs, computeStoragePresenceper conversation, resolve mtime conflicts for stream and metadata, and exposeStoragePresencethroughLoadBackend.Projectionargument toPersistBackend::write, carryProjectiononConversationLock/ConversationMut, write both roots inFsStorageBackend, reworkremove_stale_conversation_dirsto be per-root, and remove the storedconversation.userfield.jp conversation lsto display workspace-only conversations with appropriate indicators.jp conversation edit --localtoggling to copy-to-workspace / delete-from-workspace instead of the current move-between-storage-locations behavior, updating the carried projection state.archive_conversation/unarchive_conversationto act on every root in which the conversation exists, deduplicatels --archived, apply path-preference rule tojp conversation pathandjp conversation edit(including immediate re-sync after managed editor commands), and confirmremove_conversationdeletes all copies in both roots.base_config.json-only edit), ID dedup, import on first write, and archive/unarchive across roots.docs/architecture/ubiquitous-language.mdwith a "Workspace Projection" entry.