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.
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.
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.
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 = 50The 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.
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.
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.