Skip to content

fix(chat): show account badges on subagent avatars - #25031

Open
juliusmarminge wants to merge 5 commits into
mainfrom
fix/issue-24896
Open

juliusmarminge wants to merge 5 commits into
mainfrom
fix/issue-24896

Conversation

@juliusmarminge

Copy link
Copy Markdown
Member

Problem

With two accounts for the same provider, chat subagent avatars show identical provider logos and hide the account identity. Reproduced lifecycle rows in the web dev app by launching subagents with the default Claude account and a yellow-accented second Claude account. Synthetic grouped fixtures in the same real app confirm the grouped avatars also omit the established initials badges.

Change

Reuse the existing provider-instance badges and eligibility rules in web subagent avatars and mobile grouped-header avatars. Preserve environment-scoped account availability and ACP agent identity. Move web status dots to the opposite corner when a badge is present, and stack grouped avatars so adjacent circles do not cover the initials.

Scope and approval

Fixes #24896

GitCafe: #24896

Triaged bug via the automated issue flow. This restores existing account identification on chat subagent avatars.

Verification

  • Real web dev app: launched subagents through two configured Claude accounts. Before: identical plain provider icons. After: neutral CL and yellow VY badges, with separate status dots.
  • vp run check:changed: format, lint, knip, affected-package typechecks and nearby tests passed.
  • Existing provider derivation and display helper suites passed in review (28 derivation tests; 29 focused tests in the final Sol review). They cover project-enabled sibling eligibility and ACP identity.
  • Two independent final code reviews found no remaining code blockers; proof coverage is assessed separately below.
  • CI, external reviews, and the bugfix handoff label remain pending for the dispatcher.

Visual proof remains incomplete: native M1/M2, absent-driver fallback, sole-account runtime registry provenance, clean W1 full-screen comparisons, and a fully settled W3 fixture require follow-up. The captures include unrelated W1 composer differences; they are disclosed below and are outside this patch.

Proof audit

Independent proof audit: full matrix INSUFFICIENT for the coverage limits below. The independent final-commit rebuild reproduced the complete timeline exactly (zero changed pixels); its full-frame difference is confined to the composer. Rebuild metrics.

Published final timeline left; independent rebuild right

Evidence

Actual app with synthetic projection fixtures, not recreated component markup. Before: 01fe8d9188. After: exact aafc777fe6. Baseline is not merge base e3592efe7f; affected renderer blobs are identical between baseline and merge base (hashes in handoff).

Environment: isolated local Linux dev checkout, Vite web5821/backend13861, environment191ee865-3fdb-4c33-a67b-e389302d0c46. CSS1440x900 -> PNG1280x800 (8/9 scale); CSS390x900 -> PNG780x1800 (2x); desktop recordings2880x1800 (2x). Every still pair uses same raster dimensions. Fonts loaded, reduced motion, no toast; twins500ms apart. SHA256 and DOM text metadata in manifest.

Coverage and limitations

  • W1: four-member collapsed/expanded group, repeated Yellow, +1, completed/failed, long title; all4 viewport/theme cells plus before/after disclosure recordings. Badges visible in final group stack. Fullframe before/after composer state differs substantially at390 and minor desktop outline/shadow; these unrelated differences make W1 fullframe diffs limited patch proof. No claim that everything outside avatars is unchanged.
  • W2: reachable singleton lifecycle rows Yellow and plain; singleton group header is unreachable from TimelineV2EventRow. All4 cells. Plain before/after pixel-identical, no badge, failed dot bottom-right. Sole-enabled settings applied with server restart, but separate runtime provider-registry snapshot was NOT captured; eligibility runtime provenance remains incomplete.
  • W3: Yellow/plain workflow openings, completed clickable phased member and failed unphased member, all4 cells. Members are settled, but synthetic child footer says Starting because no provider session. This does NOT prove a fully settled/no-loading screen.
  • W4: missing account with known Claude driver plus updated notification/no event dot, all4 cells pixel-identical. Absent-driver Bot case UNVERIFIED; current schema mandates driver and invalid wire data was not forged.
  • M1 and M2 native: UNVERIFIED, no fresh current-source EAS build/session completed. Prior static builds are not proof.
  • ACP distinct-agent supplemental fixture: UNVERIFIED.
  • Original real Hello tasks: baseline-only supplemental interaction exists locally; comparable organic before/after pair UNVERIFIED. Published matrix uses explicitly synthetic projection fixtures in the actual app.

Complete evidence index, captures, recordings, and stability comparisons

Reproduction assets

Before/after still comparisons

Zero diff: every RGB channel difference>0, amplified8x. Threshold diff: max RGB channel difference>16/255, magenta mask. No ignored pixels or region exclusion. All originals and diffs visually inspected via full-frame and difference-region sheets; clips inspected via sampled frames.

