TimeCurve Protocol view: 'Indexer unreachable' banner is misleading when indexer IS serving data #49
Labels
No labels
agent:fix_bugfix
agent:fix_conflicts
agent:fix_security
agent:gap_analysis
agent:implement
agent:open_issues
agents
agent:security_audit
agent:verify
area
timecurve
arena
arena-v2
audit
block:feature_review
block:security
bug
contracts
design
devops
docs
documentation
enhancement
epic
feature
frontend
indexer
low priority
megaeth
operations
ops
performance
QA
qa checklist
referrals
removal
security
smart-contracts
tech-debt
testing
time-arena
timecurve
visual-qa
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set
Reference
code/yieldomega#49
Loading…
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?
Filed per dev request from #39 section C5 findings.
Summary
Protocol view shows 'Indexer: unreachable (http://127.0.0.1:3100)' banner even though the canonical fee sink distribution data below the banner IS rendering correctly — meaning the indexer is clearly reachable and serving data.
Observed
FeeRouter+PARAMETERS.mdsplitsLikely cause
Either:
/healthvs/v1/*, or a stale initial-fetch flag not cleared on success)Impact
Environment
Screenshot
cc @PlasticDigits
mentioned in issue #39
Fix merged (cc @Brouie)
What we changed
IndexerStatusBaronly called `GET /v1/status`. If that request fails (network, 404, or in practice client-side blocklists that target paths containingstatus) while the rest of the indexer is healthy, the bar showed "Indexer: unreachable" even though the footer already used working v1 routes (e.g. `/v1/fee-router/fees-distributed`).`fetchIndexerStatus()` in `frontend/src/lib/indexerApi.ts` now:
Covered in `frontend/src/lib/indexerApi.test.ts` (Vitest): primary path, fallback, and null when both fail.
Verification checklist for @Brouie
Pushed to `main` (merge includes commit `
e7ce289` and merge `39069d1`).mentioned in issue #42
@PlasticDigits verified.
Root cause identified was spot-on — client-side blocklists against path segments containing 'status' would filter
/v1/statusrequests while other v1 routes functioned normally. That matches exactly the misleading banner I reported where fee sink data rendered below while the banner claimed unreachable.Verification
Code-level:
indexerApi.ts::fetchIndexerStatus()now two-tier: primaryGET /v1/status(best signal, includes DB pointer + max block), fallbackGET /v1/fee-router/fees-distributed?limit=1if primary fails. Only returns null when BOTH fail.IndexerStatusBar.tsxlogic unchanged at component level — correctly shows 'unreachable' only if the two-tier check returns null.Tests:
indexerApi.test.ts: 14/14 passing, including explicit cases:Good fix for a real false-negative pattern. Closing as verified.