Skip to content

improve(chat): show the selected agent's resolved welcome identity - #1868

Draft
karkarl wants to merge 2 commits into
openclaw:mainfrom
karkarl:karkarl-agent-identity-rpc-parity
Draft

karkarl wants to merge 2 commits into
openclaw:mainfrom
karkarl:karkarl-agent-identity-rpc-parity

Conversation

@karkarl

@karkarl karkarl commented Oct 23, 2026 •

Copy link
Copy Markdown
Collaborator

What Problem This Solves

The native chat welcome header uses only placement-catalog identity instead of the selected agent's resolved Gateway identity.

User Impact

User impact: the welcome header can show the selected agent's resolved name, emoji and avatar without waiting for project/environment discovery. Existing matching-agent catalog identity remains the fallback when lookup is unavailable or fails.

Draft, not ready to merge: local ARM64 build and native UI-test compilation passed, but full local suites retain one symlink-privilege failure and four ARM64 prerequisite-test failures. The first native-proof launch failed on an unsupported helper theme-setting call. After correcting that helper contract, the second launch reached readiness but its first UI command failed the owned-window foreground guard. Neither attempt produced a screenshot or visible identity proof.

Why This Change Was Made

The selected-agent read follows the pinned Apple shared request's explicit trimmed agentId and 10-second timeout. Windows requires an advertised agent.identity.get, granted operator.read or operator.admin, and the originating authenticated connection epoch. A mount-local controller clears identity on agent/connection changes and rejects canceled, late, foreign-agent and disposed-host results. Identity is display data, never routing or authorization authority, and does not block sends.

Old owner: placement catalog as the only welcome identity source. New owner: ChatAgentIdentityController plus the typed production client read; ChatComposerSession owns lifetime, and ChatWelcomePresentation applies the resolved identity or existing fallback. Native badge geometry, Windows resources and welcome copy in all six locales are unchanged.

Scope is one of two methods in the original agent category: agent.identity.get has production wiring and focused unit/authenticated-loopback evidence; native proof is still outstanding, so this PR does not make a broad verified-parity claim. agent.wait remains unimplemented/unverified. The separate agents category and scanner/support policy are untouched.

Pinned source references, not upstream runtime proof:

Evidence

Focused checks passed: 26 Shared identity/ledger cases, 23 identity/welcome/composer Tray cases, and 54 adjacent placement/authenticated-chat Tray cases, zero failures/skips in the final focused runs. The authenticated production WebSocket client covers explicit agent parameters, capability/scope denial without dispatch, null/malformed/foreign/error replies, in-flight cancellation with a late reply, and reconnect epoch fencing. A separate non-native integration drives the actual bridge, provider, factory, composer session and welcome projection with Resolved Research, distinct from the catalog's Fixture Research, without placement requests.

Automatic CI attempt 1 failed on one task-caused architecture-ledger metadata error: two guard references had been concatenated where one Type.Method is required. The exact test was reproduced locally (1 failure), the ledger-only repair was pushed in 080d9666, and all 26 focused Shared identity/ledger cases then passed. No guard or test was weakened. That CI attempt's successful native/MSIX/UI/Tray jobs tested merge commit e6e4242e1b5dee24476df85f75bd149f18ba803d, not the new head; they do not satisfy current-head local or visible proof.

Repaired-head automatic CI passed: run 40035280316, attempt 1 reports success for head 080d9666c0fb64d1f9b3e0aa61dc73668d49ad4b. Its actual checkout was PR merge a94b03e516e9572b13edb36f70a6847be27760c0 (head merged into de162ba66028681700b61b5cd106323ad78aa6e8), not the later live merge ref. Shared: 4,681 passed, 8 skipped, 0 failed; Tray: 4,515 passed, 0 skipped/failed. Native x64 publish, x64/ARM64 MSIX, hosted UI/functional/accessibility, setup/connect and recovery jobs, and CI Gate all succeeded. Ordinary hosted skips do not count as custom proof. CI does not replace the expressly gated local closeout or active-state native identity screenshots.