Scene CSS width/theme/state Before
01fe8d9188
After
aafc777fe6
Zero pixels / >16 pixels Amplified zero Threshold16
W1 390x900 dark collapsed Before After 147897 / 23014 8x mask
W1 390x900 dark expanded Before After 155003 / 26715 8x mask
W1 390x900 light collapsed Before After 117285 / 23911 8x mask
W1 390x900 light expanded Before After 124238 / 27673 8x mask
W1 1440x900 dark collapsed Before After 2952 / 351 8x mask
W1 1440x900 dark expanded Before After 4461 / 1218 8x mask
W1 1440x900 light collapsed Before After 6082 / 307 8x mask
W1 1440x900 light expanded Before After 7531 / 1213 8x mask
W2Plain 390x900 dark settled Before After 0 / 0 8x mask
W2Plain 390x900 light settled Before After 0 / 0 8x mask
W2Plain 1440x900 dark settled Before After 0 / 0 8x mask
W2Plain 1440x900 light settled Before After 0 / 0 8x mask
W2Yellow 390x900 dark settled Before After 1673 / 1038 8x mask
W2Yellow 390x900 light settled Before After 1552 / 973 8x mask
W2Yellow 1440x900 dark settled Before After 379 / 235 8x mask
W2Yellow 1440x900 light settled Before After 351 / 229 8x mask
W3Plain 390x900 dark settled Before After 3080 / 1505 8x mask
W3Plain 390x900 light settled Before After 2954 / 1550 8x mask
W3Plain 1440x900 dark settled Before After 713 / 369 8x mask
W3Plain 1440x900 light settled Before After 660 / 380 8x mask
W3Yellow 390x900 dark settled Before After 3348 / 2076 8x mask
W3Yellow 390x900 light settled Before After 3104 / 1946 8x mask
W3Yellow 1440x900 dark settled Before After 746 / 461 8x mask
W3Yellow 1440x900 light settled Before After 687 / 456 8x mask
W4Missing 390x900 dark settled Before After 0 / 0 8x mask
W4Missing 390x900 light settled Before After 0 / 0 8x mask
W4Missing 1440x900 dark settled Before After 0 / 0 8x mask
W4Missing 1440x900 light settled Before After 0 / 0 8x mask

Visible changes: W1 adds CL/VY account badges to stack and expanded members; status dots move opposite badges, +1 remains foreground-safe; composer differences disclosed above. W2Yellow adds yellow VY badge and moves green status dot to upper-left. W2Plain no visible changes. W3 adds provider-account badge to each workflow member and moves green/red status dots to upper-left. W4 no visible changes.

Disclosure recordings

Implemented with Claude Opus 5.5 through the Claude Code harness; triage and proof review with GPT-6.1-Sol through the Codex harness.

juliusmarminge and others added 5 commits October 25, 2026 21:31
With more than one account for a provider, subagent avatars in the chat
timeline and workflow rows looked identical. They now render the existing
ProviderInstanceIcon account badge under the shared shouldShowInstanceBadge
rule, and the web status dot moves top-left when the badge is shown.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…y visible

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@github-actions github-actions Bot added vouch:trusted PR author is trusted by repo permissions or the VOUCHED list. size:L 100-499 changed lines (additions + deletions). labels Oct 25, 2026
@macroscopeapp

macroscopeapp Bot commented Oct 25, 2026

Copy link
Copy Markdown
Contributor

Approvability

Verdict: Approved at aafc777

Macroscope's review found this PR approvable — This is a localized chat UI bug fix that adds existing provider-account badges to web and mobile subagent avatars while preserving the default avatar path. The remaining changes only handle badge-aware status-dot placement and stacking, with no schema, infrastructure, or product-default changes.

You can add or adjust custom eligibility rules. Learn more.

@github-actions

Copy link
Copy Markdown
Contributor

Thread transfer impact

⚠️ The latest CI run did not produce a thread transfer result for aafc777.

This comment will update automatically after the next completed run.

@coderabbitai

coderabbitai Bot commented Oct 25, 2026

Copy link
Copy Markdown
Contributor

Review in Change Stack →

No actionable comments were generated in the recent review.

Recent review info
Run configuration
Commits

Reviewing files that changed from the base of the PR and between 5f1f604 and aafc777.

Files selected for processing: 3
  • apps/mobile/src/features/threads/thread-subagent-group.tsx
  • apps/web/src/components/chat/TimelineV2EventRow.tsx
  • apps/web/src/components/chat/V2LifecycleRow.tsx

Included review availability: This review used your included allowance. Your plan provides up to 10 included reviews per hour; 1 remain after this review.

Walkthrough

