Repository navigation
chore: prepare 3.0.1 release - #956
piotr-iohk wants to merge 3 commits into
Conversation
3.0.0 (RC2) — automated release gateRechecked 2026-10-19 12:55 CEST. SUCCESS for the completed automated workflow gates on exact store revision Verified runs
Coverage and run historyMigration attempt 2 passed both legacy RN source-wallet preparations, RN v1.1.6 upgrade/restore, native 2.5.0 upgrade/restore and the final migration-result gate. The earlier failed setup attempt remains in history. Staging passed Pubky, transfer, nightly UI and multi-address. The production archive from this frozen release revision was verified for bundle ID/version/build, signature and matching dSYM UUID, uploaded via Xcode and confirmed available in TestFlight. iOS store build remains 3.0.0 (200). Cancelled duplicate runs, pre-undraft skipped workflows, skipped report jobs and skipped retarget helpers are not counted as passing tests; their successful replacements on this same commit are linked above. The historical Release recordPreserved 3.0.0 GitHub draft · Twin release PR RC1 drafts and No RC2 automated workflow gate remains pending or failed after the successful replacements/reruns above. This records automation, not a new manual-QA or store-approval sign-off. Planned sequence remains coordinated 3.0.0 publication after iOS approval, then 3.0.1 submission after validation. No merge, submission, publication, branch/tag change or build was performed by this audit. |
[Low impact] The metadata changes appear safe to merge when the planned release checks are complete. SummaryPrepares version 3.0.0, build 200, and collects 76 changelog fragments.
Acknowledged scope from Reviews (1) · Last reviewed commit: "chore: refresh ios rc2 release preparati..." · Reviewed by Greptile |
talosmachina
left a comment
There was a problem hiding this comment.
No findings. Release preparation for 3.0.0 build 200: version bump in the six app, notification and widget configurations, 76 changelog.d/next fragments collected into a 3.0.0 section, and the 2.5.1 hotfix section carried over. Reviewed 59278ad, full tier (78 files, 76 of them one-line fragment deletions, every one checked).
What I checked, and 4 candidates I ruled out
Checked mechanically: every fragment deleted by this PR (76, against the merge base eb3156a) appears in the new CHANGELOG.md exactly once, by exact text match; the 3.0.0 section has 76 bullets with no PR number repeated, and none of them repeats a released entry; changelog.d/next is left with only .gitkeep.
Version: MARKETING_VERSION = 3.0.0 and CURRENT_PROJECT_VERSION = 200 on the six configurations that carried 2.5.0 (197); the four test-target configurations stay at 1.0 (1).
History: the only change outside the new section is the added 2.5.1 section, which matches the v2.5.1 tag's changelog word for word, and the compare links (v2.5.1...v3.0.0, Unreleased from v3.0.0).
CI: validate and Greptile green; unit-tests, integration-tests, e2e-tests and E2E Migration (iOS) were still running on this head when this was posted. The failed entries in the checks list are duplicate e2e-tests and E2E Migration (iOS) runs on this same head, cancelled in favour of the copies still running. iOS does not build on this machine, so this review is reasoned from the diff and from CI.
Ruled out
- Fragments for #948, #950 and #953 missing: all three merged to master before
59278ad; the #948 and #950 fragments are collected, and #953 is translations-only (no fragment). #954 is still open, so it is correctly absent. - #532 filed under Changed though its fragment was
532.fixed.md: deliberate, per the correction the PR body cites. - Build number out of step with Android: iOS goes 197 to 200 and the twin bitkit-android#1512 goes 190 to 193, the same +3 on the platforms' existing offset.
- Released sections edited: the diff touches no released section beyond inserting 2.5.1 above 2.5.0.
Merge confidence: 4/5, no findings and the change is metadata a test would not exercise, but CI on this head had not finished.
There was a problem hiding this comment.
Verdict: ✅ Approve
Review: diff, 78 files, full review of this PR. I found no defects.
- Talos's review at this head covers the fragment match, the six version configurations and the released history. I confirmed those and add:
scripts/collect-changelog.sh --target nextrun at master eb3156a produces the same 76 entries. The one difference is #532 under Changed, as the description says.- Build 200 follows the tagged builds 198 (v2.5.1) and 199 (v2.6.0 RC1). It is also above the 198 that the updater feed publishes, so 3.0.0 shows no update prompt.
- The 2.5.1 LDK security fix reaches this cut through #928, and the head pins LDK Node 0.7.0-rc.74.
- Every PR merged since v2.5.0 without its own fragment is CI, tests, docs, a chore or a build fix, or a fix whose fragment carries its issue number.
QA for 59278ad:
No device case: the QA notes list none, and this PR changes no app code against master eb3156a.
CI at this head when I reviewed:
- Unit tests and integration tests passed.
- E2E Migration passed the native upgrade and native restore from 2.5.0 to this build.
- Still running:
- The React Native v1.1.6 migrations did not run, which is why the run reads as failed. Preparing the restore wallet failed inside the legacy React Native app on Android, whose on-chain send never showed its swipe button, so the RN matrix was skipped. The 3.0.0 build is not involved in that step; a rerun of the failed jobs would cover the RN upgrade and restore.
- The cancelled
e2e-testsandE2E Migration (iOS)entries are duplicate runs on this head. - No run covers an upgrade from 2.5.1, the latest public release. It stays open on this PR's release checklist.
Pair PR synonymdev/bitkit-android#1512 matches at synonymdev/bitkit-android@19449fb: the same 3.0.0 cut, with build 193 taking the same +3 step from 2.5.0 (190) as 197 to 200 here, and the same deferral of the profile-deletion fix.
jvsena42
left a comment
There was a problem hiding this comment.
Approving at 59278ad. Reviewed as a release against v2.5.0, the last release tag on master's lineage. v2.5.1 is a hotfix side branch and v2.6.0 an unpublished RC1. No findings.
Checked:
- Version: all six app, widget and notification configurations read
MARKETING_VERSION = 3.0.0/CURRENT_PROJECT_VERSION = 200. That is above v2.6.0 (199), v2.5.1 (198) and v2.5.0 (197); test targets are unchanged. The updater feed publishes 2.5.1 build 198 as critical, andAppUpdateServicecompares build numbers numerically (AppUpdateService.swift:44,64-71), so build 200 gets no forced-update prompt. - Changelog: each of the 76 deleted fragments appears once with its text and number. Only
532moves to Changed, which is the #931 correction.changelog.d/nextandhotfixhold only.gitkeep. The 2.5.1 section and everything from[2.5.0]down are byte-identical to the v2.5.1 tag. Compare links arev2.5.1...v3.0.0. Every merge since v2.5.0 without its own entry is CI/test/docs/chore or covered by its issue number. #954 is correctly absent. - Dependencies since v2.5.1: bitkit-core 0.5.14 → 0.8.0-rc6, ldk-node rc.66.1 → rc.74, paykit rc51 → rc77, vss 0.5.23 (revision refresh), CodeScanner removed. The pbxproj
exactVersionrequirements match the resolved pins. The v2.5.1 security fix is carried: rc.74 pinslightning,lightning-transaction-syncandlightning-liquidity0.2.7, same as rc.66.1 (in via rc.72, listed under Security). - Release config:
DEBUGstays on Debug only. Mainnet endpoints are production (api1.blocktank.to,bitkit.to,rgs.blocktank.to,homegate.pubky.app), the USDT URLs point athttps://bitkit.to/v1/usdt/*, and the Trezor bridge/emulator paths are gated onisDebug || isE2E. - Twin parity with synonymdev/bitkit-android#1512: same 3.0.0 date, same bitkit-core, ldk-node, paykit and vss pins, same compare base, and #954 / #1510 deferred on both. Changelog differences are platform-specific entries.
CI at 59278ad: unit, integration, e2e (local), E2E Staging and E2E Migration (native 2.5.0 → 200 upgrade and restore, RN v1.1.6 upgrade and restore) are green. Translations validation is green. The cancelled rows are duplicate runs superseded by the passing copies.
Device gate: 59278ad — no device check needed (versions, changelog and fragment deletions only; CI is the runtime evidence); perf: not relevant; l10n: no UI text changed.
040374e
59278ad to
040374e
Compare
|
RC3 validation runs on the signed candidate head (pending runs are not pass evidence):
iOS 3.0.0 (201) archived successfully and Xcode confirmed upload to App Store Connect on 2026-10-19 at 07:48 CEST. Processing and export compliance are complete. Build 201 is available to the existing Internal Testing (Synonym) and QA groups, with focused What to Test notes. No external beta-review submission was made. RC2 build 200 remains the App Store submission. RC2 remains preserved under |
There was a problem hiding this comment.
Verdict: ✅ Approve
Review: diff 86 files. The push recreated the preparation on master 7b3f093, replacing 59278ad from my earlier review, so I reviewed it in full. I found no defects.
- The 3.0.0 section holds all 84 consumed fragments, each once, under its own type. #532 stays under Changed, as in RC2.
scripts/collect-changelog.sh --target nextat 7b3f093 produces the same 84 entries.- Every PR merged since RC2 carries the fragment for its entry, except #991, which only pins Paykit 0.1.0.
- Everything below 3.0.0 matches the v2.5.1 tag, and the compare links read
v2.5.1...v3.0.0. - All six app, widget and notification configurations read 3.0.0 (201), one build above RC2's 200. Test targets are unchanged.
project.pbxprojandPackage.resolvedagree on ldk-node 0.7.0-rc.76 and Paykit 0.1.0. rc.76 keepslightning0.2.7, so the 2.5.1 security fix still holds.
Pair PR synonymdev/bitkit-android#1512: equivalent at 6e4bc01.
- It moves to 3.0.0 (194), the same one-build step, with the same bitkit-core, ldk-node, Paykit and vss pins.
- The profile-deletion fix now ships on both platforms:
QA for 040374e:
No test to run: the QA notes list none, and this PR changes no app code against master 7b3f093.
CI at this head:
- Passed:
- Unit tests
- Integration tests
- Local E2E
- Staging E2E
- E2E Migration native 2.5.0 upgrade and restore, and RN v1.1.6 upgrade
- The cancelled
e2e-testsandE2E Migration (iOS)rows are duplicate runs on this head. - No run covers an upgrade from 2.5.1, the latest public release. This stays open from RC2.
🟠 RN v1.1.6 restore failed in the test, not the app
The RN v1.1.6 restore failed the same way on all three attempts.
- After the restore, Home showed 445 846 sats and the three migrated activities, and the first check passed.
- The test then relaunches Bitkit. The USDT intro opens over Home, so
TotalBalance-primarystays hidden for the whole 180 s wait. - The relaunch step checks for the USDT intro once, then waits only for Background Payments and QuickPay.
- The app did the same at RC2. In the passing RC2 run, the test logs show that check 9 s after the relaunch, when the intro was already up, and the test declined it.
- Here the check ran 4 s after the relaunch, before the intro appeared.
- A fix in synonymdev/bitkit-e2e-tests: after the relaunch, wait for Home or the USDT intro, as
waitForWalletHome()does.
3.0.1 preparation and validationUpdated 2026-10-19 12:44 CEST. Production build 202 and signed Completed checks on the built revision
Migration attempt 2 passed legacy RN source-wallet preparation, RN v1.1.6 upgrade/restore and native 2.5.0 upgrade/restore. All staging shards, including nightly UI, passed. The earlier setup failure is retained in the run history. Documentation-only follow-upSigned commit
This compares the release snapshots directly, avoiding noise from their divergent preparation histories. No changelog entry text, application code, dependency, version or build setting changed. Comparison against the built tag is empty outside Drafts and artifactsCurrent 3.0.1 draft and changelog · Twin PR All four GitHub release drafts remain unpublished. Every release tag is unchanged. Android 195 APKs/symbols/checksums and the iOS 202 TestFlight build are unchanged; no AAB is attached to the 3.0.1 Android draft. The fixed tag review findings have been answered and resolved. Remaining release gates
No branch merge, store submission/publication, GitHub release publication or updater change was performed. |
jvsena42
left a comment
There was a problem hiding this comment.
Delta review since my approval at v3.0.0-rc2: 12 merged PRs plus the rc3 and 3.0.1 metadata commits. No HIGH/MEDIUM. One LOW (tag and changelog link) is inline.
Checked and clean:
- Version: 3.0.1 is above every tag on both lineages (202 in all six configurations).
- Changelog: every fragment is consumed, every user-facing PR merged since rc2 has a line, the 2.5.1 section is preserved, and nothing flag-gated is described.
- Dependencies: pins match synonymdev/bitkit-android#1512 (bitkit-core 0.8.0-rc6, ldk-node 0.7.0-rc.76, paykit 0.1.0, vss 0.5.23). ldk-node rc.76 changes only
electrum.rs: it replaces a broken client and retries a broadcast once within the deadline, and onlynon-finalmaps to Rejected. lightning 0.2.7 is kept, so the v2.5.1 fix is carried, and there's no persisted-format change. - Cancel-expired release (#1559/#1562 and the iOS pair): it forces a sync and refuses when the wallet knows any candidate. The approval is written before the proof is removed, and the release txid is saved before broadcast. It adds only confirmed extra coins, at a fee above every candidate's, and declining the PIN leaves the guard in place.
- USDT replacement guard and locked-link QuickPay suppression: traced, clean.
- Defaults: no flag defaults flipped, and no debug hosts in the delta.
Release precondition, not a finding: paykit 0.1.0 drops the 5-minute uncertain-write cooldown and relies on Homeserver 0.16.2+ with GCS to refuse late writes, without checking the server version. Confirm the production homeserver(s) run it before shipping.
Not approving yet: the migration and e2e jobs are still pending at this head. I'll approve once they're green.
Device gate: no device check needed (version and changelog only over RC3; each product PR was gated on its own PR); perf: not relevant; l10n: no UI text changed in this commit range.
iOS note: piotr's rc3 comment says RC2 build 200 remains the App Store submission. That build has none of this delta, so switch the submission to 202 or withdraw 200 before it can go out.
jvsena42
left a comment
There was a problem hiding this comment.
Approving at 2eceedb. CI is green at this head: unit, integration, e2e-local, and E2E Migration (2.5.0 native upgrade/restore, v1.1.6 RN upgrade/restore; the RN restore wallet prep failed once on an adb connection error and passed on re-run).
This approval stands with one LOW open: the [3.0.0] compare link and the moved v3.0.0 tag. Fix it here or in a follow-up, your choice, and reply on the thread with which.
Still to settle before shipping, not findings:
- Switch the App Store submission from RC2 build 200 to 202, or withdraw 200.
- Confirm the homeserver precondition for paykit 0.1.0.
Device gate: 2eceedb — no device check needed (version and changelog only over RC3; each product PR was gated on its own PR); perf: not relevant; l10n: no UI text changed in this range.
Release automation overviewVerified 2026-10-19 12:55 CEST against the built/tagged revisions. 3.0.0 — RC2, to publish first
3.0.1 — follow-up release
These statuses concern the actual built revisions. Any automatic checks on the later comparison-link-only commits are separate. Manual release sign-off, store approvals and publication remain separate gates. |
There was a problem hiding this comment.
Verdict: ✅ Approve
The PR moved to dfc3849 after this run; these results are for 2eceedb.
Review: diff, 2 files, the delta since my review at 040374e. dfc3849 arrived during this review; it changes only the two compare links and is not covered here.
Findings: none.
- All six app, widget and notification configurations read 3.0.1 (202). Test targets are unchanged.
- The 3.0.0 section is byte-identical to the RC2 changelog at 59278ad, including its 2026-10-16 date. 3.0.0 and 3.0.1 together hold exactly RC3's 84 entries.
- 3.0.1 holds the eight fragments added by the PRs merged between RC2 and RC3. #991 only pins Paykit 0.1.0, so it has no entry.
- On GitHub,
v3.0.0andv3.0.0-rc2both point to 59278ad, andv3.0.1to 2eceedb. Both tags and the head commit are Verified. This settles @jvsena42's tag finding, which I confirmed in its thread.
QA for 2eceedb:
Test 1: Upgrade from 2.5.1 ✅ A wallet with a Lightning channel made on 2.5.1 (198) kept its balances, history and channel after 3.0.1 (202) was installed over it.
Regtest Debug builds of v2.5.1 and 2eceedb on an iOS 26.5 simulator.
- On 2.5.1, a new wallet received 200 000 sats, tagged
upgrade251, and moved 50 000 sats to spending through a Blocktank channel. Home showed savings 147 358 and spending 50 000. - After 3.0.1 was installed over it, the app opened straight to the same Home, with the new USDT intro on top. Balances, both activities and the tag were unchanged.
- App Status showed the Bitcoin node connected, the Lightning node synced, the Lightning connection open and a new full backup.
- A 1 000-sat Lightning payment arrived over the migrated channel, raising spending to 51 000. Support showed 3.0.1 (202).
- After a relaunch, savings 147 358, spending 51 000 and all three activities held.
upgrade-2.5.1-to-3.0.1.2x.mp4 |
Test 1 covers the upgrade path my earlier reviews left open. CI's migration matrix still starts from 2.5.0, and synonymdev/bitkit-e2e-tests has no archived 2.5.1 build to start from.
Not driven: the final 3.0.1 production-build smoke QA. It is the release gate on the TestFlight 202 build and runs on mainnet.
CI at this head, all passed:
- Unit tests
- Integration tests
- Translations
- Local E2E
- Staging E2E, all four shards. The
ios_nightly_uishard's first attempt never started a test, because Appium timed out creating the session. Its second attempt passed all 28 tests. - E2E Migration: native 2.5.0 upgrade and restore, RN v1.1.6 upgrade and restore. The RN restore passed this time, but the relaunch check I flagged at 040374e is unchanged in synonymdev/bitkit-e2e-tests, so it can fail the same way again.
Covered: the delta 040374e..2eceedb. The changelog has no runtime effect, so no device case drives it; Test 1 shows the new version.
Pair PR synonymdev/bitkit-android#1512 matches.
- At dba2a21 it makes the same 3.0.1 split with the same dates, and goes from 194 to 195, the same one-build step as 201 to 202 here.
- Its fba36fd makes the same link change as dfc3849.
There was a problem hiding this comment.
Verdict: ✅ Approve
Posted as a comment: not every planned case passed.
Review: diff, 1 file, the delta since my review at 2eceedb.
Findings: none.
v3.0.0andv3.0.0-rc2both point to 59278ad (RC2, build 200), so dropping-rc2from the 3.0.1 link changes nothing.v3.0.1points to 2eceedb (build 202).- 59278ad is not an ancestor of 2eceedb; the two meet at eb3156a. So
v3.0.0..v3.0.1diffs the RC2 build against 3.0.1 directly (53 files), where the old three-dot link measured from eb3156a (129 files).v2.5.1..v3.0.0has the same shape. - Both links open as two-dot comparisons on GitHub. No script or workflow reads these lines, and
[Unreleased]still readsv3.0.1...HEAD.
QA for dfc3849:
No device case. Outside CHANGELOG.md the tree is identical to 2eceedb, and the app target does not bundle CHANGELOG.md, so this head builds the same 3.0.1 (202) app. Test 1 (upgrade from 2.5.1) in my review at 2eceedb holds for it.
Not driven: the final 3.0.1 production-build smoke QA. It is the release gate on the TestFlight 202 build and runs on mainnet.
CI at this head:
- Passed:
- Still running when I posted:
- The same app passed every run at 2eceedb, listed in my earlier review.
Covered: the delta 2eceedb..dfc3849. The two link lines have no runtime effect, so no device case drives them.
Pair PR synonymdev/bitkit-android#1512 matches at fba36fd: the same two link changes, and its v3.0.0 and v3.0.0-rc2 also point to one commit, 19449fb.
jvsena42
left a comment
There was a problem hiding this comment.
Approving at dfc3849. The only commit since my approval changes two compare links in CHANGELOG.md. v3.0.0 resolves to RC2 59278ad again, so [3.0.0] runs from v2.5.1 to RC2 and [3.0.1] from RC2 to 3.0.1, with the RC3 fixes listed only under 3.0.1. Two-dot compares are right, since the lines have diverged. My LOW is fixed.
CI at dfc3849: green (unit, integration, build, e2e-tests-local, E2E Migration 2.5.0 and v1.1.6).
Device gate: dfc3849 — no device check needed (changelog only over the tagged 3.0.1 build); perf: not relevant; l10n: no UI text changed.



