W11-C4: Retry button in chart error panel fires no network request; functionally dead #177
Labels
No labels
agent:fix_bugfix
agent:fix_conflicts
agent:fix_security
agent:gap_analysis
agent:implement
agent:implement
agent:implement
agent:open_issues
agent:ready
agent:research
agent:security_audit
agent:verify
architecture
backend
blocker:hybrid
blocker:launch
blocker:limit-orders
blocker:v2
block:log_only
block:security
bug
ci
contracts
correctness
deploy
dev
devops
docs
documentation
duplicate
e2e
enhancement
epic
feature
frontend
functional-completion
gas
good first issue
governance
help wanted
high-risk
hooks
hybrid
indexer
infra
infrastructure
integrators
invalid
launch-blocker
limit-orders
localnet
localterra
low priority
missing-implementation
needs-design
ops
performance
priority
high
priority
medium
product
qa
QA
question
ready
ready
research
scripts
security
security-hardening
smartcontracts
tech-debt
testing
ux
UX
v2
verification
wontfix
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set.
Reference
code/cl8y-dex-terraclassic#177
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Issue Summary
When the indexer returns an error for a pair (e.g. a 404 for an invalid address), the chart panel shows the humanized error message and a Retry button. Clicking Retry produces no observable effect: no request fires to the indexer, no loading state appears, and the panel stays in its error state. The only recovery path is a full browser reload, which is not communicated anywhere in the UI.
Reproduction Steps
VITE_NETWORK=local npm run dev) with LocalTerra runninghttp://localhost:3000/trade/terra1damThat'scrazy127.0.0.1:3001Expected Behavior
Clicking Retry should immediately fire a GET request to
http://127.0.0.1:3001/api/v1/pairs/<pairAddr>. The panel should enter a loading state and then either recover (if the pair is now available) or re-show the error message. No full page reload should be required.Actual Behavior
localhost:1317/cosmos/base/tendermint/v1beta1/node_info) which fires on its own schedule regardless of user actionScreen record
Environment Details
localterra(local Docker)VITE_NETWORK=local npm run devatlocalhost:3000make indexer-dev)Wallet / Device Details
Relevant File
frontend-dapp/src/pages/TradePage.tsx:185–187—onRetry={() => indexerPairQuery.refetch()}is wired in source. Runtime behaviour does not match — refetch does not fire.frontend-dapp/src/components/ui/RetryError.tsx:15—onClick={onRetry}handler.Severity / Impact
P2 UX. The Retry button is the sole non-reload recovery path available to a trader after an indexer error. If it does not work, the trader is stuck and has no way to know they need to reload the page. A dead Retry button is a trust failure — the UI implies recovery is possible and then does nothing. Found under W11-C4 (Wrong network deep link — Interactivity and Trader use dimensions).
cc: @PlasticDigits
mentioned in issue #116
mentioned in commit
d310e9bb97Fix shipped on
main(d310e9b)The Trade chart Retry control on indexer pair errors (e.g. 404 for
/trade/terra1damThat'scrazy) was wired to barerefetch()whilegetPairusesstaleTime: 60_000, so traders saw no new network activity or loading feedback.What changed
useQueryManualRetry:invalidateQuerieson the exact key, thenrefetch({ cancelRefetch: false }).TradePage: chart panel uses the hook; shows skeleton while retrying;data-testid="trade-chart-retry-error".RetryError: optionalisRetrying, disabled Retrying… button,retry-error-buttontest id.skills/AGENTS_FRONTEND_QUERY_RETRY.md(cross-linked from user-errors + trade-layout skills).TradePage.test.tsx(404 + Retry),useQueryManualRetry.test.tsx.Verification checklist
VITE_NETWORK=local npm run dev+ indexer (make indexer-dev)http://localhost:3000/trade/terra1damThat'scrazy(or any unknownterra1…pair)GET …/api/v1/pairs/<addr>cd frontend-dapp && npm run test:unit -- src/pages/TradePage.test.tsx -t 177@totdking — please verify on your M1/Chrome setup when you have a moment. Leaving this issue open until confirmed.
Fix shipped on
main(d310e9b)The Trade chart Retry control on
/trade/:pairAddrwas wired toindexerPairQuery.refetch()only. For the chartgetPairquery (staleTime: 60s,retry: false), that could leave traders with no new indexer request and no loading feedback after a 404 or other error.What changed
useQueryManualRetry:invalidateQuerieson the exact query key, thenrefetch({ cancelRefetch: false })so Retry always triggers a freshGET /api/v1/pairs/<addr>.RetryError: disabled Retrying… state,data-testid="retry-error-button", optional paneldata-testid="trade-chart-retry-error".skills/AGENTS_FRONTEND_QUERY_RETRY.md(cross-linked from user-errors and trade-layout skills).Verification checklist
VITE_NETWORK=local npm run dev+ indexer (make indexer-dev)http://localhost:3000/trade/terra1damThat'scrazy(or any pair that 404s from indexer)GETto127.0.0.1:3001/api/v1/pairs/...cd frontend-dapp && npm run test:unit -- src/pages/TradePage.test.tsx -t 177/cc @totdking — please verify on your W11-C4 repro setup when you can. Leaving this issue open until confirmed.
verified
d310e9bbon QA stack.source: new
useQueryManualRetryhook (frontend-dapp/src/hooks/useQueryManualRetry.ts) invalidates the exact query key then refetches withcancelRefetch: false. TradePage chart panel uses it viadata-testid="trade-chart-retry-error".tests:
useQueryManualRetry.test.tsx1/1 PASS (forces a second fetch after error even when staleTime keeps the query fresh). TradePage.test.tsx 10/10 PASS covers the integration.good to close on your side @PlasticDigits
mentioned in issue #175
mentioned in issue #215
mentioned in issue #218
mentioned in issue #657
marked as related to #657
mentioned in issue #665