$npx -y skills add gnurio/tufte-vdqi-plugin --skill assess-graphical-excellenceEvaluate a data graphic against Edward Tufte's nine criteria, name the chartjunk species present, compute lie factor, compare against VDQI's named-failure catalogue, and return prioritised fixes tagged with the specific Tufte remedy (B1–B7), genre to switch to (C1–C10), and exemp
| 1 | # Assess Graphical Excellence |
| 2 | |
| 3 | This is the assessment hub of the Tufte toolkit. Its job is to score an existing |
| 4 | graphic, **name what's wrong using Tufte's vocabulary** (the duck, the dreaded |
| 5 | grid, moiré vibration, dimensionality violation, etc.), and hand back the exact |
| 6 | remedy plus the genre to switch to and an exemplar to emulate. |
| 7 | |
| 8 | The output is concrete and source-grounded because the model reasons over a |
| 9 | single principles file (`references/tufte-principles.md`) that quotes VDQI by |
| 10 | page. Generic "improve data-ink ratio" advice is the failure mode this skill is |
| 11 | designed to avoid. |
| 12 | |
| 13 | ## What you need from the user |
| 14 | |
| 15 | A description (or image, or file) of the graphic, and ideally its purpose and |
| 16 | audience. If something essential is missing, infer reasonably and state the |
| 17 | assumption rather than stalling. |
| 18 | |
| 19 | ## How to assess (six-step workflow) |
| 20 | |
| 21 | Read `references/tufte-principles.md` first. The workflow uses every part of it. |
| 22 | |
| 23 | 1. **Score the nine criteria** (Part A). 0–10 each, with a chart-specific |
| 24 | observation. Use VDQI's numeric anchors: e.g. data-ink ratio "0.1–0.2 is |
| 25 | typical, edit toward 1.0" (p.136); data density 0.15 numbers/in² is |
| 26 | "overwrought" (p.162). Unsupported scores are the main failure mode. |
| 27 | |
| 28 | 2. **Compute the lie factor when proportionality looks suspicious** (Part B, |
| 29 | B1). Formula: `(visual change %) / (data change %)`. Acceptable 0.95–1.05. |
| 30 | Report the number and **compare to VDQI's catalogue** (Part E) — anchor the |
| 31 | verdict in a named case: "this is essentially the 1979 TIME barrel |
| 32 | (lie factor 59.4)" or "in the league of the LA Times shrinking-doctor |
| 33 | (lie factor 2.8)" rather than a free-floating number. |
| 34 | |
| 35 | 3. **Identify chartjunk species present** (Part D). Walk the four named |
| 36 | offenses and name each one the chart exhibits, citing Tufte's named offender |
| 37 | when the resemblance is close: |
| 38 | - **Moiré vibration** (cross-hatching, dense stippling, gradients) |
| 39 | - **Dreaded grid** (grid darker than the data marks) |
| 40 | - **Duck** (decoration drives the chart; visual style > data; dimensionality |
| 41 | exceeds data dimensionality) |
| 42 | - **Decoration** (ornament that carries no information) |
| 43 | |
| 44 | 4. **Rank candidate genres and challenge the default** (Part C, Part G). List |
| 45 | at least three Tufte genres that could fit the data, ranked by fit. Then |
| 46 | apply the **default-challenge rule**: |
| 47 | |
| 48 | > If your top-ranked genre is also what an unprompted Claude would pick |
| 49 | > (line, bar, dot plot, scatter, pie), you MUST do one of: |
| 50 | > (a) explicitly justify it by citing what the alternatives lose, OR |
| 51 | > (b) reach for a second-line VDQI move (supertable, table-graphic, |
| 52 | > sparkline, dot-dash plot, quartile plot, small multiples) and explain |
| 53 | > why it is the stronger fit here. |
| 54 | > |
| 55 | > Quiet defaulting to the obvious chart is the failure mode this rule |
| 56 | > exists to catch. |
| 57 | |
| 58 | Common multi-answer data shapes (flag these in the output so render knows |
| 59 | to emit alternatives): |
| 60 | - **1 number / single ratio** → prose statement + tiny inline visual |
| 61 | - **≤20 numbers** → supertable + Tufte chart (VDQI p.56) |
| 62 | - **Many series of one x** → small multiples + overplotted comparison |
| 63 | - **Distributions across groups** → quartile plot + strip plot or histogram |
| 64 | - **Bivariate scatter** → range frame + dot-dash marginal variant |
| 65 | |
| 66 | 5. **Compute the weighted overall score**. Weights: integrity 3×, |
| 67 | proportionality 2×, data-ink 2×, typography 0.5×, the rest 1×. |
| 68 | |
| 69 | 6. **Translate scores into ranked fixes**. Each fix gets up to four tags: |
| 70 | - **Remedy**: B1–B7 (the technique). |
| 71 | - **Genre**: C1–C10 (the form to switch to). Optional. |
| 72 | - **Anti-pattern resemblance**: name a Part-E case the graphic looks like. |
| 73 | Optional. |
| 74 | - **Exemplar to emulate**: name a Part-F graphic the redesign should |
| 75 | resemble. Optional. |
| 76 | |
| 77 | If the graphic plots a multi-year currency series, check B7. Use |
| 78 | `scripts/deflate.py` (requires real CPI values; refuses to guess). |
| 79 | |
| 80 | ## Output format |
| 81 | |
| 82 | ``` |
| 83 | ## Assessment: <graphic> |
| 84 | Context: <purpose / audience, or stated assumption> |
| 85 | |
| 86 | ### Scores |
| 87 | <one line per criterion: name — score/10 — chart-specific observation> |
| 88 | |
| 89 | ### Chartjunk species present |
| 90 | <list any of: moiré, dreaded grid, duck, decoration — each with the detected signature, and Tufte's named offender it most resembles> |
| 91 | |
| 92 | ### Distortion check |
| 93 | Lie factor: <value or "n/a"> — <interpretation> |
| 94 | Resembles: <named VDQI case from Part E, or "no close analogue"> |
| 95 | |
| 96 | ### Genres considered (ra |