Independent narrative source/rubber-duck review covered the original 4aaa3d90 implementation, transport/pending-request fault paths, tests and proof plan: no P0-P3 defects were identified in that review. The later CI-discovered ledger metadata defect above was fixed and directly checked against the existing ledger validator. One non-blocking review suggestion concerned incidental whitespace in an internal selected-agent ID; no demonstrated production path supplies such IDs, so normalization behavior was not broadened.

Review limitations: the task tool's rubber-duck role was instructed to use source-read tools only, with no shell/build/test/app execution, edits or nested agents. It self-reported one prohibited powershell invocation (git status --porcelain) that failed with a pipeline-binding error, then returned to source reads; no build/test/app execution was reported. This process deviation is disclosed, not described as a fully source-only or isolated review. Reviewer model identity was not independently verified. Canonical shared autoreview/Codex is unavailable; no installation attempted and no helper-clean stamp claimed.

Change Type

  • Bug fix
  • Feature
  • Refactor
  • Docs or instructions
  • Tests or validation
  • Security hardening
  • Chore or infrastructure

Scope

  • Tray or WinUI UX
  • Windows node capability
  • Local MCP or winnode
  • Gateway, connection, or pairing
  • Setup or onboarding
  • Permissions, privacy, or security
  • Tests, CI, or docs

Required proof pools

  • windows-winui-interactive: inspect the active welcome header showing the selected agent's resolved identity, agent-switch invalidation, and fallback on the current binary. Blocked: the original Light/resolved launch failed before UI commands; the corrected helper reached readiness, but its first wrapper-driven inspect failed the foreground guard before semantic inspection, selection or capture. Compilation, configuration readback and MCP discovery are not visible proof. No Dark, fallback or research-empty native state was exercised.

Validation

All local build/test checks set $env:OPENCLAW_REPO_ROOT=(Get-Location).Path. The Oct 26 full runs also set OPENCLAW_TRAY_DATA_DIR to the task-owned artifacts\identity-validation-080d9666\settings, align both local-data overrides to its localappdata, disable build-server reuse, and unset integration/GPU/E2E opt-ins. Build, Shared and Tray ran sequentially under the explicitly granted priority-13 slot; that slot was released to Usage14 after all owned commands exited and the worktree-command-line process scan returned zero.

