fix(ui): content-shaped loading skeletons for dead-letter/maintainer/miner panels (#6178) - #6452
Conversation
|
Superagent didn't find any vulnerabilities or security issues in this PR. |
|
Tip ✅ LoopOver review result - approve/merge recommendedReview updated: 2026-07-16 09:00:38 UTC
Review summary Nits — 5 non-blocking
Decision drivers
Context & advisory signals — never blocks the verdict
Linked issue satisfactionAddressed 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 · Diff highlights exactly what changed. 🟩 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
StateBoundary'sloadingSkeletonprop exists to swap the generic centered spinner for acontent-shaped placeholder so a list/table doesn't visibly jump when its data mounts (#793). Only
app.runs.tsx'sRunsListSkeletonused it; three structurally similar list/table dashboards stillfell through to the generic
LoadingStateand jumped on first paint.This adds a content-shaped skeleton for each, following
RunsListSkeleton's approach (approximate thereal row/column structure), and wires it as
loadingSkeleton:dead-letter-queue-panel.tsx—DeadLetterQueueSkeleton: the bordered table container (headerstrip + row placeholders) plus the range-text / pagination footer row.
maintainer-panel.tsx(drivesContributorQualityTable) —MaintainerDashboardSkeleton:mirrors the dashboard's top-level layout (refresh line, onboarding preview, 4-metric grid, the
two-column install-health/settings row, and the reviewability table block).
miner-panel.tsx—MinerDashboardSkeleton: the refresh line, 4-metric grid, thenext-actions/scoreability two-column row, and the blockers/repo-fit row.
The generic
LoadingStatecomponent is unchanged — it stays correct for boundaries with no fixedcontent shape. UI-only, under
apps/**.Closes #6178
Scope
type(scope): short summaryConventional Commit format, for examplefix(api): restore profile access checks.CONTRIBUTING.mdand does not reintroduce GitHub Pages, VitePress,site/, orCNAME.Closes #123) — a linked open issue is required for every contributor PR.Validation
git diff --checknpm run ui:lintnpm run ui:typechecknpm run ui:buildnpm --workspace @loopover/ui run test(276 passed, incl. the 3 new skeleton tests)npm audit --audit-level=moderateIf any required check was skipped, explain why:
apps/**(Codecov-ignored). The backend/MCP checks(
actionlint,typecheck,test:coverage,test:workers,build:mcp,test:mcp-pack,ui:openapi:check) don't cover this diff — nosrc/**, worker, MCP, or OpenAPI/schema surface istouched — so they were not run locally. The UI lint/typecheck/build/test gates that do cover this
diff are all green.
Safety
UI Evidencesection below with JPG/JPEG or PNG screenshots arranged as organized, captioned, clickable thumbnails. SVG screenshots are not used as review evidence. Review-only screenshots or recordings are not committed to the repository.UI Evidence
Content-shaped loading skeletons (captured with the data endpoint held pending so the loading branch
stays on screen). Each mirrors its panel's real row/column structure, so no layout jump when data
arrives.
Notes
RunsListSkeletonpattern: local component,aria-hiddenwrapper,Skeletonfrom
@/components/ui/skeleton. Row/section counts are approximate — just enough to fill theviewport and match the loaded layout's shape.