Skip to content

feat(conversations): allow one-way private to public publish - #1545

Draft
sentry-junior[bot] wants to merge 5 commits into
mainfrom
feat/publish-private-conversation
Draft

feat(conversations): allow one-way private to public publish#1545
sentry-junior[bot] wants to merge 5 commits into
mainfrom
feat/publish-private-conversation

Conversation

@sentry-junior

@sentry-junior sentry-junior Bot commented Aug 13, 2026

Copy link
Copy Markdown
Contributor

Participants can make a private conversation public from the conversation UI.

This is a one-way SQL flip on the root destination visibility. There is no public-to-private path.

Why

Private dashboard conversations needed a simple escape hatch so someone who can already see the transcript can share it.

What changed

  • POST /api/conversations/:id/publish requires an authenticated participant
  • updates junior_destinations.visibility to public for the conversation root
  • already-public stays success
  • dashboard shows a Make public control with an irreversible confirm

Notes

Visibility still lives on the destination row. Shared destinations publish together. No migration.

Requested by David Cramer.

--

View Junior Session [Sentry]

Add a participant-only SQL mutation that flips the root destination visibility to public, and expose it in the conversation UI with an irreversible confirmation.

Co-Authored-By: David Cramer <david@sentry.io>
@vercel

vercel Bot commented Aug 13, 2026

Copy link
Copy Markdown

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated (UTC)
junior-docs Ready Ready Preview Aug 14, 2026 3:57am

Request Review

@github-actions

github-actions Bot commented Aug 13, 2026

Copy link
Copy Markdown

Dashboard visual evidence

Mode: path-selected
Selected: conversations, conversation-detail, component-gallery

Triggered by:

  • packages/junior-dashboard/e2e/conversations.spec.ts
  • packages/junior-dashboard/package.json
  • packages/junior-dashboard/src/client/conversations/ConversationHeader.tsx
  • packages/junior-dashboard/src/client/conversations/ConversationHeaderActions.tsx
  • packages/junior-dashboard/src/client/conversations/ConversationMeta.tsx
  • packages/junior-dashboard/src/client/conversations/ConversationPage.tsx
  • packages/junior-dashboard/src/client/conversations/ConversationSidebar.tsx
  • packages/junior-dashboard/src/client/conversations/PendingMailboxStack.tsx

Conversations · desktop

Conversations · desktop

Conversations · mobile

Conversations · mobile

Conversation detail · desktop

Conversation detail · desktop

Conversation detail · mobile

Conversation detail · mobile

Component gallery · desktop

Component gallery · desktop

Full-page screenshots from the mock dashboard. Not a pixel-diff gate.

Refuse one-way destination publish when other roots share the same destination so a single thread cannot expose unrelated private conversations.
Comment thread packages/junior/src/api/conversations/publish.ts Outdated
onClick: () => {
if (
!window.confirm(
"Make this conversation public? Anyone with the link can read it. You cannot undo this.",

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

thats not quite true, they still need logged in, no?

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

yep — still needs a workspace login. updated the confirm copy to match the privacy chip: "Anyone in this workspace can read it."

Public conversations remain workspace-authenticated. Match the privacy chip wording so the confirm does not imply anonymous link access.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant