typecheq

a typing test whose scoring core is written in C and compiled to WebAssembly

WPM0.0
Accuracy0.0%
Edit Distance0
Time Left30s

Live WASM State (JSON)

What am I looking at?
meta
Identifies the schema and codec versions this payload conforms to. Consumers should validate meta.schema_version before parsing.
session
The complete state of the current attempt as of this render: passage, input, diff, analytics, and timer.
session.diff.data
The per-position diff payload, encoded per the codec named in meta.codec and detailed in session.diff.encoding/session.diff.symbol_layout: each of session.diff.length positions is one 7-bit symbol — a 2-bit status code in bits 0-1, a saturated 4-bit attempt count in bits 2-5 (session.diff.attempts.max_value), and a 1-bit reflow flag in bit 6 — packed as a cross-byte bitstream per session.diff.packed_bytes, then base64-encoded per RFC 4648. Decode order matches passage order.
session.diff.data — reflow flag (bit 6)
Scoring realigns the entire typed prefix on every keystroke, so a character's status can change well after you typed it — one stray key can be reinterpreted as an insertion, turning a run of red back to green. This bit marks the positions a single keystroke reinterpreted, and is set for exactly the one render that follows it. Positions that just came into or went out of scope by being typed or erased are never flagged: those changes are already evident from the caret. The bit clears itself on the next render with no new input.
session.diff.attempts
Historical aggregates over every passage position ever attempted: total, the single most-retried position (max/max_position), and how many positions were ever revised (revised). These raw counters survive backspacing and are distinct from the saturated, cursor-local attempt counts embedded in session.diff.data. They are mirrored into result.summary as attempts_* once finalized.
session.analytics
Distributional statistics over instantaneous per-keystroke WPM, maintained online per meta.engine's accumulator. Mirrored into result.summary once result.finalized is set.
session.timer
session_time_ms is the single capped session clock used for scoring, and allowed_time_ms is its inclusive upper bound. The legacy elapsed_ms/duration_ms fields mirror those values so consumers can validate the timing contract. Finalized values are also mirrored into result.summary and covered by the result checksum.
result
null until result.finalized. Once set, result.certification.hash is the checksum — per result.certification.algorithm — of the exact string in result.certification.input.