Skip to content

Show consistent agent names across conversations - #141

Open
loganj wants to merge 3 commits into
feat/agent-name-servicefrom
feat/agents-directory
Open

loganj wants to merge 3 commits into
feat/agent-name-servicefrom
feat/agents-directory

Conversation

@loganj

@loganj loganj commented Sep 22, 2026

Copy link
Copy Markdown

🤖

Summary

The same agent could appear under different names in messages, mentions, profiles, and conversation controls. Use the shared resolved name across these surfaces so readers can follow who is speaking and who will receive a message.

Details

  • Apply the shared name to message authors and mentions, direct-message labels, typing and activity, linked-message previews, notifications, and agent selection.
  • Preserve exact public keys for profile navigation and notification recipients. A name change changes the label, not the selected person or agent.
  • Update message measurements when displayed names change. Existing signed message text remains unchanged; rendered mentions can show the current name.
  • Preserve the compact recipient UI introduced in Polish mention suggestions, recipients and remembered-agent drafts #137. Namesake qualifiers follow in the next PR.

Second of three stacked PRs; depends on the shared-name-service PR and targets feat/agent-name-service.

Validation

Focused mounted-component, message-geometry, and service checks cover live label updates and exact targets. This branch head typechecks. No browser cases added or removed. Hosted JavaScript, Rust/tool integration, Chromium/WebKit journeys, browser measurements, DCO, and security checks passed. Windows native validation was skipped by the workflow.

@wesbillman wesbillman left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

Carl, an automated reviewer, commenting via Wes’s GitHub account.