Exact command Result
dotnet test .\tests\OpenClaw.Shared.Tests\OpenClaw.Shared.Tests.csproj --filter 'FullyQualifiedName~AgentDisplayIdentityTests|FullyQualifiedName~GatewayFixtureProtocolTests.AgentIdentity' --logger 'trx;LogFileName=agent-identity-shared.trx' --verbosity quiet Passed: 20, failed: 0, skipped: 0
dotnet test .\tests\OpenClaw.Shared.Tests\OpenClaw.Shared.Tests.csproj --no-build --no-restore --filter 'FullyQualifiedName~ArchitectureLedgerConsistencyTests.Authoritative_and_closed_rows_are_guarded_or_review_only' --logger 'trx;LogFileName=agent-identity-ledger-before.trx' --verbosity quiet Before ledger repair: failed 1, passed 0, skipped 0; reproduced the CI defect
dotnet test .\tests\OpenClaw.Shared.Tests\OpenClaw.Shared.Tests.csproj --no-build --no-restore --filter 'FullyQualifiedName~ArchitectureLedgerConsistencyTests|FullyQualifiedName~AgentDisplayIdentityTests|FullyQualifiedName~GatewayFixtureProtocolTests.AgentIdentity' --logger 'trx;LogFileName=agent-identity-shared-ledger-after.trx' --verbosity quiet After ledger repair: passed 26, failed 0, skipped 0; existing test binary reads the updated ledger at runtime
dotnet test .\tests\OpenClaw.Tray.Tests\OpenClaw.Tray.Tests.csproj --filter 'FullyQualifiedName~ChatAgentIdentityControllerTests|FullyQualifiedName~ChatWelcomePresentationTests|FullyQualifiedName~ChatComposerSessionTests' --logger 'trx;LogFileName=agent-identity-tray.trx' --verbosity quiet Passed: 23, failed: 0, skipped: 0
dotnet test .\tests\OpenClaw.Tray.Tests\OpenClaw.Tray.Tests.csproj --no-restore --filter 'FullyQualifiedName~ChatPlacementControllerTests|FullyQualifiedName~InteractiveGatewayChatTests' --logger 'trx;LogFileName=agent-identity-related-tray.trx' --verbosity quiet Passed: 54, failed: 0, skipped: 0
.\scripts\validate-docs.ps1 Passed: 66 maintained Markdown files; both proof-pool schema paths and documentation-flow regression passed
git --no-pager diff --check Passed
Automatic GitHub Actions, run 40035280316 attempt 1, checkout a94b03e516e9572b13edb36f70a6847be27760c0 Passed overall and CI Gate. Shared: 4,681 passed / 8 skipped; Tray: 4,515 passed / 0 skipped; no failures. Native publish/MSIX jobs succeeded. This is hosted CI, not a local command or native visible proof.
.\build.ps1 Passed locally on frozen 080d9666: full Debug build, native Windows ARM64 output
dotnet test .\tests\OpenClaw.Shared.Tests\OpenClaw.Shared.Tests.csproj --no-restore --logger 'trx;LogFileName=identity-shared-full.trx' --results-directory (Join-Path $root 'shared') --verbosity quiet Failed: 4,662 passed, 1 failed, 26 skipped, total 4,689. $root is the absolute worktree-local artifacts\identity-validation-080d9666.
dotnet test .\tests\OpenClaw.Tray.Tests\OpenClaw.Tray.Tests.csproj --no-restore --logger 'trx;LogFileName=identity-tray-full.trx' --results-directory (Join-Path $root 'tray') --verbosity quiet Failed: 4,510 passed, 4 failed, 0 skipped, total 4,514
dotnet build .\tests\OpenClaw.Tray.UITests\OpenClaw.Tray.UITests.csproj --no-restore -r win-arm64 -p:Platform=ARM64 --verbosity quiet Initial failure: NETSDK1004, missing UI-test assets file
dotnet build .\tests\OpenClaw.Tray.UITests\OpenClaw.Tray.UITests.csproj -r win-arm64 -p:Platform=ARM64 --verbosity quiet Passed after restoring missing assets: 0 errors, 1 obsolete Icon API warning in generated XAML code. Compilation only; no native tests/app launched.
dotnet build $HelperProject "-p:FixtureDirectory=$FixtureBinaries" "-p:RestoreSources=$EmptyLocalRestoreSource" -p:UseSharedCompilation=false -nodeReuse:false --verbosity minimal Corrected auxiliary-helper build attempt 2 failed: 45 duplicate-definition/attribute errors, 0 warnings. A nested review export was included by the SDK recursive Compile glob. After moving that complete export outside the project with its bytes preserved, attempt 3 passed: 0 warnings/errors, 3.40 seconds, same source/project and offline command. Both attempts are retained. Compilation only, not corrected-helper runtime proof. Variables redact only private paths from the recorded argument arrays.
dotnet $Helper --desktop-authorized $FixtureBinaries $FrozenApp $Artifacts Light resolved 600 First helper-driven native attempt failed: exit -532462766. app.settings.set rejected AppTheme before identity-ready, UI commands or capture. Zero wrapper UI commands and zero PNGs; this was not a TRX native-test case. Variables replace only private absolute paths from the retained exact launcher argument array.
dotnet $CorrectedHelper --desktop-authorized $FixtureBinaries $FrozenApp $FreshArtifacts Light resolved 600, then & $UiWrapper -ReadyFile $Ready -WindowHandle $OwnedHwnd -Operation inspect -ExpectedState main -TimeoutSeconds 60 -StopGraceSeconds 10 -DesktopAuthorized Corrected attempt failed at the first inspect: Foreground is not the bound task-owned window family. No activation/input attempted. One wrapper command, zero successful UI commands/selections/captures/PNGs. Inspect helper exited -532462766; after the exact printed stop file was created, normal fixture cleanup exited 0. Launcher exit 0 is not a proof pass. Variables redact only private paths and the actual run-bound HWND from the retained argument arrays.

