Comments belong beside the paragraph, not under the page
A remark about one sentence and a remark about a document are different things. Nex keeps them apart, and anchors both to something that survives an edit.
There are two ways to put comments on a document and most tools pick one. Google Docs floats them in the margin beside the text. A blog or an issue tracker puts them in a list at the bottom. Both are right, for different remarks, and the mistake is choosing once.
The margin is for “this sentence”
“This contradicts the paragraph above.” “Is this number still true?” “Cut this.” These are about a specific piece of text and they are close to useless anywhere else. Pushed to a list at the foot of the page, a remark about one sentence becomes a remark about the document, and the reader has to reconstruct which sentence from the quoted fragment.
In Nex a thread about a block floats beside that block. A block that has comments shows a marker permanently — not on hover, because a marker you have to go looking for is a conversation nobody knows is happening — with the count beside it. Click the block and the thread opens.
The sidebar is for “this page”
“Who owns this now?” “We should merge this with the other spec.” “Approved.” None of those belong to a paragraph, and forcing an anchor would attach them to whichever block happened to be handy.
So Nex has a sidebar as well: a resizable column that is a sibling of the document, not an overlay on it, so the text reflows instead of being covered. Its composer writes a comment with no block anchor — one about the page. Below a certain width there is no room to share and it becomes a sheet.
When you publish a page you choose which of the two a reader gets, or both. That is a choice about the shape of the conversation you want, not about permission.
The part that actually matters: what a comment is attached to
A comment in Nex is anchored to a block id, never to a position in the document. This is the single most important decision in the whole feature and it is invisible when it works.
Positions move. Every character typed above a paragraph shifts it. If a comment stores “characters 1,240 to 1,309”, then after an hour of editing it is highlighting a completely different sentence — and it does so confidently, with no indication that anything went wrong. A comment that has drifted onto whatever text slid underneath it is worse than a comment that lost its anchor, because you cannot tell it happened.
Block ids are minted lazily, so documents written before the feature existed need no migration, and re-minted when a block is split or pasted, because otherwise two blocks would answer to one thread.
A comment dies with its block
Delete the paragraph and the thread about it goes too. This runs on the same hook as the link index and for the same reason — it is the one place a body changes.
It is careful about it, in two ways worth knowing. If the body fails to parse, it deletes nothing: an unreadable save must never be read as “every block was deleted”. And if the body has no block ids at all, it deletes nothing either, because a document written before ids existed legitimately has none. Both of those guards exist because the failure mode without them is silent, permanent data loss triggered by a bug somewhere else entirely.
And you need an account to leave one
Reading a published page needs nothing. Commenting on it needs an account, and that is deliberate. A comment with no identity behind it cannot be deleted by whoever wrote it, cannot be rate-limited against anyone, and on a public URL is a spam target — and every fix for those is a workaround for not knowing who anyone is. Requiring a sign-in is the short version of all three fixes.