🚀 Release web-v1.102.0
📊 Release Statistics
- Total commits: 139
- Features: 30
- Bug fixes: 65
- Mobile changes: 3
- Breaking changes: 0
✨ Features
| Change | PR/Commit | Author |
|---|---|---|
| feat(relay): offer one gas payment option per chain [PLA-2041] | #8877 | Daniel |
| feat(policies): show last updated in the active spending limit panel | #8888 | Tim |
| feat(Spaces): members addresses on the Team page | #8865 | Varya |
| feat(oidc-auth): let a page choose where a step-up returns the user | #8879 | Tim Daubenschütz |
| feat(policies): add a network row to the Proposer and Spending Limits drawers | #8871 | Varya |
| feat(policies): UI section to inform about Nested Safes limitations | #8868 | Varya |
| feat(policies): track the Policies page funnel in Mixpanel (WA-3723) | #8863 | Clóvis Neto |
| feat(policies): edit a spending limit | #8855 | Tong Yao |
| feat(policies): open the side panel for pending spending limits | #8852 | Tim |
| feat(spaces): remove the Safes left out as part of the plan change request | #8856 | Pooya Raki |
| feat: swap the dead ETH staking icon for a Safenet SAFE entry point in the asset list [WA-3450] | #8612 | Guilherme Fekete Endres |
| feat(policies): show pending spending limits in the policies table | #8820 | Tim |
| feat(policies): open the spending limit side panel from the policies table | #8818 | Tong Yao |
| feat(policies): gate adding a policy on the Policies page by the plan | #8735 | Tim Daubenschütz |
| feat(policies): gate adding proposers and spending limits by the policies entitlement | #8789 | valleXYZ |
| feat(policies): wire the policies table to the space policies route | #8768 | Tim Daubenschütz |
| feat: Safe Pro | #8717 | Yago Pérez Vázquez |
| feat(policies): spending limit side drawer | #8780 | Tim |
| feat(policies): expand the spending limit popular token list | #8786 | Tong Yao |
| feat: name Safes when adding them to a workspace (WA-3259, WA-3260) | #8759 | valleXYZ |
| feat(proposers): submit EOA proposer | #8775 | Varya |
| feat(policies): Stories for the Add Policy popup | #8776 | Varya |
| feat(policies): batch the spending limit policy into one multisend and hand it to the shared sign flow | #8771 | Tong Yao |
| feat(pw): migrate landing test | #8741 | dsh |
| feat(proposers): Create Proposer flow | #8746 | Varya |
| feat(web): proposer role drawer | #8749 | Clóvis Neto |
| feat(policies): show the space's policies in a table | #8611 | Tim Daubenschütz |
| feat(policies): add the policy summary block for the spending limit confirm step | #8731 | Tong Yao |
| feat(web): add signatures to queued transactions via the confirmation endpoint | #8747 | Pooya Raki |
| feat(policies): build the spending limit create form with multiple spenders and tokens | #8722 | Tong Yao |
🐛 Bug Fixes
| Change | PR/Commit | Author |
|---|---|---|
| fix(policies): mark added and removed limits in the pending spending limit panel (WA-3765) | #8934 | Tim |
| fix(safe-shield): treat Safes in the current Workspace as trusted (WA-3684) | #8931 | Daniel Dimitrov |
| fix(safe-pro): Removed accounts count | #8915 | Yago Pérez Vázquez |
| fix(safe-pro): keep the info icon apart from the Safe accounts count | #8926 | valleXYZ |
| fix(policies): fix the spending limit bugs from the QA review (WA-3748) | #8913 | Tong Yao |
| fix(UI): name truncation for Members and Added By columns in the address book | #8924 | Varya |
| fix(policies): load spending limits for a Safe with no delegates left | #8912 | Tim |
| fix(web): list the scoped Safe's queued nonces in Space-level tx flows | #8911 | Tim |
| fix(Spending Limits): restrict SL to indexer chains; show disabled safes on chains w/o Allowance module | #8909 | Varya |
| fix(safe-pro): align Safe Pro copy and states with the final design | #8878 | Zalens |
| fix(spaces): keep the Safe name when a single-network Pay later create needs a step-up | #8900 | Tim Daubenschütz |
| fix: Show pricing URL | #8907 | Yago Pérez Vázquez |
| fix(spaces): explain a blocked Workspace and open one with the Safe | #8906 | Daniel Dimitrov |
| fix(web): show trial status in workspace badge | #8850 | austin |
| fix(spaces): check Workspace eligibility with two aggregated requests | #8901 | Daniel Dimitrov |
| fix(web): sign queued tx deletion against the Safe Transaction Service domain | #8903 | Pooya Raki |
| fix: send each CGW request only once | #8869 | Pooya Raki |
| fix(policies): warn when a parent Safe picks a nested Safe in the Policies flows | #8873 | Varya |
| fix(spaces): add a multi-network Pay later Safe to its Workspace in one request (WA-3725, surgical) | #8898 | Tim Daubenschütz |
| fix(policies): open pending spending limit transactions in the Safe queue | #8887 | Tim |
| fix(policies): simulate the scoped Safe in Space-level flows (WA-3731) | #8874 | Tong Yao |
| fix(spaces): continue onboarding after a step-up on the invite step | #8893 | Tim Daubenschütz |
| fix(spaces): return to the Safe in the chosen Workspace after a step-up from the sidebar | #8895 | Tim Daubenschütz |
| fix(spaces): keep Safe names and the onboarding step across step-up (WA-3721) | #8884 | valleXYZ |
| fix(spaces): land on the new Safe in its Workspace after step-up, for Pay later and Pay now | #8883 | Tim Daubenschütz |
| fix(spaces): return to the Safes step after a step-up from the trial offer | #8880 | Tim Daubenschütz |
| fix(policies): hide unknown balance and price in the spending limit form (WA-3737) | #8882 | Tong Yao |
| fix(safe-shield): do not treat an unpicked Safe as untrusted or loading (WA-3729) | #8872 | Tong Yao |
| fix(policies): wait for the scoped Safe SDK before loading a pending transaction (WA-3732) | #8870 | Tim |
| fix(policies): keep the picked Safe and the proposer out of each other's options | #8866 | Clóvis Neto |
| fix(safe-pro): Disable Space removal when the subscription can still be billed | #8861 | Yago Pérez Vázquez |
| fix(policies): Safe and Proposer names on the Proposers info toasts | #8860 | Varya |
| fix(spaces): take the Workspace of a tab from its URL | #8845 | Daniel Dimitrov |
| fix(safe-pro): Improvements to avoid extra calls to /spaces.*/safes endpoint | #8827 | Yago Pérez Vázquez |
| fix(spaces): make the Workspace name copyable in the delete dialog | #8859 | Tim Daubenschütz |
| fix(policies): resolve proposer names from the address book (WA-3664) | #8841 | valleXYZ |
| fix(web): close stale broadcast channels and stub them in Jest | #8849 | Daniel Dimitrov |
| fix: keep the allowance preset listed while typing an amount (WA-3454) | #8619 | Guilherme Fekete Endres |
| fix(safe-pro): Selection reset when changing between monthly/yearly plans | #8853 | Yago Pérez Vázquez |
| fix(policies): Address Book contacts in the Policies search | #8842 | Varya |
| fix(safe-pro): Enable Set Tenderly simulation in queue | #8843 | Yago Pérez Vázquez |
| fix(policies): link Safe accounts to their settings and tidy the policies table | #8844 | Clóvis Neto |
| fix: policies mobile UI | #8848 | dsh |
| fix(safe-pro): tell Core Safes their free sponsored transactions are per day | #8846 | Daniel |
| fix(policies): tell the user to remove a nested Safe proposer on the Safe level | #8840 | Clóvis Neto |
| fix(safe-shield): offer the Hypernative login only to eligible Safes | #8832 | Daniel |
| fix(safe-pro): Gate contract checks | #8823 | Yago Pérez Vázquez |
| fix(policies): multiple UI and copy fixes | #8833 | Varya |
| fix(safe-pro): Add support url to talk to sales | #8836 | Yago Pérez Vázquez |
| fix(web): keep tx queue columns aligned for pending rows | #8778 | Daniel Dimitrov |
| fix: add an existing URL to the Policies info link | #8828 | Varya |
| fix(proposers): Restrict proposer role granting for signers only (without proposers) | #8805 | Varya |
| fix: Checkout return | #8821 | Yago Pérez Vázquez |
| fix: Accounts counter | #8822 | Yago Pérez Vázquez |
| fix(policies): disable Safe selection for CF safes in Policies flows | #8783 | Varya |
| fix: keep search focus in account list dropdown | #8428 | Daniel Dimitrov |
| fix(web): sign queued tx deletion against the Safe Queue Service domain | #8766 | Pooya Raki |
| fix(web): restore background push notifications (#7987) | #7568 | Daniel Dimitrov |
| fix(tx-builder): dont show Tx Lib header on empty state | #8728 | dsh |
| fix(web): open the request-policy form in a popup window | #8770 | Clóvis Neto |
| fix: show unsupported network error for unknown URL prefixes (WA-3599) | #8765 | Daniel Dimitrov |
| fix(web): link the Something missing? tile to the request-policy form | #8750 | Clóvis Neto |
| fix: show queued recoveries for Safes older than the RPC getLogs range (WA-3473) | #8744 | Daniel Dimitrov |
| fix(web): open Safe Shield cards with Enter and Space | #8743 | Daniel Dimitrov |
| fix: show fixed copy for a blocked Safe instead of the gateway's wording | #8692 | Clóvis Neto |
📱 Mobile
| Change | PR/Commit | Author |
|---|---|---|
| fix(mobile): mobile signer import recovery | #8737 | Daniel Dimitrov |
| fix(mobile): sign with contract addresses resolved by the read-only SDK | #8817 | Daniel Dimitrov |
| tests(mobile): dismiss iOS open-link alert in deep-link E2E flow | #8779 | Daniel Dimitrov |
🔧 Chores & Maintenance
| Change | PR/Commit | Author |
|---|---|---|
| chore(safe-pro): add stories for the plan views | #8889 | valleXYZ |
| chore(store): regenerate the CGW schema with gas payment options [PLA-2041] | #8886 | Daniel |
| chore: regenerate schema | #8875 | Varya |
| chore: do not cancel a running dev or staging deploy | #8862 | Tim Daubenschütz |
| chore(deps): bump fast-uri from 3.1.6 to 3.1.8 | #8829 | dependabot[bot] |
| chore(deps): bump undici from 6.28.0 to 6.28.1 | #8831 | dependabot[bot] |
| chore: Link legal pages to safe.global and remove local copies | #8838 | Oluwaseyi Oluwapelumi |
| chore: bump mobile app version to 1.0.16 | #8825 | Daniel Dimitrov |
| chore: build Storybook in parallel with the web preview build | #8824 | Tim Daubenschütz |
| chore: upgrade Jest to 30.5 across the monorepo | #8816 | Daniel Dimitrov |
| chore(deps): bump docker/build-push-action from 7.3.0 to 7.4.0 | #8814 | dependabot[bot] |
| chore(deps): bump linear/linear-release-action from 0.17.2 to 0.18.0 | #8813 | dependabot[bot] |
| chore(deps): bump anthropics/claude-code-action from 1.0.223 to 1.0.231 | #8812 | dependabot[bot] |
| chore(deps): bump aws-actions/configure-aws-credentials | #8811 | dependabot[bot] |
| chore(deps): bump docker/setup-qemu-action from 4.3.0 to 4.4.0 | #8810 | dependabot[bot] |
| chore: run base coverage in parallel with web unit tests | #8806 | Tim Daubenschütz |
| chore: Regenerate schema | #8802 | Yago Pérez Vázquez |
| chore: Regenerate Schema | #8784 | Yago Pérez Vázquez |
| chore(deps): bump brace-expansion from 1.1.18 to 1.1.21 | #8764 | dependabot[bot] |
| chore: type-check with the native TypeScript 7 compiler | #8742 | Daniel Dimitrov |
| chore: stage 2 migration of assets Cy tests | #8751 | dsh |
| chore: back-merge main into dev | b0459212b
| Daniel Dimitrov |
| chore(deps): bump nanoid from 3.3.18 to 3.3.19 | #8755 | dependabot[bot] |
| chore(deps): bump anthropics/claude-code-action from 1.0.217 to 1.0.223 | #8745 | dependabot[bot] |
| chore: drop the pre-push husky hook | #8740 | Tim Daubenschütz |
| chore(ci): serve the Storybook preview with no-cache | #8734 | Tim Daubenschütz |
| chore: update schema and types | #8738 | Varya |
📦 Other Changes
| Change | PR/Commit | Author |
|---|---|---|
| perf(spaces): label workspace badges from one entitlements request | #8910 | Daniel Dimitrov |
| tests: check the spending limit plan gate in the Cypress specs | #8830 | Tim Daubenschütz |
| tests: update the pending TxSummary story snapshot | #8834 | Tim Daubenschütz |
| refactor(web): one hook per Safe Pro flag lifecycle | #8807 | Daniel |
| Update CODEOWNERS to include more owners | #8819 | Tim Daubenschütz |
| tests: paste the proposer inputs instead of typing them | #8785 | valleXYZ |
| refactor: capitalise Workspace throughout the UI copy | #8670 | Daniel Dimitrov |
| docs: run verify and test commands in a sub-agent, not the main context | #8739 | Tim Daubenschütz |
| tests: stop appending a prefixed Safe to chain-scoped view URLs | #8773 | Daniel Dimitrov |
| tests: seed the expired step-up record only in the top frame | #8757 | Tim Daubenschütz |
| tests: point the spending-limit token fixtures at their current path | #8758 | valleXYZ |
| docs: harden agents rules for PR reviews | #8748 | Varya |
| refactor(web): extract a reusable composed Drawer component | #8733 | Clóvis Neto |
Generated from main..dev on 2026-10-05 14:50:56 UTC