fix(miner-ui): render oldestQueuedAgeMs in the overview portfolio card (#6185) - #6451
Conversation
JSONbored#6185) portfolio-queue.ts computes and validates oldestQueuedAgeMs and its header promises the miner-ui shares one data path with the CLI's queue dashboard, which renders "oldest-queued: Xm" -- but OverviewPortfolioCard never read the field. Render it as an "Oldest queued" stat using the CLI's exact Math.round(ms / 60000)m minutes formatting, shown only when non-null (matching the CLI, which omits the age on an empty queue). Adds tests for the populated and null cases. CLI rendering is untouched. Closes JSONbored#6185
|
🚨 Contributor flagged. Click here for more info: Superagent Dashboard |
|
Superagent didn't find any vulnerabilities or security issues in this PR. |
|
Warning ⏸️ LoopOver review result - manual review recommendedReview updated: 2026-07-16 08:49:47 UTC
Review summary Nits — 4 non-blocking
Flagged checks (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. 🟩 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
apps/loopover-miner-ui/src/lib/portfolio-queue.tscomputes and validatesoldestQueuedAgeMs, and the module's own header promises the miner-ui "serves the SAME per-repo dashboard shape the CLI'squeue dashboardcommand computes ... so the miner-ui and the CLI share one data path." The CLI renders it (packages/loopover-miner/lib/portfolio-dashboard.js→ "oldest-queued: Xm"), but the webOverviewPortfolioCardnever read the field — the parity claim wasn't actually delivered.oldestQueuedAgeMsas an "Oldest queued" stat inOverviewPortfolioCard(routes/index.tsx), formatted with the CLI's exactMath.round(oldestQueuedAgeMs / 60000)mminutes rounding. It's conditionally shown only when the value is non-null, matching the CLI, which omits the age line on an empty queue.portfolio-dashboard.js) is untouched — it's the formatting reference. UI-only change underapps/**.Closes #6185
Scope
type(scope): short summaryConventional Commit format.CONTRIBUTING.mdand does not reintroduce GitHub Pages, VitePress,site/, orCNAME.Closes #6185).Validation
git diff --checknpm run typecheck(repo-wide) clean.@loopover/ui-minerworkspace:tsc --noEmitclean,vitest run --coveragegreen — 134 tests pass (adds a test asserting the "Oldest queued" stat renders "90m" for a 5,400,000 ms age, and that it is omitted when the age is null), coverage stays above the workspace's own 85% thresholds.npm run test:ci(validates the rest of the repo is unaffected —apps/**is excluded from the root coverage suite by design).npm audit --audit-level=moderateIf any required check was skipped, explain why:
cf-typegen/migration/env-reference regeneration needed — a view-only addition with no API, binding, schema, or generated-doc surface.Safety
portfolio.summary.oldestQueuedAgeMsfrom the same fetched result the card already renders; the card's existing loading/error/empty states are unchanged.UI Evidencesection below with a captioned JPG/PNG thumbnail.UI Evidence
Notes