Web and mobile subagent avatars now display provider-instance badges when eligible. The changes also adjust avatar stacking and move the web status dot when a badge appears.

Changes: Subagent Account Badges

Layer / File(s) Summary
Web lifecycle avatar badges
apps/web/src/components/chat/V2LifecycleRow.tsx
Lifecycle avatars derive provider-instance badge data and pass it to ProviderInstanceIcon. The status dot moves to the upper-left when a badge appears.
Mobile grouped avatar badges
apps/mobile/src/features/threads/thread-subagent-group.tsx, apps/web/src/components/chat/TimelineV2EventRow.tsx
Mobile grouped avatars use provider-instance data to display eligible badges. Grouped avatars on both surfaces stack earlier avatars above later ones.

Priority: Low

Estimated code review effort: 2 (Simple) | ~12 minutes

Change: Bug fix · Severity of issue fixed: Low

Possibly related issues

  • #24831 — Reports the same account-identification gap in the lineage panel; this change addresses sibling subagent-avatar surfaces, not the lineage panel.

Possibly related PRs

  • pingdotgg/t3code#24898 — Implements account badges for web and mobile subagent avatars; this PR continues that behavior with provider-instance data and avatar stacking.
  • pingdotgg/t3code#24833 — Uses the same provider-instance badge behavior for lineage, workflow, and mobile agent rows.

Suggested labels: bugfix, size:M

Suggested reviewers: maria-rcks, t3dotgg

Merge Risk: Minimal · up to aafc7

The account-badge changes appear ready to merge after normal checks; no actionable regression was established.

Pre-merge checks: Passed 4
Check name Status Explanation
Title check Passed The title "fix(chat): show account badges on subagent avatars" follows conventional commit format and matches the main change. The diff adds provider-instance account badges to web and mobile subagent…
Description check Passed The description follows the template's main sections (Problem, Change, Scope and approval, Verification). Problem and Change are clear and specific. Scope links issue #24896 and states it was triaged …
Linked Issues check Passed Issue #24896 is active and requires account identification on web subagent headers, expanded rows, workflow members, and mobile grouped avatars. The diff passes provider-instance display data and `sho…
Out of Scope Changes check Passed The changes stay within issue #24896. They modify web subagent avatar rendering and stacking, mobile grouped-header rendering and stacking, and shared provider-instance eligibility data flow needed fo…
Full details: Title check

Explanation

The title "fix(chat): show account badges on subagent avatars" follows conventional commit format and matches the main change. The diff adds provider-instance account badges to web and mobile subagent avatars, and the objectives confirm this is the primary goal. The title is specific and concise, and it names the affected surface (subagent avatars).

Full details: Description check

Explanation

The description follows the template's main sections (Problem, Change, Scope and approval, Verification). Problem and Change are clear and specific. Scope links issue #24896 and states it was triaged through the automated issue flow. Verification is extensive, with before/after captures and a coverage matrix. It also discloses incomplete proof: native M1/M2, absent-driver fallback, sole-account runtime provenance, and W3 settling remain unverified. The Verification section is very long and dense, and it relies on external links for much of the evidence. The template asks for a model and harness note, and the description includes one. The scope section also relies on a 'bugfix handoff' and 'dispatcher' process that the template does not define. Still, the required information is present and the description is mostly complete.

Full details: Linked Issues check

Explanation

Issue #24896 is active and requires account identification on web subagent headers, expanded rows, workflow members, and mobile grouped avatars. The diff passes provider-instance display data and shouldShowInstanceBadge into web SubagentAvatar and uses ProviderInstanceIcon for mobile grouped avatars. Web status dots move to the top-left when a badge is shown. Web and mobile grouped avatars change stacking order so badges remain visible. Environment-scoped provider derivation and ACP registry identity handling remain in the implementation. The PR reports passing affected checks and focused tests.

Full details: Out of Scope Changes check

Explanation

The changes stay within issue #24896. They modify web subagent avatar rendering and stacking, mobile grouped-header rendering and stacking, and shared provider-instance eligibility data flow needed for those views. The changes do not modify contracts, server behavior, or adapters. The reported ACP identity and environment-scoping adjustments support the requested account identification behavior.

Finishing Touches: 💡 1
🛠️ Fix failing CI checks: 💡
  • Commit to this branch
  • Create a new PR
📝 Generate docstrings
  • Commit to this branch
  • Create a new PR
🧪 Generate unit tests (beta)
  • Commit to this branch
  • Create a new PR
  • Autofix · Keep fixing CodeRabbit findings and required CI, and resolving merge conflicts

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

This branch has not been deployed

No deployments
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: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.

[Bug]: Chat subagent cards hide which account each subagent runs on (no account badge)

1 participant