Most misunderstandings at work aren't disagreements — they're translation errors. This reads a room's emoji culture and its answer culture from reaction timing: a signal Slack's API cannot give you, and nobody can reconstruct after the fact.
Every reaction in the corpus, ranked. Two emoji do 86% of all the work — everything else is a rounding error.
It shouldn't be, and it isn't. The corpus was fetched with --min-reactions 10, so these are the most-reacted issue threads in a contested product repo — GitHub pile-ons, selected precisely because people were arguing. In an ordinary workplace Slack, 👎 is close to nonexistent.
That skew is deliberate and useful: you cannot study disagreement in a sample with no disagreement in it. But it means this ranking is a picture of contested conversation, not a baseline of how teams talk. The dialect comparison below is unaffected — both rooms were sampled the same way, so the difference between them is real.
👍 is the most overloaded glyph in professional communication — two thirds of everything. That is exactly why it fails: one symbol is carrying "yes", "seen", "fine", and "I'm done arguing" all at once.
Time from a message being posted to its first reaction. Median, because the mean is dragged around by messages that sat for days.
The contested room is faster to respond and slower to settle. The consensus room takes half again as long to say anything at all — then agrees quickly. Speed of first reply is not enthusiasm; it's how safe people feel going first.
Everyone who reacts first is doing something to the room, whether they mean to or not. These are archetypes measured from behaviour — never a score, never a ranking of people.
The interesting one is The Lone Voice. A room where everybody hits 97% isn't harmonious — it has stopped thinking independently. A spread of follow rates is the sign of a room that still makes up its own mind.
Share of reactions by emoji. The same 👍 does different work in different rooms.
vscode is a contested room — a quarter of all reactions are dissent. kubernetes is a consensus room — dissent is 6%.
Share of classified messages, by how the reactions arrived in time.
Honest limit: the emoji-mix difference rests on 11,654 kubernetes reactions and is robust. The shape-mix difference rests on 21 classified kubernetes messages against 211 — suggestive, not established.
Not measured here. Everything in this section is published research, cited. Reaction data carries no age, no gender and no country — so this is the literature that motivated the product, kept visibly separate from our own numbers.
We were asked for one and we're not showing one. GitHub reactions carry no country field, and the Atlassian study's 5-country sample isn't broken out per-emoji in a form we can verify tonight. A plausible-looking map here would be the most convincing thing on this page and the only invented thing on it. That trade isn't worth making.
Identical reaction counts. Completely different meanings.
| Shape | Pattern | Reads as |
|---|---|---|
| Cascade | burst right after the first | social proof |
| Trickle | even, independent | trustworthy agreement |
| Stall → burst | silence, then all at once | deference |
| Split | opposed emoji interleaved | live disagreement |
Classified by hypothesis test, not a threshold picked by eye: arrival times tested against uniform with a one-sample Kolmogorov–Smirnov statistic (critical value 1.36/√n). Timing has no valence — a cascade is not "happy".
Status at freeze. Nothing on this page is projected.
| Piece | State |
|---|---|
| GitHub corpus, 36,779 reactions | ✅ reproducible |
| Shape classifier, KS-tested | ✅ |
| Socket Mode live listener | ✅ running |
| cognee → Qdrant, 64 triplets | ✅ 206 points |
| 4-tool query agent | ✅ |
| Generation / country breakdown | 📚 cited only |
| Cognee Cloud graph, answering queries | ✅ graph.html |
Live capture ran in #emojie-lab, created for this, opened with a consent notice, joined voluntarily. #all-hacknight was deliberately not ingested.
Two sources, one schema, one classifier. The only difference between them is timescale — which is the finding, not a bug to normalise away.
The metrics layer has no dependency on cognee or Qdrant — it's pure Python over corpus JSON. A graph outage cannot take the product down; it only takes away the multi-hop questions.
Slack's Web API returns reactions as {name, users, count} — no timestamps, no ordering. Per-reaction timing exists only in the live reaction_added event. The signal is excluded by construction, not overlooked. If nobody was listening at that moment, it is gone permanently — which is why the listener is the first thing that starts, and the half of this that nobody can reconstruct tomorrow.