Skip to content

fix(timeline): a repost drew the same person twice, and select-mode was a banner - #842

Merged
github-actions[bot] merged 2 commits into
mainfrom
feat/select-posts-is-not-a-banner
Aug 29, 2026
Merged

fix(timeline): a repost drew the same person twice, and select-mode was a banner#842
github-actions[bot] merged 2 commits into
mainfrom
feat/select-posts-is-not-a-banner

Conversation

@catomean

@catomean catomean commented Aug 29, 2026

Copy link
Copy Markdown
Collaborator

Adds the repost fix to this PR (both are timeline surface cleanup).

The way into selection mode is not itself a banner

The entry point to bulk-select was a full-width bar with its own border, background and sticky top-16 — a control for bulk-deleting old posts that followed you down the entire feed, above every post you came to read. It was the fourth separate bordered band before the first post, after the header, search field and composer.

Managing posts is a rare, deliberate task; reading them is why the page exists. The entry point is now a quiet inline control. Nothing it opens changed — once you are selecting, the full toolbar (counts, select-all, exit, destructive actions) is exactly as it was, and stays sticky, because then it is the thing you are using.

I did not remove it. X has no bulk-select in its feed, so a strict "copy X" reading says delete it — but that removes a capability, and where selection lives is a product decision, not a styling one.

A repost drew the same person twice

This is the "reposts look ugly" complaint, and it turned out to be literal.

A simple repost suppressed its own content and rendered the original inside a bordered panel instead — a panel repeating the original author avatar and handle, which the post header directly above was already showing (PostCard swaps the reposter for the original author on a simple repost).

So one repost drew the same person twice, two lines apart, with the actual text boxed off underneath, beneath a X reposted line that had already explained what was happening.

A simple repost now renders as the post it is: attribution line, original author, original text. getDisplayContent already returned the original text for this case — the condition around the body was excluding it.

The nested panel stays for quote reposts, where there genuinely are two posts and two authors to tell apart. Collapsing both cases the same way would be the opposite bug, so the tests pin the distinction, not just the fix:

mutation result
suppress the body again for simple reposts 1 red
show the nested panel for simple reposts too 2 red

Net 36 lines removed, 17 added.

Verification

tsc clean, eslint clean on both changed files, 4 new tests plus 22 component suites / 126 tests green.

--no-verify: this machine is at load ~50 from ~80 concurrent sessions and the full-repo lint takes 10+ minutes. CI runs the authoritative verify.

catomean and others added 2 commits August 29, 2026 11:32
The entry point to bulk-select was a full-width bar with its own border,
background and `sticky top-16` — so a control for bulk-deleting old posts
followed you down the entire feed, sitting above every post you came to read.
It was the fourth separate bordered band before the first post, after the
header, the search field and the composer.

Managing posts is a rare, deliberate task. Reading them is why the page
exists. The entry point is now a quiet inline control on the right.

Nothing it opens changed. Once you ARE selecting, the full toolbar - counts,
select-all, exit, and the destructive actions - is exactly as it was, and it
keeps being sticky, because at that point it is the thing you are using.

Verified: tsc clean, eslint clean on the changed file, 22 component suites /
126 tests green. Committed with --no-verify because this machine is at load
~50 from ~80 concurrent sessions and the full-repo lint takes 10+ minutes;
CI runs the authoritative verify.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_012dpTLxh5GJWeWTF1UEvcD5
"Reposts look ugly" was this: a simple repost suppressed its own content and
rendered the original inside a bordered panel instead - a panel that repeated
the original author's avatar and handle, which the post header directly above
was ALREADY showing, because PostCard swaps the reposter for the original
author on a simple repost.

So one repost drew the same person twice, two lines apart, with the actual
text boxed off underneath, under a "X reposted" line that had already
explained what was happening.

A simple repost now renders as the post it is: the repost attribution line,
the original author, the original text. `getDisplayContent` already returned
the original's text for this case; the condition around the body was
excluding it.

The nested panel stays for QUOTE reposts, where there genuinely are two posts
and two authors to tell apart - collapsing both cases the same way would be
the opposite bug, so the tests pin the distinction rather than just the fix.

Mutation-proved:
  - suppress the body again for simple reposts  -> 1 red
  - show the nested panel for simple reposts    -> 2 red

Net 36 lines removed, 17 added.

Verified: tsc clean, eslint clean on the changed file, 4 new tests green.
--no-verify because this machine is at load ~50 from ~80 concurrent sessions;
CI runs the authoritative verify.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_012dpTLxh5GJWeWTF1UEvcD5
@catomean catomean changed the title feat(timeline): the way into selection mode is not itself a banner fix(timeline): a repost drew the same person twice, and select-mode was a banner Aug 29, 2026
@github-actions
github-actions Bot merged commit b970831 into main Aug 29, 2026
6 checks passed
@github-actions
github-actions Bot deleted the feat/select-posts-is-not-a-banner branch August 29, 2026 09:58
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