Skip to content

feat(mobile): regenerate a thread title from the row menu - #5657

Closed
sideeffffect wants to merge 2 commits into
pingdotgg:mainfrom
sideeffffect:feat/mobile-regenerate-title
Closed

feat(mobile): regenerate a thread title from the row menu#5657
sideeffffect wants to merge 2 commits into
pingdotgg:mainfrom
sideeffffect:feat/mobile-regenerate-title

Conversation

@sideeffffect

@sideeffffect sideeffffect commented Aug 7, 2026

Copy link
Copy Markdown

What changed

Adds a capability-gated Regenerate title item to the thread row long-press menu, matching the web per-thread action menu. Selecting it dispatches thread.meta.update { regenerateTitle: true }. Shown only when the environment's server advertises the threadTitleRegeneration capability (same gating web uses).

Appears across both list implementations (v1 ThreadListRow and v2 ThreadListV2Row) and both surfaces (Home list + iPad sidebar).

Why

Regenerating a thread's title is available on the web client but was unreachable in the mobile app.

How

  • useThreadListActions gains regenerateThreadTitle, reusing the existing updateMetadata command. It carries a per-thread in-flight Set guard (same pattern as the snooze actions) so a rapid second tap can't start duplicate title-generation work before the shell's titleRegeneration flag lands.
  • The capability is threaded to the rows as titleRegenerationSupported, alongside the existing settle/snooze/pin flags; the item only renders when supported.

No server, contract, or shared-runtime changes.

Scope

Split out of the original combined PR per request. Sibling PRs: Rename (#5648) and Unarchive.

Testing

  • tsc --noEmit, vp fmt --check, vp lint: clean
  • Mobile unit suite: 617 tests / 99 files pass

Screenshots

No Android device/emulator available here for before/after images (per CONTRIBUTING.md) — happy to add. The change adds "Regenerate title" to the row long-press menu on capable servers.

🤖 Generated with Claude Code


Note

Low Risk
Mobile-only UI and metadata command wiring; capability-gated with existing duplicate-request guards and no server or contract changes.

Overview
Brings Regenerate title to mobile thread lists so it matches the web per-thread menu on capable servers.

useThreadListActions adds regenerateThreadTitle, which calls updateMetadata with regenerateTitle: true, checks threadTitleRegeneration, blocks duplicate taps with an in-flight guard and thread.titleRegeneration, and surfaces failures via alerts. Home and the iPad sidebar pass the handler through and derive titleRegenerationSupported from server capabilities like settle/snooze/pin.

v1 (ThreadListRow) and v2 (ThreadListV2Row) long-press menus prepend the action when supported; while regeneration is in progress the item shows Regenerating… and is disabled.

Reviewed by Cursor Bugbot for commit 89ee435. Bugbot is set up for automated code reviews on this repo. Configure here.

Note

Add 'Regenerate title' action to thread list row menus on mobile

  • Adds a regenerateThreadTitle action in useThreadListActions.ts that calls updateMetadata with regenerateTitle: true, deduplicates concurrent requests per thread, and shows an alert on failure.
  • Both v1 (thread-list-items.tsx) and v2 (thread-list-v2-items.tsx) row components conditionally show the menu item when the server reports capabilities.threadTitleRegeneration === true.
  • While regeneration is in progress (thread.titleRegeneration is set), the menu item is disabled and relabeled 'Regenerating…'.
  • The capability check and handler are wired through both the home screen and the navigation sidebar.

Macroscope summarized 89ee435.

Add a capability-gated "Regenerate title" item to the thread row long-press
menu, matching the web per-thread action menu. Shown only when the server
advertises the threadTitleRegeneration capability (like settle/snooze/pin).

- useThreadListActions gains regenerateThreadTitle: dispatches
  thread.meta.update { regenerateTitle: true } via the existing updateMetadata
  command, with a per-thread in-flight Set guard (same pattern as the snooze
  actions) so a rapid second tap can't start duplicate generation work.
- Both the v1 (ThreadListRow) and v2 (ThreadListV2Row) row menus render the
  item across every variant; the capability is threaded through as
  titleRegenerationSupported alongside the existing settle/snooze/pin flags.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
@coderabbitai

coderabbitai Bot commented Aug 7, 2026

Copy link
Copy Markdown

Important

Review skipped

Auto reviews are disabled on this repository. Please check the settings in the CodeRabbit UI or the .coderabbit.yaml file in this repository. To trigger a single review, invoke the @coderabbitai review command.

⚙️ Run configuration

Configuration used: Repository UI

Review profile: CHILL

Plan: Pro Plus

Run ID: e90cde78-8c8f-49cd-a0f0-b2f925b84c47

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

Use the checkbox below for a quick retry:

  • 🔍 Trigger review

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@github-actions github-actions Bot added vouch:unvouched PR author is not yet trusted in the VOUCHED list. size:L 100-499 changed lines (additions + deletions). labels Aug 7, 2026

@cursor cursor Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Cursor Bugbot has reviewed your changes using high effort and found 1 potential issue.

Fix All in Cursor

❌ Bugbot Autofix is OFF. To automatically fix reported issues with cloud agents, enable autofix in the Cursor dashboard.

Reviewed by Cursor Bugbot for commit 6eec3ce. Configure here.

Comment thread apps/mobile/src/features/threads/thread-list-v2-items.tsx
@macroscopeapp

macroscopeapp Bot commented Aug 7, 2026

Copy link
Copy Markdown
Contributor

Approvability

Verdict: Needs human review

This PR adds a new user-facing feature (regenerate thread title action in row menus) rather than a bug fix or mechanical change. New features introducing new user capabilities warrant human review.

You can customize Macroscope's approvability policy. Learn more.

While a title regeneration is running (thread.titleRegeneration != null),
the menu item now disables itself and reads "Regenerating…" instead of
staying enabled as "Regenerate title" — so a second long-press reads as
inert rather than actionable, matching web's action menu. The handler's
in-flight guard already no-oped the duplicate; this adds the missing
visual feedback.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
@sideeffffect

Copy link
Copy Markdown
Author

Regenerate title already landed on main (thread-title-regeneration-menu.ts + the row-menu wiring), so this is now a duplicate. Closing — thanks!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

size:L 100-499 changed lines (additions + deletions). vouch:unvouched PR author is not yet trusted in the VOUCHED list.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant