Skip to content

Pin NyxID assistant registry v8 and add dormant service.reauthorize action path - #3496

Open
eanz17 wants to merge 3 commits into
feature/integratefrom
feat/2026-08-19_nyxid-reauthorize-registry-v8
Open

Pin NyxID assistant registry v8 and add dormant service.reauthorize action path#3496
eanz17 wants to merge 3 commits into
feature/integratefrom
feat/2026-08-19_nyxid-reauthorize-registry-v8

Conversation

@eanz17

@eanz17 eanz17 commented Aug 19, 2026

Copy link
Copy Markdown
Contributor

Problem

ChronoAIProject/NyxID#1400 §1 will publish a new assistant-actions registry revision that adds a service.reauthorize descriptor. NyxIdAssistantActionRegistry.Load rejects any revision it has not pinned (NYXID_ACTION_REGISTRY_REVISION_UNSUPPORTED) and the startup path then installs the disabled registry, so all browser actions (service.connect, key.create, key.rotate) would fail closed on the next Aevatar restart after NyxID deploys the new revision. The tolerant consumer therefore has to ship first (same order as v5/v6/v7). Aevatar also lacked the producer/mapper for service.reauthorize (#3312).

Solution

Deploy-safe branch A — pin + dormant machinery, nothing advertised while NyxID production is still v7:

  • Registry pin nyxid-assistant-actions.v8 = v7 descriptors + service.reauthorize {userServiceId, requestedScopes[]} (risk grant, tier v1, remember_eligible=false, byte-pinned in docs/contracts/nyxid-assistant-conformance/v1/registry-v8.json). v8 executable set = all four; v4–v7 unchanged. Revision name is a single constant (SupportedRegistryRevision).
  • Producer NyxIdRequestServiceReauthorizeTool (exact userServiceId, 1..64 unique scopes, no secret material) — not mounted in any tool source on this branch; shared internals extracted to NyxIdBrowserActionRequestToolHelpers.
  • Registry mapper ResolveServiceReauthorize, typed blocker sub-message (ai_messages.proto), NyxIdChatBrowserActions branch → existing VerifyServiceReauthorizeAsync postcondition, flat AG-UI wire params (old nested field reserved), Studio projection/read-model for the params.
  • ParseServiceReauthorize made as strict as the typed resolver; duplicated safe-identity/distinct-set blocks in Resolve* extracted.
  • Canon (docs/canon/nyxid-chat-api.md) + conformance README "When NyxID publishes v8" checklist. Any drift in the served v8 descriptor (params_schema/risk/remember_eligible) or a different revision name disables the whole registry at startup — documented as intended fail-closed.

Follow-up (stacked, merge only after NyxID production serves v8): #3497 — tool mounts, intent candidate, system-prompt line.

Impact

agents/Aevatar.GAgents.NyxidChat (registry, browser actions, AG-UI builder, protos, executor/GAgent), src/Aevatar.AI.ToolProviders.NyxId (new tool + helpers), src/Aevatar.AI.Abstractions/ai_messages.proto, src/Aevatar.Studio.* (projection + query port), docs/canon, docs/contracts/nyxid-assistant-conformance/v1.

Verification

  • dotnet build aevatar.slnx --nologo — 0 errors
  • dotnet test test/Aevatar.AI.Tests --nologo --filter FullyQualifiedName~NyxId — 2353 passed / 0 failed
  • dotnet test test/Aevatar.Studio.Tests --nologo --filter FullyQualifiedName~NyxIdChat — 44/0
  • dotnet test test/Aevatar.Capabilities.Tests --nologo --filter "FullyQualifiedName~MainnetHostCompositionTests|FullyQualifiedName~NyxId" — 111/0
  • dotnet test test/Aevatar.GAgents.ChannelRuntime.Tests --nologo --filter FullyQualifiedName~ConversationReplyGeneratorTests — 86/0
  • python3 -m unittest tools/ci/tests/test_nyxid_conformance_guard.py tools/ci/tests/test_nyxid_semantic_evaluation.py — OK
  • bash tools/ci/nyxid_conformance_guard.sh / bash tools/ci/architecture_guards.sh / bash tools/ci/test_stability_guards.sh / bash tools/docs/lint.sh — all pass
  • Advertisement check: no mount / candidate / member / prompt mention of nyxid_request_service_reauthorize on this branch.

🤖 Generated with Claude Code

eanzhao and others added 3 commits August 19, 2026 13:03
…ction path

Pin registry revision nyxid-assistant-actions.v8 (service.connect, key.create,
key.rotate, service.reauthorize) ahead of NyxID#1400 with the assumed exact
descriptor in registry-v8.json, and add the typed service.reauthorize machinery:
producer tool class, shared browser-action helpers, registry mapper with strict
identity/scope validation, blocker sub-message, AG-UI branch, projection fields.
The verb stays unadvertised (no tool mount, intent candidate, or prompt line)
while NyxID production serves v7; a follow-up branch advertises it after v8 ships.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…ertised

Drop the ServiceReauthorize arms from the conversation GAgent route-to-intent
mapping and from the executor built-in intent checks so a published profile
whose member IntentId is literally service_reauthorize keeps its full
committed catalog instead of narrowing to a built-in the materializer does
not resolve yet. Add a GAgent test pinning the ordinary-profile-route
behaviour.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
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