Diagnosing Misprediction Patterns
Hypothesis. LLMs are trained to complete tasks, not to imitate humans. So they are systematically homogeneous, defaulting to task-driving behaviour instead of deciding from an individual developer’s differences. The consequence is that the prediction of LLMs would be very similar for different users, and even for one developer the prediction will not be as spread out as the real one.
Data: 20 developers / 1,511 move-labelled held-out points from the in-repo tasks/ cohort. Folder mode = the agent reads the folder itself; inline pastes it into the prompt.
Metrics
Three families of measurement
Every experiment below is expressed in one of three metric families. Naming them up front makes it explicit what each claim is actually measuring — and they can disagree.
- A · individual-level accuracy — per held-out point, does the predicted move equal the real move? Reported as a skill score S = (acc − acc_base)/(1 − acc_base) ×100, normalised against the majority-class predictor: 0 = no better than always guessing the most common move, 100 = perfect, negative = worse than that constant predictor. Raw accuracy is not comparable across cohorts with different class balance; skill is.
- B · population-level distribution — total-variation distance (TVD) between two move distributions: between two developers, between one developer and their own prediction, or between the whole real population and the whole predicted population. Says nothing about any individual turn.
- C · LLM-as-a-judge — a judge scores each predicted message against the real one for style (surface voice) and content (intent/substance), plus realism.
Metric A, measured. Skill score against the majority-class baseline (always predict directive = 0.506). The real move distribution is heavily skewed, so this baseline is the bar that matters — and no condition clears it.
| condition | folder skill | folder acc | inline skill | inline acc |
|---|---|---|---|---|
| distilled | -8.2 | 0.465 | -13.5 | 0.446 |
| generic | -15.4 | 0.430 | -23.2 | 0.399 |
| wrong | -12.2 | 0.445 | -13.6 | 0.446 |
S = (acc − acc_base) / (1 − acc_base), ×100 · label note shows the inline arm
Scoreboard
Which claims survived the data?
Each experiment made a falsifiable prediction before the run. Evidence columns are the generic condition for E2/E3 and distilled for E4 (the strongest test of each).
| claim | prediction if the hypothesis is TRUE | folder | inline | verdict |
|---|---|---|---|---|
| E1A+C | Worst misses are task-completion / generic substitution | 80% | 92% | supported |
| A+C: misses are ranked by move mismatch (A) weighted by low judge-realism (C), then labelled. Both modes: the dominant error is predicting keep-going where the developer did something individual. | ||||
| H1 · E2B | approve% pred > real and critical% pred < real | approve +0.010, critical -0.115 | approve +0.116, critical -0.108 | mixed |
| B: compares the whole real population's move distribution to the whole predicted one. Holds on the low-prompt inline arm (clear approve-collapse). Folder mode is explicitly told not to default to approving, so the mass diverts to inquiry — as the plan predicted, H1 is only clean on a low-prompt baseline. | ||||
| H2 · E3B | between-user spread(pred) < spread(real) | 0.200 vs 0.280 (p=0.0117) | 0.259 vs 0.283 (p=0.4148) | supported |
| B: mean pairwise TVD between developers' move distributions, predicted vs real. Significant in folder mode. Inline masks it: pasting the folder in makes the model echo signature catchphrases verbatim, inflating apparent between-user distinctiveness. | ||||
| H4 · E8B | within a developer, spread(pred) < spread(real) | -0.381 bits, 17/20 (p=0.0002) | -0.139 bits, 13/20 (p=0.099) | supported |
| B: entropy of each developer's own move mix, real vs predicted. Confirmed, and the folder causes it: without a folder the spread matches reality; with any folder (right or wrong) each developer collapses to a narrower repertoire. | ||||
| H3 · E4B | dist(pred, median) < dist(real, median) | Δ +0.054 (p=0.0386) | Δ +0.088 (p=0.0025) | refuted |
| B: TVD from each developer's distribution to the population-average distribution. The opposite, significantly: with a folder, predictions sit FARTHER from the real population average than the developers themselves do. Homogeneity is not shrinkage toward the human mean. | ||||
| E5B+C | Folder changes the voice but not the decision | surface_only | flat | supported |
| B+C: per-developer TVD (own distribution vs own prediction) set against judge style/content (C). Folder reads surface_only: judge-style rises while move-mix distance to the real user does not improve. | ||||
| E6A+B | Claims survive on the underdetermined-point control | — | — | not run |
| A+B: would re-run the accuracy and distribution tests on determined points only. Needs k-fold resampling of the generic simulator; not yet generated. | ||||
| E7B | Low-prompt / move-conditioned arms restore between-user variance | — | — | not run |
| B: would re-measure between-developer spread under low-prompt / move-conditioned arms. The causal probe of the mechanism; not yet generated. | ||||
Method
Three falsifiable claims
Each held-out point carries the real next message plus a simulated one under three conditions — distilled (the user’s own folder), generic (no folder / pure task prior) and wrong (a different user’s folder). Every message is labelled with a conversational move, folded to four categories: approve accept · critical assert something is wrong · directive say what to do next · inquiry ask for an answer.
- H1 — central attractor secondary predictions over-produce approve/directive, under-produce critical/inquiry. Prompt-sensitive, so descriptive here.
- H2 — between-user variance collapse primary predicted per-user move-mixes are more alike than real ones.
- H3 — regression to the median developer primaryeach user’s predicted mix sits closer to the population average than their real mix.
E1 · direct audit
Worst mispredictions
The worst mispredictions (move mismatch × low realism), each LLM-adjudicated with one error type. The two marked homogeneity indicate a failure of individuation — the prediction is reasonable for some developer, just not this one; the rest are ordinary failure modes.
- task_completion_substitutionhomogeneity — predicted a keep-going / approve / new-task move where the real developer pushed back, interrupted, or redirected
- generic_not_specifichomogeneity — the right kind of move, but not how this developer would have made it
- hallucinated_content — invents facts or requests that are not grounded in the session
- underdetermined — both messages are equally plausible — the real one was genuinely unpredictable
- other — anything else
| error type | count |
|---|---|
| task_completion_substitutionhomogeneity | 17 |
| hallucinated_content | 5 |
| generic_not_specifichomogeneity | 3 |
adjudicated error type for each of the worst mispredictions (folder mode)
Folder vs inline
Two ways to read the folder into the simulator
folder = the agent reads users/<slug>/ itself; inline = the folder text is pasted into the prompt. They diverge: inline reproduces signature catchphrases verbatim, which inflates apparent between-user distinctiveness — masking the variance-collapse (E3) — yet E4 shows that distinctiveness points away from the real user, and its worst misses are even more homogeneity-driven.
| mode | H2 generic spread (pred vs real) | perm p | E5 verdict | E1 homogeneity |
|---|---|---|---|---|
| folder | 0.200 vs 0.280 | 0.012 | surface_only | 80% |
| inline | 0.259 vs 0.283 | 0.415 | flat | 92% |
E3 · primary result
Between-developer collapse
Mean pairwise total-variation distance between developers’ move-mixes. If the model captured individual differences, predicted spread would match real spread; homogeneity predicts a narrower predicted spread. Shorter bar = developers look more alike.
spread of per-developer move-mixes, folder mode / generic condition
| condition | users | spread real | spread pred | Δ | perm p | collapse? |
|---|---|---|---|---|---|---|
| distilled | 20 | 0.279 | 0.243 | -0.036 | 0.353 | collapse ✓ |
| generic | 20 | 0.280 | 0.200 | -0.081 | 0.012 | collapse ✓ |
| wrong | 20 | 0.279 | 0.255 | -0.024 | 0.502 | collapse ✓ |
E8 · primary result
Within-developer collapse
Entropy of each developer’s own move mix (bits, max 2.0 over four categories), real vs predicted. Lower entropy = more one-note. This is the second half of the hypothesis: not just that developers resemble each other, but that each one is rendered flatter than they actually are.
| condition | entropy real | entropy pred | Δ | narrower for | wilcoxon p |
|---|---|---|---|---|---|
| distilled | 1.580 | 1.199 | -0.381 | 17/20 | 0.0002 |
| generic | 1.581 | 1.545 | -0.036 | 12/20 | 0.3958 |
| wrong | 1.581 | 1.313 | -0.267 | 15/20 | 0.0038 |
within-developer spread, real vs predicted (folder mode)
E5 · decision vs. surface
Does the folder change the decision or only the voice?
Verdict: surface_only. surface_only = folder changes style but not move choice (supports homogeneity); decision_shift = folder moves the actual decision toward the user move dist→real is the move-mix distance to the real user (lower = better decisions); judge style is surface voice.
| condition | move dist→real | judge style | judge realism | judge content |
|---|---|---|---|---|
| distilled | 0.251 | 38.4 | 34.3 | 31.0 |
| generic | 0.215 | 36.6 | 38.7 | 31.8 |
| wrong | 0.268 | 34.2 | 31.3 | 29.1 |
each point is one condition, folder mode
E2 · marginals
Marginal skew across move categories
Predicted-minus-real share of each move (generic condition). Under-producing critical — the move where a developer asserts something is wrong — is the consistent signature in both modes. direction is prompt-sensitive; clean approve-collapse test is E7 low-prompt arm
predicted minus real share of each move (generic condition)
E4 · primary result
Regression to the median
Distance from each developer’s move-mix to the human population average, real vs predicted. The hypothesis predicted shrinkagetoward the average; the data show the opposite — most developers’ predictions move away from it.
distance to the human population centre, real vs predicted (distilled condition)