Source profileQuality 82/100

JSONbored/metagraphed/.claude/skills/frontend-visual-qa/SKILL.md

frontend-visual-qa

Systematic visual QA sweep of the live metagraphed frontend (apps/ui, served at metagraph.sh) — actually browsing pages at real viewports and looking for defects only visible on inspection (crowding, overflow, truncation, misalignment), not catchable by reading code or trusting a PR's own screenshot table. Produces precise, root-caused GitHub issues a contributor's AI coding agent can act on correctly without needing design judgment of its own. Invoke for "run a visual QA sweep", "find real UI/U

Source repository stars
12
Declared platforms
0
Static risk flags
0
Last source update
2026-07-28
Source checked
2026-07-28

Decision brief

What it does—and where it fits

Systematic visual QA sweep of the live metagraphed frontend (apps/ui, served at metagraph. sh) — actually browsing pages at real viewports and looking for defects only visible on inspection (crowding, overflow, truncation, misalignment), not catchable by reading code or trusting a PR's own screenshot table.

Best for

    Not for

    • Tasks that require unconfirmed production actions or broad system permissions.
    • Environments where the pinned source and install steps cannot be inspected.

    Compatibility matrix

    Platform support, with evidence labels

    PlatformStatusEvidenceWhat to check
    CodexNot declaredNo explicit evidencePortability before use
    Claude CodeNot declaredNo explicit evidencePortability before use
    CursorNot declaredNo explicit evidencePortability before use
    Gemini CLINot declaredNo explicit evidencePortability before use
    Open the compatibility checker

    Installation

    Inspect first. Install second.

    The source command is displayed only when detected. A safe inspection prompt is always available so your agent can explain every action before execution.

    Source-detected install commandSource
    npx skills add https://github.com/JSONbored/metagraphed --skill ".claude/skills/frontend-visual-qa"
    Safe inspection promptEditorial

    Inspect the Agent Skill "frontend-visual-qa" from https://github.com/JSONbored/metagraphed/blob/bd49f179f9b4597bd8467ab32783f27108e0bb28/.claude/skills/frontend-visual-qa/SKILL.md at commit bd49f179f9b4597bd8467ab32783f27108e0bb28. List every install step, command, network request, credential, file read/write, external action, and rollback step. Explain whether it fits my task. Do not install or execute anything until I approve.

    Workflow

    What the source asks the agent to do

    1. 01

      Why this exists

      Contributors (and the AI agents/harnesses they point at gittensor issues) reliably miss defects that are only visible on actual inspection: a component's JSX can be "correct" — right data, right classes, right structure — and still crowd, overflow, or truncate illegibly at a rea…

      Contributors (and the AI agents/harnesses they point at gittensor issues) reliably miss defects that are only visible on actual inspection: a component's JSX can be "correct" — right data, right classes, right structure…The standard this session's sweep (2026-07-19) met, and the bar to keep meeting: every finding was confirmed against source code (never filed on visual impression alone) and root-caused to an exact file/line where feasi…
    2. 02

      Method

      Fixed viewports, not device emulation: 375×812 (mobile), 768×1024 (tablet), 1280×800 (desktop). Use the Browser tool's resizewindow with explicit width/height — the preset shorthand has been unreliable for desktop in this tool (silently kept a stale width in at least one run); a…

      Marquees/tickers (.mg-ticker-track, or any component whose own sourceHorizontally-scrollable snap-carousels (snap-x/snap-start classes) areThe Browser pane can render solid black / stale content after being idle or
    3. 03

      1. Viewports (matches this repo's own PR screenshot convention)

      Fixed viewports, not device emulation: 375×812 (mobile), 768×1024 (tablet), 1280×800 (desktop). Use the Browser tool's resizewindow with explicit width/height — the preset shorthand has been unreliable for desktop in this tool (silently kept a stale width in at least one run); a…

      Fixed viewports, not device emulation: 375×812 (mobile), 768×1024 (tablet), 1280×800 (desktop). Use the Browser tool's resizewindow with explicit width/height — the preset shorthand has been unreliable for desktop in th…
    4. 04

      2. Page inventory

      Enumerate every route template under apps/ui/src/routes/.tsx (not every dynamic instance — one visit to /subnets/1 stands in for all /subnets/{netuid}, since the template is what's being reviewed, not the data). Prioritize by traffic/ complexity: homepage, /subnets (index + deta…

      Enumerate every route template under apps/ui/src/routes/.tsx (not every dynamic instance — one visit to /subnets/1 stands in for all /subnets/{netuid}, since the template is what's being reviewed, not the data). Priorit…
    5. 05

      3. Two complementary detection techniques — use both, neither alone is enough

      A. Automated overflow scan (fast, precise, catches real horizontal-overflow bugs a screenshot might not make obvious). Run this via javascripttool at each viewport:

      A. Automated overflow scan (fast, precise, catches real horizontal-overflow bugs a screenshot might not make obvious). Run this via javascripttool at each viewport:This finds elements whose right edge exceeds the viewport — the exact signature of a real overflow bug. Also check document.body.scrollWidth vs window.innerWidth as a fast top-level smoke check before drilling into indi…B. Actual screenshot review (catches what bounding-box math can't). Crowding, insufficient spacing, poor information hierarchy, low contrast, awkward wrapping, and touch-target sizing all require genuinely looking at a…

    Permission review

    Static risk signals and limitations

    No configured static risk pattern was detected

    This is not proof of safety. Runtime behavior, indirect dependencies, and hidden external systems are outside the static scan.

    Evidence record

    Why each signal appears

    EvidenceSourceComputedTestedEditorial
    SignalValueEvidence typeMeaning
    Quality score82/100ComputedDocumentation, specificity, maintenance, and trust rules
    Repository stars12SourceRepository attention, not individual Skill quality
    Compatibility0 platformsSourceDeclared in the catalog source record
    Usage guideautomated source guideEditorialGenerated or reviewed according to the visible evidence level

    Pinned source

    Provenance and original SKILL.md

    Repository
    JSONbored/metagraphed
    Skill path
    .claude/skills/frontend-visual-qa/SKILL.md
    Commit
    bd49f179f9b4597bd8467ab32783f27108e0bb28
    License
    AGPL-3.0
    Collected
    2026-07-28
    Default branch
    main
    View the original SKILL.md

    Frontend visual QA

    Why this exists

    Contributors (and the AI agents/harnesses they point at gittensor issues) reliably miss defects that are only visible on actual inspection: a component's JSX can be "correct" — right data, right classes, right structure — and still crowd, overflow, or truncate illegibly at a real viewport width. The mandatory before/after screenshot table on every frontend PR exists precisely to catch this, but in practice it's rarely scrutinized carefully by either the contributor's own tooling or a casual human glance. This skill is the countermeasure: actually look, verify against source before concluding something is broken, and write up findings precisely enough that a contributor's AI agent has no room to misjudge "did I actually fix this."

    The standard this session's sweep (2026-07-19) met, and the bar to keep meeting: every finding was confirmed against source code (never filed on visual impression alone) and root-caused to an exact file/line where feasible — not just "this looks wrong" but "here is the exact CSS/component reason it's wrong." That rigor is what makes an issue usable by an agent that can't itself exercise design judgment.

    Method

    1. Viewports (matches this repo's own PR screenshot convention)

    Fixed viewports, not device emulation: 375×812 (mobile), 768×1024 (tablet), 1280×800 (desktop). Use the Browser tool's resize_window with explicit width/height — the preset shorthand has been unreliable for desktop in this tool (silently kept a stale width in at least one run); always verify the actual window.innerWidth via javascript_tool after resizing, don't trust the resize confirmation message alone.

    2. Page inventory

    Enumerate every route template under apps/ui/src/routes/*.tsx (not every dynamic instance — one visit to /subnets/1 stands in for all /subnets/{netuid}, since the template is what's being reviewed, not the data). Prioritize by traffic/ complexity: homepage, /subnets (index + detail), /validators (index + detail), /blocks (index + detail), /extrinsics (index + detail), /accounts/{ss58}, /health, /leaderboards, /providers, /docs, /about — these are the highest-density, highest-traffic templates and where defects concentrate.

    3. Two complementary detection techniques — use both, neither alone is enough

    A. Automated overflow scan (fast, precise, catches real horizontal-overflow bugs a screenshot might not make obvious). Run this via javascript_tool at each viewport:

    (function () {
      const viewportW = window.innerWidth;
      const results = [];
      document.querySelectorAll("*").forEach((el) => {
        // Exclude known-intentional horizontal-scroll patterns before judging anything
        // an overflow bug — see "False positives to rule out" below.
        if (
          el.closest(".mg-ticker-track") ||
          el.closest(".snap-x") ||
          el.classList.contains("snap-start") ||
          el.closest('[class*="overflow-x-auto"]')
        )
          return;
        const rect = el.getBoundingClientRect();
        if (rect.right > viewportW + 2 && rect.width > 0 && rect.width < 400) {
          results.push({
            tag: el.tagName,
            cls: (el.className || "").toString().slice(0, 80),
            right: Math.round(rect.right),
            left: Math.round(rect.left),
            top: Math.round(rect.top),
            text: (el.textContent || "").slice(0, 40),
          });
        }
      });
      return JSON.stringify({
        viewportW,
        count: results.length,
        results: results.slice(0, 10),
      });
    })();
    

    This finds elements whose right edge exceeds the viewport — the exact signature of a real overflow bug. Also check document.body.scrollWidth vs window.innerWidth as a fast top-level smoke check before drilling into individual elements.

    B. Actual screenshot review (catches what bounding-box math can't). Crowding, insufficient spacing, poor information hierarchy, low contrast, awkward wrapping, and touch-target sizing all require genuinely looking at a rendered screenshot — no automated check substitutes for this. Scroll through the full page at each viewport; don't stop at the first fold.

    4. False positives to rule out before filing anything

    Confirmed this session — don't re-learn these the hard way:

    • Marquees/tickers (.mg-ticker-track, or any component whose own source comment says "duplicate so the CSS loop is seamless") are supposed to overflow their container — that's how a scrolling ticker works. Check the component's source before flagging edge-cutoff on anything that looks animated.
    • Horizontally-scrollable snap-carousels (snap-x/snap-start classes) are intentionally wider than their viewport — content cut off at the edge indicates "more to scroll to," not a broken layout. Still worth a UX note if there's no visible scroll affordance (fade gradient, arrow), but that's a polish suggestion, not a "this is broken" bug.
    • The Browser pane can render solid black / stale content after being idle or right after a resize_window call — a known tool quirk, not a site bug. Cross- verify with read_page (DOM-based, unaffected by pane rendering issues) before concluding a blank screen means broken content. A fresh tabs_create + navigate often resolves it.
    • Suspense/loading states caught mid-render can look like a large blank gap or a missing section. If a value shows an ellipsis/skeleton indicator, the "bug" may just be a snapshot mid-load — re-screenshot after a beat (another read_page or javascript_tool call, which takes a moment) before concluding anything.
    • computer scroll actions frequently report a 30s timeout in this tool but often still completed — re-screenshot to check actual state rather than assuming the scroll failed.

    5. Root-causing a real finding

    Once a defect survives the false-positive check, trace it to source before writing the issue:

    1. Find the rendering component (grep -rn for the visible text or a distinctive class name across apps/ui/src/routes and apps/ui/src/components/metagraphed, and packages/ui-kit/src for shared components).
    2. Read enough surrounding code to state the mechanism — not just "this overflows" but "this grid is grid-cols-2 at mobile holding 3 items with long labels, and the shared StatTile component's truncate prop defaults to true instead of wrapping." A mechanism-level description is what lets a contributor (or their agent) fix the actual cause instead of patching the symptom.
    3. If a shared component/utility is the root cause (like a classNames() helper that doesn't resolve Tailwind conflicts), check whether the same pattern appears elsewhere before deciding whether this is a one-off instance fix or a systemic issue worth its own separate audit-scoped issue.

    6. Writing the issue

    Follow this repo's own issue template (Context/Requirements/Deliverables/Expected Outcome/Links), with two things specific to visual bugs:

    • State the reproduction precisely: exact URL, exact viewport(s) affected (many bugs are mobile-only — say so, don't imply it's universal), and either a screenshot or the exact DOM measurements that prove it (bounding-box numbers are often more precise and reviewable than a description of a screenshot).
    • Don't over-prescribe the fix when there's a genuine judgment call. If two fix directions are both valid (e.g. "wrap the label" vs. "go single-column"), present both and say picking one is a judgment call — that's honest about where design taste enters, versus the mechanism diagnosis, which shouldn't be a judgment call.

    7. Labeling

    Visual bugs found this way are almost always safe contributor work (mechanical, no business judgment, no security surface) — gittensor:bug + help wanted + frontend, milestone Wave 3 — Frontend (post-consolidation) unless the fix requires a shared component/utility change that's more backend-adjacent (e.g. a classNames/packages/ui-kit audit), in which case Foundations & Infra fits better. Every visual PR still needs the before/after screenshot table regardless of how it was sourced — that requirement doesn't change.

    Cadence

    This is not currently wired to a scheduled task — run on demand ("run a visual QA sweep") or fold into an existing gardening pass when asked. If a recurring cadence is wanted, that's a /schedule decision for the maintainer to make explicitly, not something this skill should assume.

    Alternatives

    Compare before choosing