Skip to content

Vault management: withdrawal threshold, labels, search/filter, activity history (#216-#219) - #331

Open
Kingsman-99 wants to merge 1 commit into
ethos-protocol:mainfrom
Kingsman-99:review/vault-mgmt-216-219
Open

Vault management: withdrawal threshold, labels, search/filter, activity history (#216-#219)#331
Kingsman-99 wants to merge 1 commit into
ethos-protocol:mainfrom
Kingsman-99:review/vault-mgmt-216-219

Conversation

@Kingsman-99

Copy link
Copy Markdown

#216: Add a configurable large-withdrawal confirmation threshold (WithdrawalThreshold, default 80%). WithdrawView/WithdrawScreen show a warning and require an extra explicit confirmation step before the biometric gate when the entered amount crosses it. Tests cover below/at/ above threshold and that the threshold is a tunable parameter.

#218: Add an optional Vault.label field (both platforms, defaults to nil/ null so it's backward-compatible with existing responses), a POST /vaults/{id}/label contract in api-contract.md, and APIClient.updateVaultLabel/ApiClient.updateVaultLabel. Added a rename action (iOS: RenameVaultView from VaultDetailView; Android: an edit icon + dialog on VaultCard) and a displayName/displayName property used by VaultRowView/VaultCard, falling back to a truncated ID.

#219: Add client-side search (by label/ID) and a status filter chip row (All/Active/Expiring Soon/Expired) to the vault list on both platforms. Implemented as a pure filter (VaultListFiltering.filter / filterVaults) over whatever's already in vaultStore.vaults/state.vaults, so it works across every page already fetched via loadMore()/loadAll() without an extra request; "Load More" is hidden while a filter is active since a filtered view has already searched everything fetched so far.

#217: Add GET /vaults/{id}/history to api-contract.md (reusing the existing cursor/limit pagination pattern), a VaultHistoryEvent model, and a history screen on both platforms (iOS: VaultHistoryView, linked from VaultDetailView; Android: VaultHistoryScreen, reached by tapping a vault card, via a new VaultHistoryViewModel) with its own cursor-based "load more".

Summary

Closes #216
Closes #218
Closes #219
Closes #217

Changes

Testing

Parity checklist

This project maintains a feature-parity table in PARITY.md that
tracks which features are implemented on iOS vs Android. Please answer the
questions below before requesting review.

  • This PR does not add, change, or remove any user-facing feature on either
    platform — no PARITY.md update needed.

    — OR —

  • This PR adds/changes/removes a user-facing feature. I have updated PARITY.md:

    • Updated the status symbol(s) for the affected row(s).
    • Added or updated "Notes" if the implementation is partial or has caveats.
    • Removed or updated any rows in the "Known gaps" table that this PR closes.

Related issues

…ty history (ethos-protocol#216-ethos-protocol#219)

ethos-protocol#216: Add a configurable large-withdrawal confirmation threshold
(WithdrawalThreshold, default 80%). WithdrawView/WithdrawScreen show a
warning and require an extra explicit confirmation step before the
biometric gate when the entered amount crosses it. Tests cover below/at/
above threshold and that the threshold is a tunable parameter.

ethos-protocol#218: Add an optional Vault.label field (both platforms, defaults to nil/
null so it's backward-compatible with existing responses), a
POST /vaults/{id}/label contract in api-contract.md, and
APIClient.updateVaultLabel/ApiClient.updateVaultLabel. Added a rename
action (iOS: RenameVaultView from VaultDetailView; Android: an edit icon +
dialog on VaultCard) and a displayName/displayName property used by
VaultRowView/VaultCard, falling back to a truncated ID.

ethos-protocol#219: Add client-side search (by label/ID) and a status filter chip row
(All/Active/Expiring Soon/Expired) to the vault list on both platforms.
Implemented as a pure filter (VaultListFiltering.filter / filterVaults) over
whatever's already in vaultStore.vaults/state.vaults, so it works across
every page already fetched via loadMore()/loadAll() without an extra
request; "Load More" is hidden while a filter is active since a filtered
view has already searched everything fetched so far.

ethos-protocol#217: Add GET /vaults/{id}/history to api-contract.md (reusing the existing
cursor/limit pagination pattern), a VaultHistoryEvent model, and a history
screen on both platforms (iOS: VaultHistoryView, linked from VaultDetailView;
Android: VaultHistoryScreen, reached by tapping a vault card, via a new
VaultHistoryViewModel) with its own cursor-based "load more".
@drips-wave

drips-wave Bot commented Aug 27, 2026

Copy link
Copy Markdown

@Kingsman-99 Great news! 🎉 Based on an automated assessment of this PR, the linked Wave issue(s) no longer count against your application limits.

You can now already apply to more issues while waiting for a review of this PR. Keep up the great work! 🚀

Learn more about application limits

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

1 participant