Fresh full-suite failures were inspected, not inferred from other lanes. Shared MxcFolderAdmissionTests.OwnedJunctionAndSymbolicLinkAreRejectedWithoutFollowingTheirChildren(symbolic: True) fails at line 230 while creating its symbolic-link fixture: A required privilege is not held by the client. All four BuildPrerequisiteTests.CheckOnly_UsesTheAppLocalRuntimeResolver cases fail at lines 85/90: the child reports Architecture: ARM64, so build.ps1 bypasses the x64 resolver and emits neither expected resolver message despite the fixture's AMD64 environment override. The four cases cover absent/old/current x64 runtime versions and an arm64 runtime fixture. No privilege, runtime, prerequisite guard or test was changed. These failures remain explicit local blockers, not baseline-equivalence or all-green claims.

Initial focused test compilation exposed fixture-exception visibility, an xUnit assertion analyzer rule and missing required test-fixture titles. These test-authoring errors were corrected before the successful runs above. No test was weakened or skipped.

Real Behavior Proof

  • Environment tested: native Windows ARM64 controller, .NET 10 tests, temporary synthetic loopback Gateway with authenticated production WebSocket client, isolated task-owned settings/local-data roots. Local app and UI-test compilation completed. Two separately authorized helper-driven launches used the frozen full-build binary and distinct fresh synthetic fixture profiles; no shared Gateway/profile was mutated.
  • PR head or commit tested: 080d9666c0fb64d1f9b3e0aa61dc73668d49ad4b, based on e5122db3c9433f6281025f4149420183f94c71f1. Production/test sources are unchanged from 4aaa3d90; only the executable ledger guard reference was corrected. The 26-case rerun used the existing non-native test binary and read the repaired ledger at runtime before commit. Source hashes are manually recorded, not a signed runner receipt or native binary binding. Earlier 23/54-case Tray runs remain associated by unchanged source, not claimed as freshly rerun.
  • Exact steps or command run: the two focused dotnet test commands above, including ProductionBridgeProviderAndFactory_ProjectResolvedSelectedAgentFromAuthenticatedSocket.
  • Evidence after fix: copied runner output: Passed! - Failed: 0, Passed: 26, Skipped: 0, Total: 26 (Shared identity/ledger), and Passed! - Failed: 0, Passed: 23, Skipped: 0, Total: 23 (Tray).
  • Observed result: production bridge/provider/factory/session lookup projects Resolved Research and its emoji for the explicit research agent; no projects.list/environments.list is dispatched. Disconnect clears resolved metadata. Unit checks independently reject queued foreign/stale/disposed results and preserve matching-agent fallback.
  • Screenshot or artifact links verified? (Yes/No/N/A): N/A. No screenshot or externally uploaded artifact is claimed.
  • Local binary preflight: source hashes rechecked against frozen 080d9666 and worktree clean after validation. Full-build win-arm64\OpenClaw.Tray.WinUI.exe SHA256 D979A2FB9ACFAF8152CC02997F66D1231E741434B948642C6387F9CD618FE36A, DLL 5CE5B1296617AD4D33D9D28B825C1730EAFEFC90CC333B159A400F83378BAAFF, PRI 84BCB5868FCA7E06B3977B5B8C9B0156AE02E90BB701342F19FD79F27DC3FD89. Product version includes full 080d9666; files were produced Oct 26 at 16:37 UTC. The separate ARM64 UI-test build produced test DLL 4A09A14B8664A41640229BFFAABCFB4BA547B1C82D46EDAABF3A20DD3FCB2E45 and its referenced app DLL F0E50799ABC07D2014F3F9DBD6CC5B7E6E2AE588C62A36050E6E150A393A3C75 at 16:46 UTC. Distinct app DLL outputs are recorded separately, not conflated. Local receipts/TRX are retained but are not public artifact links.
  • First native-proof failure, preserved: the auxiliary helper DLL SHA256 078DD2A2723CA826931206DD371EFC76B883A892DA0BFB473473FF7C2583C5E1 launched the frozen app on October 26, then app.settings.set returned Setting 'AppTheme' is not accessible at helper Program.cs:86. The same unsupported settings.get call at line 88 was not reached. The production safe-settings allowlist deliberately excludes AppTheme; this is a helper contract error, not a demonstrated agent.identity.get failure. No identity-ready/HWND/stop-file receipt, wrapper UI command or PNG was produced. The helper's await using disposal ran; the owner recorded both processes, listeners and isolated profile roots drained before releasing the desktop lease. That cleanup is an author observation, not independent process attestation.
  • Source-reviewed helper correction: the existing fixture constructor already writes explicit AppTheme = "Light" before startup. The session-helper-only correction removes the unsupported MCP calls, rejects non-Light before startup, and requires explicit Light from read-only post-start profile configuration. Only its path/hash/theme are emitted, not raw settings. The product allowlist and fixture remain unchanged. Persisted configuration is neither a launch-time byte snapshot nor rendered Light proof. Its first compilation failed because exported review copies were recursively included; byte-preserving relocation outside the helper project resolved that build-input error without source/project edits. Successful attempt 3 binds corrected helper source SHA256 5C6FC31133960F593BFD6C7A6A593A2B62F3ECB848DC30313ACA53A01BEF874C to DLL A20E8DE2A10527B0812DE6201652CCED6FD544FF1B695AD6C1B6EC7BF38691FE.
  • Corrected runtime failure, preserved separately: the new helper reached identity-ready with explicit Light configuration readback, then mandatory wrapper inspect failed NativeProof.Guard:132 because the foreground window was outside the bound owned window family. No activation, global input, retry, backend substitution, selection or capture was attempted. Exactly one wrapper command ran and failed. The actual run's printed stop file was created; the launcher disposed normally. The owner recorded the app, fixture and UI-helper processes, both listeners and all four isolated profile roots absent before explicitly releasing the desktop lease. These are author-recorded drain observations, not independent process attestation.
  • Not verified or blocked: local full suites are not green for the exact failures above; active-state native screenshots, Light rendering, agent-switch invalidation and fallback remain unverified. The owned-window foreground requirement remains intact, and no further runtime or focus operation is authorized by these results. Real deployed Gateway/provider behavior remains unverified. Neither failed attempt establishes visible UI behavior. Loopback/projection evidence is not visible UI proof, upstream execution proof, production package/source binding, MCP/node invocation proof or complete proof-pool coverage.

