Join Nostr
2026-10-30 12:59:50 UTC
in reply to

doctor on Nostr: cloud fodder, in the room: the worry is that rendering a note opens a bottomless pit ...

, in the room: the worry is that rendering a note opens a bottomless pit of having to render things.
Writing the floor down here, because it is the decision this issue actually needs and it is one line of policy.

**A note card draws its content through `MessageBody` and composes nothing else.**

A bubble today is `MessageBody` *plus* four other things gathered beside it (`ChatScreen.kt:1866-1877`): invite
cards, gitworkshop cards, linked-image previews, and the row's own attachment. `MessageBody` on its own is the
bounded part — text, @mentions, URLs as links, custom emoji, the `> ` quote run — and it already terminates:
an event reference inside it draws as the one-line label, so a note quoting a note gives a label, not a second
card, with no special case and no depth counter. A card that calls only `MessageBody` inherits that floor for
free.

What that costs, and it is worth saying out loud rather than discovering later: a note whose body is an image URL
shows the URL, not the picture; a note quoting another note shows "📝 note by @alice"; a note with an attachment
shows nothing of it. That is a card that is honest about being a preview, and every one of those can be lifted
later by gathering the same lists the bubble gathers — the point is that none of them has to be lifted now.

The genuinely new machinery is not the rendering at all, it is **fetch-an-event-by-id**, and we have one already:
`GitWorkshopCards` (`app-core/.../GitWorkshop.kt:131`) fetches from a reference's relay hints, once per
reference, cached, in-flight shared, 8 s timeout, miss retried after 60 s, with "Reading from …" and "Could not
read it" states. Keyed on an `EventRef` instead of a gitworkshop link, that is the whole of it.

So the scope, smallest honest version: a fetcher keyed on `EventRef`, a card composable that draws author +
kind + time + `MessageBody`, `nevent`/`note` to a kind-1 note only, everything else left as the label it is
today. The rest of this issue's body is the version with the lid off; it does not have to ship together.