Skip to content

Inbox tabs, reaction reactor names, and recents-ordering fix#24

Open
clickclacknvrwhack wants to merge 1 commit into
MaxGhenis:mainfrom
clickclacknvrwhack:feat/inbox-tabs-reaction-names-recency-fix
Open

Inbox tabs, reaction reactor names, and recents-ordering fix#24
clickclacknvrwhack wants to merge 1 commit into
MaxGhenis:mainfrom
clickclacknvrwhack:feat/inbox-tabs-reaction-names-recency-fix

Conversation

@clickclacknvrwhack
Copy link
Copy Markdown

Summary

Web UI + backend improvements from a working session.

1. Conversation tabs + multi-select archive

Organize threads into Recent / Archive / custom tabs.

  • New tab column on conversations + a tabs table (with startup-safe migration).
  • Tab CRUD and bulk-move API endpoints (/api/tabs, /api/conversations/move, per-conversation /tab).
  • Sidebar tab bar (Recent · Archive · custom · +) and a multi-select mode to move threads (archive included) in bulk.
  • One-tab-per-thread (folder) model; Recent acts as the inbox.

2. Reaction tooltips name the reactor

Hovering a reaction pill now shows who reacted (or a list) instead of a bare count.

  • Captures reactor participant IDs for Google Messages (previously discarded) and stores participant IDs on conversations so actors resolve to names.
  • Cross-platform resolver (Google Messages / WhatsApp / Signal), self labelled as "You".
  • Falls back to the count for historical reactions that have no reactor data.

3. Recents-ordering fix (contentless messages)

An emoji reaction made in a group can arrive as an empty stub message in the reactor's 1:1 thread; that stub was floating the 1:1 to the top of recents.

  • Adds MessageHasContent + AdvanceConversationRecency: only content-bearing messages advance inbox recency, and recency never moves backward.
  • Startup repair (RepairContentlessRecency) corrects already-affected conversations while leaving legitimately metadata-ahead ones untouched.

4. Light-mode menu fix

Right-click context-menu text was dark-on-dark (unreadable) in light mode; pinned to a readable smokey-white on the always-dark menu.

Testing

  • New TDD coverage in internal/db/recency_test.go (red → green) for the content rule, recency advancement, and the repair.
  • Extended internal/client/extract_test.go for reactor-actor capture.
  • go build ./... and go test ./... pass.

Notes

  • Reactor names only apply to reactions received after this change; historical reactions (count-only) keep showing a count.
  • om-bin build artifact and a local .claude/launch.json are added to .gitignore.

Web UI + backend improvements from a working session:

- Tabs: organize threads into Recent / Archive / custom tabs. Adds a
  `tab` column on conversations and a `tabs` table, tab CRUD + bulk-move
  API endpoints, a sidebar tab bar, and a multi-select mode to move
  threads (archive included) in bulk.

- Reaction tooltips now name who reacted (cross-platform) instead of a
  bare count. Captures reactor participant IDs for Google Messages and
  resolves actors (incl. WhatsApp/Signal) to names, falling back to a
  count for historical reactions with no reactor data.

- Recents ordering: contentless messages (e.g. an emoji reaction made in
  a group that arrives as an empty stub in the reactor's 1:1 thread) no
  longer float a conversation to the top. Adds MessageHasContent /
  AdvanceConversationRecency, a startup repair for already-affected
  conversations, and TDD coverage.

- UI fix: right-click context-menu text is now readable in light mode.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
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