How seven signals become one composite score
Red Stet's verifier produces a single composite score, but that score is a weighted combination of seven independent signals. This page describes the weights, the formula, the verdict tiers, and the reason a single signal is never enough.
Why combine signals at all
No single behavioral signal is enough to attest authorship. The behavioral-biometrics literature is consistent on this — Killourhy & Maxion's 2009 benchmark study showed that even the best single-signal classifiers have error rates that make them unsuitable for high-stakes decisions on their own. Modern continuous-authentication systems all combine multiple signal types.
For Red Stet, the same logic applies with a sharper edge: each individual signal has documented failure modes (a touch-typing expert defeats cadence variance; a writer with practiced material defeats correction rate; an adversary with a fake-jitter script defeats mouse complexity). Combining the seven signals reduces the joint error rate because the failure modes are largely disjoint. A document that produces clean signals on cadence AND backspaces AND paste source AND pause distribution is consistent with hand-typed composition on four independent axes. A document that produces clean signals on only one is not.
The composite is also human-readable. A reader scanning the verifier output can see "this document scored high on cadence variance and backspace rate but unusually low on mouse complexity" and form their own interpretation about whether the writer was using accessibility input, a remote-desktop session, or something worth a closer look. The signal mix conveys information the single composite number cannot.
The seven weights
Each signal is scored on a 0–100 scale (0 = patterns uncommon in hand-typed documents, 100 = strongly consistent with hand-typed composition) and contributes to the composite by a fixed weight. The weights sum to 1.00.
| Signal | Weight | Confidence |
|---|---|---|
| Keystroke cadence variance | 0.22 | Well-established |
| Correction rate | 0.20 | Moderate |
| Paste ratio | 0.15 | Mixed |
| Paste source split | 0.12 | Mixed |
| Thinking pauses | 0.11 | Well-established |
| Mouse path geometry | 0.10 | Emerging |
| Click position patterns | 0.10 | Experimental |
| Total | 1.00 |
The weights are not equal. Two of the three signals with the longest research history (cadence variance and thinking pauses) carry meaningful weight; the well-established cadence signal gets the largest single weight at 0.22. The combined paste signals (ratio + source) sum to 0.27 — the highest weight for any signal "family" — because large external pastes are mechanically incompatible with hand-typed composition in ways no other signal captures. The two weakest individual signals (mouse geometry, click patterns) get the smallest weights at 0.10 each, but they contribute by adding independent evidence rather than redundant evidence with the typing-based signals.
The composite formula
The composite is a straightforward weighted average:
Each per-signal score is computed independently from the recording's event stream. The full per-signal scoring formulas are documented on the respective methodology pages and in the open-source source at src/provenance/analysis.mjs (imported by the verifier). The composite is recomputable from the bundle without contacting Red Stet's infrastructure — anyone with a .red.md file and a copy of the verifier source can audit the math.
The composite range is 0–100. The formula doesn't apply any nonlinear adjustment, smoothing, or hidden multipliers to the weighted sum. One set of substitutions applies before the sum, and we publish it because "no hidden adjustments" has to include the defaults:
- Keystroke cadence with ≤ 10 inter-key samples → neutral 60 (the σ estimate is unreliable below that; the verifier notes the low sample count next to the composite).
- Keystroke cadence with quantized timestamps (≥ 90% of inter-key deltas on a 25/50/100 ms grid — coarsened browser timers) → neutral 60 with a note. σ over rounded timing measures the rounding, not the writer.
- Paste source with zero pastes → neutral 60 (nothing to classify).
- Mouse geometry with unusable path data (fewer than 8 valid points, or touch-only input) → neutral 60.
- Click position with zero clicks → neutral 60.
A neutral 60 neither helps nor hurts relative to the tier boundaries. A session with no mouse, no clicks, and no pastes is scored almost entirely on its typing signals — which is the honest reading of the evidence that exists.
Verdict tiers and what they mean
The composite is bucketed into three tiers. The tier labels are chosen affirmatively per Red Stet's product framing (see the 2026-06-08 decision drop "Is this human-authored? Not Is this AI?"). One gate applies before any tier: below 500 typed characters the verifier reports "Insufficient evidence — document too short to score" instead of a tier, and 500–2,000 characters carries a reduced-confidence note (see Limitations → Short documents).
The bucket thresholds are calibrated against the same 11-document corpus. As the corpus grows and adversarial cases land, the thresholds may shift — and when they do, the change is versioned. Since 2026-06-11, every exported bundle records the weightsVersion current at export time, and the verifier notes when a bundle was exported under different weights than it is being scored with. (Bundles exported before v2 carry no version; the verifier applies current weights and the fingerprint footer says which.) The version history:
| Version | Date | Weights (cadence / corrections / paste ratio / paste source / pauses / mouse / clicks) | Tiers |
|---|---|---|---|
cf-1 (current) | 2026-06-08 | 0.22 / 0.20 / 0.15 / 0.12 / 0.11 / 0.10 / 0.10 | ≥ 70 · 40–69 · < 40 |
Where the weights come from
The weights are descriptive of Red Stet's calibration corpus, not prescriptive from independent research. There is no published meta-analysis that says "cadence should be weighted 0.22 and backspaces 0.20 in a combined fingerprint." The weights were tuned so the composite cleanly separates the 10 human samples in the corpus (composites 81–96) from the 1 synthetic sample (composite 24). The thresholds (≥ 70, 40–69, < 40) were chosen to put all 10 human samples above 70 and the synthetic sample well below 40, with daylight between the tiers.
This is honest calibration — the kind of work that's normal at the early stage of a measurement system — but it carries real caveats. The corpus is small. The AI sample is generated under a deterministic profile, not produced adversarially by a human cooperating with a model. The corpus is heavily English-language and literary; academic writing, technical writing, journalistic writing, and non-Roman-orthography composition are underrepresented.
The Investigation thresholds & baselines page covers the corpus methodology in detail. The Limitations page covers what the calibration cannot account for.
How the weights should evolve
Three forms of corpus growth would inform reweighting:
- Adversarial samples. Documents produced by humans who type out model output character-by-character. These would calibrate how well the signal mix handles the canonical adversary against affirmative-human framing.
- Cross-language samples. Documents in non-English languages, particularly logographic and right-to-left scripts. These would inform whether the weights generalize or need language-specific tuning.
- Cross-modality samples. Documents produced via voice dictation, switch input, head-tracking, eye-gaze, and other accessibility input. These would inform how to distinguish "uncommon for keyboard-typed" from "produced by automation" — which is the more meaningful discrimination.
Signals under evaluation
These candidate signals are documented before they are weighted. Weights change only with published recalibration; until then the measured-not-scored ones carry weight 0.00 and exist here so the direction of the methodology is auditable. (IME routing, last in the list, is a correctness guard rather than a weighted signal — it is already live.)
- Pause location (mid-word vs clause/sentence boundary) — now measured, not yet scored (since 2026-06-12). The strongest unused finding in the cited literature (Wengelin 2006; Schilperoord 1996; Conijn et al. 2019): pause location carries the cognitive signal that pause count approximates. Composition pauses at linguistic boundaries; transcription pauses where the eye leaves the source — often mid-word. Red Stet now computes each session's pause-location profile (the share of macro-pauses at sentence/clause/word boundaries vs. mid-word) and surfaces it as evidence. It is not in the composite and carries weight 0 until the adversarial transcription corpus calibrates the threshold — we will not score a signal we haven't calibrated. This is the discriminator aimed squarely at the typed-out-AI case the limitations page names as the system's central gap.
- Synthetic input (text inserted with no keystroke) — now measured, not yet scored (since 2026-06-15). The recorder logs every text insertion that no key press produced: a scripted
insertText, a programmatic value set, an extension dropping in model output. A real keyboard fires a keydown; injection does not. Red Stet now computes the share of insertions that arrived with no keystroke behind them and surfaces each as a flagged moment on the verifier timeline. It is not in the composite and carries weight 0 until the false-positive rate is confirmed on real corpora — browser autofill and some assistive tools can also inject text — but in front of a reviewer it is the crispest tell that a passage was placed rather than typed. Clipboard pastes are counted separately, under the paste signals above. - Burst structure (P-burst lengths) — now measured, not yet scored (since 2026-06-15). Standard writing-process measure (Alves & Castro 2011; Leijten & Van Waes 2013): a production burst is a run of typing bounded by a planning pause or a revision, and burst-length distributions differ between composition and transcription. Red Stet now segments each session into bursts and reports the length distribution as evidence. Weight 0 until the corpus calibrates the separation.
- IME composition routing — now live (since 2026-06-15). The cadence math is calibrated for direct keyboard input and is not valid for pinyin / kana-to-kanji / Hangul IME sessions, where the keystrokes are romaji or jamo aimed at the input method, not 1:1 character production. When a session commits characters through an IME at a meaningful rate, Red Stet now withholds the cadence signal (scores it neutral) and labels the result, rather than scoring a CJK writer against an anchor that was never theirs. This is a correctness guard, not a weighted signal.
- Keystroke dwell (hold) times — now measured, not yet scored (since 2026-06-15). A first-class feature in the published keystroke-dynamics benchmarks (Killourhy & Maxion 2009): how long each key is held. Replay scripts that model only the gaps between keystrokes leave dwell flat, so it stiffens cadence against timing replay. The recorder logs hold durations; Red Stet now reports their distribution. Weight 0 until calibrated.
The goal isn't a perfect single composite. The goal is a composite that produces useful evidence for human reviewers across the range of inputs real writers actually use. We will continue to publish methodology changes openly.