feat(ui): add the bottom-of-page back-to-index link to validators and subnets (#6432)#6499
Conversation
… subnets (JSONbored#6432) blocks.$ref.tsx and extrinsics.$hash.tsx both close their loaded body with a "<- All blocks"/"<- All extrinsics" link, and accounts.$ss58.tsx has one too. validators.$hotkey.tsx had none, and subnets.$netuid.tsx only had one inside its notFoundComponent -- never in the successful render. Those are the two longest detail pages in the app, so a reader who scrolls to the end is furthest from the masthead breadcrumb exactly where the convenience link is missing. Add one to each, at the same spot and with the same styling the two reference pages use: after the content sections, ahead of the endpoint snippet. On subnets the link sits outside the tab switch, so it is there whichever tab the reader ends on. On the wording the issue asks to confirm rather than assume: accounts.$ss58.tsx keeps "<- Account lookup" instead of being normalized to "<- All accounts". /accounts is a lookup form, not an index -- its own copy reads "Look up a Bittensor account by ss58 address" and it renders a search input, because there is no list of every chain account to go back to. "<- All accounts" would name a page that doesn't exist. The pages that do point at real directories (/validators is a "validator directory", /subnets lists "every active Finney netuid") use the "<- All X" form, so the label tracks what the destination actually is. Recorded that reasoning at the link itself.
|
Superagent didn't find any vulnerabilities or security issues in this PR. |
Codecov Report✅ All modified and coverable lines are covered by tests. Additional details and impacted files@@ Coverage Diff @@
## main #6499 +/- ##
=======================================
Coverage 97.85% 97.85%
=======================================
Files 174 174
Lines 22196 22196
Branches 8798 8798
=======================================
Hits 21721 21721
Misses 81 81
Partials 394 394 🚀 New features to boost your workflow:
|
|
Warning ⏸️ LoopOver review result - manual review recommendedReview updated: 2026-07-17 17:30:07 UTC
Review summary Nits — 4 non-blocking
Decision drivers
Context & advisory signals — never blocks the verdict
Review context
Contributor next steps
Signal definitions
🧪 Chat with LoopOverAsk LoopOver a question about this PR directly in a comment — grounded only in the same cached, public-safe facts shown above, never a new claim.
Full command reference: https://loopover.ai/docs/loopover-commands 🧪 Experimental — new and may change. Visual preview
Click any thumbnail to open the full-size screenshot. Before = production · After = this PR's preview deploy. 🟩 Safe / merged · 🟦 Advisory · 🟨 Held for review · 🟥 Blocked / closed 💰 Earn for open-source contributions like this. Gittensor lets GitHub contributors earn for the work they already do — register to start earning →. Checked by LoopOver, a quiet PR intelligence layer for OSS maintainers.
|

Summary
blocks.$ref.tsxandextrinsics.$hash.tsxboth close their loaded body with a← All blocks/← All extrinsicslink, andaccounts.$ss58.tsxhas one too.validators.$hotkey.tsxhad none, andsubnets.$netuid.tsxonly had one inside itsnotFoundComponent— never in the successful render. Those are the two longest detailpages in the app, so a reader who scrolls to the end is furthest from the masthead
breadcrumb exactly where the convenience link is missing.
What Changed
Added one to each, at the same spot and with the same styling the two reference pages use:
after the content sections, ahead of the endpoint snippet. On
subnets.$netuid.tsxthelink sits outside the tab switch, so it's there whichever tab the reader ends on.
The wording question
The issue asks to confirm intent before standardizing
accounts.$ss58.tsx's← Account lookup. Confirmed — and it should stay as-is:/accountsis a lookup form, not an index. Its own copy reads "Look up a Bittensoraccount by ss58 address (hotkey or coldkey)" and it renders a search input, because there
is no list of every chain account to go back to.
← All accountswould name a page thatdoesn't exist.
The pages that do point at real directories use the
← All Xform, and their labels aretruthful:
validators.$hotkey/validators— "Network-wide validator directory"← All validators(new)subnets.$netuid/subnets— "Every active Finney netuid"← All subnets(new)accounts.$ss58/accounts— a lookup form← Account lookup(unchanged)So the label tracks what the destination actually is, rather than being uniform for its own
sake. That reasoning is recorded as a comment at the link itself, so the next person to
notice the inconsistency finds the answer in the code rather than in this PR.
providers.$slug.tsxis out of scope — the issue's Requirements and Deliverables name onlyvalidators.$hotkey.tsxandsubnets.$netuid.tsx.Screenshots
Captured at the contract's fixed viewports (1280×800 / 768×1024 / 375×812), themes forced
via
mg-theme,beforeserved from a worktree at the merge-base, both servers verified tohave the brand faces loaded so the pair shares one typeface.
capture-pr-screenshots.mjscan't drive this one —--sectionpins a section's top underthe sticky header, but the link sits above the section it precedes, and in
beforethereis no link to anchor on at all. The included
capture-back-link-screenshots.mjsfollows thesame contract with a scroll strategy that anchors on a landmark present in both variants.
validators.$hotkey —
← All validatorsbefore
after
before
after
before
after
before
after
before
after
before
after
subnets.$netuid —
← All subnetsbefore
after
before
after
before
after
before
after
before
after
before
after
Validation
npm run lint --workspace=apps/ui— cleannpm run format:check --workspace=apps/ui— cleannpm run typecheck --workspace=apps/ui— cleannpm test --workspace=apps/ui— 1060/1060 passednpm run test:e2e --workspace=apps/ui— 26/26 passednpm run build --workspace=apps/ui— cleanRegistry Safety
Closes #6432) — required.apps/ui/**only, 4 files.routeTree.gen.tsuntouched; screenshots hosted on a fork branch, not committed here.Closes #6432