Align Directory listing admission with current SDK - #85
Draft
randomblocker wants to merge 5 commits into
Draft
Conversation
added 5 commits
August 15, 2026 20:40
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.
Summary
dacs-sdkmain (f68fed1c63b56a438830f13e706ea4651d675157) and use the SDK's normative Listing shape/signature and current publication/reader gatestransactionReadiness.disposition = unassessed; buyer-local revocation, rail, payload-capability, and signer-control decisions remain with the transacting SDKAnchorReceiptbefore catalog registrationWhy
The live Directory accepted current-looking Listings whose
offering.deliverable.verificationMethodwas a string, while the current Standard and SDK require a registered structured variant. Those candidates could be discovered but were rejected by an independent SDK buyer before payment.Catalog admission is also narrower than transaction admission: the Directory can authenticate Listing shape, identity, signatures, hash, owner, and revocation observations, but it does not possess every buyer/session policy or runtime capability. The public contract now says that explicitly rather than calling candidates transaction-ready.
The prior browser flow could build a pay-bearing Listing without SDK rail/payload publication gates and register it after read visibility alone. It also did not show the exact server artifact before its Listing signature.
Impact
After deployment and reindex, malformed current Listings are observed but excluded from the active catalog with stable seller-facing diagnostics. Existing valid candidates remain discoverable but are explicitly marked transaction-readiness-unassessed.
New browser-published storage-program and entitlement Listings use authenticated PA-1 rail definitions, are signed exactly as previewed, and are registered only after finalized write evidence plus independent content verification. Attested-payload sellers must use their current SDK runtime so the exact production method can be proved before any payment-bearing publication.
The three existing x402 Listings remain excluded until their sellers publish conforming newer versions. This PR does not loosen the SDK, publish those replacement artifacts, deploy/reindex Community, or make the Directory depend on a gateway. Gateway demo rollout and smoke testing are separate private deployment concerns.
Deployment acceptance
After the three sellers publish replacements and the deployment is reindexed:
NEXT_PUBLIC_DIRECTORY_URL=https://directory.example \ DACS_LISTING_UPGRADE_REPLACEMENTS='[...]' \ npm run check:listing-upgradeThe command is read-only: it never contacts a gateway and never writes, reindexes, purchases, or invokes an agent.
SDK catalog client PR #163 remains intentionally outside the pin until it merges. This PR does not depend on an open SDK branch.
SDK packaging note
The current SDK top-level barrel statically re-exports optional rail and substrate adapters, so it is not browser-bundle-safe without unrelated peers. Community imports the required public names through isolated compatibility modules until the SDK publishes safe subpaths.
Validation
npm test— 207 passednpm run typechecknpm run buildnpm run test:e2e— 16 passedgit diff --check