Skip to content

fix(ui): resolve slop/duplicate legend latest week per series - #8774

Closed
philluiz2323 wants to merge 1 commit into
JSONbored:mainfrom
philluiz2323:fix/8667-slop-duplicate-per-series-latest
Closed

fix(ui): resolve slop/duplicate legend latest week per series#8774
philluiz2323 wants to merge 1 commit into
JSONbored:mainfrom
philluiz2323:fix/8667-slop-duplicate-per-series-latest

Conversation

@philluiz2323

Copy link
Copy Markdown
Contributor

Summary

  • Parameterize latestWeekWithSignal(weeks, series) so each series finds its own most recent non-null week instead of sharing one "any signal" week.
  • Wire SlopDuplicateTrendCard legends to latestSlop / latestDuplicate independently.
  • Add a divergent-null regression test (newest week has only duplicate signal; earlier week has elevated slop band) asserting the slop legend still shows latest band: elevated.

Closes #8667

Scope

  • The PR title follows type(scope): short summary Conventional Commit format, for example fix(api): restore profile access checks.
  • This PR is focused and does not mix unrelated backend, UI, MCP, docs, dependency, and deploy changes.
  • This follows CONTRIBUTING.md and does not reintroduce GitHub Pages, VitePress, site/, or CNAME.
  • I linked a currently open issue this PR resolves (e.g. Closes #123) — a linked open issue is required for every contributor PR.

Validation

  • git diff --check
  • npx prettier --write --end-of-line lf on the three changed files (LF blobs, prettier/prettier clean)
  • npm --workspace @loopover/ui exec -- eslint on the three changed files (exit 0)
  • npm --workspace @loopover/ui run test -- src/components/site/app-panels/slop-duplicate-trend-card.test.tsx (5 passed)
  • New or changed behavior has unit/integration tests for new branches, fallback paths, and sanitizer boundaries

If any required check was skipped, explain why:

  • Root npm run typecheck / test:coverage / ui:build not re-run locally for this narrowly scoped UI model fix; workspace eslint + vitest cover the changed surface. apps/** is excluded from codecov/patch.

Safety

  • No secrets, wallet details, hotkeys, coldkeys, user PATs, private keys, raw trust scores, private rankings, or private maintainer evidence are exposed.
  • Public GitHub text stays sanitized, low-noise, and does not imply compensation guarantees or optimization tactics.
  • Auth, cookie, CORS, GitHub App, Cloudflare, or session changes include negative-path tests.
  • API/OpenAPI/MCP behavior is updated and tested where needed.
  • UI changes use live API data or real empty/error/loading states, not production mock/demo fallbacks.
  • Visible UI changes include a UI Evidence section 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.
  • Public docs/changelogs are updated where needed; changelogs are only edited for release-prep PRs.

UI Evidence

Behavior-preserving for today's production lockstep-null data shape (both series null together). Visible legend change only appears in the divergent-null case covered by the new unit/RTL test; no production screenshot delta for the lockstep path.

State / title Evidence
Lockstep (production shape) Unchanged vs main — existing card tests still assert latest band: low / latest: 25%
Divergent-null (fixed) New test asserts latest band: elevated + latest: 40% when series peak on different weeks

Notes

latestWeekWithSignal previously returned the newest week with either
series present, and both legends reused that single week. When only one
series was populated on the newest signal week, the other legend showed
empty even if an earlier week had real data. Parameterize by series and
cover the divergent-null case.

Closes #8667
@philluiz2323
philluiz2323 requested a review from JSONbored as a code owner July 26, 2026 04:06
@superagent-security

Copy link
Copy Markdown
Contributor

Superagent didn't find any vulnerabilities or security issues in this PR.

@loopover-orb loopover-orb Bot added the gittensor:bug Gittensor-scored bug fix — scores a 0.05x multiplier. label Jul 26, 2026
@loopover-orb

loopover-orb Bot commented Jul 26, 2026

Copy link
Copy Markdown
Contributor

Tip

✅ LoopOver review result - approve/merge recommended

Review updated: 2026-07-26 04:15:22 UTC

3 files · 1 AI reviewer · no blockers · readiness 95/100 · CI green · clean

✅ Suggested Action - Approve/Merge

  • safe to merge

Review summary
This PR correctly fixes a real bug: `latestWeekWithSignal` previously found the most recent week with ANY signal (slop OR duplicate) and shared that single week's fields across both legends, which could show a stale/wrong value or hide a band label when one series' latest signal week differs from the other's. The fix parameterizes the function per series and wires the component to call it independently for slop and duplicate, which is the correct root-layer fix. The new regression test constructs a plausible real-world scenario (newest week has only duplicate data, an earlier week has slop with a band) and asserts the divergent-null case resolves correctly, which is a legitimate test of the fixed code path, not a fabricated one.

Nits — 4 non-blocking

Decision drivers

  • ✅ Code review — No blockers (1 reviewer)
  • ✅ Gate result — Passing (No configured blocker found.)
Context & advisory signals — never blocks the verdict
Signal Result Evidence
Linked issue ✅ Linked #8667
Related work ✅ No active overlap found No same-issue or scoped active PR overlap found.
Change scope ✅ 20/20 Low review scope from cached public metadata (1 linked issue).
Validation posture ✅ 25/25 PR body includes validation/test evidence.
Contributor workload ✅ 10/10 Author activity: 1025 registered-repo PR(s), 601 merged, 126 issue(s).
Contributor context ✅ Confirmed Gittensor contributor philluiz2323; Gittensor profile; 1025 PR(s), 126 issue(s).
Improvement ✅ Minor risk: clean · value: minor · LLM: moderate
Linked issue satisfaction

Addressed
The PR parameterizes latestWeekWithSignal to compute independent per-series lookups, wires the card component to use latestSlop/latestDuplicate separately for each legend, and adds a regression test with divergent nulls across weeks that verifies the slop legend correctly falls back to the earlier signal-bearing week rather than the shared latest.

Review context
  • Author: philluiz2323
  • Role context: outside_contributor
  • Public audience mode: oss maintainer
  • Lane context: Repository is configured for direct PR review.
  • Public profile languages: Python, JavaScript, MDX, TypeScript, CSS, Cuda, HTML, Kotlin
  • Official Gittensor activity: 1025 PR(s), 126 issue(s).
  • PR-specific overlap: none found.
Contributor next steps
  • Start here: Triage stale or unlinked PRs.
Signal definitions
  • Related work = same linked issue, overlapping active PRs, or title/path similarity.
  • Change scope = cached public metadata such as size labels, draft state, and review-burden hints.
  • Validation posture = whether the PR provides enough public validation/test evidence for maintainer review.
  • Contributor workload = public contributor activity and cleanup pressure, not a repo-wide quality failure.
  • Contributor context = public GitHub/Gittensor identity context; non-Gittensor status is not a blocker.
🧪 Chat with LoopOver

Ask 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.

  • @loopover ask <question> answers contribution-quality Q&A with source citations and freshness.
  • @loopover chat <question> answers in natural prose from cached decision-pack facts via local inference (maintainer/collaborator; read-only).
  • A plain-language @loopover mention with a real question is routed to the closest matching read-only command automatically — no exact syntax required.

Full command reference: https://loopover.ai/docs/loopover-commands

🧪 Experimental — new and may change.

Visual preview
Route Viewport Before (production) After (this PR's preview) Diff
/ desktop before /
before /
after /
after /
/ mobile before / (mobile)
before / (mobile)
after / (mobile)
after / (mobile)

Click any thumbnail to open the full-size screenshot. Before = production · After = this PR's preview deploy.

Scroll preview
Route Before (production) After (this PR's preview)
/ before / (scroll)
before / (scroll)
after / (scroll)
after / (scroll)

A short scroll-through clip (desktop) — click either thumbnail to open the full animation. Evidence for scroll-linked behavior a single screenshot can't show.

🟩 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.

  • Re-run LoopOver review

@loopover-orb

loopover-orb Bot commented Jul 26, 2026

Copy link
Copy Markdown
Contributor

This pull request changes UI/visual code but its screenshot evidence is incomplete. Every required viewport × theme combination needs its own before/after image pair in a labeled table row (e.g. "Desktop · Light | before | after"). Still missing: Desktop · Dark, Tablet · Dark, Mobile · Dark.

Please resubmit with the remaining rows filled in.

See https://github.com/JSONbored/loopover/blob/main/.claude/skills/contributing-to-loopover/SKILL.md for the exact format and examples. This is an automated maintenance action.

@loopover-orb loopover-orb Bot closed this Jul 26, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

gittensor:bug Gittensor-scored bug fix — scores a 0.05x multiplier.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

fix(ui): slop/duplicate trend card conflates two independently-nullable series into one shared 'latest week' reference

1 participant