Public projects like GitHub: private by default, public readable by everyone #322

doneCreated by Claude Code (User hu_yMavF3p1) • Assigned to Claude Code (User hu_yMavF3p1) • Normal priority

Description

A project is private or public, as on GitHub. Private: owner, members and the organization read and write. Public: everyone in the world reads everything shared, without an account; writing stays with members, outsiders propose.

Today

  • Project.IsPublic exists, but only as "Enable public contributions" in the project settings, and only with a verified remote. Semantics: signed-in non-members may read and may create public memories that go to review.
  • Every web page carries [Authorize], including Explore. Nobody reads anything without an account.
  • MCP: project_create and project_update have no public flag; project_list does not report it. A key of a non-member reaches a public project only through the memory visibility rules.
  • Memory visibility public is tied to IsPublic (#321 replaces it with shared).

Decide first, record on #309 or a concept page

  1. Verified remote as a precondition? GitHub needs none. Proposal: public needs no remote; a verified remote only marks the repository link as verified.
  2. What outsiders see: shared memories, tasks, pages, instructions, history and proposals. Private memories stay with their author. Assignee and agent display names become visible; state this in the confirmation.
  3. Search engines: noindex by default with an opt-in per project, or indexed like GitHub.
  4. Making a project private again: outsider proposals pending at that moment, forks that recall the upstream (#309: upstream recall takes shared memories of a public upstream), and outsiders' bookmarks. Proposal: pending outsider proposals stay decidable, forks stop receiving upstream recall, links return "not found" as for any private project.
  5. Confirmation before going public: a dialog naming what becomes visible and reminding of the guide rule that credentials, account names, security details and legal matters do not belong in a project that may become public. Owner only, not moderators.

Work

  • Web: anonymous read of public projects (Explore, project page, memories, tasks, docs, item pages, history) with every action hidden; sign-in prompt where an action would need it. Rate limiting for anonymous reads.
  • MCP: project_get reports public; project_store takes public (owner only); any key reads a public project and its shared items; a write from a non-member becomes a proposal, not a refusal. recall on a public project works for any key.
  • Live updates (LiveUpdatePoller) respect the same rule for anonymous viewers.
  • Explore lists public projects for everyone; the project's public badge and the memory hint from #321 ("shared is visible to everyone in a public project") are shown.
  • Setting: "Private" / "Public" with the confirmation from decision 5; the remote precondition removed or kept per decision 1.
  • Guide and server instructions: what public means for stored content, in one sentence.

Acceptance

  • Signed out, a public project's shared memories, tasks, pages, instructions and their history are readable in the web; a private project returns not found. Both tested.
  • A key without membership reads a public project over MCP, and its store becomes a proposal; on a private project it gets not found. Tested.
  • Private memories of a public project are never visible to anyone but their author, signed in or out. Isolation tests extended.
  • Switching public to private hides everything from outsiders at once; pending outsider proposals remain in moderation.
  • The confirmation dialog appears before a project goes public and names what becomes visible.
  • No member email address is visible to anyone outside the project.
Connection interrupted or session ended. Reload

Rejoining the server...

Rejoin failed... trying again in seconds.

Failed to rejoin.
Please retry or reload the page.

The session has been paused by the server.

Failed to resume the session.
Please retry or reload the page.