feat(chat): clarify thread/reply rendering (LC-460) #443

Merged
longjacksonle merged 1 commit from feat/chat-thread-reply-clarity into main 2026-06-25 02:21:53 +02:00

What

Clarifies thread/reply rendering in the chat view (LC-460, flagged during LC-454). The view muddled two different "reply" concepts that looked alike: the inline quoted-reply chip (a top-level message quoting a parent) and the thread reply-count pill (which opens the side panel). Neither made the parent / reply / thread relationship obvious.

Changes

  • Inline quote chip now reads as an explicit reply pointer: a reply-arrow icon + "Replying to {author}" label, an accent left edge + tint matching the composer's "Replying to" bar, and a "jump to the replied message" tooltip.
  • Reply-count pill is redesigned as a thread-entry chip: branch icon + "N replies" + a trailing chevron, with a "View thread" label, so it clearly opens the thread instead of reading as another quote. Inputs (message_id/room_id/reply_count/oob) are unchanged, so the WebSocket OOB reply-count swap and the inline render keep sharing it.
  • Thread panel gains hierarchy: an uppercase "N replies" count divider separates the root message from its replies, and a left rail nests the replies beneath the root.

Scope / safety

Presentational only - no data models, routes, authz, or hx-swap-oob targets changed. Askama + HTMX + Tailwind, inline SVGs, token-based colors (light/dark). The four LC-77 webhook/email render golden fixtures were regenerated; the delta is whitespace-only (extra blank lines from the new template comments), confirmed with git diff --ignore-all-space being empty of structural change.

Verification

just build-css, just check (clippy + fmt clean), just test, just test-saas all green.

🤖 Generated with Claude Code

## What Clarifies thread/reply rendering in the chat view (LC-460, flagged during LC-454). The view muddled two different "reply" concepts that looked alike: the inline quoted-reply chip (a top-level message quoting a parent) and the thread reply-count pill (which opens the side panel). Neither made the parent / reply / thread relationship obvious. ## Changes - **Inline quote chip** now reads as an explicit reply pointer: a reply-arrow icon + "Replying to {author}" label, an accent left edge + tint matching the composer's "Replying to" bar, and a "jump to the replied message" tooltip. - **Reply-count pill** is redesigned as a thread-entry chip: branch icon + "N replies" + a trailing chevron, with a "View thread" label, so it clearly opens the thread instead of reading as another quote. Inputs (`message_id`/`room_id`/`reply_count`/`oob`) are unchanged, so the WebSocket OOB reply-count swap and the inline render keep sharing it. - **Thread panel** gains hierarchy: an uppercase "N replies" count divider separates the root message from its replies, and a left rail nests the replies beneath the root. ## Scope / safety Presentational only - no data models, routes, authz, or `hx-swap-oob` targets changed. Askama + HTMX + Tailwind, inline SVGs, token-based colors (light/dark). The four LC-77 webhook/email render golden fixtures were regenerated; the delta is whitespace-only (extra blank lines from the new template comments), confirmed with `git diff --ignore-all-space` being empty of structural change. ## Verification `just build-css`, `just check` (clippy + fmt clean), `just test`, `just test-saas` all green. 🤖 Generated with [Claude Code](https://claude.com/claude-code)
feat(chat): clarify thread/reply rendering (LC-460)
All checks were successful
check-secrets / Nosey parker (push) Successful in 7s
check-secrets / Kingfisher (push) Successful in 8s
check-secrets / TruffleHog (push) Successful in 9s
check-secrets / Nosey parker (pull_request) Successful in 7s
check-secrets / TruffleHog (pull_request) Successful in 11s
check-secrets / Kingfisher (pull_request) Successful in 11s
Check / clippy + fmt + tests (pull_request) Successful in 5m35s
Create release / Create release from merged PR (pull_request) Has been skipped
125b861474
The chat view muddled two different "reply" concepts: the inline quoted-reply chip (a top-level message quoting a parent) and the thread reply-count pill (which opens the side panel). They looked alike and neither made the parent/reply/thread relationship obvious.

- Inline quote chip now reads as an explicit reply pointer: a reply-arrow icon + "Replying to {author}" label, accent left edge + tint matching the composer's "Replying to" bar, and a "jump to the replied message" tooltip. Distinct from the thread affordance.
- Reply-count pill is redesigned as a thread-entry chip: a branch icon + "N replies" + a trailing chevron with a "View thread" label, so it clearly opens the thread rather than reading as another quote. Inputs (message_id/room_id/reply_count/oob) are unchanged, so the WebSocket OOB reply-count swap and the inline render share it.
- Thread panel gains hierarchy: an uppercase "N replies" count divider separates the root message from its replies, and a left rail nests the replies beneath the root.

Presentational only: no data models, routes, authz, or hx-swap-oob targets changed. The four LC-77 webhook/email render golden fixtures were regenerated (whitespace-only delta from the new template comments). Verified with just build-css, just check, just test, just test-saas.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
longjacksonle scheduled this pull request to auto merge when all checks succeed 2026-06-25 02:18:07 +02:00
longjacksonle deleted branch feat/chat-thread-reply-clarity 2026-06-25 02:21:53 +02:00
Sign in to join this conversation.
No reviewers
No labels
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set

Reference
psa-systems/lets-chat!443
No description provided.