An Order in wallet-entities and a state machine in wallet-core (Quoted → AwaitingDeposit → Processing → Success | Refunded | Failed, with Expired on the quote deadline), persisted by wallet-data in SQLite, polled with backoff while non-terminal, and resumed on app start. Deposits the wallet makes itself (a Quantus leg, later) record the tx hash and call deposit/submit.
Acceptance
Kill the app mid-order; on restart the order is still there and reaches its terminal state. A quote past its deadline shows as expired without a network call.
Depends on
The 1Click client.
Parent: #7
## Scope
An `Order` in `wallet-entities` and a state machine in `wallet-core` (`Quoted → AwaitingDeposit → Processing → Success | Refunded | Failed`, with `Expired` on the quote deadline), persisted by `wallet-data` in SQLite, polled with backoff while non-terminal, and resumed on app start. Deposits the wallet makes itself (a Quantus leg, later) record the tx hash and call `deposit/submit`.
## Acceptance
Kill the app mid-order; on restart the order is still there and reaches its terminal state. A quote past its deadline shows as expired without a network call.
## Depends on
The 1Click client.
grenade
added the child label 2026-09-15 12:41:49 +00:00
Built: wallet_core::orders (the state machine, unit-tested for forward-only moves, expiry without a network call, and the backoff schedule), an OrderStore port on the SQLite file, and the follower in crates/wallet-app/src/swap.rs that resumes every open order at start and polls with backoff and jitter, persisting each move and emitting orders:updated.
What is not yet exercised end to end: a real order. 1Click answers dry quotes without a credential but refuses a wet one (400 Failed to get quote), so no deposit address can be reserved until the partner JWT exists and the relay (#40) attaches it. The "kill the app mid-order" acceptance runs the moment one real order exists; the store and the resume path it needs are in place and tested at the unit level. Leaving this open for that.
Built: `wallet_core::orders` (the state machine, unit-tested for forward-only moves, expiry without a network call, and the backoff schedule), an `OrderStore` port on the SQLite file, and the follower in `crates/wallet-app/src/swap.rs` that resumes every open order at start and polls with backoff and jitter, persisting each move and emitting `orders:updated`.
What is not yet exercised end to end: a real order. 1Click answers dry quotes without a credential but refuses a wet one (`400 Failed to get quote`), so no deposit address can be reserved until the partner JWT exists and the relay (#40) attaches it. The "kill the app mid-order" acceptance runs the moment one real order exists; the store and the resume path it needs are in place and tested at the unit level. Leaving this open for that.
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
Parent: #7
Scope
An
Orderinwallet-entitiesand a state machine inwallet-core(Quoted → AwaitingDeposit → Processing → Success | Refunded | Failed, withExpiredon the quote deadline), persisted bywallet-datain SQLite, polled with backoff while non-terminal, and resumed on app start. Deposits the wallet makes itself (a Quantus leg, later) record the tx hash and calldeposit/submit.Acceptance
Kill the app mid-order; on restart the order is still there and reaches its terminal state. A quote past its deadline shows as expired without a network call.
Depends on
The 1Click client.
Built:
wallet_core::orders(the state machine, unit-tested for forward-only moves, expiry without a network call, and the backoff schedule), anOrderStoreport on the SQLite file, and the follower incrates/wallet-app/src/swap.rsthat resumes every open order at start and polls with backoff and jitter, persisting each move and emittingorders:updated.What is not yet exercised end to end: a real order. 1Click answers dry quotes without a credential but refuses a wet one (
400 Failed to get quote), so no deposit address can be reserved until the partner JWT exists and the relay (#40) attaches it. The "kill the app mid-order" acceptance runs the moment one real order exists; the store and the resume path it needs are in place and tested at the unit level. Leaving this open for that.