Skip to content

fix(hosted): list only the providers the vault still accepts - #656

Merged
dastratakos merged 1 commit into
mainfrom
dastratakos/karachi-v3
Sep 3, 2026
Merged

fix(hosted): list only the providers the vault still accepts#656
dastratakos merged 1 commit into
mainfrom
dastratakos/karachi-v3

Conversation

@dastratakos

@dastratakos dastratakos commented Sep 3, 2026

Copy link
Copy Markdown
Contributor

Summary

The Provider keys section on iOS (simulators and device) showed "The vault answered with something unexpected. Try again later." for any account that had ever stored a key for a provider the vault no longer accepts, while Conductor sessions kept observing fine.

  • refactor: trim providers to Conductor, Superset, Claude Code, Codex, and OMP #645 narrowed VAULT_PROVIDER_ID to Conductor, but provider_key rows stored earlier for cursor, devin, copilot, jules, or replicas are still there.
  • GET /api/vault/keys answered every row, and both the iOS VaultClient.listKeys and the desktop vaultKeysListAnswerFromWire reader deliberately drop the whole answer on an unknown provider id.
  • Observe and projects never hit this because they look up ciphertext by adapter id, so stale rows were simply never read there.

The list handler now filters rows to isVaultProviderId before answering, so the endpoint's answer matches the wire contract both readers enforce. Stale rows stay in the table untouched; whether to purge them is a separate decision.

Test plan

  • New test: the list omits rows stored for a provider the vault no longer accepts
  • ./scripts/check.sh passes
  • Reopen Profile on iOS against the deployed service and confirm the Conductor row draws without the error

🤖 Generated with Claude Code


Open workspace in Conductor

Open in Alchemize

Automated visual evidence

Download the deterministic macOS evidence · workflow run

  • Commit: cfcc555cbf51138062a0827049deb193b7d9bbc2
  • Scenario: smoke
  • Physical-notch check: not performed by CI

The provider trim in #645 narrowed VAULT_PROVIDER_ID to Conductor, but the
provider_key table still holds rows stored earlier for the removed ids, and
the list endpoint answered every row. Both clients' readers drop the whole
answer on a provider id they do not know, so an account with any old key
saw "The vault answered with something unexpected" on the Provider keys
section while observation, which looks keys up by adapter, kept working.
The list now filters rows to the wire contract's provider set.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
@vercel

vercel Bot commented Sep 3, 2026

Copy link
Copy Markdown

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated
luke-web Ready Ready Preview Sep 3, 2026 3:13am UTC

Request Review

@dastratakos
dastratakos added this pull request to the merge queue Sep 3, 2026
Merged via the queue into main with commit 4506965 Sep 3, 2026
10 checks passed
@dastratakos
dastratakos deleted the dastratakos/karachi-v3 branch September 3, 2026 03:27
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.

1 participant