Methodology

How the Drift Score is calculated

Every number IMPRINT shows you comes from the arithmetic on this page. It is published in full — including the parts that do not work well — because a score you cannot inspect is a score you have to take on faith.

Written by Suman Debnath, creator of IMPRINTLast updated 5 September 2026

What the Drift Score measures

The IMPRINT Drift Score is a 0–100 composite describing how far your current thinking sits from your own recorded baseline. Higher means further from yourself. It is a measure of distance, not of quality, and it is not comparable between people.

That last point is the one most often misread. Two people with a Drift Score of 60 have moved the same relative distance from completely different starting points. The number is only interpretable against your own history, which is why IMPRINT shows a series rather than a verdict.

0 – 39
Anchored. Recent work sits close to your baseline.
40 – 59
Drifting. A measurable gap has opened.
60 – 79
Critical. The gap is large and consistent across signals.
80 – 100
Identity Crisis. Recent work bears little resemblance to your baseline.

The composite

Four signals are computed independently, each on its own 0–100 scale where higher means more drift, then combined by weight and rounded. The result is clamped to the 0–100 range.

drift_score = round(
    baseline_divergence   * 0.40
  + vault_inactivity      * 0.25
  + ai_dependence         * 0.20
  + journal_irregularity  * 0.15
)

drift_score = max(0, min(100, drift_score))

Baseline divergence carries the heaviest weight because language degrades earliest and most visibly under delegation — it is the signal that moves first. The remaining three are behavioural, and they move slower.

On the weights. The 40/25/20/15 split is a considered judgement, not an empirically fitted result. There is no dataset behind those specific numbers, and a different weighting would produce different scores from identical inputs. They are published so you can disagree with them.

Signal 1 — Baseline divergence (40%)

Baseline divergence measures how far a calibration’s language sits from the same measures in your baseline. Two sub-signals are used, weighted equally: vocabulary richness and average sentence length.

vocabulary_richness = unique_words / total_words     // type–token ratio
avg_sentence_length = total_words / sentence_count

vocab_divergence    = |cal_richness  - baseline_richness|  / baseline_richness
sentence_divergence = |cal_sent_len  - baseline_sent_len|  / baseline_sent_len

baseline_divergence = min(100,
  round((vocab_divergence * 50 + sentence_divergence * 50) * 100)
)

Divergence is relative rather than absolute — the difference is divided by the baseline value — so the signal means the same thing for someone who writes long, dense sentences and someone who writes short, plain ones. The baseline figures are the mean across all baseline responses.

Where a baseline is missing or empty, the calculation falls back to a vocabulary richness of 0.5 and an average sentence length of 15 words. Those are placeholders that let scoring proceed, not norms derived from data.

Signal 2 — Vault inactivity (25%)

Vault inactivity is the share of your tracked skills that have not been practised in the last 14 days.

vault_inactivity = round(
  100 - (skills_practised_in_last_14_days / total_tracked_skills) * 100
)

// with no tracked skills at all:
vault_inactivity = 50

The 14-day window is deliberately shorter than any decay threshold in the skill-retention literature, which puts measurable decline at roughly 60 to 90 days. The signal is meant to flag a gap while it is still a gap.

The empty-vault default of 50 is worth understanding: an empty Skill Vault is treated as an unknown rather than as evidence of perfect practice. A new account therefore carries a mid-range contribution on this component — about 12.5 points of the composite — until skills are added.

Signal 3 — AI dependence (20%)

AI dependence counts dependency flags raised by the Mirror in the last 14 days. The Mirror is constrained to ask questions; when it detects that you are asking it to decide, recommend or produce, it redirects the question back to you and records a flag.

ai_dependence = min(100, dependency_flags_last_14_days * 10)

The flags record reaching for an answer, not AI use as such. Heavy, deliberate AI use outside the Mirror produces none of them.

This scale is arbitrary. Ten points per flag, saturating at ten flags a fortnight, is a design choice with no calibration behind it. Someone who uses the Mirror constantly has more opportunity to be flagged than someone who barely opens it, so this signal partly measures Mirror usage rather than dependence alone.

Signal 4 — Journal irregularity (15%)

Journal irregularity is the share of the last 14 days with no journal entry, counted by distinct days rather than by number of entries.

journal_days = count(distinct days with >= 1 entry, last 14 days)

journal_irregularity = round(max(0, 100 - (journal_days / 14) * 100))

This is the lightest signal at 15 percent, and the most assumption-laden: it treats daily writing as the norm and everything below it as irregular. That suits some people’s working habits and not others.

What this does not measure

The honest account. Each of these is a real weakness in the method as it currently stands, not a hypothetical.

Lexical, not semantic
Type–token ratio, sentence length and latency are proxies for reasoning depth, not measurements of it. You can write with a rich vocabulary and think poorly, and the reverse. Embedding-based semantic signals are the obvious next step and are not implemented.
Type–token ratio falls with length
TTR decreases mechanically as text gets longer, because common words repeat. A calibration substantially longer than your baseline responses will register divergence created by length rather than by any change in thinking. Length-corrected measures such as MTLD exist precisely for this reason and are not used here.
Divergence is directionless
The formula takes an absolute difference, so writing more richly than your baseline registers exactly as much drift as writing less richly. A deliberate improvement in your writing reads as drift.
Sentence splitting is naive
Sentences are counted by splitting on . ! and ?, which miscounts abbreviations, decimals, ellipses and dialogue. Average sentence length inherits that error.
Three of four signals measure habits
Vault inactivity, AI dependence and journal irregularity together carry 60 percent of the score and are all measures of engagement with IMPRINT itself. A fortnight away from the product raises your Drift Score whether or not your thinking changed.
No population norms
There is no comparison group, no validation study and no evidence that a given score corresponds to any external measure of capability. The bands are labels, not diagnostic thresholds.
What that adds up to. The Drift Score is a structured, repeatable prompt to look at your own work, not a clinical measure of cognition. It is most useful read as a series, where the habit signals are stable and a change in baseline divergence means something. It is least useful read as a single number.

Why this is published

A score you cannot inspect asks for trust it has not earned. Publishing the formulas means you can check whether the number means what the interface implies, and disagree with the weighting on specific grounds rather than general suspicion.

The implementation is open source, so the arithmetic above can be checked against the code that runs it. Definitions for the terms used here are in the glossary, and the common questions are answered in the FAQ.