Security Impact

  • New permissions or capabilities? (Yes/No): No.
  • Secrets or tokens handling changed? (Yes/No): No.
  • New or changed network calls? (Yes/No): Yes.
  • Command or tool execution surface changed? (Yes/No): No.
  • Data access scope changed? (Yes/No): No.
  • If any answer is Yes, explain the risk and mitigation: adds one display-identity read per selected agent/connection lifetime through the existing authenticated transport, gated by actual advertised method and read/admin authority. Metadata cannot change routing or credentials. Avatar display reuses the existing bounded native image resolver; avatarSource is never treated as a local path. Failure diagnostics record only the exception category, not identity payloads or credentials.

Compatibility and Migration

  • Backward compatible? (Yes/No): Yes.
  • Config or environment changes? (Yes/No): No.
  • Migration needed? (Yes/No): No.
  • If yes, list the exact upgrade steps: N/A. Older/unauthorized Gateways retain the existing catalog fallback.

Review Conversations

  • I replied to or resolved every bot review conversation addressed by this PR.
  • I left unresolved only conversations that still need maintainer judgment.

Read agent.identity.get through the authenticated production client with method, read-scope, epoch and selected-agent ownership guards. Keep welcome identity independent of placement discovery and retain explicit catalog fallback.

Add focused parsing, authenticated loopback, lifecycle and production bridge/provider/composer coverage. agent.wait remains out of scope; native visible proof and full validation await shared-host leases.

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
@clawsweeper

clawsweeper Bot commented Oct 23, 2026 •

Copy link
Copy Markdown

🦞👀
ClawSweeper picked this up.

Pull request received. I will update this pull request when review starts.

ClawSweeper review complete

ClawSweeper finished reviewing this revision. The review result is being finalized.

View the workflow run.

@clawsweeper clawsweeper Bot added P2 Normal priority bug or improvement with limited blast radius. rating: 🦪 silver shellfish Thin PR readiness signal; proof, validation, or implementation needs work. status: ⏳ waiting on author ClawSweeper has contributor-facing work open and is waiting for author action. labels Oct 23, 2026
@clawsweeper

