Skip to content

feat(mobile): a sender's name above its message opens the sender's thread - #1022

Merged
Jacksondr5 merged 1 commit into
j5/mainfrom
j5code/mobile-question-case-and-names
Nov 12, 2026
Merged

Jacksondr5 merged 1 commit into
j5/mainfrom
j5code/mobile-question-case-and-names

Conversation

@Jacksondr5

@Jacksondr5 Jacksondr5 commented Nov 11, 2026 •

Copy link
Copy Markdown
Owner

Problem

At Checkpoint 4, Jackson tapped an agent's name in a Captain's timeline on his iPhone, such as "questioner" (a Crew member), and nothing happened. On web, the name above another agent's message opens that agent's thread. Part of #1011 (part 2).

What changed

  • On mobile, the sender's name on a message's identity line now opens the sender's thread, as web's link does. The Thread A2A rendering definition's history entry of 2026-10-17 records that the name links, and its line on mobile says mobile takes the same treatments.
  • It uses the thread the timeline already resolves for "Open thread": the identity read's thread, on this server or a connected peer, or a spawn brief's spawner.
  • The name is tappable only when this client can open that thread. Automations, outside agents and people stay plain text.
  • The name keeps its resting look, with no underline. On web the underline shows only on hover.

Unchanged, matching web. Names in notice lines (silence, not delivered, Exchange dropped or withdrawn) stay plain text. Crew notices already open seats: the approval line's seat names and each seat line's "Open seat thread". Widening this to notice lines on both clients is for Jackson to decide later.

Part 1 of #1011 (the answered question's casing) is parked. The stored question and both rows are in sentence case, so it waits for Jackson's screenshot.

UI changes

Android. Before is trunk a77b81158a; after is 66fbe4a2a8.

State Before After
Crew member's name above its message Crew member's name above its message, before Crew member's name above its message, after
Peer Agent's spawn brief, naming its spawner Peer Agent's spawn brief, naming its spawner, before Peer Agent's spawn brief, naming its spawner, after
Opened letter with its Open thread footer Opened letter with its Open thread footer, before Opened letter with its Open thread footer, after
A person's Inbox reply: the name stays plain A person's Inbox reply: the name stays plain, before A person's Inbox reply: the name stays plain, after
A stopped agent's notice opens its detail, unchanged A stopped agent's notice opens its detail, unchanged, before A stopped agent's notice opens its detail, unchanged, after

After tapping a name:

Crew member's thread, opened from its name, after

Captain's thread, opened from a Peer Agent's spawn brief, after

A Crew member's name opening the member's thread:

crew-name-opens-thread-66fb.mp4

A spawn brief's name opening the Captain's thread:

peer-brief-opens-captain-66fb.mp4

Live testing

Pass on Android at 66fbe4a2a8, by the wave 5 Android tester (Sol 6.1), with real Claude Haiku turns:

  • A Crew member's name opens its thread, and a Peer Agent's spawn brief name opens its Captain's thread. On trunk, both did nothing.
  • A person's Inbox reply keeps a plain name.
  • A stopped agent's notice still only opens its detail.
  • An opened letter's Open thread footer works, before and after.

Not exercised:

  • a failed or pending Crew seat's "Open seat thread", since this data had no such notice (the code is unchanged);
  • other delivery-notice variants;
  • a sender on another environment, or one whose thread the reader can't see;
  • dark theme and iOS.

Checklist

  • One concern: the description has no "also"
  • Tests cover the changed behavior: the change wires an existing resolved thread to a tap, so a live check proves it, with no unit test
  • UI changes: before/after above, with videos of the taps
  • Live testing: the section above says what ran live and what did not
  • Upstream-owned files: none; apps/mobile/src/j5/a2a/timeline.tsx is J5-owned
  • Upstream product: none
  • Surfaces: mobile now matches web. Notice lines are unchanged on both clients.
  • Docs: none; the Thread A2A rendering definition already records the name link (history, 2026-10-17) and that mobile takes the same treatments

Built by Claude Opus 5.5 in Claude Code, as builder-timeline in the mobile catch-up Crew.

🤖 Generated with Claude Code

…read

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@vercel

vercel Bot commented Nov 11, 2026 •

Copy link
Copy Markdown

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated
j5-code Ready Ready Preview Nov 11, 2026 11:52pm UTC

Request Review

@coderabbitai

coderabbitai Bot commented Nov 11, 2026 •

Copy link
Copy Markdown
Pre-merge checks: Inconclusive 2

Failed Failed checks: 2 inconclusive

Check name Status Explanation Resolution
Title check Pending This assessment has not completed. The check will be retried on the next pre-merge check run.
Description check Pending This assessment has not completed. The check will be retried on the next pre-merge check run.
  • Autofix · Keep fixing CodeRabbit findings and required CI, and resolving merge conflicts

@Jacksondr5 Jacksondr5 left a comment

Copy link
Copy Markdown
Owner Author

Choose a reason for hiding this comment

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

Combined review: reviewer-opus and reviewer-sol (Claude Opus 5.5 and GPT Sol 6.1), head 66fbe4a

Both of us reviewed the PR independently. Neither found anything that blocks merge.

  • The link. ParticipantAuthorLine wraps the sender's name in a link-role Pressable only when useSenderThread().ref is non-null. That's the same ref J5OpenSenderThread uses: gated on useQuietThreadShell, so a thread the reader can't see stays plain text. It reaches peers through the identity read's thread and a brief's spawner through j5SenderThreadRef, and it opens through useOpenLinkedThread.
  • Layout. The Pressable takes shrink and its Text keeps numberOfLines={1}, so a long name still truncates before the tag or badge. Hooks stay unconditional.
  • Unchanged. People, other-person and notice lines are unchanged, matching web, as the Captain directed.
  • Scope. One J5-owned file, with no seam, no FORK change and no docs change; AC1 already covers it.

No unit test is needed for a tap that uses the existing ref.

Code approval: the panel has no open code findings. Still pending: the tester's live checks (a local sender, a peer sender, and an unavailable thread staying plain), the captures, and green J5 CI.

@Jacksondr5

Copy link
Copy Markdown
Owner Author

A correction to the combined review: it said "AC1 already covers it", and that citation is wrong. The current AC1 is the five-groups rule. The decision to link the sender's name is in the definition's 2026-10-17 history entry (the old AC1), and the current text says mobile takes the same treatments. The code verdict is unchanged: no findings.

@github-actions github-actions Bot added size:S 10-29 effective changed lines (test files excluded in mixed PRs). vouch:trusted PR author is trusted by repo permissions or the VOUCHED list. labels Nov 11, 2026
Jacksondr5 added a commit that referenced this pull request Nov 12, 2026
@Jacksondr5
Jacksondr5 merged commit 36880e7 into j5/main Nov 12, 2026
34 checks passed
@Jacksondr5
Jacksondr5 deleted the j5code/mobile-question-case-and-names branch November 12, 2026 00:14

This branch was successfully deployed

1 active deployment
Preview — 66fbe4a2 Deployed Nov 11, 2026 by vercel[bot]
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

size:S 10-29 effective changed lines (test files excluded in mixed PRs). vouch:trusted PR author is trusted by repo permissions or the VOUCHED list.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant