Provisioning outlives a single HTTP request.
A wallet could not treat hosted-service setup as one synchronous request. Provisioning crossed an account service, witness infrastructure, and watcher infrastructure. Any step could time out after making a partial change, and the wallet still needed a trustworthy answer after it restarted.
What I owned
I designed and implemented the durable onboarding path across the wallet and service repositories.
- Durable background operations for account and service creation and deletion.
- Persistent operation state that a wallet can recover after a restart.
- Wallet integration across Locksmith and FortWeb.
- Service integration across kf-boot, witness, and watcher infrastructure.
Key decisions
Persist the operation, not only the result
The backend records progress before it starts remote work. A client can reconnect and ask what happened instead of guessing from a dropped HTTP response.
Make retries safe
A timeout does not prove that the remote service did nothing. Idempotent operations let the wallet retry without allocating the same service twice.
Treat cleanup as part of the workflow
Cancellation and failure paths track what was created, then remove partial state when the operation cannot complete cleanly.
How I tested it
- Account creation and hosted-service allocation through the local wallet stack.
- Retry, cancellation, timeout, and partial-failure behavior.
- Persisted operation state remains available for later polling after a request or process interruption.
Public code
Merged PR: persistent sessions, witness and watcher provisioning, retries, cleanup, and API tests.
Durable HIO operation workerMerged PR: moves remote work out of request handlers and adds recoverable operation state.
Terminal onboarding statusMerged PR: gives polling clients an accurate final state without consuming onboarding quota.
Built with: Python, KERI, HIO, LMDB, Asyncio, REST APIs