Skip to content

fix(keychain): customer QA fixes for SDK, passkey recovery and onboarding - #670

Merged
glitch003 merged 10 commits into
mainfrom
fix/keychain-user-qa
Sep 16, 2026
Merged

glitch003 merged 10 commits into
mainfrom
fix/keychain-user-qa

Conversation

@clawdbot-glitch003

@clawdbot-glitch003 clawdbot-glitch003 commented Sep 16, 2026

Copy link
Copy Markdown
Collaborator

Summary

Customer-path QA of https://keychain.litprotocol.com using public docs and published npm 2.0.2 first, followed by fixes. No real customer credentials, paid provider calls, attestation bypass or funded transactions.

  • Fix default Node SDK TLS-to-enclave binding via conditional package entry, preserving browser bundling.
  • Fix packed TypeScript declarations and test strict external tarball consumers.
  • Reject inconsistent identity metadata, prototype-property lookup traps, invalid MCP request IDs and destroyed-client operations; add CLI help/version.
  • Fix cached-passkey/recovery login selecting a new empty vault. Explicitly loaded backups now take precedence over duplicate root-owned vaults; root backup recovery works without backend discovery, but only for an exactly matching selected credential. Authorization checks remain in place.
  • Publish owner/provider guides and missing /README.md; remove broken platform links; clarify export/get versus service/use, Supabase credential shape, MCP paths, credential exposure, attestation, rotations and write retries.
  • Prepare SDK 2.0.3 and align examples. Not published or deployed. Publish and verify 2.0.3 before deploying these version-pinned docs.

Verified against production

Real virtual-CTAP2 passkey registration and existing-key login; dummy secret create/approve; attestation-enabled CLI/SDK/MCP retrieval; child environment/file handling and cleanup; denied unapproved agent; disable/enable; revoke/reapprove; rotation v2 with old config; permission renewal; backup-selected recovery using only the recovery passkey; execution-key replacement (old config 401, new config succeeds).

The fixed Node SDK also completed live attestation with all six checks, including tls-certificate-in-tee. Production customer-path tests used published 2.0.2; local regression tests verify the candidate fixes, not their deployment.

Local validation

  • npm test: 88 passed, 3 environment-dependent skips, 0 failures.
  • PostgreSQL-backed local integration reran those API cases: 3 passed, 0 skipped; 9 Rust tests passed, 1 live Stripe test ignored; 3 application browser E2E tests passed. Lit/Stripe are local mocks in this suite.
  • Dedicated passkey browser regressions: 10 passed. Real Chromium virtual-authenticator WebAuthn and application UI; public network mocked, stopping before real TEE login.
  • Build, TypeScript, strict Clippy, formatting and diff checks passed.
  • Packed tarball strict TypeScript, Node TLS runtime fixtures, and browser bundling passed.
  • Independent review found no additional blocking SDK/initial-passkey security or logic defects; explicit-backup follow-up inspected and rerun at integration.

Repeated GitHub first-test module-import failures led to replacing the Vite dev server with an isolated prebuilt UI/identity harness. No test retries or weakened assertions. Three cold starts and a CI-mode local run each passed all 10 passkey tests; the integrating reviewer independently reran all 10 successfully. Two new harness readiness/cleanup tests pass. Exact original optimizer race is not claimed proven. All GitHub checks passed on final commit cc22df17a0909939947c03acc300363e9852f71f, including the complete Keychain job. Ready for review; not merged, deployed or published.

Honest coverage limits

Provider success calls need disposable GitHub/Stripe/OpenAI/Slack/Supabase credentials. Google/wallet login, physical/cross-device passkeys, paid checkout/cancellation, over-limit billing, actual elapsed expiry and complete backend data-loss recovery remain unverified. Two intermittent production failures are recorded without unsupported root-cause claims. This is broad customer-path QA, not proof of exhaustive security coverage.

Detailed report: user-qa-2026-09-16.md. Private keys/configs/backups excluded.

@clawdbot-glitch003
clawdbot-glitch003 marked this pull request as ready for review September 16, 2026 19:53
@clawdbot-glitch003
clawdbot-glitch003 requested a review from a team September 16, 2026 19:53
Landing.tsx and AddSecret.tsx hard-coded `@lit-protocol/keychain@<version>`
and had already drifted (2.0.2 vs 2.0.3). Read the version once from
sdk/package.json via web/src/version.ts and add a docs test asserting every
pin in the markdown guides, llms.txt and web sources equals that version.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
@glitch003
glitch003 merged commit 7e525d0 into main Sep 16, 2026
14 checks passed
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