A link into a thread arrives pointing at one post out of several, and showing only that post loses what was being said. Bluesky and Threads now render the author's own chain around the linked post, in the order it was written, with the post you followed marked.
Other people's replies are deliberately left out — they are a conversation rather than the thing that was shared, and on a busy post there are hundreds of them.
Model change. A Post is now a list of Segments rather than a single body. The three platforms with no notion of a chain produce exactly one and say so via oneSegment().
Bluesky walks parent up and the author's own replies down, stopping at the first post by anyone else. That needs depth/parentHeight, which drags the whole reply tree along — a few hundred KB on a popular post — since the API cannot return a single author's branch.
Threads was harder. The page ships the linked post, the author's follow-ups, other people's replies and unrelated recommendations all as flat thread_items containers with no nesting. A follow-up is the author replying to themselves; a stranger's reply carries the same reply_to_author with a different name on it. The first post of a chain replies to nothing, so it is only reachable by walking backwards from the post that answers it — a test caught that, when linking the second post of a thread returned just the one post.
Verified live on a real six-post Bluesky thread and a two-post Threads chain, in the container. Fixtures are real captures; the Bluesky one deliberately keeps two of every level's outside replies, because a filter is only worth testing against what it should exclude.
61 tests pass.
A link into a thread arrives pointing at one post out of several, and showing only that post loses what was being said. Bluesky and Threads now render the author's own chain around the linked post, in the order it was written, with the post you followed marked.
Other people's replies are deliberately left out — they are a conversation rather than the thing that was shared, and on a busy post there are hundreds of them.
**Model change.** A `Post` is now a list of `Segment`s rather than a single body. The three platforms with no notion of a chain produce exactly one and say so via `oneSegment()`.
**Bluesky** walks `parent` up and the author's own `replies` down, stopping at the first post by anyone else. That needs `depth`/`parentHeight`, which drags the whole reply tree along — a few hundred KB on a popular post — since the API cannot return a single author's branch.
**Threads** was harder. The page ships the linked post, the author's follow-ups, other people's replies and unrelated recommendations all as flat `thread_items` containers with no nesting. A follow-up is the author replying to *themselves*; a stranger's reply carries the same `reply_to_author` with a different name on it. The first post of a chain replies to nothing, so it is only reachable by walking backwards from the post that answers it — a test caught that, when linking the second post of a thread returned just the one post.
**Verified live** on a real six-post Bluesky thread and a two-post Threads chain, in the container. Fixtures are real captures; the Bluesky one deliberately keeps two of every level's outside replies, because a filter is only worth testing against what it should exclude.
61 tests pass.
People write in chains on both, and a link into one arrives pointing at a
single post out of several. Showing only that post loses the thing that was
being said. Other people's replies are a different matter: they are a
conversation rather than the thing that was shared, and on a busy post there
are hundreds of them.
A Post is now a list of Segments instead of one body. Most platforms produce
exactly one and say so through oneSegment(); the two that thread produce the
whole chain, with isAnchor marking the post that was actually linked, which
need not be the first.
Bluesky walks parent upward and the author's own replies downward, stopping at
the first post by anyone else. That needs depth and parentHeight on
getPostThread, which drags the entire reply tree along -- a few hundred KB on a
popular post -- because there is no way to ask the API for one author's branch.
Threads is harder to read. The page ships the linked post, the author's
follow-ups, other people's replies and a pile of unrelated recommendations, all
as flat thread_items containers with no nesting to go on. What separates a
follow-up from a stranger's reply is that a follow-up is the author replying to
themselves; a reply from someone else carries the same reply_to_author with a
different name on it. The first post of a chain replies to nothing at all, so
it is reachable only by walking backwards from the post that answers it -- a
test caught that, when linking the second post of a thread returned just the
one post.
Fixtures for both are real captures. The Bluesky one keeps two of every level's
outside replies rather than pruning them away, because a filter is only worth
testing against the thing it is supposed to exclude.
Co-Authored-By: Claude Opus 5 <[email protected]>
Claude-Session: https://claude.ai/code/session_01BGkRmLfiWuJHx6tQ12EELY
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
A link into a thread arrives pointing at one post out of several, and showing only that post loses what was being said. Bluesky and Threads now render the author's own chain around the linked post, in the order it was written, with the post you followed marked.
Other people's replies are deliberately left out — they are a conversation rather than the thing that was shared, and on a busy post there are hundreds of them.
Model change. A
Postis now a list ofSegments rather than a single body. The three platforms with no notion of a chain produce exactly one and say so viaoneSegment().Bluesky walks
parentup and the author's ownrepliesdown, stopping at the first post by anyone else. That needsdepth/parentHeight, which drags the whole reply tree along — a few hundred KB on a popular post — since the API cannot return a single author's branch.Threads was harder. The page ships the linked post, the author's follow-ups, other people's replies and unrelated recommendations all as flat
thread_itemscontainers with no nesting. A follow-up is the author replying to themselves; a stranger's reply carries the samereply_to_authorwith a different name on it. The first post of a chain replies to nothing, so it is only reachable by walking backwards from the post that answers it — a test caught that, when linking the second post of a thread returned just the one post.Verified live on a real six-post Bluesky thread and a two-post Threads chain, in the container. Fixtures are real captures; the Bluesky one deliberately keeps two of every level's outside replies, because a filter is only worth testing against what it should exclude.
61 tests pass.