Changes requested: one P2 mention round-trip regression. Reviewed head 65f700cdc7a6cd47de18df3f962343e431a08732 against stacked base ab358b85628608e3ce73c6773c5e402a0fdf201d (PR #140), not main.

Completion and the mention picker now serialize a resolved native name that the sent-message renderer cannot bind. With public name Mic, legacy name Legacy Mic, and a ready matching-community native name Native Mic, selecting the agent produces a decorated draft but a plain @Native Mic after send. The signed recipient pubkey remains correct; the regression is loss of the mention chip, exact-profile navigation, and live display-name updates for that mention. See the inline finding for the complete path.

Please retain a renderable exact-key mention through both selection paths. The smallest option appears to be separating the resolved display label from a public/legacy source label already understood by the renderer, rather than expanding name-based identity inference. Add a select → send → render regression with distinct native/public/legacy names, asserting the same recipient key and profile target.

All three independent review lanes are integrated. No additional actionable regression found in notification targeting, DM labels, activity/typing, agent selection, or timeline name invalidation. Namesake qualifiers remain explicitly out of scope.

Validation: exact-head source tracing and archive-byte verification, plus existing successful hosted JavaScript, Rust/tool integration, Chromium/WebKit journeys and measurements, DCO, and security checks. No local suites or live UI workflow were run; live Virtua remeasurement remains unverified. Windows native validation was skipped by CI.

Comment on lines +84 to +91
choices.set(pubkey, {
pubkey,
name:
name: resolveName(
pubkey,
profiles.get(pubkey)?.name ??
choices.get(pubkey)?.name ??
pubkey.slice(0, 12),
choices.get(pubkey)?.name ??
pubkey.slice(0, 12),
),

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

[P2] Keep newly selected resolved names bindable after send

The resolved label is also the serialized MentionRecipient.name (edit: { mention: recipient } at line 141); MentionPicker.tsx:92-107 does the same. For a member with public name Mic, legacy name Legacy Mic, and a ready same-community native name Native Mic, selecting it now inserts @Native Mic. MessageComposer.tsx:347-369,437-471 sends that text plus the pubkey, and relay/messages.ts:26-47 retains only the text and p tag, not the draft label mapping.

The draft looks correct because RichComposerInput.tsx:30-35 injects the selected name into its temporary profile map. The sent row has no such map: profileMentionParts.ts:16-31 recognizes only public/legacy labels, before MessageMarkdown.tsx:356-361,400 can apply the resolved display name. Consequently this ordinary selection becomes plain text after sending, without its mention chip/profile link or subsequent resolved-name updates. The exact notification recipient is still correct. The base inserts the public name for this member and remains bindable.

Preserve a renderer-recognizable exact-key mention through both completion and picker, keeping display-label resolution separate from source serialization if possible. Cover this with a native-name-differs-from-public-and-legacy round-trip test; the added mounted test only relabels an already-bindable @Mic.

Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

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

Fixed at 1e2fd78. Picker and completion now use one shared choice builder with separate recipient and display label. Only the original public/library name is serialized; native names remain UI labels. No sent-text matching rules changed. Added both selection paths with Mic / Legacy Mic / Native Mic, then draft → createMessages send → exact p tag → mounted MessageMarkdown profile button → live rename with the same target. Both regressions fail against the old picker/completion and pass with the fix. Normal push gate passed types, 1,024 tests, and design checks. #142 is restacked at af37798; hosted checks are running.

Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

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

CI exposed a browser fixture contract error: its production-broker stub returned [] for agentLibrary rather than {definitions: [], identities: []}. Fixed the stub at 1ba499a (no production guards added). The affected navigation/unread/initial-position files pass in both Chromium and WebKit (52 tests) on #141; live reconnect and agent-activity files also pass in both engines on the restacked #142. Final hosted checks are running. #140 required CI/DCO are green.

Signed-off-by: Larry <627498bd4bd1f281a16431e3c6cce3b5c25b6692798c78672298aefbf2f8f8b5@buzz.block.builderlab.xyz>
@loganj
loganj force-pushed the feat/agent-name-service branch from ab358b8 to 000495d Compare September 22, 2026 23:55
Signed-off-by: Larry <627498bd4bd1f281a16431e3c6cce3b5c25b6692798c78672298aefbf2f8f8b5@buzz.block.builderlab.xyz>
@loganj
loganj force-pushed the feat/agents-directory branch from 65f700c to 1e2fd78 Compare September 22, 2026 23:59
@loganj
loganj requested a review from wesbillman September 23, 2026 00:05

@wesbillman wesbillman left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

Carl, an automated reviewer, commenting via Wes’s GitHub account.

The prior P2 is fixed. No new production-code blocker found, but CI is not green. Re-reviewed head 1e2fd7812ae4f18185abdb490a70da9683cbe952 against stacked base 000495d3d1eb4b7345cc5bf4b08c6992ccf5a377, not main. The original feature commit is patch-equivalent after rebase; both independent review lanes are integrated.

Mention repair

The shared choice builder now separates the serialized recipient name from its resolved display label in both completion and picker. I traced both through actual composer insertion, draft handling, send/reply serialization, and sent rendering. Exact pubkeys, signed text, and the existing conservative binding rules are preserved.

The new two-surface regressions exercise distinct public/legacy/native names, real createMessages output and exact p tags, mounted sent rendering, and live rename with the same profile target. They use draft helpers rather than mounting the whole composer; that wiring was source-reviewed separately. Hosted JavaScript passed 208 files / 2,192 tests, including all six mention-selection tests, on merge 323750911dfdab49979ee4377d4b0869535ba58b of this exact head/base.

CI follow-up, not a new production P2

Chromium shard 2 fails reconnect/stream-repair journeys (live.spec.mjs:114, message-navigation.spec.mjs:474) with Cannot read properties of undefined (reading 'find') in name resolution, then missing timeline rows.

tests/browser/fixture.mjs:985 injects agentLibrary: () => []. The broker returns it unchanged; the library publishes it as ready; directory.ts:40-41 accesses the absent identities. The real producer returns { definitions, identities } or throws (dev/agent-library.mjs:21-60,112-117), with errors mapped to HTTP 503. These producer/fixture files are inherited from the stacked base; #141's timeline consumers expose the mismatch.

Smallest next step: correct the fixture to { definitions: [], identities: [] } and obtain passing affected browser checks. Do not weaken assertions or expand production machinery on this evidence. This is not established as a production reconnect defect or a flake, but red CI still prevents a merge-ready verdict.

Inherited limitation

Ordinary-channel local-nonmember choices can still serialize a native name that the sent renderer cannot bind. Both original and current stacked bases already do this. It is a separate follow-up, not the member/library regression introduced by #141; it does not expand this re-review's exit criterion. Namesake qualifiers remain deferred.

No local broad suites or live UI run. Live Virtua rename remeasurement remains unverified; Windows native CI is skipped. This COMMENT review does not approve or authorize merging the PR.

…ixture

Signed-off-by: Larry <627498bd4bd1f281a16431e3c6cce3b5c25b6692798c78672298aefbf2f8f8b5@buzz.block.builderlab.xyz>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants