Browsing shared projects

It is desirable to have a "projects shared with me" virtual directory in FUSE and WebDAV. There is an API endpoint for this, but it's not obvious how to present it as a filesystem because the entries' names are not unique.

Any solution would need to support the following behavior:
  1. A project P1, named "new project", is created by user U1 and shared with user U2.
  2. User U2 opens the "shared projects" virtual directory in WebDAV or FUSE, finds "new project" directory in the listing, and opens it.
  3. A second project P2, also called "new project", is shared with user U2.
  4. User U2 saves a new collection C1 in the directory they opened in step 2.
  5. The new collection C1 is in project P1 -- not P2.
  6. User U2 opens the "shared projects" virtual directory and discovers that there are now two shared projects named "new project".
  7. User U2 opens the P2 directory.
  8. User U1 renames P1 to "project formerly known as new project".
  9. User U2 saves a new collection C2 in the directory they opened in step 7.
  10. The new collection C2 is in project P2 -- not P1.
Proposal: Include project UUID in every entry.
  • Project P1 appears in "shared projects" with the name "new project--zzzzz-j7d0g-pppppppppp11111"
  • Behavior is very predictable
  • Directory listings and file paths are ugly
  • "name--uuid" has a slight advantage that it doesn't require shell quoting except when the original name already requires shell quoting (unlike "name (uuid)")

Rejected alternatives:

Include project UUID only when name conflicts exist.
  • Project P1 appears as "new project" at first
  • After step 3, P1 changes its name to "new project (zzzzz-j7d0g-pppppppppp11111)"
  • In step 4, U2's "save" operation fails because the "new project" directory no longer exists
Include project UUID only when name conflicts exist, and even then, not for the oldest project
  • step 4 fails depending on whether P2 happened to exist before step 1
Include project UUID only when name conflicts exist, and even then, not for the project that first became visible to U1
  • Expensive to compute
  • Feels unpredictable for users
  • P2 changes its name in the listing during step 8, and step 9 fails.