Skip to content
This repository was archived by the owner on Sep 28, 2026. It is now read-only.

Display names beside handles - #14

Merged
m4ttheweric merged 10 commits into
mainfrom
chat-identity
Sep 27, 2026
Merged

m4ttheweric merged 10 commits into
mainfrom
chat-identity

Conversation

@m4ttheweric

@m4ttheweric m4ttheweric commented Sep 27, 2026 •

Copy link
Copy Markdown
Contributor

rt now gives every chat identity a hidden id (handle, e.g. remy.k3f9) and a display name (remy). This parses the name, shows it everywhere and keeps acting on the handle.

Wire in

  • Parses name on presence and buddy rows and participants.aName/bName on DM rooms; falls back to the handle when rt sends none

Wire out

  • status, peek.buddies[] and jump gain name right after handle
  • peek.rooms[] gains label right after room (kai ↔ remy for a DM room, else the room)
  • targets gains labels, mapping each target string to its display text; targets.people lists @<name> once per name
  • jump --handle and quick-send --to '@...' take a name or a handle; jump tries a live agent's name first, then an exact handle, the same order rt resolves a DM in

Screens

  • Peek, quick-send, picker, launcher and the broadcast result show names; DM rooms read as kai ↔ remy
  • The quick-send popup lists one row per name, the live holder
  • broadcasts.json recipients keep handle and name; older files still load

Tests

  • 39 new; full suite 173/173 green; fmt, clippy -D warnings and repo-purity clean

🤖 Generated with Claude Code

Summary by CodeRabbit

  • New Features
    • Display names now appear across status, sign-in, buddy lists, pane search, broadcast recipients, and direct-message labels.
    • Jump and quick-send accept display names as well as handles. Handles remain the identity used for routing.
    • Target lists include display labels, and jump results include the matched display name.
  • Bug Fixes
    • Older broadcast history remains readable when recipient names are unavailable.
    • Missing display names fall back to handles for identification and display.

m4ttheweric and others added 10 commits September 27, 2026 10:43
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
… in them (JSON label too)

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

coderabbitai Bot commented Sep 27, 2026 •

Copy link
Copy Markdown

Review in Change Stack →

Navigate logical layers of code changes, visualize relationships, and explore their blast radius.

No actionable comments were generated in the recent review. 🎉

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Advanced

Run ID: 8a499f72-9792-4512-8d8e-cb2cf61a9661

📥 Commits

Reviewing files that changed from the base of the PR and between a3d9829 and affb2d3.

📒 Files selected for processing (13)
  • AGENTS.md
  • README.md
  • src/cmd/broadcast.rs
  • src/cmd/jump.rs
  • src/cmd/launcher.rs
  • src/cmd/peek.rs
  • src/cmd/picker.rs
  • src/cmd/quick_send.rs
  • src/cmd/sign.rs
  • src/json.rs
  • src/main.rs
  • src/rt.rs
  • src/state.rs

Included review availability: This review used your included allowance. 0 included reviews remain after this review. Your included PR review attempts over the past 7 days set your current allowance at 4 reviews per hour.


📝 Walkthrough

Walkthrough

This change adds display names to identity data and command output while retaining handles for identity operations. It adds participant-based DM labels to room and target displays, extends JSON response shapes, and preserves compatibility with older data and responses that omit names.

Changes

Display names and identity-aware chat commands

Layer / File(s) Summary
Shared identity and room data
src/rt.rs, AGENTS.md
Presence and buddy data now include optional display names with handle fallbacks. Rooms can include participant data and derive DM labels from participant names or handles.
Lookup and status output
src/cmd/jump.rs, src/cmd/launcher.rs, src/json.rs, src/cmd/sign.rs, src/main.rs, README.md, AGENTS.md
Jump lookup matches live display names before exact handles. Launcher status and sign results use display names when available. Jump and status JSON include names.
Pane and room display labels
src/cmd/peek.rs, src/cmd/picker.rs, src/json.rs, README.md
Peek and picker rows display and search by names while retaining handles for identity operations. Peek JSON includes buddy names and room labels.
Quick-send targets and labels
src/cmd/quick_send.rs, src/json.rs, README.md
Quick-send displays buddy names and DM participant labels while retaining handles or room IDs as targets. Target JSON adds labels and deduplicates people by display name.
Broadcast recipient identity
src/cmd/broadcast.rs, src/state.rs, AGENTS.md
Broadcast results prefer recipient names, then handles, then pane IDs. Recipient history stores optional names and still deserializes entries without them.

Priority: ⬇️ Low

Estimated code review effort: 3 (Moderate) | ~25 minutes

Change: Feature

Merge Risk: ⚪ Minimal · up to affb2

Display names are added while stable identities remain available for actions and older broadcast records remain readable. No actionable merge-blocking risk is established after normal checks.

Security Architecture Review

Security architecture risk: 🟡 Moderate · up to affb2

Display names now identify people in message-target lists. A name-based send is not visibly bound to the identity that appeared in the list, so recipient selection needs review when names or presence change.

Retained concerns

  • Medium · security · inferred: Name-only targets in the new JSON listing are not bound locally to a handle at send time. If a name resolves to a different live identity between listing and sending, a consumer could send a message to an unintended recipient; the external resolver's guarantees are not available to establish whether this can occur.
Security review details

Security Blast Radius

  • inferred — The plausible confidentiality exposure is a misaddressed chat DM from a consumer of name-based targets. No evidence establishes cross-tenant reach, elevated privilege, or a deployment change.

Security Findings and Attack Paths

  • inferred — A consumer can obtain an @name target from JSON and later submit that string for a DM. Whether another identity can acquire or collide with that name, and whether rt could then select it, remains unverified.

Trust Boundaries and Controls

  • observed — Local popup selection retains a buddy handle behind its display label. By contrast, the JSON send path passes a supplied name or handle to rt, leaving final identity resolution outside the checked code.

Resilience and Maintainability Implications

  • observed — The broadcast persistence change does not use the new name for delivery or replay selection. Older history loads with no name, while the existing write path uses temporary-file replacement.

Hardening Proposals

  • proposed — Confirm the external resolver's name uniqueness and precedence guarantees. If names can be reassigned or collide, bind listed recipients to canonical handles at send time or make ambiguity explicit before delivery.
🚥 Pre-merge checks | ✅ 4 | ❌ 1

❌ Failed checks (1 warning)

Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 76.99% which is insufficient. The required threshold is 80.00%. Docstring coverage is scoped to functions touched by this diff. Analyzed 113 functions across 11 files. (2 skipped… Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (4 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title clearly and concisely describes the main change: adding display names alongside stable handles across the interface and records.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.
Full details: Docstring Coverage

Explanation

Docstring coverage is 76.99% which is insufficient. The required threshold is 80.00%. Docstring coverage is scoped to functions touched by this diff. Analyzed 113 functions across 11 files. (2 skipped: 2 unsupported.)

  • Fix all pre-merge checks with AI
✨ Finishing Touches 💡 1
📝 Generate docstrings 💡
  • Commit to this branch
  • Create a new PR
🧪 Generate unit tests (beta)
  • Commit to this branch
  • Create a new PR

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

@m4ttheweric
m4ttheweric merged commit fa6bffc into main Sep 27, 2026
2 checks passed
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant