Skip to content

feat(swift-sdk): expose when each DPNS contender submitted its request - #5718

Merged
romchornyi merged 2 commits into
v5.1-devfrom
feat/dpns-contender-created-at
Nov 3, 2026
Merged

romchornyi merged 2 commits into
v5.1-devfrom
feat/dpns-contender-created-at

Conversation

@romchornyi

@romchornyi romchornyi commented Nov 2, 2026 •

Copy link
Copy Markdown
Contributor

Basic explanation

What this does: When a username is contested, each competing request comes with the DPNS document it submitted. The FFI already decoded that document to read the requested spelling, then threw the rest away. Now it also returns the document's creation time ($createdAt), so the Swift SDK can tell callers when each request was made.

Value: Wallets can order contested requests by date, show each request's date, and work out which one was submitted first. Dash Wallet iOS needs this for its username-voting redesign, where "Vote for all" approves the first-submitted request under each name. Android already does this through dashj.

Risks: Low. It is read-only and consensus is untouched. It adds no network call: the date comes from the same decode as the label. The C struct gains two fields at its end and no new memory to free. The vote-state JSON gains a key that existing parsers (Swift, and Kotlin's lenient one) ignore or read.

Issue being fixed or feature implemented

$createdAt is required on every DPNS domain document (contract v1–v3), and every contender of a contested name carries its serialized document, but neither contender reader in rs-sdk-ffi passed the date on. So DPNSContender in the Swift SDK had no way to say when a request was made. That date is what a voting UI needs to sort by date, show per-request dates, find the first-submitted request, and derive when the poll opened.

What was done?

  • rs-sdk-ffi/src/contested_resource/contender_document.rs (new): contender_document_fields() decodes a contender's serialized document once and returns label and created_at_ms. It is best-effort: with no document type, no document, or a failed decode, both fields are None and the contender is still returned. Both readers now use it instead of their own inline label decode (previously written out twice in contested.rs and once in vote_state.rs).
  • DashSDKContender (types.rs) gains created_at: u64 (ms since epoch) and has_created_at: bool, appended after label. A flag rather than a 0 sentinel, following DashSDKContestInfo.has_winner. The fields are plain values, so the free functions are unchanged.
  • dpns/queries/contested.rs: both list queries (dash_sdk_dpns_get_non_resolved_contests_for_identity, dash_sdk_dpns_get_contested_non_resolved_usernames) now share one contest_info_to_ffi instead of two hand-copied ~80-line blocks, and fill the new fields; requested labels are collected from the decoded label rather than read back out of the C string.
  • contested_resource/queries/vote_state.rs: each contender object gains "created_at": <ms>. Like label, the key is omitted when the document did not decode.
  • swift-sdk:
    • DPNSContender.createdAt: Date?. The new init parameter defaults to nil, so existing callers compile unchanged.
    • The list reader now builds each contender through SDK.contender(from:), which can be tested without a live list.
    • decodeVoteState reads created_at.
    • A value of 0 or a non-number reads as nil.
  • Kotlin: rs-unified-sdk-jni passes the vote-state JSON through as a string, and KotlinExampleApp parses it by key, so the new key is ignored there. Exposing the date in a Kotlin model is left to the Kotlin SDK's parity work.

How Has This Been Tested?

  • rs-sdk-ffi/src/contested_resource/contender_document.rs: real DPNS domain documents serialized through Contender::try_into_contender_with_serialized_document against the baked-in system contract — label and date read; no $createdAt and a zero one read as absent; undecodable bytes, no document and no document type give no fields; the C contender and the JSON members built from decoded fields.
  • rs-sdk-ffi/src/dpns/queries/contested.rs: contest_info_to_ffi carries each contender's label and date, handles an undecodable contender, lists requested labels once in contender order, and frees through dash_sdk_contest_info_free.
  • DPNSContestDecoderTests: created_at from ms, absent, 0, a string, a negative and a boolean; the list path's contender(from:) with the flag on and off; a contender without an id is dropped.
  • CARGO_INCREMENTAL=0 cargo test -p rs-sdk-ffi --all-features --lib: 404 passed. cargo clippy -p rs-sdk-ffi --all-targets --all-features -- -D warnings and cargo fmt --check: clean.
  • ./build_ios.sh --target sim, then xcodebuild test -scheme SwiftDashSDK -only-testing:SwiftDashSDKTests/DPNSContestDecoderTests on an iPhone 17 / iOS 26.5 simulator: 29 passed.

Breaking Changes

None. The C struct grows at its end, and its header is generated with the framework in the same build. The Swift initializer gains a defaulted parameter. The JSON gains an optional key.

Checklist:

  • I have performed a self-review of my own code
  • My Rust, FFI, WASM, Swift or Kotlin changes follow the coding conventions
  • I have commented my code, particularly in hard-to-understand areas
  • I have added or updated relevant unit/integration/functional/e2e tests
  • I have added "!" to the title and described breaking changes in the corresponding section if my code contains any
  • I have made corresponding changes to the documentation if needed
  • If I added or changed GroveDB structure, I described it in the area's structure.rs, regenerated grovedb-structure.json, and checked the structure viewer link posted on this pull request
  • If I added or changed a system contract's document schemas, I checked the contract viewer link posted on this pull request

For repository code-owners and collaborators only

  • I have assigned this pull request to a milestone

🤖 Generated with Claude Code

PR Hygiene · 083ad6d

  • Bots — thepastaclaw ✓
  • Self-review — posted; again after any push
  • Build green
  • Approvals
    • rust-sdk-ffi (packages/rs-sdk-ffi/src/contested_resource/contender_document.rs, packages/rs-sdk-ffi/src/contested_resource/mod.rs, packages/rs-sdk-ffi/src/contested_resource/queries/vote_state.rs and 2 more) — approved by lklimek
    • rust-sdk (packages/rs-sdk/src/platform/dpns_usernames/contender_request.rs, packages/rs-sdk/src/platform/dpns_usernames/mod.rs) — approved by lklimek
    • swift-sdk — you own it

When every merge requirement is met, the PR Hygiene check passes. Reviewer limits do not block merging; other required GitHub checks and protections still apply.

Summary by CodeRabbit

  • New Features
    • DPNS contest results now include each contender’s creation date when available, alongside existing contender details. A present zero timestamp is preserved as the Unix epoch; unavailable or invalid dates are omitted.
    • Contest results include distinct usable requested labels in contender order, with missing or undecodable contender data handled without preventing other results from appearing.
    • Swift SDK contest models expose the optional creation date.

Each contender of a contested DPNS name carries its serialized domain
document, and the FFI already decoded it for the requested label. It now
also returns the document's $createdAt: DashSDKContender gains created_at
(ms) and has_created_at at its end, the vote-state JSON gains an optional
"created_at" key, and DPNSContender gains createdAt: Date?.

The two list queries share one contest_info_to_ffi, and both readers use
one contender_document_fields decode.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@github-actions github-actions Bot added this to the v5.1.0 milestone Nov 2, 2026
@coderabbitai

coderabbitai Bot commented Nov 2, 2026 •

Copy link
Copy Markdown
Contributor

Review in Change Stack →

No actionable comments were generated in the recent review.

Recent review info
Run configuration
Commits

Reviewing files that changed from the base of the PR and between 331c745 and 083ad6d.

Files selected for processing: 10
  • packages/rs-sdk-ffi/src/contested_resource/contender_document.rs
  • packages/rs-sdk-ffi/src/contested_resource/queries/vote_state.rs
  • packages/rs-sdk-ffi/src/dpns/queries/contested.rs
  • packages/rs-sdk-ffi/src/types.rs
  • packages/rs-sdk/src/platform/dpns_usernames/contender_request.rs
  • packages/rs-sdk/src/platform/dpns_usernames/mod.rs
  • packages/swift-sdk/Sources/SwiftDashSDK/FFI/PlatformQueryExtensions.swift
  • packages/swift-sdk/Sources/SwiftDashSDK/Voting/DPNSContest.swift
  • packages/swift-sdk/Sources/SwiftDashSDK/Voting/SDK+DPNSContests.swift
  • packages/swift-sdk/SwiftTests/SwiftDashSDKTests/DPNSContestDecoderTests.swift
Files skipped from review as they are similar to previous changes: 2
  • packages/swift-sdk/Sources/SwiftDashSDK/Voting/DPNSContest.swift
  • packages/swift-sdk/Sources/SwiftDashSDK/FFI/PlatformQueryExtensions.swift

Included review availability: This review used your included allowance. Your plan provides up to 1 included review per hour; 0 remain after this review.

Walkthrough

Contender document decoding now supplies labels and optional $createdAt timestamps to FFI contest and vote-state results. The Swift SDK exposes timestamps as optional Date values, including the Unix epoch for a present zero.

Changes: DPNS contender data propagation

Layer / File(s) Summary
Decode and serialize contender data
packages/rs-sdk/src/platform/dpns_usernames/*, packages/rs-sdk-ffi/src/contested_resource/*, packages/rs-sdk-ffi/src/types.rs
The shared decoder reads non-empty labels and creation timestamps, preserving present zero values. The FFI represents timestamp presence with a flag and serializes available fields into vote-state JSON.
DPNS contest query conversion
packages/rs-sdk-ffi/src/dpns/queries/contested.rs
Both non-resolved contest queries use shared conversion for contender data and requested labels. The conversion preserves contest tallies, end time, and winner presence.
Swift contender date conversion
packages/swift-sdk/Sources/SwiftDashSDK/FFI/PlatformQueryExtensions.swift, packages/swift-sdk/Sources/SwiftDashSDK/Voting/*, packages/swift-sdk/SwiftTests/SwiftDashSDKTests/DPNSContestDecoderTests.swift
Swift query results and vote-state JSON convert valid timestamps to DPNSContender.createdAt. Tests cover missing and malformed values, present zero timestamps, and missing identity IDs.

Estimated code review effort: 3 (Moderate) | ~25 minutes

Sequence Diagram(s)

sequenceDiagram
  participant DPNSContestQuery
  participant contest_info_to_ffi
  participant ContenderRequest
  participant DashSDKContender
  participant PlatformQueryExtensions
  participant DPNSContender
  DPNSContestQuery->>contest_info_to_ffi: Convert contest data
  contest_info_to_ffi->>ContenderRequest: Decode contender document fields
  ContenderRequest-->>contest_info_to_ffi: Return label and optional creation timestamp
  contest_info_to_ffi->>DashSDKContender: Set timestamp and presence flag
  DashSDKContender-->>PlatformQueryExtensions: Return contender result
  PlatformQueryExtensions->>DPNSContender: Convert present timestamp to createdAt
Loading

Possibly related PRs

  • dashpay/platform#5337: Introduces the DPNS v3 domain contract used by the contender document decoding in this PR.

Suggested reviewers: quantumexplorer, zocolini

Merge Risk: Minimal · up to 083ad

Contender creation dates are exposed across the SDK paths. No merge-blocking issue was established.

Pre-merge checks: Passed 5
Check name Status Explanation
Description Check Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check Passed The title names the change: the Swift SDK now exposes when each DPNS contender submitted its request. The changeset matches this. It adds $createdAt to the FFI contender, the vote-state JSON, and `D…
Docstring Coverage Passed Docstring coverage is 93.33% which is sufficient. The required threshold is 80.00%. Docstring coverage is scoped to functions touched by this diff with cyclomatic complexity of at least 2. Documentati…
Linked Issues check Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check Passed Check skipped because no linked issues were found for this pull request.
Full details: Title check

Explanation

The title names the change: the Swift SDK now exposes when each DPNS contender submitted its request. The changeset matches this. It adds $createdAt to the FFI contender, the vote-state JSON, and DPNSContender.createdAt: Date? in Swift. The title names one scope (swift-sdk) and the main user-facing effect, but the change also spans rs-sdk and rs-sdk-ffi. That is expected for a title.

Full details: Docstring Coverage

Explanation

Docstring coverage is 93.33% which is sufficient. The required threshold is 80.00%. Docstring coverage is scoped to functions touched by this diff with cyclomatic complexity of at least 2. Documentation-only edits and deletions within surviving functions are included; unchanged diff context and fully deleted functions are excluded. Analyzed 15 functions across 11 files.

Finishing Touches
Generate docstrings
  • Commit to this branch
  • Create a new PR
Generate unit tests (beta)
  • Commit to this branch
  • Create a new PR
  • Autofix · Keep fixing CodeRabbit findings and required CI, and resolving merge conflicts

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

Share

@github-actions

github-actions Bot commented Nov 2, 2026 •

Copy link
Copy Markdown
Contributor

Waiting for bot review — thepastaclaw not yet. Wait for the missing reviews, or a writer can post /skip-bots to proceed without them; blocking findings still need addressing.
Full checklist in the description.

@github-actions github-actions Bot added the waiting-bots Waiting for the review bots to report on this head label Nov 2, 2026
@thepastaclaw

thepastaclaw commented Nov 2, 2026 •

Copy link
Copy Markdown
Collaborator

✅ Final review complete — no blockers (commit 083ad6d) · triage: normal

@thepastaclaw thepastaclaw left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Final validation — Phase 1 + Phase 2

Verified the supplied findings against head 331c745 using static source inspection. The timestamp plumbing and allocation ownership are sound, but the refactored FFI converter retains display-policy decisions that the repository explicitly assigns to a native Rust library; the new timestamp filter also changes native availability semantics. Current Rust, Swift, and Kotlin checks pass; the PR Hygiene error is a policy-check failure rather than evidence of a code defect.

🔴 1 blocking | 🟡 1 suggestion(s)

Review provenance

Source: reviewer 1: muse-spark-1.3-contributor (agent: phase1-reviewer, role: general); reviewer 2: muse-spark-1.3-contributor (agent: phase1-reviewer, role: rust-quality); reviewer 3: gpt-6.1-sol (agent: phase2-reviewer, role: general); reviewer 4: gpt-6.1-sol (agent: phase2-reviewer, role: architecture-layering); reviewer 5: gpt-6.1-sol (agent: phase2-reviewer, role: ffi-engineer); reviewer 6: gpt-6.1-sol (agent: phase2-reviewer, role: rust-quality); final verifier: gpt-6.1-sol (agent: sol-verifier, role: final-verifier)

  • Triage: normal by gpt-6.1-sol (effort low) — This is a cross-language behavioral change involving shared Rust decoding, contender conversion refactoring, C struct layout, and Swift date handling, but it does not modify a critical surface.
  • Phase 1 reviewers: muse-spark-1.3-contributor — general (completed, effort xhigh); agent phase1-reviewer, muse-spark-1.3-contributor — rust-quality (completed, effort xhigh); agent phase1-reviewer
  • Phase 1 model: muse-spark-1.3-contributor — not quota-gated; passed over gemini-3.8-flash-high (antigravity quota lookup failed), glm-5.3-flash (not used above high effort; tier asks max)
  • Fresh verifier: gpt-6.1-sol — final-verifier; agent sol-verifier
  • Phase 2 reviewers: gpt-6.1-sol — general (completed, effort high); agent phase2-reviewer, gpt-6.1-sol — architecture-layering (completed, effort high); agent phase2-reviewer, gpt-6.1-sol — ffi-engineer (completed, effort high); agent phase2-reviewer, gpt-6.1-sol — rust-quality (completed, effort high); agent phase2-reviewer
🤖 Prompt for all review comments with AI agents
These findings are from an automated code review. Verify each finding against the current code and only fix it if needed.

In `packages/rs-sdk-ffi/src/dpns/queries/contested.rs`:
- [BLOCKING] packages/rs-sdk-ffi/src/dpns/queries/contested.rs:663-670: Move requested-label display policy into the Rust SDK
  The shared converter derives the ordered, de-duplicated set of spellings callers should display instead of merely marshalling an SDK result. Its own documentation identifies this as display policy. The book's "FFI and mobile SDKs hold no business logic" rule and packages/swift-sdk/CLAUDE.md require these decisions to live in a native Rust library, with FFI limited to calling and marshalling. The existing SDK ContestInfo exposes contenders and end_time, but no requested-label result. Although the two previous blocks already contained this policy, this PR moves and rewrites those blocks into the new helper, so the ownership violation is within scope. Add the requested-label derivation to an SDK-owned DPNS helper or result alongside ContestInfo, and have this converter allocate C strings from that result without selecting or de-duplicating labels.

In `packages/rs-sdk-ffi/src/contested_resource/contender_document.rs`:
- [SUGGESTION] packages/rs-sdk-ffi/src/contested_resource/contender_document.rs:99: Preserve the native timestamp's availability semantics
  This filter changes a present native timestamp of Some(0) into unavailable metadata. DPP's document serializers and deserializers distinguish presence through timestamp flags and preserve a present zero, while DocumentV0Getters::created_at() returns that option unchanged. The new C field already has an explicit presence flag, and the JSON field can express absence by omission, so neither representation needs a zero sentinel. Marshal the native option unchanged and let the Swift timestamp reader preserve the same distinction. If suppressing zero is an intentional DPNS interpretation, define that rule once in the native SDK rather than in this FFI helper, which also serves the generic contested-resource query, and independently in Swift. This is a verified availability-semantics mismatch, not a claim that live DPNS contenders normally contain epoch-zero dates.

@github-actions

github-actions Bot commented Nov 2, 2026

Copy link
Copy Markdown
Contributor

Your move: thepastaclaw requested changes on this head; dismiss the review or push a fix; thepastaclaw left review threads unresolved; resolve them.
Full checklist in the description.

@github-actions github-actions Bot added waiting-self-review Waiting for the author to post /self-reviewed and removed waiting-bots Waiting for the review bots to report on this head labels Nov 2, 2026
The requester's own spelling, the `$createdAt` of each contender's document
and the ordered, de-duplicated list of requested labels were derived in
rs-sdk-ffi. They now come from `dpns_usernames::ContenderRequest` and
`ContestRequests` in rs-sdk; the list queries and the vote-state query only
marshal the results into their C and JSON shapes.

A present `$createdAt` of 0 is passed through as the document holds it
instead of being treated as absent, in the C contender (`has_created_at`),
the vote-state JSON and the Swift readers.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@github-actions

github-actions Bot commented Nov 2, 2026 •

Copy link
Copy Markdown
Contributor

Your move: thepastaclaw left review threads unresolved; resolve them.
Full checklist in the description.

@github-actions

github-actions Bot commented Nov 2, 2026

Copy link
Copy Markdown
Contributor

Your move: thepastaclaw left review threads unresolved; resolve them.
Full checklist in the description.

@thepastaclaw thepastaclaw left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Re-review — Final validation — Phase 1 + Phase 2

Verified the complete diff at head 083ad6d: both prior findings are fixed, and no new actionable in-scope defects were identified. Request decoding and ordered label de-duplication now live in rs-sdk, while C, JSON, and Swift preserve timestamp presence, including a present zero. This was a static review without builds or test execution; current CI shows the JS build and Swift frozen-schema check passing, with Rust workspace tests, Kotlin build/tests, and JavaScript tests still pending.

🔴 0 blocking | 🟡 0 suggestion(s) | 💬 0 nitpick(s)

Review provenance

Source: reviewer 1: muse-spark-1.3-contributor (agent: phase1-reviewer, role: general); reviewer 2: muse-spark-1.3-contributor (agent: phase1-reviewer, role: rust-quality); reviewer 3: gpt-6.1-sol (agent: phase2-reviewer, role: general); reviewer 4: gpt-6.1-sol (agent: phase2-reviewer, role: architecture-layering); reviewer 5: gpt-6.1-sol (agent: phase2-reviewer, role: ffi-engineer); reviewer 6: gpt-6.1-sol (agent: phase2-reviewer, role: rust-quality); reviewer 7: gpt-6.1-sol (agent: phase2-reviewer, role: general); reviewer 8: gpt-6.1-sol (agent: phase2-reviewer, role: architecture-layering); reviewer 9: gpt-6.1-sol (agent: phase2-reviewer, role: ffi-engineer); reviewer 10: gpt-6.1-sol (agent: phase2-reviewer, role: rust-quality); final verifier: gpt-6.1-sol (agent: sol-verifier, role: final-verifier)

  • Triage: normal by gpt-6.1-sol (effort low) — The change spans Rust SDK document decoding, FFI representations, and Swift date handling with meaningful refactoring and tests, but does not change a critical surface sufficiently to qualify as critical.
  • Phase 1 reviewers: muse-spark-1.3-contributor — general (completed, effort xhigh); agent phase1-reviewer, muse-spark-1.3-contributor — rust-quality (completed, effort xhigh); agent phase1-reviewer
  • Phase 1 model: muse-spark-1.3-contributor — not quota-gated; passed over gemini-3.8-flash-high (antigravity quota lookup failed), glm-5.3-flash (not used above high effort; tier asks max)
  • Fresh final gate: an independent Phase-2 review ran after iterative findings were reconciled
  • Fresh verifier: gpt-6.1-sol — final-verifier; agent sol-verifier
  • Phase 2 reviewers: gpt-6.1-sol — general (completed, effort high); agent phase2-reviewer, gpt-6.1-sol — architecture-layering (completed, effort high); agent phase2-reviewer, gpt-6.1-sol — ffi-engineer (completed, effort high); agent phase2-reviewer, gpt-6.1-sol — rust-quality (completed, effort high); agent phase2-reviewer, gpt-6.1-sol — general (completed, effort high); agent phase2-reviewer, gpt-6.1-sol — architecture-layering (completed, effort high); agent phase2-reviewer, gpt-6.1-sol — ffi-engineer (completed, effort high); agent phase2-reviewer, gpt-6.1-sol — rust-quality (completed, effort high); agent phase2-reviewer
🤖 Prompt for all review comments with AI agents
These findings are from an automated code review. Verify the current code and confirm that no unresolved issues remain.

No unresolved findings remain from the prior review on this head.

@github-actions

github-actions Bot commented Nov 2, 2026

Copy link
Copy Markdown
Contributor

Your move: thepastaclaw left review threads unresolved; resolve them.
Full checklist in the description.

@romchornyi

Copy link
Copy Markdown
Contributor Author

/self-reviewed

@github-actions

github-actions Bot commented Nov 3, 2026

Copy link
Copy Markdown
Contributor

Missing human approval. Automatic reviewer requests are paused and this PR is excluded from reviewers' queues. Merge, close, or draft another active PR by this author to free a review slot. Required human review can be satisfied without a slot; once all merge requirements are met, PR Hygiene passes.
Full checklist in the description.

@github-actions github-actions Bot added too-many-open-prs Beyond the author's 5 open PRs; waits for one to merge before a human is asked. and removed waiting-self-review Waiting for the author to post /self-reviewed labels Nov 3, 2026

@lklimek lklimek left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Reviewed rs-sdk-ffi, approved with minor comment.

@github-actions

github-actions Bot commented Nov 3, 2026 •

Copy link
Copy Markdown
Contributor

Bots are done — your move: address lklimek left a review thread unresolved, then post /self-reviewed.
Full checklist in the description.

@github-actions github-actions Bot added waiting-self-review Waiting for the author to post /self-reviewed and removed too-many-open-prs Beyond the author's 5 open PRs; waits for one to merge before a human is asked. labels Nov 3, 2026
@romchornyi

Copy link
Copy Markdown
Contributor Author

/self-reviewed

@github-actions

github-actions Bot commented Nov 3, 2026

Copy link
Copy Markdown
Contributor

Policy satisfied — this can merge.
Full checklist in the description.

@github-actions github-actions Bot removed the waiting-self-review Waiting for the author to post /self-reviewed label Nov 3, 2026
@romchornyi
romchornyi merged commit b3cb194 into v5.1-dev Nov 3, 2026
37 checks passed
@romchornyi
romchornyi deleted the feat/dpns-contender-created-at branch November 3, 2026 20:58
shumkov added a commit that referenced this pull request Nov 4, 2026
Brings #5636, #5681, #5715, #5718, #5747 and #5748.

Conflicts:
- book/src/sdk/protocol-version-gate.md: #5636 rewrote the page and moved
  the decision rules to protocol-versions.md. The merge takes #5636's
  page and keeps #5615's getIdentityByNonUniquePublicKeyHash row, whose
  declaration in rs-dapi-client is still there. #5615's paragraph about
  other protocol 14 additions goes: #5636's getDocuments row now lists
  the document features nodes at 13 refuse.
- rs-dapi-client/tests/request_inventory.rs: #5636 makes document
  requests declare nothing and #5615 adds the V1 non-unique lookup's
  Gate(14). The spelled-out test keeps both: it is now
  should_need_protocol_14_only_for_token_pool_and_non_unique_v1_requests.
- rs-sdk/src/sdk/protocol_gate_tests.rs: imports. Both sides' imports are
  kept, without SdkInstance and MockDapiClient, which #5755 replaced with
  Sdk::mock_dapi.

Semantic: #5755 removed the file's dapi() helper, and two tests #5636
added call it (fetch_fee_pots_together and
should_let_waiting_calls_ask_when_the_asking_call_is_dropped). They now
use sdk.mock_dapi().

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@shumkov shumkov mentioned this pull request Nov 4, 2026
13 of 22 tasks
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.

3 participants