Prepares 3.0.1 (202) from the already-cut RC3 source, without adding newer master changes. Twin: synonymdev/bitkit-android#1512.
Description
Advances the marketing version from 3.0.0 to 3.0.1 and the build to 202.
Includes the agreed RC3 fixes: Electrum recovery, expired payment cancellation, Paykit 0.1.0, profile-deletion synchronization, Pubky sign-in recovery, restored-USDT protection and address sharing.
Splits the 3.0.1 fixes into their own changelog section; preserves every 3.0.0 RC2 entry and Ovi's corrections.
Signed preparation commit
2eceedb1cef2497533412912b582db7bbefb5dd1is Verified on GitHub. New signed tagv3.0.1identifies this revision.Preserves
v3.0.0-rc2,v3.0.0-rc3and RC1v2.6.0. At Piotr’s request, signedv3.0.0now points to the exact RC2 store revision (build 200); signedv3.0.1still points to this new candidate. The existing unpublished candidate draft is reused for 3.0.1.Signed documentation follow-up
dfc3849833cd9dbcb90788040cb9f1b956fdf192fixes the 3.0.0 and 3.0.1 comparison URLs to direct two-dot comparisons. No tags or build artifacts moved;v3.0.1still identifies built revision2eceedb1cef2497533412912b582db7bbefb5dd1.Design
N/A — no UI changes in this preparation.
Preview
N/A
QA Notes
Journeys
No product changes relative to RC3; merged product fixes retain their journeys.
Manual Tests
Final 3.0.1 production-build smoke QA remains required. Prior RC3 evidence is retained but is not final-build sign-off.
Automated Checks
Updated 2026-10-19 12:44 CEST. The completed runs below validate built/tagged revision
2eceedb1cef2497533412912b582db7bbefb5dd1(3.0.1 build 202).Migration attempt 2 passed legacy RN source-wallet preparation, RN v1.1.6 upgrade/restore and native 2.5.0 upgrade/restore. All staging shards, including nightly UI, passed. The earlier setup failure is retained in the run history.
The latest signed PR commit
dfc3849833cd9dbcb90788040cb9f1b956fdf192changes only two comparison URLs inCHANGELOG.md. Its parent is the built/tagged revision above; the full tree comparison outsideCHANGELOG.mdis empty. Runtime code, dependencies, version/build metadata and production binaries are unchanged. New automatic checks on this documentation-only head are separate from the completed build validation; no manual rerun or rebuild was dispatched.Remaining release work
Reused draft: https://github.com/synonymdev/bitkit-ios/releases/tag/untagged-7ccec721273636b1df45 No release PR merge, GitHub publication, store submission/rollout or updater change is part of this task.