load() in app/tabs/home.tsx wraps getBalances() in a single catch producing one static message, but Horizon returns a distinct 404 for genuinely unfunded accounts versus network-level failures versus (if it ever got this far) a malformed public key — getAccount/getBalances in src/services/stellar.ts don't distinguish these either, they just let the SDK's error bubble. Users need materially different guidance for each ("fund this address to activate it" vs "check your connection" vs "this address is invalid").
Definition of done:
stellar.ts distinguishes Horizon 404 (unfunded) from network errors from other HTTP errors, as typed results not thrown strings
home.tsx renders distinct UI/copy per case
- Test coverage for at least the unfunded-account 404 path against a mocked Horizon response
Before opening a PR for this issue, read CONTRIBUTING.md.
This is not a starter-issue. The Definition of done above is the full
acceptance criteria, not a subset to sample from — a PR that addresses part
of it is an unfinished issue, not a smaller one. Your PR must include, in
the PR description itself:
PRs missing these will be sent back before review, not reviewed and rejected — please do this up front.
load()inapp/tabs/home.tsxwrapsgetBalances()in a single catch producing one static message, but Horizon returns a distinct 404 for genuinely unfunded accounts versus network-level failures versus (if it ever got this far) a malformed public key —getAccount/getBalancesinsrc/services/stellar.tsdon't distinguish these either, they just let the SDK's error bubble. Users need materially different guidance for each ("fund this address to activate it" vs "check your connection" vs "this address is invalid").Definition of done:
stellar.tsdistinguishes Horizon 404 (unfunded) from network errors from other HTTP errors, as typed results not thrown stringshome.tsxrenders distinct UI/copy per caseBefore opening a PR for this issue, read CONTRIBUTING.md.
This is not a starter-issue. The Definition of done above is the full
acceptance criteria, not a subset to sample from — a PR that addresses part
of it is an unfinished issue, not a smaller one. Your PR must include, in
the PR description itself:
PRs missing these will be sent back before review, not reviewed and rejected — please do this up front.