clawsweeper Bot commented Oct 23, 2026

Copy link
Copy Markdown

Codex review: needs changes before merge.

What this changes

This PR resolves the selected agent’s welcome name, emoji, and avatar through the authenticated Gateway, retaining catalog identity as fallback.

Example: Select the research agent whose catalog name is Fixture Research and resolved name is Resolved Research.

  • Before: The welcome header depends on placement discovery and displays Fixture Research.
  • After: The header can display Resolved Research and ✨ independently of placement discovery.

Review scores

Measure Result What it means
Overall readiness 🦪 silver shellfish (2/6) The focused implementation and socket/lifecycle coverage are useful, but the supplied evidence does not yet establish the changed native UI behavior.
Proof confidence 🦪 silver shellfish (2/6) Real behavior proof is not required for maintainer- or bot-authored pull requests.
Patch quality 🐚 platinum hermit (4/6) No actionable review findings were identified.

Product

Kind: Feature · Worth it: Yes · Fix scope: Complete
User problem: The welcome header can show catalog identity instead of the selected agent’s resolved identity and must wait for placement discovery.
Reason: The collaborator-authored direction provides a focused user-visible improvement through an existing Gateway contract without adding settings or changing chat routing.

Merge readiness

⛔ Needs changes before merge - 1 item remains

Keep this collaborator-authored draft open: it adds useful selected-agent identity behavior absent from main, and review found no concrete introduced defect.

Priority: P2
Reviewed head: 4aaa3d90db27c618d6c22cf66a97de061d24a532

Before merge

  • Complete next step - Complete the repository-required full build and full Shared and Tray validation on authorized Windows capacity.

Findings

None.

Tests

  • Missing end-to-end proof: No current-head mounted welcome rendering scenario or base-fail/head-pass rendering comparison is supplied.
Agent review details

How this fits together

The mounted chat composer passes selected-agent and connection state to a lifetime controller, which reads Gateway display metadata and supplies it to the native welcome presentation.

flowchart LR
A[Selected chat agent] --> B[Composer session]
B --> C[Identity controller]
C --> D[Authenticated Gateway client]
D --> E[Gateway identity RPC]
E --> C
C --> F[Welcome presentation]
G[Placement catalog fallback] --> F
Loading

Technical review

Best possible solution:

Land the focused display-identity lookup with its existing catalog fallback and mount-local lifetime after the outstanding gates are satisfied.

Do we have a high-confidence way to reproduce the issue?

Current-main source directly shows catalog-only welcome identity; the supplied loopback scenario distinguishes Fixture Research from Resolved Research, but no native reproduction was independently run.

Is this the best way to solve the issue?

The implementation uses the existing authenticated client and composer lifetime while preserving placement and native-copy ownership, with no demonstrated need for a smaller alternative.

AGENTS.md: found and applied where relevant.

Codex review notes: model internal, reasoning medium; reviewed against e5122db3c943.

Provenance checked

Testing

Proof path: in-process harness.

Security

None.

Evidence

What I checked:

  • Main lacks the resolved identity path: The pinned main implementation obtains welcome identity solely from the matching placement catalog; the introduced patch adds the separate resolved-identity path. (src/OpenClaw.Tray.WinUI/Chat/ChatWelcomePresentation.cs:23, e5122db3c943)
  • Bounded authenticated lookup and lifecycle: The client requires the advertised method, read/admin scope, and originating connection epoch; the controller rejects superseded, canceled, foreign-agent, and disposed-host results. (src/OpenClaw.Shared/AgentDisplayIdentity.cs:20, 4aaa3d90db27)
  • Supplied proof and explicit draft hold: The complete PR body reports authenticated-loopback and production bridge/provider/composer projection checks, explicitly states that no native app was launched, and leaves full local validation and visible proof pending. (4aaa3d90db27)
  • Required CI failure remains unattributed: Core and CLI tests failed in Run Shared Tests after compilation succeeded; Connection and CLI tests did not run. The detailed log redirected to a host blocked by the network allowlist, so no patch-caused failure is established. Job: https://github.com/openclaw/openclaw-windows-node/actions/runs/40032893479/job/120686237480. (4aaa3d90db27)
  • Authoritative protocol dependency: The new production request consumes this repository’s agent.identity.get protocol. The pinned Apple request explicitly sends trimmed agentId with a ten-second timeout, and the pinned result schema defines optional name, emoji, and avatar strings. (apps/shared/OpenClawKit/Sources/OpenClawChatUI/ChatGatewayRequest.swift:95, 098e991549b7)
  • Repository policy and inspection limits: Read the complete root, documentation, and WinUI AGENTS files and applied their ownership, testing, and native-proof guidance. No maintainer-notes directory or pr-simplify skill exists. The user’s sole-reviewer instruction overrides the autoreview-helper route; no helper, second reviewer, build, or test ran. Older-content history searches encountered unavailable promisor blobs; current-main blame and commit metadata still establish the listed routing owners. The checkout remains clean. (AGENTS.md:1, 4aaa3d90db27)

