Publish the atproto signing key in resolveMiniDoc's document - #21
Merged
germ-mark merged 4 commits intoAug 19, 2026
Conversation
Slingshot returns signing_key on the wire but the adapter discarded it, shipping verificationMethod: [] — so a repo proof checked against a Slingshot-resolved document failed for want of a key, nondeterministically, since optimizedResolve races this resolver against plc.directory and either can win. Spelled the way plc.directory spells it: fully-qualified did:...#atproto id, Multikey, self-controlled. Requires AtprotoTypes 0.5.1, where VerificationMethod's initializer became public (germ-network/AtprotoTypes#60). CI on this PR won't go green until that releases and Package.resolved is updated to match. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
🦋 Changeset detectedLatest commit: 8d53136 The changes in this PR will be included in the next version bump. This PR includes changesets to release 1 package
Not sure what this means? Click here to learn what changesets are. Click here if you're a maintainer who wants to add another changeset to this PR |
RepoSigningKey accepts a bare "#atproto" fragment and doesn't care about the type string, so the fragment/controller/multibase test alone let both regress silently: a bare fragment or a wrong verificationMethod type passed every existing check while breaking the parity with plc.directory this adapter exists to match. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
VerificationMethod.init is public as of this release. AtprotoClient moves along transitively (0.5.7 -> 0.5.10, its own floor's normal drift). Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
germ-mark
marked this pull request as ready for review
August 19, 2026 17:52
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
germ-mark
deleted the
mark/ger-2268-resolver-authority-carry-signing_key-into-verificationmethod
branch
August 19, 2026 18:06
Merged
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Slingshot returns
signing_keyon the wire butresolveMiniDoc'sAtproto.DIDDocumentadapter discarded it, shippingverificationMethod: [].So a repo proof checked against a Slingshot-resolved document failed for want
of a key — nondeterministically, since
germ-atproto-resolver'soptimizedResolveraces this resolver against plc.directory and either canwin.
The published method is spelled the way plc.directory spells it — fully-
qualified
did:...#atprotoid,Multikey, self-controlled — verified againsta live document, not the ticket's suggested bare
#atprotofragment. Bothforms satisfy
RepoSigningKey's matcher, but a consumer holding the resultshouldn't be able to tell which resolver produced it;
MiniDocDocumentTestspins the fully-qualified shape directly, not just what the matcher happens to
accept.
MiniDocDocumentTeststakes a test-only dependency onAtprotoTypesVerifytoprove the published key actually round-trips through the downstream verifier's
matcher (fragment, controller, multibase), not just that the field is
populated — a shape-only assertion would pass even if any of the three were
subtly wrong. Confirmed by reverting the fix locally: the test fails with
exactly
.noAtprotoSigningKey. The added dependency pulls in nothing new(
swift package show-dependenciesis unchanged) —AtprotoTypesVerify'ssecp256k1 port does ship in that product and this test target now links it,
but it's pure Swift; the only extra dependency it could have pulled in
(
swift-secp256k1, a differential-testing oracle) is confined to AtprotoTypes'own test target and isn't linked here.
Draft: gated on AtprotoTypes germ-network/AtprotoTypes#60. The floor is
already bumped to
0.5.1(the release that will makeVerificationMethod.initpublic) but that version doesn't exist yet, so
Package.resolvedisdeliberately left untouched at its current pin and CI will fail to resolve
dependencies until #60 merges and releases. Once it does: confirm the real
tag,
swift package update AtprotoTypes, commit the resultingPackage.resolved, mark ready for review. To reproduce the new tests locallybefore then, override with a local path:
swift package edit AtprotoTypes --path <checkout of #60>.Part of GER-2268.
🤖 Generated with Claude Code