Conversation
Use the existing exact-key agent evidence to show Agent when no public or configured name resolves. Preserve relay metadata and configured names for stopped local agents. Add mounted profile-panel regression coverage for identity evidence, failed profile reads and retry recovery, remote metadata, and stopped-agent names. Signed-off-by: Matt Toohey <contact@matttoohey.com>
Signed-off-by: Matt Toohey <contact@matttoohey.com>
Signed-off-by: Matt Toohey <contact@matttoohey.com>
wesbillman
left a comment
There was a problem hiding this comment.
Star Lord automated source review (via Wes’s account)
No actionable findings in the reviewed change. This is a non-blocking source-review comment, not approval or merge authorization.
- Head:
48ea5bfb3e6ede721e5a020e036d67fbbd1beaa5 - Base/merge base:
85d6bf82c54d1c8d930d58444597a1fe31cc8975
Reviewed the complete eight-file diff, added test sources, applicable repository/product guidance, and the relevant callers and lifecycle. The avatar hint follows both channel and thread MessageRow paths through the existing panel resolver (ChannelsPage.tsx:729–800, ThreadPanel.tsx:513–519,626–632). Public identity links and the copyable npub retain their ordinary path.
The presentation/authority split is preserved: ProfilePanel.tsx:196–220,436–452 uses the hint for appearance and the Instances presentation, not owner evidence or Runtime/Memories admission. ProfileInstances.tsx:47–70,97–118 still matches exact keys within the active community and separately gates private navigation; local lifecycle actions retain exact native-record matching. Configured names, profile hydration/retry, and shared-directory membership remain owned by existing services. The change is proportionate to the stated fallback fix.
Validation limits: source analysis only; no PR code, tests, builds, app launches, or live workflows executed. Inspected sources were verified against pinned Git blobs; no dirty checkout inputs or delegated lanes. The PR reports 4,433 passing frontend tests and one config-subprocess timeout at this head, with no baseline reproduction established; it also reports a previous-head WebKit failure without a baseline reproduction. Those are author-reported results, not independently reproduced or classified as baseline failures here. No new CI snapshot was taken. Synthetic recordings do not establish live-relay/native/packaged behavior, and human acceptance remains unconfirmed in the PR description.
kalvinnchau
left a comment
There was a problem hiding this comment.
🤖 One profile-presentation boundary finding inline; no privilege escalation established.
|
|
||
| export function profileKey(target: string): string | undefined { | ||
| if (profileAgentHint(target)) | ||
| return target.slice("buzz:agent-profile:".length); |
There was a problem hiding this comment.
🤖 [P2] Keep app-local presentation hints out of public profile parsing
Expanding profileKey to accept the internal agent-hint form also admits it through MessageMarkdown’s URL transform and profile-link renderer. With Profiles enabled, the real panel matcher accepts that target, so a message-body link can make a human identity open with agent appearance and the agent empty-state presentation despite lacking agent evidence. This contradicts docs/profiles.md:167–173, which limits the hint to existing app-local display evidence. Ownership, Runtime and Memories remain independently gated; this is misleading presentation, not privilege escalation.
Keep the general message-body profile locator restricted to the ordinary public identity format, and handle the internal hint separately at the trusted panel boundary. Add a regression asserting that message-body parsing cannot introduce an agent appearance hint.
Fix
Preserve an agent's identity when its profile has no public metadata and it is not managed locally. Opening an agent message now carries the existing agent display hint into the profile panel, including from a thread.
The Instances section already existed before this PR. Recognizing the message-only agent now makes that section visible for this case; its empty-state wording is updated as described above.
Before
Base
85d6bf82c54d1c8d930d58444597a1fe31cc8975: an agent message already has a squircle avatar, but opening its profile shows Unknown profile with a circular avatar. The recording opens the profile, retries missing metadata, and opens the same agent from a thread.before.mp4
After
Head
48ea5bfb3e6ede721e5a020e036d67fbbd1beaa5: the identical identity and actions retain the agent-shaped avatar, show Unknown agent, and explain Not managed on this device. Neither snapshot has a local agent record, library identity, or public profile for this agent.after.mp4
Validation
48ea5bfb: pre-push TypeScript, 823 related tests in 52 files, design-system checks, and hosted DCO passed.16f45ba6: 14/14 passed, Chromium and WebKit. No browser test cases added or removed. Added mounted/unit coverage for message hint navigation, strict target parsing, exact-key/community boundaries, metadata hydration/retry, stopped names, and hint-only profiles without private controls; the wording expectations were updated at48ea5bfb.48ea5bfbin Chromium/WebKit desktop and Chromium at 390px, with no profile overflow or page errors. Both MP4s are H.264; encoded frames were visually inspected.48ea5bfb: 4433 passed, 1 failed (391 files passed, 1 failed).dev/vite-config.test.mjs:128failed because its config-loading subprocess exceeded its 10-second timeout (ETIMEDOUT). That file is outside this change; a baseline reproduction was not established. The full local suite is not green.Previous-head CI (
16f45ba6) passed JavaScript, Rust/integration, Chromium and two WebKit shards; one WebKit shard failed innavigation-repairs.spec.mjs:89when the fixture observed a relay-query access-control console error during reload/Back. Failed job. This is outside the changed profile paths; no baseline reproduction was established. CI runs again for the new head.The recordings use a synthetic read transport and empty native inventory, not a live relay or running agent process. External requests were blocked; none were attempted. They exercise production UI wiring, not packaged startup/authentication. Recording fixtures and media are local-only, not committed. Native/ACP, full browser-suite, and packaged acceptance remain deferred locally; hosted CI runs separately.
Draft pending human testing. Open a message from an agent that has no local record or public profile, retry, then open it from a thread: expect the agent-shaped avatar, Unknown agent heading, and no private controls. Verify named and stopped local agents retain their names. Human acceptance has not been confirmed.