sign_in and link now take only identityProviders; connect takes only managedConnectionProviders. supportsProvider(), which unioned the role lists with entitlementSources and never looked at the mode, is deleted: a Joystick sign_in for streampixels no longer starts, so a Deru sign-in cannot rewrite his managed credential row. No built-in profile had a provider reachable only through the union. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
4.1 KiB
Spotiverse App Profile
RETIRED from the live registry 2026-09-06. This document is the restore spec — it is deliberately kept current, not archived.
Spotiverse was a small daemon exposing the Spotify API to agents. It was lost with the
E:drive and has no repository in the swarm. The capability is wanted back — letting a Persona manage the queue during a stream is the motivating case — so this profile was removed in a way that is cheap to undo.What was removed: the
spotiverseProfileobject and its registry entry insrc/app-profiles.ts, thespotiverseslug fromappSlugsinsrc/contracts.ts, the hardcoded callback arm insrc/app.ts, and three spotiverse-specific tests intests/app.test.ts.What was deliberately kept: the whole
spotifyOAuth provider — the catalog entry insrc/providers.ts,spotifyRuntimeand its token/profile exchange insrc/oauth.ts, and"spotify"in theprovidersunion insrc/contracts.ts. The provider is intact and unreferenced. Runtime health still reportsproviders=2/6, which counts it.Why it was removed anyway:
/v1/oauth/spotify/startis gated byadmitsProviderForMode(profile, provider, mode), so a provider with no app behind it is unreachable. While the profile existed, that path was publicly reachable and would have run a real OAuth handshake against a real client secret, taking custody of a user's Spotify refresh token on behalf of a consumer that could not use it. Removing the profile closes the path; keeping the provider keeps the capability.
Restoring
Everything below this line is still accurate. To bring Spotiverse back:
- Re-add
spotiverseProfileand its registry entry tosrc/app-profiles.ts, and"spotiverse"toappSlugsinsrc/contracts.ts. Both are recoverable verbatim from commit5a15f71, the last commit before removal. - Re-add the backend callback arm in
src/app.ts. The daemon ran onhttp://127.0.0.1:8796/auth/heimdall/callback; that exact URL was the allowlisted value. - Configure
GC_ACCESS_PROVIDER_SPOTIFY_CLIENT_IDandGC_ACCESS_PROVIDER_SPOTIFY_CLIENT_SECRET_FILEpointing at a credential file. They were removed from/srv/heimdall/env/service.envon retirement, so a fresh Spotify application registration may be needed. - Restore the three tests from
5a15f71if the capabilities they covered (managed-credential resolve for spotify, portal backend callbacks) are not otherwise exercised. At retirement both were covered independently by thestreampixelsmanaged-credential tests and the genericuntrusted_backend_callbacktest, so no coverage was lost by removing them.
No provider or protocol work is required. The retirement was a registry change.
Spotiverse consumes Heimdall as a managed Spotify credential authority.
Boundary
- Heimdall owns Spotify OAuth, linked identity custody, refresh-token custody, and managed access-token projection.
- Spotiverse owns Spotify playback polling, queue command execution, command receipts, and its CultMesh/Eve provider surface.
- Odin, Eve, VoidBot Faces, and renderers consume the surface and command boundary; they do not receive Spotify tokens.
Providers
- identity providers:
spotify - entitlement sources: none
- managed connection providers:
spotify
Capabilities
spotify_player_read: shared capability after a linked Spotify identity.spotify_queue_add: shared capability after a linked Spotify identity; Spotiverse still owns URI validation and command receipts.
Local Configuration
Heimdall needs:
GC_ACCESS_PROVIDER_SPOTIFY_CLIENT_ID=...
GC_ACCESS_PROVIDER_SPOTIFY_CLIENT_SECRET_FILE=/absolute/path/to/spotify-client-secret
GC_ACCESS_APP_SPOTIVERSE_BACKEND_CALLBACK_URLS=https://your-spotiverse-portal.example/auth/heimdall/callback
Spotiverse needs only the Heimdall base URL and local portal callback/return
URLs. The callback URL Spotiverse sends in
HEIMDALL_CALLBACK_URL must exactly match one URL in Heimdall's
GC_ACCESS_APP_SPOTIVERSE_BACKEND_CALLBACK_URLS allowlist unless both services
are running on the same local host.