Skip to content

RFD-031: Durable Conversation Storage with Workspace Projection #733

@JeanMertz

Description

@JeanMertz

Tracking issue for RFD-031: Durable Conversation Storage with Workspace Projection.

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.

Metadata

Metadata

Assignees

No one assigned

    Labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions