Summary
The public testnet RPC intermittently fails calls for accounts and contracts that exist. Measured
during release verification: getAccount returned Account not found three times in a row for a
funded, live account and then succeeded, all within eight seconds, and a scan on the registry
returned fetch failed and succeeded on an immediate retry. One lkeep extend --footprint run died
on it outright.
The daemon survives this — it logs, moves to the next contract, and picks the work up next tick — so
this is not a correctness bug. But a one-shot lkeep scan or lkeep extend exits non-zero on a
fault that clears in under a second, and a keeper skips a tick's worth of maintenance for the same
reason.
Acceptance Criteria
Tech Stack
TypeScript 5.7 on Node 22+ (CI runs 22 and 24), ESM with moduleResolution: "NodeNext" — relative
imports need the .js extension. @stellar/stellar-sdk is pinned to an exact version; verify RPC
API shape against the installed copy, not against documentation. Tests are Vitest under test/ and
run without a network. npm run format:check, npm run lint, npm run build and npm test must
all be clean.
Summary
The public testnet RPC intermittently fails calls for accounts and contracts that exist. Measured
during release verification:
getAccountreturnedAccount not foundthree times in a row for afunded, live account and then succeeded, all within eight seconds, and a
scanon the registryreturned
fetch failedand succeeded on an immediate retry. Onelkeep extend --footprintrun diedon it outright.
The daemon survives this — it logs, moves to the next contract, and picks the work up next tick — so
this is not a correctness bug. But a one-shot
lkeep scanorlkeep extendexits non-zero on afault that clears in under a second, and a keeper skips a tick's worth of maintenance for the same
reason.
Acceptance Criteria
getLedgerEntries,getAccount,simulateTransaction, registry paging —retry a small, documented number of times with backoff.
sendTransactionandpollTransactionare left alone: aresubmission risks paying twice, and
extendViaContractalready refuses to poll a hash thenetwork never queued.
warnwith the attempt number, so a flapping endpoint is visible ratherthan hidden.
ctx.signalis already threaded throughrunTickand must be honoured here too.Tech Stack
TypeScript 5.7 on Node 22+ (CI runs 22 and 24), ESM with
moduleResolution: "NodeNext"— relativeimports need the
.jsextension.@stellar/stellar-sdkis pinned to an exact version; verify RPCAPI shape against the installed copy, not against documentation. Tests are Vitest under
test/andrun without a network.
npm run format:check,npm run lint,npm run buildandnpm testmustall be clean.