Repository navigation
chore: refresh 0.8.0-rc12 SDKs with merged wallet fixes - #191
Conversation
787a3c6 to
7b64caa
Compare
7b64caa to
168de56
Compare
talosmachina
left a comment
There was a problem hiding this comment.
No findings. Bumps the release metadata from 0.8.0-spark.3 to 0.8.0-rc12 (Cargo manifest and lock, Package.swift tag and checksum, Android gradle.properties) on top of current master. Reviewed 168de56, full tier (dependency manifest).
What I checked, and 2 candidates I ruled out
Read in full: the four changed files' hunks, Package.swift whole, .github/workflows/gradle-publish.yml
Base: master (d10afd4) is an ancestor of the head; git diff master...pr touches only the four files, so no source change rides along with the bump.
Version sync: git grep for spark.3 and 0.8.0-rc1 on the head finds only Cargo.toml, Package.swift and bindings/android/gradle.properties, all at 0.8.0-rc12; Cargo.lock matches. No stale version string left elsewhere.
Android: gradle-publish.yml takes the version from the release tag (-Pversion=${tag#v}), so v0.8.0-rc12 publishes com.synonym:bitkit-core-android:0.8.0-rc12, consistent with gradle.properties.
CI: green on this head (Android Bindgen, iOS Bindgen, SwiftPM manifest, manifests check, paykit-route, usdt, wake tests).
Build: not run locally; the PR changes no code relative to master, and both bindgen jobs built this head.
Ruled out
- Pre-release ordering: under SemVer
0.8.0-rc12sorts below0.8.0-spark.3and0.8.0-swaps.6, so a range-resolved dependency would never move to it. Dropped: the rc and feature pre-release lines already coexist in this repo's tags (v0.8.0-rc1torc11alongsidev0.8.0-spark.*andswaps.*), so the naming is deliberate. - Checksum without an artifact: no
v0.8.0-rc12release exists yet, so thePackage.swiftchecksum cannot be checked against a download. Dropped as a finding: SwiftPM rejects a mismatched ZIP at resolve time, and the body records the checksum of the archive to be uploaded.
Merge confidence: 4/5, the Package.swift checksum is a cross-repo contract nothing can verify until the ZIP is uploaded to the v0.8.0-rc12 release.
coreyphillips
left a comment
There was a problem hiding this comment.
Two independent reviews, nothing blocking a merge.
Description
Refresh
0.8.0-rc12on merged masterd10afd4, including the activity fee-rate fix (#187),trezor-connect-rs10.0.1 (#192), and the Paykit router (#193). The former merge dependencies are satisfied. This rebuilds the SDKs with those changes and the BIP21 validation correction (#151) needed by synonymdev/bitkit-ios#909 and synonymdev/bitkit-android#1454.Changes since the last mainline RC,
v0.8.0-rc11:0) from sync without overwriting a known positive rate. (fix(activity): fill unknown stored fee rate on sync (#186) #187)trezor-connect-rs10.0.1. (chore(trezor): upgrade trezor-connect-rs to 10.0.1 #192)0.8.0-spark.3feature line. (feat: pay contacts via spark #193)The refreshed release commit is authored by
pwltrwith a verified GitHub signature. Relative to current master, the PR still changes onlyCargo.toml,Cargo.lock,Package.swiftandbindings/android/gradle.properties. Generated Swift interface files match master after regeneration; generated mobile binaries remain untracked.The rebuilt iOS ZIP is 87,988,628 bytes, SHA-256
aaccfb32e9028eb8336371788a8258c5ca4ac1789e276673ae33e41fb456b7ba, matchingPackage.swift. It replaces the old candidate archive. Android coordinates arecom.synonym:bitkit-core-android:0.8.0-rc12.Publication remains paused for explicit approval. No release or remote Android package has been published. Safe 7 Bluetooth cases 1–3 below remain unverified. On November 9, the release author explicitly accepted this unrun hardware QA gap for rc12; these cases no longer gate this RC publication decision and are not reported as passed. Python import remains broken on the unchanged baseline; the release author explicitly deferred that existing issue for this native RC on November 9, tracked in 194. The planned release uses a signed annotated tag, matching rc11. The author's GitHub account already has an SSH signing key registered as
MacBook Signing Key. This runner has no configured private signing key and cannot access its inherited SSH agent (Permission denied); signing requires making that signer accessible or running the signing step where the existing key is available. An unsigned-tag fallback is not approved. Publication still requires explicit approval.The publication process remains the same as rc11/#181: publish the exact preserved iOS ZIP with the tagged manifest checksum, then let
gradle-publish.ymlbuild and publish Android and its matching native debug symbols. Verify both published SDKs before updating application pins.Design
N/A — no UI changes.
Preview
N/A — SDK release metadata and artifacts.
QA Notes
Setup
Validated candidate:
168de56de086e94bb9e4ca80f88e4259b8b76c08; source baseline:d10afd420474de8d0519965935c3f64695460aca(master after #187, #192 and #193). Local pre-commit checks used this exact candidate file tree, which was compared with the final signed commit tree. Earlier results are preserved separately below at their original revisions.Local toolchain: Rust 1.90.0, Xcode 27.2 / Swift 6.4.2, Temurin JDK 17.0.21, protoc 36.2, Android SDK/build tools 34, Gradle 8.7, cargo-ndk 3.5.4, NDK r28c (
28.2.13676358, matching the publication workflow). Put Cargo, protoc and Java 17 on PATH, and setJAVA_HOME,ANDROID_HOME,ANDROID_NDK_HOMEandANDROID_NDK_ROOTto those installations. Use the repository binding-build scripts sequentially; the Android script temporarily changes the source/build configuration.On macOS 27, the host native-smoke/Python library is built with
CARGO_PROFILE_RELEASE_STRIP=falsefor rust-lang/rust#157750. The iOS archive uses the repository's standard static-library build; its simulator library also links against the iOS simulator SDK without diagnostics.For physical cases 1–3: a physical Safe 7, a phone with Bluetooth enabled, and a compatible Bitkit build consuming this exact SDK candidate are required. Stock staging is not evidence that this SDK is installed. Before publication, the Android script installs
0.8.0-rc12into Maven Local for a consumer build configured to prefermavenLocal(); iOS needs a local SwiftPM package override using the generated XCFramework (BITKIT_CORE_LOCAL=1). No verified consumer app build or physical Bluetooth fixture was configured for this run, so that setup remains a missing prerequisite. Record the app commit/build, phone/OS, Safe 7 firmware and SDK commit with any device results. Emulator firmware runs cited in #192 do not verify Bluetooth timing.Manual Tests
All three cases are carried forward from #192 and remain not run. The release author accepted this gap for rc12 on November 9. IDs and unchecked status are preserved for any future execution; acceptance is not test evidence.
trezor_clear_credentials(device_id)API (or corresponding binding), then reconnect: complete code-entry pairing instead of ending inConnectionError. This is the regression-sensitive case identified in chore(trezor): upgrade trezor-connect-rs to 10.0.1 #192.Automated Checks
cargo test --locked --no-fail-fast: 745 passed, 11 failed, 30 ignored in the library target. All 11 failures are Blocktank staging request errors. A freshcargo test --locked --lib modules::blocktankon unchangedd10afd4reproduced the exact same 11 failing names (37 passed). The full suite is not green. Binary/doc targets completed successfully with zero tests.cargo fmt --check: passed.cargo clippy --locked --lib --tests: passed with 121 warnings, all identical to unchangedd10afd4; no new warnings../build_ios.sh, SwiftPM manifest validation, native Swift Trezor record smoke and native Swift BIP21 smoke: passed. The BIP21 smoke accepts two valid metadata cases and rejects nine ambiguous requests. The freshly archived simulator static library links successfully; it was not executed as a simulator app../build_android.sh: passed for all four ABIs, including native debug-symbol, stripping, 16 KB alignment, AAR and Maven Local validation. The AAR contains all four JNI libraries and nonempty consumer keep rules../gradlew :lib:check :lib:compileDebugUnitTestKotlin --no-daemon: passed. Android lint has zero errors and three existing dependency-update warnings; the Kotlin record fixture compiles. This does not constitute physical-device JNI/Bluetooth testing.CARGO_PROFILE_RELEASE_STRIP=false ./build_python.sh: generation passed.PYTHONPATH=bindings/python python3 tests/bindings/trezor_records.py: failed withSyntaxError: non-default argument follows default argumentin the generated USDT constructor (requiredbackupfollows optionalbridge_url). Fresh baseline generation/import ond10afd4reproduces the failure; generated Python is byte-identical. Python import is not a pass. Python is not distributed by the iOS/Android publication workflow.git diff --check: passed. GitHub verifies the refreshed commit signature and associates it withpwltr.168de56de086e94bb9e4ca80f88e4259b8b76c08on November 9. These checks do not exercise the physical Safe 7 cases or the Python import failure, and do not make the full Rust suite green.Journeys
The shared BIP21 application journey remains in synonymdev/bitkit-ios#909 and synonymdev/bitkit-android#1454. It was not run as part of this core SDK preparation. Paykit contact-payment regtest journeys belong to the app integrations referenced by #193 (synonymdev/bitkit-ios#1191 and synonymdev/bitkit-android#1754); they are not claimed verified here.
Out of Scope
Historical pre-refresh QA record — original revisions and artifacts
The following authored record applies to the earlier
787a3c6/ signed-equivalent7b64caacandidate based on4affda1. Both historical heads passed their six CI checks; the signed head's completed check runs were confirmed on November 9. None of those results, the old archive checksum, or the former metadata-only device-testing N/A establish verification of the new Trezor 10.0.1 candidate. Current device requirements and results are above.Setup
Local verification was performed on
787a3c6f9ae8df5f988ea240a04e5092f1082852. Its signed replacement is7b64caaf05dd84d1e428a8638da8b1c28b5b4043, with an identical Git tree; existing results remain recorded at their original revision, and CI is rerunning on the replacement. Source baseline:4affda1dfdb7b0192a905632f2b1d4f2a1ea94c8. Local checks use Rust 1.90.0, Xcode 27.2 / Swift 6.4.2, Temurin JDK 17.0.21, Android SDK 34 and build tools 34.0.0, NDK r28c (28.2.13676358, matching the publication workflow), and protoc 36.2. Install the prerequisites, put Cargo/protoc/Java on PATH, and setJAVA_HOME,ANDROID_HOME,ANDROID_NDK_HOMEandANDROID_NDK_ROOTto those installations before running the repository build scripts.On macOS 27, the host Rust dylib needs
CARGO_PROFILE_RELEASE_STRIP=falsefor native smoke execution because of rust-lang/rust#157750. The iOS release archive contains static libraries and is preserved unchanged; its simulator library links against the iOS simulator SDK without diagnostics.No device testing is required for this metadata-only release preparation. Hardware and live gateway/fork tests require their separately documented environments; ignored tests are not passes.
Automated Checks
cargo test --locked: 736 passed, 11 failed, 30 ignored. All failures are Blocktank staging request failures.cargo test --locked --lib modules::blocktankon an archived unchanged master reproduced the exact same 11 failing test names (37 passed). Direct staging connectivity timed out after 15 seconds. The full suite is not green.cargo test --locked --binsandcargo test --locked --doc: passed, with zero tests in these targets.cargo fmt --check: passed.cargo clippy --locked --lib --tests: passed with 121 warnings, all identical to unchanged master; no new warnings../build_ios.sh, SwiftPM manifest validation, exact archive checksum verification, native Swift Trezor smoke, and native Swift BIP21 smoke: passed. The BIP21 smoke accepts two valid metadata cases and rejects nine ambiguous requests. The archived simulator static library links successfully../build_android.sh: passed for all four ABIs, including stripped/native-symbol, 16 KB alignment, AAR and Maven Local checks../gradlew :lib:check :lib:compileDebugUnitTestKotlin --no-daemon: passed; Android lint reports zero errors and three existing dependency-update warnings. The AAR contains all four JNI libraries and consumer keep rules, and its Maven coordinates arecom.synonym:bitkit-core-android:0.8.0-rc12.CARGO_PROFILE_RELEASE_STRIP=false ./build_python.sh: generation passed.PYTHONPATH=bindings/python python3 tests/bindings/trezor_records.py: failed because the generated USDT constructor has requiredbackupafter optionalbridge_url, producingSyntaxError: non-default argument follows default argument. Regenerating and running on unchanged master reproduces the same failure, and both generated Python files are byte-identical. This is an existing master regression relative to rc11's successful Python smoke, not a passing Python result. Python is not distributed by the iOS/Android release workflow; publication needs an explicit decision on this gap.git diff --check: passed.Journeys
The shared BIP21 application journey remains in synonymdev/bitkit-ios#909 and synonymdev/bitkit-android#1454. It requires the published SDK; it was not run as part of core release preparation.
Out of Scope
Models used
gpt-6.1-sol(reasoning:high)gpt-6.1-sol(reasoning:high)