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
{{ message }}
Repository navigation
How does a note get published — reuse publications/sites, or note-specific? #234
How does a note get published — reuse publications / sites, or something note-specific?
sites publishes a single uploaded HTML file to a generated *.boop.ad hostname with its own did:webvh and siteDidLogEntries. publications is the existing path for lists. A note is neither: it is boop-rendered content, not user-uploaded HTML, but it wants the hostname-and-portable-identity treatment that sites already has.
Open: does a published note get its own hostname or live under a path? Does it reuse the site DID machinery, the list publication machinery, or a third thing? What happens to the published artifact when the note is edited afterward?
A note publishes through publications, not sites. It gets one publications row and the same DID shape as a list, {authorDid}/resources/list-{id}. No new tables and no third path.
Why not sites: site keys are custodial (siteKeys, encrypted by boop), so a site DID proves that boop hosted the page, not that the author wrote it. It would also give the note a second identity beside its did:cel.
A published note lives at a path on boop.ad, the same route lists use today (/public/:did). It has no hostname of its own; custom domains for notes are fog.
A stranger sees the last sealed version. The public page renders the sealed text held inline in the envelope (What does a note's signature commit to, and when does it seal? #229), never noteBodies. Edits after publishing only reach the public page when the author re-publishes, which appends a new sealed version.
Publishing a note grants the same access as a list: anyone signed in can edit the draft, so the permission rules stay as they are.
What the build inherits:publishList (convex/publication.ts) currently throws "Notes cannot be published"; that guard is replaced by the Pro gate (Does a note consume list quota? #230) plus the seal. getPublicList must return the sealed body from listEnvelopes for a note, PublicList.tsx needs a note rendering, and the owner needs an "unpublished changes" state when the draft differs from the last seal.
Open follow-up (not decided here): because anyone signed in can edit the draft of a published note, the draft is not private (getNoteBody uses canUserViewList), and the next re-publish can seal other people's text under the author's key. At build time this needs either a diff shown to the author before sealing, or a revisit of read-only access for published notes.
Activity
brianorwhatever commentedon Oct 3, 2026
Resolution
publications, notsites. It gets onepublicationsrow and the same DID shape as a list,{authorDid}/resources/list-{id}. No new tables and no third path.sites: site keys are custodial (siteKeys, encrypted by boop), so a site DID proves that boop hosted the page, not that the author wrote it. It would also give the note a second identity beside itsdid:cel./public/:did). It has no hostname of its own; custom domains for notes are fog.noteBodies. Edits after publishing only reach the public page when the author re-publishes, which appends a new sealed version.publishList(convex/publication.ts) currently throws "Notes cannot be published"; that guard is replaced by the Pro gate (Does a note consume list quota? #230) plus the seal.getPublicListmust return the sealed body fromlistEnvelopesfor a note,PublicList.tsxneeds a note rendering, and the owner needs an "unpublished changes" state when the draft differs from the last seal.getNoteBodyusescanUserViewList), and the next re-publish can seal other people's text under the author's key. At build time this needs either a diff shown to the author before sealing, or a revisit of read-only access for published notes.