Review metrics

Metric Value Why it matters
Production and test delta Production +167/-5 lines; tests and fixtures +372/-1 lines The added coverage addresses distinct wire-format, authorization, transport, lifecycle, and presentation contracts.

Labels

Label changes:

  • add P2: This improves welcome identity accuracy without blocking message sending or replacing existing fallback behavior.
  • add rating: 🦪 silver shellfish: Overall readiness is 🦪 silver shellfish; proof is 🦪 silver shellfish and patch quality is 🐚 platinum hermit.
  • add status: ⏳ waiting on author: ClawSweeper has contributor-facing work open and is waiting for author action.

Label justifications:

  • P2: This improves welcome identity accuracy without blocking message sending or replacing existing fallback behavior.
  • rating: 🦪 silver shellfish: Overall readiness is 🦪 silver shellfish; proof is 🦪 silver shellfish and patch quality is 🐚 platinum hermit.
  • status: ⏳ waiting on author: ClawSweeper has contributor-facing work open and is waiting for author action.

Rating scale

6/6 🦀 challenger crab · 5/6 🦞 diamond lobster · 4/6 🐚 platinum hermit · 3/6 🦐 gold shrimp · 2/6 🦪 silver shellfish · 1/6 🧂 unranked krab. Overall follows the weaker of proof and patch quality; ✨ marks media proof (a screenshot, video, or linked artifact) that directly shows the changed behavior.

Workflow

ClawSweeper edits this one comment on every review. Comment @clawsweeper re-review for a fresh review only. Repair and merge execution lanes are retired.

Reviewed October 23, 2026, 6:33 PM ET / 22:33 UTC.

Fix the task-owned architecture ledger row to use the validator-required single Type.Method reference. The selected-agent switch test remains the behavioral guard; reconnect coverage remains in the socket tests.

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
@github-actions

Copy link
Copy Markdown
Contributor

This pull request has been automatically marked as stale due to inactivity.
Please update it or it will be closed.

@github-actions github-actions Bot added the stale label Nov 10, 2026
@roboclaw-bot

Copy link
Copy Markdown
Contributor

PR cleanup review

Reviewed head: 080d9666c0fb64d1f9b3e0aa61dc73668d49ad4b. Main comparison: e59374c064f43d68f5c72d070d4c89ef2d20ec3b.

The visible identity goal now substantially overlaps #2044 (2812fe5): current main already uses agent.identity.get, shows Gateway names/avatars in the welcome and transcript, and shares the current roster presentation. This PR still has distinct advertised-method/scope/epoch fencing and stricter malformed-field tests, so it is not a complete hunk-for-hunk supersession. I recommend reconciling those remaining protections into the current identity owner rather than adding a second composer-owned loader. Any closure should explicitly preserve or disposition that residual work.

Action in this cleanup pass: leaving this PR open. No branch changes or runtime-proof waiver. The findings above come from source, discussion and recorded-CI review; Windows validation was not rerun in this pass.

@github-actions github-actions Bot removed the stale label Nov 11, 2026

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

P2 Normal priority bug or improvement with limited blast radius. rating: 🦪 silver shellfish Thin PR readiness signal; proof, validation, or implementation needs work. status: ⏳ waiting on author ClawSweeper has contributor-facing work open and is waiting for author action.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants