What does a green cell mean?

The analysis-lens heatmap and a dashboard mini-grid can show the same data on the same axes and still colour the same cell differently — because they encode different questions. Both are honest. Only one can be the dashboard's, and the reader can't tell which they're looking at. Cells where the two disagree in valence are ringed ! — and there are six of them, not one. The collision isn't a corner case; it's structural.

Residual — the shipped lens maths

heatCellStyle() · AnalysisPage.tsx:146

Green = over-represented (more quotes than expected) · Red = under-represented. A chi-square departure statistic. Not a feeling.

over-represented
under-represented
absent

Sentiment — 5b's encoding

dashboard-10-ideas.html §5b

Hue = dominant sentiment · depth = quote count. Green = positive feeling · Red/orange = negative feeling.

frustration confusion doubt surprise satisfaction delight confidence

The loudest instance: p1 · Aftercare — and it isn't alone

p1 is the only participant who reached post-surgery aftercare, and they were frustrated — intensity 3, the single most important negative finding in the study.

On the sentiment grid it is deep orange — correct, a strong problem. On the residual grid it is saturated green — also correct: one participant monopolising a section nobody else touched is massively over-represented. The statistic is right. The reading is catastrophic: on a glanceable dashboard, green is "good", so the worst finding in the study advertises itself as a win.

And it's not one unlucky cell. Every one of the six ringed cells is a negative feeling (frustration, confusion) that is over-represented — so residual paints them all green. In a sparse study, negative sentiment and over-representation coincide constantly; the collision is structural, not accidental. p1·Aftercare only stands out because it's the only cell with a count above 1 — the rest fade to 30% heat exactly as the app does, so the study's problems read as faint-green rather than red.

This is why the dashboard cannot silently mirror the lens. Same data, same axes, same maths — but stripped of the lens's legend and context, the residual hue inverts the meaning. Either the dashboard adopts sentiment encoding (and the click-through to the lens is a deliberate, signposted change of colour-language), or it keeps residual and the dashboard needs the lens's full legend riding along — which is no longer glanceable.

Both grids are computed from one dataset (the IKEA 9-session study, 4 participants shown × 11 sections). Residual hue is produced live by a JS port of the shipped adjustedResidual() / heatCellStyle() — single-occurrence cells faded to 30% exactly as the app does. Nothing is hand-painted. Rings mark cells whose residual valence (over/under) and sentiment valence (positive/negative) point opposite ways.