chore!: merge v4.2-dev into v4.3-dev - #5151
PastaPastaPasta wants to merge 138 commits into
Conversation
…eir own round (#5010) Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
…rm (PV14) (#5007) Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
…in another round (#5028) Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
…range read (#5030) Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
…ion (#5031) Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
…heck (#5032) Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
…ne (PV14) (#5029) Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
Co-authored-by: Quantum Explorer <quantum@dash.org> Co-authored-by: Claude Fable 5.1 <noreply@anthropic.com>
… contest holds past 250 (PV14) (#5034) Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
…V14) (#5036) Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
…s (PV14) (#5037) Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
…V14) (#5038) Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
…#5040) Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
…e join price (PV14) (#5039) Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
…ments live in (PV14) (#5033) Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
…es (PV14) (#5042) Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
… rules (PV14) (#5045) Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
…s (PV14) (#5046) Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
…(PV14) (#5047) Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
…V14) (#5048) Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
…act v2 (#5056) Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
…5051) Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
…nd iOS example app (#5064) Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
…and Android example app (#5066) Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
|
📖 Book Preview built successfully. Download the preview from the workflow artifacts. Updated at 2026-09-29T00:48:21.494Z |
|
🕓 Queued for automated review — 7th in line, estimated start in ~50 min (commit e674233)
|
Pick up #5155 (restore legacy runner image template compatibility). Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Replace the Python launcher and its tests with a few lines in the existing build step: cap BINARYEN_CORES at min(nproc, cgroup v2 cpu.max quota), keep any runner-provided value, log it, and time `yarn build` with the exit status preserved. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Four optimizer threads were measured ~3x faster than a host-sized pool with byte-identical output, which makes cgroup quota detection unnecessary. A runner-provided BINARYEN_CORES still takes precedence. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
The full-optimization recipe ran -Oz four times with --converge, --flatten/--rereloop and extra passes, and first probed 14 optional flags by optimizing the entire module once per flag. On wasm-sdk this took over an hour with a host-sized thread pool (16m41s at four threads). One standard -Oz pass with the same features and producer stripping takes 2m18s for +2.0% raw / +0.35% gzip size. Minimal (-O2) and no-optimization builds and the wasm-sdk optimized.wasm copy are unchanged. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
…5153) Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
Pick up #5157 (pin integrated runner controller revision). Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
thepastaclaw
left a comment
There was a problem hiding this comment.
Final validation — Phase 1 + Phase 2
The two manual merge resolutions are consistent with the surrounding code, and PV15's component tables match PV14's. Verification confirmed one historical-protocol parsing change that needs version gating and one mobile API conversion that discards an explicit zero spending cap. All 23 platform-version tests and a focused PV13 parser reproduction passed; temporary test changes were removed and the working tree is clean.
🔴 1 blocking | 🟡 1 suggestion(s)
2 finding(s) not shown inline (GitHub refused the PR diff as too large)
🔴 Blocking: Gate the UTF-8 parsing change to the new parser generation
packages/rs-dpp/src/data_contract/document_type/class_methods/try_from_schema/mod.rs:320-322
This shared helper changes behavior under historical protocol versions, not just PV14/PV15. A focused reproduction with PlatformVersion::get(13), full_validation=true, an object property named profile, and required: ["profile", "profileé"] succeeds at this head; the base implementation's key[property_key.len() + 1..] panics inside the UTF-8 encoding of é. The PV13 meta-schema permits this required entry, and CONTRACT_VERSIONS_V5 still dispatches through parser generation 2 into this helper. Consequently, upgraded nodes accept a schema that unupgraded nodes abort on at the same active protocol version, contradicting the comment's output-equivalence justification. Isolate the corrected required/transient matching in the new parser generation selected by PV14/PV15, and add regression coverage across the historical/new-generation boundary.
source: gpt-6-astra (phase2-reviewer: general, architecture-layering, ffi-engineer, platform-versioning)
🟡 Suggestion: Preserve an explicit zero contest cap across the mobile boundary
packages/swift-sdk/Sources/SwiftDashSDK/PlatformWallet/ManagedPlatformWallet.swift:1740-1741
The public API defines maxContestFund as the maximum contribution and reserves nil for automatic pricing, but maxContestFund: 0 and nil both become zero here. The Rust FFI then converts zero to None, and with_contest_fund_to_join substitutes the current contest price before signing. A caller setting a zero cap can therefore authorize a positive contest contribution. The document-create wrappers and Kotlin APIs have the same conversion; Kotlin explicitly accepts zero. Preserve presence separately across FFI, or reject an explicitly supplied zero in the public mobile wrappers before calling native code. Rust's Some(0) already remains distinct from automatic pricing.
source: gpt-6-astra (phase2-reviewer: general, architecture-layering, ffi-engineer, platform-versioning)
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: architecture-layering); reviewer 3: muse-spark-1.3-contributor (agent: phase1-reviewer, role: ffi-engineer); reviewer 4: muse-spark-1.3-contributor (agent: phase1-reviewer, role: platform-versioning); reviewer 5: gpt-6-astra (agent: phase2-reviewer, role: general); reviewer 6: gpt-6-astra (agent: phase2-reviewer, role: architecture-layering); reviewer 7: gpt-6-astra (agent: phase2-reviewer, role: ffi-engineer); reviewer 8: gpt-6-astra (agent: phase2-reviewer, role: platform-versioning); final verifier: gpt-6-astra (agent: astra-verifier, role: final-verifier)
- Triage:
criticalbygpt-6-astra(effort low) — This large forward-merge changes consensus-enforced document property constraints in packages/rs-dpp/src/data_contract/document_type/property_constraints/mod.rs and state-dependent aggregate validation in packages/rs-drive-abci/src/execution/validation/state_transition/state_transitions/batch/transformer/v0/property_constraint_aggregates.rs, meeting both the intricacy and critical-surface criteria - Phase 1 reviewers:
muse-spark-1.3-contributor— general (completed, effort xhigh); agentphase1-reviewer,muse-spark-1.3-contributor— architecture-layering (completed, effort xhigh); agentphase1-reviewer,muse-spark-1.3-contributor— ffi-engineer (completed, effort xhigh); agentphase1-reviewer,muse-spark-1.3-contributor— platform-versioning (completed, effort xhigh); agentphase1-reviewer - Phase 1 model:
muse-spark-1.3-contributor— not quota-gated; passed overgemini-3.8-flash-high(antigravity below 15% reserve: weekly 13% left, 5h 100% left),glm-5.3-flash(not used above high effort; tier asks max) - Fresh verifier:
gpt-6-astra— final-verifier; agentastra-verifier - Phase 2 reviewers:
gpt-6-astra— general (completed, effort xhigh); agentphase2-reviewer,gpt-6-astra— architecture-layering (completed, effort xhigh); agentphase2-reviewer,gpt-6-astra— ffi-engineer (completed, effort xhigh); agentphase2-reviewer,gpt-6-astra— platform-versioning (completed, effort xhigh); agentphase2-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-dpp/src/data_contract/document_type/class_methods/try_from_schema/mod.rs`:
- [BLOCKING] packages/rs-dpp/src/data_contract/document_type/class_methods/try_from_schema/mod.rs:320-322: Gate the UTF-8 parsing change to the new parser generation
This shared helper changes behavior under historical protocol versions, not just PV14/PV15. A focused reproduction with PlatformVersion::get(13), full_validation=true, an object property named `profile`, and `required: ["profile", "profileé"]` succeeds at this head; the base implementation's `key[property_key.len() + 1..]` panics inside the UTF-8 encoding of `é`. The PV13 meta-schema permits this required entry, and CONTRACT_VERSIONS_V5 still dispatches through parser generation 2 into this helper. Consequently, upgraded nodes accept a schema that unupgraded nodes abort on at the same active protocol version, contradicting the comment's output-equivalence justification. Isolate the corrected required/transient matching in the new parser generation selected by PV14/PV15, and add regression coverage across the historical/new-generation boundary.
In `packages/swift-sdk/Sources/SwiftDashSDK/PlatformWallet/ManagedPlatformWallet.swift`:
- [SUGGESTION] packages/swift-sdk/Sources/SwiftDashSDK/PlatformWallet/ManagedPlatformWallet.swift:1740-1741: Preserve an explicit zero contest cap across the mobile boundary
The public API defines maxContestFund as the maximum contribution and reserves nil for automatic pricing, but `maxContestFund: 0` and nil both become zero here. The Rust FFI then converts zero to None, and `with_contest_fund_to_join` substitutes the current contest price before signing. A caller setting a zero cap can therefore authorize a positive contest contribution. The document-create wrappers and Kotlin APIs have the same conversion; Kotlin explicitly accepts zero. Preserve presence separately across FFI, or reject an explicitly supplied zero in the public mobile wrappers before calling native code. Rust's Some(0) already remains distinct from automatic pricing.
Pick up #5159 (compute what creating a document costs for the SDKs). Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
|
Re the review above: both findings are about code that came in unchanged from
@QuantumExplorer, flagging these for you since both came from your PRs. 🤖 Posted autonomously by Codex on behalf of pasta. |
|
No, I do this manually. Too easy for someone to make a mistake here and squash. |
Issue being fixed or feature implemented
Forward-merge
v4.2-devintov4.3-dev. Replaces #5148. That PR's head was a plain snapshot ofv4.2-dev, so it left the conflict and a PV15 build break unresolved, and it came from a fork, so self-hosted CI was skipped.This also brings the self-hosted runner / prebaked Android SDK workflow fix (#4702) into
v4.3-dev. Kotlin CI onv4.3-devPRs (e.g. #5146) currently fails withcannot create cmdline-tools — Permission denied.What was done?
A real merge commit (parents
v4.3-dev67340ad82+v4.2-dev1464314a7; 33 target-only / 118 source-only commits), with two resolutions. Follow-up merges bring inv4.2-devup toeefca92aa, all clean:a02b14607(#5155, runner image controller pin),5a3fa4a1c(#5156 runner candidate status fix, #5153 document type GroveDB layout, #5147 WASM release optimization)6f552ea18(#5157, runner controller pin)955eeaa3b(#5159, document create cost for the SDKs) ande6742339b(#5163, contest fund for hand-built document creates). The original merge has two resolutions:Conflict:
rs-platform-wallet/src/wallet/identity/network/dpns.rs(import block only)IdentityGettersV0withsuper::signing_key::AvailableSigningKey.dpp::fee::Creditson the neighbouring line for the newcontest_fundparameters.AvailableSigningKeyandCredits.IdentityGettersV0is no longer used.Semantic break, not flagged by git:
rs-platform-version/src/version/v15.rsPLATFORM_V15as a copy of v14, usingDRIVE_ABCI_QUERY_VERSIONS_V3.DRIVE_ABCI_QUERY_VERSIONS_V3intoV2and deletedv3.rs, so the merged tree did not compile.DRIVE_ABCI_QUERY_VERSIONS_V2. Checked thatPLATFORM_V15's component tables now matchPLATFORM_V14exactly (apart fromprotocol_version), as feat(platform): introduce protocol version 15 #5043 intends ("v15 == v14 until a follow-up bumps a table").Everything else auto-merged. The other files changed on both sides were
.github/workflows/pr-review-policy.yml(the same re-pin on both sides),ManagedPlatformWallet.swift, and the platform-walletcrypto/invitation.rs,contact_requests.rs,document.rs,invitation.rsandprofile.rs. All merged without conflict markers and compile.How Has This Been Tested?
Run locally on the merge result (macOS arm64):
cargo check --tests -p platform-version -p platform-wallet -p platform-wallet-ffi -p dash-sdk -p rs-unified-sdk-jni -p drive-abci: passes.cargo test --lib -p platform-version -p platform-wallet: 23 + 1181 passed.rustfmt --checkon the two edited files: clean.maxContestFundonregisterDpnsName/ document create) auto-merged, so it relies on CI.Breaking Changes
None of its own. It carries the breaking (PV14) changes already on
v4.2-devintov4.3-dev.Checklist:
structure.rs, regeneratedgrovedb-structure.json, and checked the structure viewer link posted on this pull requestFor repository code-owners and collaborators only
Merge with a merge commit (not squash/rebase) to preserve ancestry between the branches.
🤖 Generated with Claude Code
PR Hygiene ·
e674233/skip-botsproceeds without the ones not yet reported/self-reviewedonce the bots are done.claude/skills/pr-description/SKILL.md,.editorconfig,.github/NPM_RUNNER.mdand 226 more) — QuantumExplorer or shumkovdashmate(packages/dashmate/package.json) — ktechmidas or shumkovsystem-contracts(packages/dashpay-contract/README.md,packages/dashpay-contract/package.json,packages/document-history-contract/package.jsonand 6 more) — QuantumExplorer or shumkovjs-wasm-sdk(packages/js-dash-sdk/package.json,packages/js-evo-sdk/README.md,packages/js-evo-sdk/package.jsonand 25 more) — shumkovkotlin-sdk(packages/kotlin-sdk/CLAUDE.md,packages/kotlin-sdk/KotlinExampleApp/TEST_PLAN.md,packages/kotlin-sdk/KotlinExampleApp/app/src/main/java/org/dashfoundation/example/ui/contracts/CreateDocumentScreen.ktand 18 more) — HashEngineeringdpp(packages/rs-dpp/schema/meta_schemas/document/v3/document-meta.json,packages/rs-dpp/src/address_funds/fee_strategy/mod.rs,packages/rs-dpp/src/address_funds/platform_address.rsand 129 more) — QuantumExplorer or shumkovrs-drive-abci(packages/rs-drive-abci/src/abci/app/check_tx.rs,packages/rs-drive-abci/src/abci/app/consensus.rs,packages/rs-drive-abci/src/abci/app/full.rsand 97 more) — QuantumExplorer or shumkovrs-drive(packages/rs-drive/Cargo.toml,packages/rs-drive/grovedb-structure.json,packages/rs-drive/src/config.rsand 156 more) — QuantumExplorer or shumkovrs-platform-wallet-ffi(packages/rs-platform-wallet-ffi/src/document.rs,packages/rs-platform-wallet-ffi/src/dpns.rs,packages/rs-platform-wallet-ffi/src/identity_keys_from_mnemonic.rs) — HashEngineering or ZocoLini or llbartekll or romchornyirs-platform-wallet(packages/rs-platform-wallet/PERSISTENCE_REDESIGN.md,packages/rs-platform-wallet/PLAN.md,packages/rs-platform-wallet/docs/DASHPAY_MIGRATION_PLAN.mdand 25 more) — HashEngineering or ZocoLini or llbartekll or romchornyirust-sdk-ffi(packages/rs-sdk-ffi/src/data_contract/mod.rs,packages/rs-sdk-ffi/src/data_contract/property_constraints.rs,packages/rs-sdk-ffi/src/data_contract/put.rsand 30 more) — lklimek or shumkovrust-sdk(packages/rs-sdk/src/platform/documents/contest_fund.rs,packages/rs-sdk/src/platform/documents/mod.rs,packages/rs-sdk/src/platform/documents/transitions/create.rsand 5 more) — lklimek or shumkovswift-sdk(packages/swift-sdk/CLAUDE.md,packages/swift-sdk/Sources/SwiftDashSDK/Core/Utils/DocumentPropertyConstraints.swift,packages/swift-sdk/Sources/SwiftDashSDK/Core/Wallet/WalletStorage.swiftand 62 more) — llbartekll or romchornyiWhen every box is checked the
PR Hygienecheck passes and this can merge.