Skip to content

feat(web): show the owner's avatar on sessions someone else started - #135

Merged
tusharbhardwaj-bk merged 1 commit into
expbkmainfrom
t3code/osaka
Aug 26, 2026
Merged

feat(web): show the owner's avatar on sessions someone else started#135
tusharbhardwaj-bk merged 1 commit into
expbkmainfrom
t3code/osaka

Conversation

@tusharbhardwaj-bk

@tusharbhardwaj-bk tusharbhardwaj-bk commented Aug 26, 2026

Copy link
Copy Markdown

Problem

In a shared environment the experimental sidebar mixes my own sessions with the ones teammates started and tagged me into, and the rows look identical. Whose session a row is was only discoverable by opening the thread.

Fix

Thread rows now carry the owner's avatar immediately left of the provider icon, in the same bottom-right lane as the priority badge — but only when the owner is someone other than the current operator. My own face on every row of my own sidebar would carry no information.

Nothing renders when:

  • the thread is unowned (ownerUserId === null — single-user mode, or awaiting backfill), or
  • there is no team identity for the operator (every row would otherwise light up), or
  • the operator is the owner.

So this is a no-op outside team mode.

Shape of the change:

  • phaseSidebarRowOwnerAvatarUserId in PhaseGroupedSidebar.logic.ts — the pure "whose face, if anyone's" decision, unit-tested.
  • sidebar/PhaseSidebarOwnerAvatar.tsx — new fork-owned component, split into a presentational view (asserted with static markup) and a thin connected wrapper. Rendered only when the helper returns a user id, so rows that need no avatar never subscribe to the org directory and the memo'd row keeps comparing by value.
  • One guarded element at the row call site. Departed or not-yet-loaded members fall back to initials via resolveUser, so a row never shows a hole.

Verification

  • vp test run on the two touched test files — 82 passed.
  • tsgo --noEmit for @t3tools/web — clean.
  • vp lint and vp fmt on the changed files — clean.
  • node scripts/check-fork-markers.ts — passed.

No before/after images: capturing them needs a browser session on the shared dev server, which was not authorised for this change. The rendered result is verified on expbkt3 after deploy, which is what this branch targets.

🤖 Generated with Claude Code


View with [code]smith Autofix with [code]smith
Need help on this PR? Tag @codesmith-bot with what you need. Autofix is disabled.

In a shared environment the experimental sidebar mixes my own sessions with
the ones teammates started and tagged me into, and the rows looked identical —
you had to open a thread to learn whose it was.

Thread rows now carry the owner's avatar immediately left of the provider icon,
but only when the owner is someone other than the current operator: my own face
on every row of my own sidebar would carry no information. Unowned threads
(single-user mode, awaiting backfill) and sessions with no team identity show
nothing, so nothing changes outside team mode.

The decision lives in `phaseSidebarRowOwnerAvatarUserId`, and the avatar is a
new fork-owned component that only subscribes to the org directory on the rows
that actually render one.

Claude Opus 5 via Claude Code in T3 Code.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
@github-actions github-actions Bot added vouch:trusted PR author is trusted by repo permissions or the VOUCHED list. size:M labels Aug 26, 2026
@github-actions

Copy link
Copy Markdown

Thread transfer impact

✅ Thread transfer remains within every enforced ceiling.

ℹ️ No successful main baseline artifact is available yet. This run establishes the initial measurement.

Provider Metric Main baseline This PR Impact PR ceiling
Codex Total thread wire 11.5 KiB 15.1 KiB
Codex Thread snapshot wire 5.7 KiB 7.3 KiB
Codex Live turn WebSocket wire 5.7 KiB 7.8 KiB
Codex Live turn WebSocket decoded 50.4 KiB 66.4 KiB
Codex Live turn messages 11 21
Claude Total thread wire 11.4 KiB 15.1 KiB
Claude Thread snapshot wire 5.7 KiB 7.3 KiB
Claude Live turn WebSocket wire 5.7 KiB 7.8 KiB
Claude Live turn WebSocket decoded 51.2 KiB 66.4 KiB
Claude Live turn messages 11 21

Baseline: unavailable · PR result: 81842e7 · Source CI: success

Scenario and decoded snapshot size

10 historical turns, 5 command tools per turn, 878.9 KiB retained MCP result per historical turn, and a 1.05 MiB retained result in the measured turn.

  • Codex decoded thread snapshot: 95.6 KiB
  • Claude decoded thread snapshot: 96.3 KiB

Updated in place by a trusted workflow. PR artifacts are strictly validated and never executed.

@tusharbhardwaj-bk
tusharbhardwaj-bk merged commit 0f298b7 into expbkmain Aug 26, 2026
13 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

size:M 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