Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
235 commits
Select commit Hold shift + click to select a range
be9cc12
test(packages): cover utils + wallet pure-Dart surface (+38 tests) (#…
TaprootFreak May 15, 2026
4638576
docs: add features matrix + 100% test-coverage rule (#322)
TaprootFreak May 15, 2026
75f0f90
ci: measure test coverage and upload as artifact (#323)
TaprootFreak May 15, 2026
d91444b
test(kyc): add Phase 0 cubit unit tests for BitBox-gated KYC flow (#319)
TaprootFreak May 15, 2026
5d4833d
test(service): cover non-DFX services (+38 tests) (#326)
TaprootFreak May 15, 2026
53f66b0
test(screens): cover screen cubits/blocs (+37 tests) (#327)
TaprootFreak May 15, 2026
10c9d81
test: cover verify_pin_cubit + three DFX services (+32 tests) (#328)
TaprootFreak May 15, 2026
ec972e0
test: bank-account + price services, contact + tickets cubits (+23 te…
TaprootFreak May 15, 2026
e43c0b0
test: support + edit-data cubits (+34 tests) (#330)
TaprootFreak May 15, 2026
4819757
test: create_wallet/restore_wallet/debug_auth + 2 dashboard cubits (+…
TaprootFreak May 15, 2026
d2d9bff
test(dashboard+settings): chart cubits + dashboard_bloc + settings_bl…
TaprootFreak May 15, 2026
8e3e750
test(service): support + brokerbot DFX services (+21 tests) (#334)
TaprootFreak May 15, 2026
fe2ca23
test: wallet/pdf services + home_bloc onboarding flow (+17 tests) (#335)
TaprootFreak May 15, 2026
8a59115
test: settings_user_data_cubit + transaction_history_service (+12 tes…
TaprootFreak May 15, 2026
059244f
test: buy + sell cubit subset, no PR-conflict overlap (+22 tests) (#337)
TaprootFreak May 15, 2026
e8ecce9
test: buy_confirm + sell_converter cubits (+14 tests) (#338)
TaprootFreak May 15, 2026
700597f
test: dfx_widget_service + real_unit_account_service (+9 tests) (#339)
TaprootFreak May 15, 2026
619a041
test: buy_payment_info_cubit + balance_service extensions (+14 tests)…
TaprootFreak May 15, 2026
a6b8e72
test: sell_confirm + sell_payment_info cubits (+15 tests) (#341)
TaprootFreak May 15, 2026
5e64eaa
test(service): transaction_history_service.apiBasedSync (+8 tests) (#…
TaprootFreak May 15, 2026
4b0f1f2
fix: keep dashboard buy actions visible (#321)
joshuakrueger-dfx May 15, 2026
8ccf037
test(service): dfx_kyc_service remaining methods (+11 tests) (#344)
TaprootFreak May 15, 2026
27979cd
test(service): dfx_kyc_service core methods (+10 tests) (#343)
TaprootFreak May 15, 2026
64eac27
docs(testing): document the Tier 0–4 BitBox test strategy (#347)
TaprootFreak May 15, 2026
8d301a0
test: NetworkMode + ApiConfig + mnemonic_field extension (+11 tests) …
TaprootFreak May 15, 2026
b300495
test(utils): svg_parser + device_info + default_assets (+14 tests) (#…
TaprootFreak May 15, 2026
4d284bf
test(repository): settings_repository (+16 tests) (#348)
TaprootFreak May 15, 2026
f49f155
test: asset_logo + Blockchain + xfile_extension (+22 tests) (#349)
TaprootFreak May 15, 2026
6421ff4
test(models): Asset + Balance + Transaction (+14 tests) (#350)
TaprootFreak May 15, 2026
22dc30b
test(dto): payment + eip7702 DTOs (+10 tests) (#351)
TaprootFreak May 15, 2026
2fd0342
test: Currency + Language enums + DfxTransaction model (+13 tests) (#…
TaprootFreak May 15, 2026
e60b1e4
test(storage): SecureStorage static crypto helpers (+14 tests) (#353)
TaprootFreak May 15, 2026
e6440db
test: DfxCountryDto + SupportMessage + KycLevel (+16 tests) (#354)
TaprootFreak May 15, 2026
e862f2a
test(registration): KycPersonalData + KycAddress (+11 tests) (#356)
TaprootFreak May 15, 2026
31f03c6
test(dto): TransactionDto + state/type enums + AccountHistoryDto (+19…
TaprootFreak May 15, 2026
f75caba
test(kyc): KycStep + KycSession DTO hierarchy (+12 tests) (#355)
TaprootFreak May 15, 2026
d034b09
test(eip7702): Data + Confirm/Authorization DTOs (+8 tests) (#358)
TaprootFreak May 15, 2026
05a6adf
test(registration): DTOs + status enums (+19 tests) (#359)
TaprootFreak May 15, 2026
c4776ef
test(payment): Buy + Sell DTOs + PaymentInfoError (+12 tests) (#360)
TaprootFreak May 15, 2026
8484f94
test(dto): brokerbot + faucet + fees + country + user + wallet status…
TaprootFreak May 15, 2026
f511093
test(dto): pdf + support + bank account + buy payment info (+21 tests…
TaprootFreak May 15, 2026
dcfc4d6
test(kyc): financial DTOs + KycLevelDto (+10 tests) (#363)
TaprootFreak May 15, 2026
f6dce56
test(widgets): IbanTextFormatter + IbanInputFormatter (+9 tests) (#366)
TaprootFreak May 15, 2026
e0b1329
test(pin): PinAuthCubit (+10 tests) (#364)
TaprootFreak May 15, 2026
465f6b4
fix(bitbox): harden multi-page sign and KYC routing (#332)
joshuakrueger-dfx May 15, 2026
af0b6b4
test(settings-seed): SettingsSeedCubit + state (+5 tests) (#365)
TaprootFreak May 15, 2026
7c0c450
test(kyc): KycFinancialDataCubit + LoadedSuccess helpers (+17 tests) …
TaprootFreak May 15, 2026
68c7d81
test(widgets): mnemonic extensions + controller styling (+9 tests) (#…
TaprootFreak May 15, 2026
9e9f216
test(sell-service): confirmPayment software wallet happy path (+2 tes…
TaprootFreak May 15, 2026
2960db7
test(kyc): KycEmailStepCubit + Failure/Success states (+7 tests) (#369)
TaprootFreak May 15, 2026
17331e2
test(kyc): KycEmailVerificationCubit (+7 tests) (#370)
TaprootFreak May 15, 2026
3165617
test(kyc): nationality + 2FA request + 2FA verify cubits (+9 tests) (…
TaprootFreak May 15, 2026
3ea5f3c
test(kyc): KycRegistrationStepCubit + state helpers (+7 tests) (#372)
TaprootFreak May 15, 2026
a947291
test(dto): RealUnitSellPaymentInfoDto.fromJson (+3 tests) (#373)
TaprootFreak May 15, 2026
10062db
test(widgets): InfoRow (+3 tests) (#374)
TaprootFreak May 15, 2026
73518b3
test(widgets): ActionButton (+4 tests) (#375)
TaprootFreak May 15, 2026
5bb7b6c
test(widgets): TextSubstringHighlighting (+6 tests) (#376)
TaprootFreak May 15, 2026
1601d27
test(widgets): HideAmountText (+6 tests) (#377)
TaprootFreak May 15, 2026
b483ae1
test(sell-bitbox): SellBitboxCubit (+10 tests) (#378)
TaprootFreak May 15, 2026
1d1b115
test(registration-service): RealUnitRegistrationService (+5 tests) (#…
TaprootFreak May 15, 2026
91ca850
test(sell-service): RealUnitSellPaymentInfoService (+8 tests) (#380)
TaprootFreak May 15, 2026
d292dcd
test(sell-bitbox): SellBitboxCubit sign + broadcast happy paths (+6 t…
TaprootFreak May 15, 2026
3d42ff5
test(registration-service): completeRegistration + registerWallet hap…
TaprootFreak May 15, 2026
4b3751a
test(sell-service): confirmPayment EIP-7702 validation guard (+9 test…
TaprootFreak May 15, 2026
f7ef225
test(widgets): PaymentActionRequired (+2 tests) (#386)
TaprootFreak May 15, 2026
3fb89e0
test(widgets): AppTextButton + AppFilledButton (+10 tests) (#387)
TaprootFreak May 15, 2026
93b2475
test(widgets): TextLinkSpan.link (+3 tests) (#393)
TaprootFreak May 15, 2026
9f34b82
test(debug-auth): DebugAuthService (+6 tests) (#385)
TaprootFreak May 15, 2026
5e62c81
test(widgets): StandardSlideButton (+4 tests) (#389)
TaprootFreak May 15, 2026
b0269de
test(widgets): TagSelection + TabSelector (+8 tests) (#390)
TaprootFreak May 15, 2026
7d5009b
test(widgets/form): LabeledTextField + DropdownField (+7 tests) (#388)
TaprootFreak May 15, 2026
181d687
test(widgets): NumberPad (+5 tests) (#391)
TaprootFreak May 15, 2026
f0322ea
test(widgets): OutlinedTile + Handlebars (+7 tests) (#392)
TaprootFreak May 15, 2026
03fa2b5
test(kyc): KycQuestionCheckboxWidget (+5 tests) (#397)
TaprootFreak May 15, 2026
ae60a04
test(kyc): KycQuestionSingleChoiceWidget (+3 tests) (#398)
TaprootFreak May 15, 2026
eb0b7ff
test(widgets): MnemonicReadOnlyField (+3 tests) (#394)
TaprootFreak May 15, 2026
257cc3d
test(pin): PinIndicator (+5 tests) (#396)
TaprootFreak May 15, 2026
16743f4
test(models): PricePoint + PortfolioValuePoint (+3 tests) (#395)
TaprootFreak May 16, 2026
1f9e470
test(kyc): KycLoadingPage (+1 test) (#399)
TaprootFreak May 16, 2026
1b875d9
test(receive): QRAddressWidget (+4 tests) (#400)
TaprootFreak May 16, 2026
23a9e73
test(settings-user-data): SettingsEditLoadingPage (+2 tests) (#401)
TaprootFreak May 16, 2026
04869c0
test(kyc): KycFinancialDataLoading + Failure pages (+3 tests) (#402)
TaprootFreak May 16, 2026
57c253d
test(sell-bitbox/widgets): EthStep state rendering (+5 tests) (#404)
TaprootFreak May 16, 2026
e1dc2e5
test(sell-bitbox/widgets): SwapStep + DepositStep state rendering (+4…
TaprootFreak May 16, 2026
34ba059
test(legal): LegalDisclaimerStep (+3 tests) (#405)
TaprootFreak May 16, 2026
1d1e527
test(sell/widgets): SellMaxAmountButton (+3 tests) (#406)
TaprootFreak May 16, 2026
cdf287a
test(restore-wallet/widgets): RestoreWalletInputField borderColor (+4…
TaprootFreak May 16, 2026
36e8025
test(dashboard/widgets): TimePeriodSelectionButton (+4 tests) (#410)
TaprootFreak May 16, 2026
a604aea
test(verify-seed/widgets): VerifySeedButton (+4 tests) (#408)
TaprootFreak May 16, 2026
59ba8ac
test(hardware-connect-bitbox/widgets): ConnectContent (+5 tests) (#409)
TaprootFreak May 16, 2026
309c90a
test(settings/widgets): SettingsSections (+4 tests) (#415)
TaprootFreak May 16, 2026
62bc056
test(sell-bitbox/widgets): DepositRetry state + Swap fallback (+3 tes…
TaprootFreak May 16, 2026
d5009ea
test(dashboard/widgets): PendingTransactionRow (+3 tests) (#411)
TaprootFreak May 16, 2026
a7c673f
test(support/widgets): SupportChatMessageInputField (+3 tests) (#417)
TaprootFreak May 16, 2026
4be4c44
test(kyc/widgets): MultipleChoice + TextField question widgets (+8 te…
TaprootFreak May 16, 2026
7e6addc
test(dashboard/widgets): DashboardPendingTransactionsView (+3 tests) …
TaprootFreak May 16, 2026
5e099bb
test(exceptions): SigningCancelled + BitboxNotConnected (+5 tests) (#…
TaprootFreak May 16, 2026
1720685
test(sell/widgets): SellBankAccountListItem (+5 tests) (#418)
TaprootFreak May 16, 2026
b5e0d79
test(support/widgets): SupportChatMessageBubble (+4 tests) (#414)
TaprootFreak May 16, 2026
464b526
test(kyc/subpages): KycAccountMergePage (+2 tests) (#421)
TaprootFreak May 16, 2026
dee9024
test(buy/widgets): PaymentInformation state branches (+6 tests) (#420)
TaprootFreak May 16, 2026
0570875
test(verify-seed/widgets): VerifySeedInputField (+4 tests) (#422)
TaprootFreak May 16, 2026
183d766
test(widgets): DatePickerField (+4 tests) (#423)
TaprootFreak May 16, 2026
4e5efb5
docs(testing): four Tier 0 patterns + untestable-surface heads-up (#426)
TaprootFreak May 16, 2026
f9b3c3a
test(pin/widgets): ForgotPinBottomSheet (+4 tests) (#425)
TaprootFreak May 16, 2026
0b0bab3
test(sell/widgets): SellExecutedSheet (+3 tests) (#424)
TaprootFreak May 16, 2026
2f96707
test(pin/widgets): EnableBiometricBottomSheet (+4 tests) (#428)
TaprootFreak May 16, 2026
985db9c
test(buy/widgets): PaymentExecutedSheet (+5 tests) (#427)
TaprootFreak May 16, 2026
8da6b27
test(settings/widgets): SettingsConfirmLogoutWalletSheet (+4 tests) (…
TaprootFreak May 16, 2026
41d6676
test(buy/sell): state-class Equatable contracts (+11 tests) (#430)
TaprootFreak May 16, 2026
e8b2033
test(buy/sell): converter + buy-confirm state contracts (+10 tests) (…
TaprootFreak May 16, 2026
93d4028
test(dashboard/legal): Dashboard + Legal + chart state contracts (+11…
TaprootFreak May 16, 2026
22c2a4b
test(home/settings): state defaults + copyWith contracts (+8 tests) (…
TaprootFreak May 16, 2026
a57f8c1
test(states): debug auth + support state contracts (+11 tests) (#434)
TaprootFreak May 16, 2026
bcbc10a
test(kyc/steps): KYC step state contracts (+8 tests) (#435)
TaprootFreak May 16, 2026
0188701
test(states): transaction receipt + settings contact/tax-report (+8 t…
TaprootFreak May 16, 2026
cec09dd
test(states): KycState hierarchy + CreateWalletState (+8 tests) (#437)
TaprootFreak May 16, 2026
44637e9
test(states): final state pins — ValidateSeed + RestoreWallet + Verif…
TaprootFreak May 16, 2026
def5122
feat(handbook): Maestro Tier 3 scaffold + 01-welcome flow (#439)
TaprootFreak May 16, 2026
a0f4411
ci: BitBox02 simulator workflow + slash trigger (#440)
joshuakrueger-dfx May 16, 2026
ac72eb1
feat(handbook): Maestro Tier 3 flows + screenshot-driven handbook (#441)
TaprootFreak May 16, 2026
29173f9
chore(ci): bump bitbox-testkit pin to v0.5.0 (#443)
TaprootFreak May 18, 2026
8d42187
feat(handbook): nginx image + DEV/PRD Docker Hub publish (#442)
TaprootFreak May 18, 2026
5a9828b
fix(handbook): include handbook.nginx.conf in workflow path filter (#…
TaprootFreak May 18, 2026
c966b87
fix(handbook): emit relative redirect Location so / works behind Tunn…
TaprootFreak May 18, 2026
afbb6cc
fix(handbook): use plain index.html so /de/ serves the handbook (#446)
TaprootFreak May 19, 2026
b8d56d1
feat(handbook): production-grade image + auto-deploy pipeline (#447)
TaprootFreak May 19, 2026
3eecab0
feat(handbook): collapsible sections + align colors with app/realunit…
TaprootFreak May 19, 2026
ca7d87b
chore(ci): refresh bitbox-simulator header comment (#452)
TaprootFreak May 20, 2026
dc90f9c
docs(readme): add Tests + CI/CD tables (#454)
TaprootFreak May 20, 2026
905b7d1
ci(pull-request): hardening — concurrency, draft-skip, permissions, t…
TaprootFreak May 20, 2026
194fc52
ci(handbook): post-deploy smoke test against the public endpoint (#451)
TaprootFreak May 20, 2026
3e50ca7
refactor(dfx): finish DFXAuthService migration + DRY base-class helpe…
TaprootFreak May 20, 2026
3df18f7
ci: deploy to Play Store Internal + TestFlight on develop merges (#453)
TaprootFreak May 20, 2026
8bd1a90
refactor(bitbox): type BitboxNotConnectedException in credentials sig…
TaprootFreak May 20, 2026
5289474
ci(handbook): smoke-test canonical realunit.app URLs (#456)
TaprootFreak May 20, 2026
59a2010
feat: jump marketing version to 1.0.0 (#459)
TaprootFreak May 20, 2026
c7da05c
fix(bitbox): recover from BLE/USB disconnect without losing wallet se…
Blume1977 May 20, 2026
8a538a0
chore(deps): bump bitbox_flutter v0.0.5 → v0.0.7 (#469)
TaprootFreak May 20, 2026
6c824c3
test(bitbox): service-lifecycle suite via the bitbox_flutter simulato…
TaprootFreak May 20, 2026
de8df6c
test(ci): repair CI breakages introduced by #461 (#471)
TaprootFreak May 20, 2026
7d834a0
test(bitbox): guard exception surface + lock-in P1 channel-hash order…
TaprootFreak May 20, 2026
15bb6a9
docs(contributing): document service-lifecycle, exception-surface, an…
TaprootFreak May 20, 2026
732e9a6
test(bitbox): harden observer + migrate lifecycle suite to fakeAsync …
TaprootFreak May 20, 2026
77ab87e
ci(bitbox-audit): surface firmware-quirk coverage on every PR (#475)
TaprootFreak May 20, 2026
718c45f
test(bitbox): cover _runOrThrowDisconnect mid-flow paths (#477)
TaprootFreak May 20, 2026
63ae3af
test(exceptions): complete surface coverage with KYC + registration v…
TaprootFreak May 20, 2026
2b1db3b
feat(release): tag-driven, platform-identical versioning end to end (…
TaprootFreak May 20, 2026
981e3a7
docs(contributing): tighten test conventions after #473 + #478 merged…
TaprootFreak May 20, 2026
a070cf5
chore(release): keep generate_release_info tests off the working tree…
TaprootFreak May 21, 2026
9ade534
fix(kyc): existing DFX customer merge — close misroute, surface failu…
Blume1977 May 21, 2026
039dfd4
feat(versioning): switch to v1.X.Y schema, drop beta suffix (#482)
TaprootFreak May 21, 2026
09d6e82
ci(coverage): scope lcov filter to README activated surface + post su…
TaprootFreak May 21, 2026
38680e5
polish: PR #472 follow-ups — real race test + DRY + visibility + in-f…
TaprootFreak May 21, 2026
31a07ef
feat(lifecycle): drop mnemonic on app-hidden (#485)
Blume1977 May 21, 2026
b3cb398
ci(coverage): floor gate + Tier 3 handbook flows in CI (#486)
TaprootFreak May 21, 2026
8361626
docs(architecture): codify 'API as Decision Authority' rule + audit +…
Blume1977 May 21, 2026
af0244d
fix: close #485 scope gaps — _onHidden race + onboarding mnemonic (#490)
Blume1977 May 21, 2026
3b195f4
refactor(kyc): match TFA_REQUIRED on body code, drop status-only fall…
Blume1977 May 21, 2026
da36e78
ci(handbook): pin SSH to deploy_key only — fix intermittent auth fail…
TaprootFreak May 21, 2026
771c2f2
refactor(buy/sell): render quote validity + minVolume from API, drop …
Blume1977 May 21, 2026
9428873
docs(audit): record W4 as shipped + drop merged from outstanding (#501)
Blume1977 May 21, 2026
4978794
ci: quick-wins bundle for #487 (cache, timeouts, consistency, hardeni…
TaprootFreak May 21, 2026
d19cb81
ci(coverage): extract floor gate into its own required-check-ready jo…
TaprootFreak May 21, 2026
a228ff6
docs: correct BitBox platform-support documentation (#510)
TaprootFreak May 21, 2026
b2effb3
ci: remove unused per-platform release workflows (#487 item 3) (#503)
TaprootFreak May 21, 2026
18cb528
ci(handbook): make PIN-entry flows resilient to lost taps (#508)
TaprootFreak May 21, 2026
0290fbe
fix(bitbox): capture auth signature as awaited pairing step (#511)
TaprootFreak May 21, 2026
b44207f
refactor(app): consume UserCapabilities + ALREADY_REGISTERED registra…
Blume1977 May 21, 2026
6eecd4f
refactor(sell): consume BankAccountDto.default for auto-selection, dr…
Blume1977 May 21, 2026
221d0e5
docs: app screen inventory + handbook doc fixes (#513)
TaprootFreak May 21, 2026
c500495
refactor(kyc): drive KycCubit routing from API processStatus, drop lo…
Blume1977 May 21, 2026
489d702
refactor(reference-data): drive currency + language pickers from /v1/…
Blume1977 May 21, 2026
9c8978b
ci: consolidate beta-release + develop-release into single workflow (…
TaprootFreak May 21, 2026
9ddc62e
ci(handbook): extract reusable workflow, replace dev/prd with thin ca…
TaprootFreak May 21, 2026
a3fdba6
refactor(reference-data): consume /v1/legal-document, /v1/company-inf…
Blume1977 May 21, 2026
3c0e9b9
fix(verify-seed): make the verify-to-onboarding transition robust (#514)
TaprootFreak May 21, 2026
207b694
ci(handbook): cache iOS DerivedData + Pods for faster Tier 3 builds (…
TaprootFreak May 21, 2026
517b3bc
ci(handbook): harden remaining handbook flows against silent tap-loss…
TaprootFreak May 22, 2026
61de19b
Handbook: 7 new flows for account-free screens + selective CI runs (#…
TaprootFreak May 22, 2026
ef215b3
fix(bitbox): bound the sign queue so a hung sign can't deadlock all l…
TaprootFreak May 22, 2026
b69575a
ci(handbook): reuse XCUITest driver across flows to speed up Tier 3 (…
TaprootFreak May 22, 2026
01717d1
feat: tag API requests with X-Client header (#520)
TaprootFreak May 22, 2026
416e781
fix(kyc): skip completed steps in pendingReview, remove canTrade (#523)
davidleomay May 22, 2026
966220f
revert(reference-data): keep legal-document / company-info / country …
TaprootFreak May 23, 2026
bf06eb9
test+fix: codebase audit — 48 tests, 10 emit-after-close fixes, DB te…
davidleomay May 23, 2026
ae5e994
docs(handbook): add baseline screenshots for flows 20-26 (#522)
TaprootFreak May 23, 2026
40b0930
fix(ci): group concurrency by PR number, not commit SHA (#531)
TaprootFreak May 23, 2026
672ffb6
ci(handbook): harden flow 11 against tap-loss, fix stale flow counts …
TaprootFreak May 23, 2026
214f5b2
fix(kyc): filter country pickers by allow-flag, harden load states (#…
TaprootFreak May 23, 2026
888340f
feat(handbook): basic-auth gate + one-shot DEV+PRD rollout on develop…
TaprootFreak May 23, 2026
007e97e
fix(handbook): stop CF caching 401s (URGENT) + accept RealUnit userna…
TaprootFreak May 23, 2026
50f33aa
docs(testing): refresh testing guide to match current code & CI (#533)
TaprootFreak May 23, 2026
225c37d
docs: comprehensive test/coverage doc audit fixes (#536)
TaprootFreak May 23, 2026
315df5c
feat(handbook): direct-link URLs + one-click copy for every flow card…
TaprootFreak May 23, 2026
fa6c155
feat(handbook): pull RealUnit mail previews from api repo at build ti…
TaprootFreak May 23, 2026
8ba313b
test: cover the four Drift repositories + tighten coverage scope (#538)
TaprootFreak May 23, 2026
eaac473
test: coverage uplift batch (storage + dfx services + config + sell_b…
TaprootFreak May 23, 2026
42f4cc2
feat(tests): visual-regression coverage for all 57 screens on dfx01 r…
TaprootFreak May 25, 2026
b311bf3
chore(handbook): drop legacy Maestro screenshots, source from goldens…
TaprootFreak May 25, 2026
3aab2c9
fix(test): precache image assets in golden tests (#575)
TaprootFreak May 25, 2026
12c8b4e
chore: mark Coverage Floor Gate as required status check on develop+m…
TaprootFreak May 25, 2026
62b966d
feat(ci): on-demand golden regenerate workflow (#577)
TaprootFreak May 25, 2026
5b17ac2
chore: post-#541 follow-ups (rolling collection) (#571)
TaprootFreak May 26, 2026
dfcaf3a
chore: open collection branch for post-#580 follow-ups
TaprootFreak May 26, 2026
eec3a87
fix(support): hide TransactionIssue + LimitRequest from ticket menu (…
Blume1977 May 26, 2026
21d5000
refactor(settings/contact): make Support tile unconditional (#588)
TaprootFreak May 26, 2026
f8d8a94
ci: trigger workflows on bot baseline-regen commit
TaprootFreak May 26, 2026
bf2ab05
feat(kyc): validate name and address against Swiss payment character …
Blume1977 May 26, 2026
96bf1dc
test(utils): unit tests for isSwissPaymentText validator
TaprootFreak May 26, 2026
f2545e3
test(goldens): cover Settings page BitBox-open variant (#590)
TaprootFreak May 26, 2026
96685f9
test(goldens): cover BitBox connection top-3 distinct render states (…
TaprootFreak May 26, 2026
94176b2
chore: post-#580 follow-ups (rolling collection) (#587)
TaprootFreak May 27, 2026
e926682
chore: seed integration/realunit-registration branch
TaprootFreak May 28, 2026
199f07b
Merge pull request #599 from DFXswiss/feat/replace-registration-requi…
TaprootFreak May 28, 2026
720b698
fix(buy/sell-converter): drop stale in-flight responses via seq guard…
Blume1977 May 28, 2026
2e5559a
fix(support/chat): differentiate customer vs support/bot bubbles (#596)
Blume1977 May 28, 2026
044852b
test(goldens): regenerate baselines on dfx01
github-actions[bot] May 28, 2026
f444e20
ci: trigger workflows on bot regen
TaprootFreak May 28, 2026
ccd0f72
docs(api-authority): codify the 8 capability-consumer rules + Wave-3 …
TaprootFreak May 28, 2026
45480e0
refactor(settings/contact): consume createSupportTicket capability (#…
TaprootFreak May 28, 2026
25eb337
feat(realunit): RealUnit registration improvements (collection) (#601)
TaprootFreak May 28, 2026
3e9af09
Merge pull request #600 from DFXswiss/feat/prefill-registration-from-…
TaprootFreak May 28, 2026
fff5035
feat(ci): introduce staging branch flow on top of develop -> main (#623)
TaprootFreak Jun 1, 2026
dfc196a
docs: document the staging branch flow (#625)
TaprootFreak Jun 1, 2026
727d7ea
fix(ci): make auto-tag remote portable across renames/transfers (#628)
TaprootFreak Jun 1, 2026
bd2830d
test(goldens): scoped 0.5% diff threshold for chart-line drift (#624)
TaprootFreak Jun 1, 2026
c08bca9
fix(ci): pin Tier-3 iOS cache key to Xcode version (#631)
TaprootFreak Jun 1, 2026
a60f06b
Merge pull request #626 from RealUnitCH/staging
TaprootFreak Jun 1, 2026
ce673f5
Merge pull request #632 from RealUnitCH/fix/matchfile-realunitch-fast…
TaprootFreak Jun 1, 2026
df4b19b
Promote: staging -> develop (#633)
TaprootFreak Jun 1, 2026
8632d90
feat(ui): apply handbook §02 / §03 / §12 product copy + visibility up…
TaprootFreak Jun 2, 2026
3224720
Merge pull request #640 from RealUnitCH/staging
TaprootFreak Jun 2, 2026
47059ca
Merge pull request #641 from RealUnitCH/feat/dani-handbook-text-chang…
TaprootFreak Jun 2, 2026
a91f937
Promote: staging -> develop (#642)
TaprootFreak Jun 2, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
1 change: 1 addition & 0 deletions .coverage-floor-functions
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
50
1 change: 1 addition & 0 deletions .coverage-floor-lines
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
100
4 changes: 4 additions & 0 deletions .github/workflows/auto-release-pr.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@ jobs:
create-release-pr:
name: Create Release PR
runs-on: ubuntu-latest
timeout-minutes: 5
steps:
- name: Checkout
uses: actions/checkout@v4
Expand All @@ -29,6 +30,7 @@ jobs:
- name: Check for existing PR
id: check-pr
run: |
set -euo pipefail
PR_COUNT=$(gh pr list --base main --head develop --state open --json number --jq 'length')
echo "pr_exists=$([[ $PR_COUNT -gt 0 ]] && echo 'true' || echo 'false')" >> $GITHUB_OUTPUT
echo "::notice::Open PRs from develop to main: $PR_COUNT"
Expand All @@ -39,6 +41,7 @@ jobs:
id: check-diff
if: steps.check-pr.outputs.pr_exists == 'false'
run: |
set -euo pipefail
DIFF_COUNT=$(git rev-list --count origin/main..origin/develop)
echo "has_changes=$([[ $DIFF_COUNT -gt 0 ]] && echo 'true' || echo 'false')" >> $GITHUB_OUTPUT
echo "commit_count=$DIFF_COUNT" >> $GITHUB_OUTPUT
Expand All @@ -50,6 +53,7 @@ jobs:
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
COMMIT_COUNT: ${{ steps.check-diff.outputs.commit_count }}
run: |
set -euo pipefail
printf '%s\n' \
"## Automatic Release PR" \
"" \
Expand Down
74 changes: 74 additions & 0 deletions .github/workflows/auto-staging-pr.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,74 @@
name: Auto Staging PR

on:
push:
branches: [staging]
workflow_dispatch:

permissions:
contents: read
pull-requests: write

concurrency:
group: auto-staging-pr
cancel-in-progress: false

jobs:
create-staging-pr:
name: Create Staging PR
runs-on: ubuntu-latest
timeout-minutes: 5
steps:
- name: Checkout
uses: actions/checkout@v4
with:
fetch-depth: 0

- name: Fetch develop branch
run: git fetch origin develop

- name: Check for existing PR
id: check-pr
run: |
set -euo pipefail
PR_COUNT=$(gh pr list --base develop --head staging --state open --json number --jq 'length')
echo "pr_exists=$([[ $PR_COUNT -gt 0 ]] && echo 'true' || echo 'false')" >> $GITHUB_OUTPUT
echo "::notice::Open PRs from staging to develop: $PR_COUNT"
env:
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}

- name: Check for differences
id: check-diff
if: steps.check-pr.outputs.pr_exists == 'false'
run: |
set -euo pipefail
DIFF_COUNT=$(git rev-list --count origin/develop..origin/staging)
echo "has_changes=$([[ $DIFF_COUNT -gt 0 ]] && echo 'true' || echo 'false')" >> $GITHUB_OUTPUT
echo "commit_count=$DIFF_COUNT" >> $GITHUB_OUTPUT
echo "::notice::Commits ahead of develop: $DIFF_COUNT"

- name: Create Staging PR
if: steps.check-pr.outputs.pr_exists == 'false' && steps.check-diff.outputs.has_changes == 'true'
env:
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
COMMIT_COUNT: ${{ steps.check-diff.outputs.commit_count }}
run: |
set -euo pipefail
printf '%s\n' \
"## Automatic Staging PR" \
"" \
"This PR was automatically created after changes were pushed to staging." \
"" \
"**Commits:** ${COMMIT_COUNT} new commit(s)" \
"" \
"### Checklist" \
"- [ ] Review all changes" \
"- [ ] Verify CI passes" \
"- [ ] Approve and merge to promote into develop" \
> /tmp/pr-body.md

gh pr create \
--base develop \
--head staging \
--title "Promote: staging -> develop" \
--body-file /tmp/pr-body.md
52 changes: 32 additions & 20 deletions .github/workflows/auto-tag.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ name: Auto Tag on Merge

on:
push:
branches: [main, develop]
branches: [develop]

permissions:
contents: write
Expand All @@ -15,6 +15,7 @@ jobs:
create-tag:
name: Create Release Tag
runs-on: ubuntu-latest
timeout-minutes: 5
steps:
- name: Checkout
uses: actions/checkout@v4
Expand All @@ -28,13 +29,22 @@ jobs:
ssh-private-key: ${{ secrets.TAG_DEPLOY_KEY }}

- name: Configure Git for SSH
run: git remote set-url origin git@github.com:DFXswiss/realunit-app.git
# `${{ github.repository }}` resolves to `<owner>/<repo>` for the
# currently running workflow — keeps the remote correct if the repo
# is renamed or transferred between orgs, without a follow-up edit.
run: git remote set-url origin git@github.com:${{ github.repository }}.git

- name: Get latest tag
id: get-tag
run: |
# Get only clean semver tags (vX.Y.Z), exclude pre-release tags
LATEST_TAG=$(git tag -l --sort=-v:refname | grep -E '^v[0-9]+\.[0-9]+\.[0-9]+$' | head -n 1)
set -euo pipefail
# Only consider clean semver tags (vX.Y.Z). Legacy beta tags
# (vX.Y.Z-beta.N) are ignored — they were superseded by the
# plain-SemVer schema. The trailing `|| true` keeps the
# pipeline tolerant of an empty grep under `pipefail`: a
# fresh repo with zero matching tags is a legitimate state
# that the next `[ -z ... ]` branch handles explicitly.
LATEST_TAG=$(git tag -l --sort=-v:refname | grep -E '^v[0-9]+\.[0-9]+\.[0-9]+$' | head -n 1 || true)

if [ -z "$LATEST_TAG" ]; then
echo "No existing tags found, starting with v0.0.0"
Expand All @@ -47,41 +57,42 @@ jobs:
- name: Calculate next version
id: next-version
run: |
set -euo pipefail
LATEST_TAG="${{ steps.get-tag.outputs.latest_tag }}"
BRANCH="${{ github.ref_name }}"

# Remove 'v' prefix and split into parts
VERSION="${LATEST_TAG#v}"
MAJOR=$(echo "$VERSION" | cut -d. -f1)
MINOR=$(echo "$VERSION" | cut -d. -f2)
PATCH=$(echo "$VERSION" | cut -d. -f3)

# Next release version
# Default: patch-bump on top of latest tag.
NEW_PATCH=$((PATCH + 1))
NEXT_VERSION="v${MAJOR}.${MINOR}.${NEW_PATCH}"

if [ "$BRANCH" = "main" ]; then
NEW_TAG="$NEXT_VERSION"
else
# For develop: find latest beta tag for the next version
LATEST_BETA=$(git tag -l --sort=-v:refname "${NEXT_VERSION}-beta.*" | head -n 1)

if [ -z "$LATEST_BETA" ]; then
NEW_TAG="${NEXT_VERSION}-beta.1"
else
# Extract beta number and increment
BETA_NUM=$(echo "$LATEST_BETA" | sed "s/${NEXT_VERSION}-beta\.//")
NEW_BETA=$((BETA_NUM + 1))
NEW_TAG="${NEXT_VERSION}-beta.${NEW_BETA}"
fi
# Floor for major/minor jumps: when pubspec.yaml is ahead of the
# patch-bumped tag, use pubspec instead. Patch increments still come
# from the tag history; pubspec is only consulted to trigger jumps.
# `|| true` keeps the pipeline tolerant of an empty grep under
# `pipefail`: a pubspec without a `version:` line is a legitimate
# state that the next `[ -n ... ]` branch handles explicitly.
PUBSPEC_VERSION=$(grep -E '^version:[[:space:]]+[0-9]+\.[0-9]+\.[0-9]+' pubspec.yaml \
| awk '{print $2}' | cut -d+ -f1 || true)
if [ -n "$PUBSPEC_VERSION" ]; then
HIGHEST=$(printf '%s\n%s\n' "${NEXT_VERSION#v}" "$PUBSPEC_VERSION" | sort -V | tail -n 1)
NEXT_VERSION="v${HIGHEST}"
echo "::notice::pubspec marketing version: $PUBSPEC_VERSION; resolved next: $NEXT_VERSION"
fi

NEW_TAG="$NEXT_VERSION"

echo "new_tag=$NEW_TAG" >> $GITHUB_OUTPUT
echo "::notice::New tag: $NEW_TAG"

- name: Check if tag exists
id: check-tag
run: |
set -euo pipefail
NEW_TAG="${{ steps.next-version.outputs.new_tag }}"
if git rev-parse "$NEW_TAG" >/dev/null 2>&1; then
echo "::error::Tag $NEW_TAG already exists!"
Expand All @@ -93,6 +104,7 @@ jobs:
- name: Create and push tag
if: steps.check-tag.outputs.exists == 'false'
run: |
set -euo pipefail
NEW_TAG="${{ steps.next-version.outputs.new_tag }}"

git config user.name "github-actions[bot]"
Expand Down
96 changes: 0 additions & 96 deletions .github/workflows/beta-release-android.yaml

This file was deleted.

Loading
Loading