Red Stet
← Back to Help
Help · For students & teachers · Tier 4 — Trust & integrity

What's recorded, what isn't

Red Stet records the process of writing one document — keystrokes and pauses inside the editor while it's open. Not your screen, not your other tabs, not your clipboard. This doc lays out what's captured, where it lives, who reads it.

Students worried about being watched: read sections 2 and 3. Teachers writing a district data-handling note: the source of truth is docs/PRIVACY.md; this doc is the plain-English mirror.

The high-level commitment

The recording is the writing process inside the editor — nothing outside that window. Type, the keystroke is recorded. Switch tabs, the tab is invisible. Paste, and the recording sees a paste happened at a position — not the contents.

The recorder is a script on the editor element. Browser security blocks other tabs; we don't request clipboard or screen permissions.

RECORDING this document only
The bottom-left badge is the only thing watching. Scope is the open document. Close the doc — badge disappears, recording stops.

What's recorded channels A & B

Two channels, both scoped to the editor.

Channel A — text events

  • Keystrokes. Timestamp, cursor position, a coarse bucket: printable, Enter, Tab, Backspace, Delete. The literal character isn't stored — the document body has it.
  • Pastes. Logged as {type:'paste', t, pos, len}. Content is never stored. A 200-character paste lands at position 1,420, length 200. We don't know what it said.
  • Backspace bursts — runs of deletions coalesced with a count.
  • Idle gaps — periods of no activity with duration.
  • Focus / visibility flips — editor gaining or losing focus, tab backgrounding. We know the editor went inactive; not what you switched to.

Channel B — pointer events

  • Cursor and pointer samples as coordinates inside the editor. 20 Hz active, 1 Hz idle.
  • Selection ranges, click positions, scroll deltas, touch / swipe gestures.

Each event is one row of compact JSON. A 90-minute essay produces tens of kilobytes — small enough to ride inside an exported .red.md.

RECORDED — Channel A (text)
// one keystroke { t: 14213, type: "key", kind: "printable", pos: 1420 } // a paste — note: no content { t: 26100, type: "paste", pos: 1620, len: 204 } // idle gap (you stopped to think) { t: 38400, type: "idle", duration: 7200 }
RECORDED — Channel B (pointer)
// 20Hz cursor sample within the editor { t: 40050, type: "cur", x: 412, y: 288, kind: "mouse" }

What's NOT recorded

None of these. If any shows up, that's a bug — report it.

  • Your screen. No screen-capture API invoked.
  • Camera or microphone. Never requested.
  • Cursor movement outside the editor. The sampler only fires inside the editor's bounding box. Move to your dock, menu bar, another window — nothing emits.
  • Clicks outside the editor. Other tabs, other apps, your desktop produce zero events.
  • Typing in other windows. Alt-tab to your notes app — invisible. We know the editor lost focus, nothing else.
  • Your clipboard. Paste events show when, where, how long — never what. The browser doesn't hand the clipboard to a page that didn't request the permission; we don't.
  • Other browser tabs. Same-origin isolation blocks it.
  • Files on disk. Only files you explicitly Import (.red.md or .docx).
  • Browsing history. Search queries, sites visited — none.
  • Geolocation. Not requested.
  • Device fingerprints. No canvas fingerprinting, font enumeration, or user-agent indexing.
  • Biometric data. Typing-rhythm aggregates are population statistics (section 7).
NOT RECORDED — ever
  • Your clipboard We see paste position + length, never paste content.
  • Other browser tabs Browser security forbids this. We can't read them.
  • Your screen No screen-capture API is invoked.
  • Camera or microphone Never requested. The mic and camera stay dark.
  • Keystrokes outside the editor If you Alt-Tab to another window, we know we lost focus — nothing else.
  • Files on disk Only files you explicitly Import.
  • Browsing history No knowledge of what sites you visit.
  • Geolocation, IP indexes, fingerprints None of these are collected for analysis.

Provenance alone proves nothing

The recording isn't a transcript. Every event references a position; no event carries the character. A keystroke says "position 1,420, printable" — not "the letter A." A paste says "position 1,620, length 204" — never the text.

Provenance + the wrong document = positional gibberish. Paired with an unrelated essay, timestamps don't align with word boundaries, pastes land at wrong positions, idle gaps don't match sentence breaks.

The recording only means something paired with the document it was made against. Together they tell the story — typed for 90 seconds to position 432, pasted 204 characters, kept typing to 800, paused 12 seconds, deleted 18. Shape — rhythm, session length, paste sizes — is visible; content lives in the document.

Provenance + the right doc
"At t=14213 you typed at pos 1420.
Position 1420 in your doc is the n of 'narrator'.
So that keystroke was a meaningful word being built up."
Recording explains document; document explains recording.
Provenance + the wrong doc
t=14213, pos=1420, kind=printable
t=14380, pos=1421, kind=printable
t=26100, pos=1620, paste, len=204
... what was at pos 1420? Unknown.
Positions point at nothing meaningful. Shape is visible; words aren't.

When recording starts and stops

Recording begins when a recordable doc opens, runs while you're inside it, ends when the doc closes. No ambient mode.

Start

state.provenance.recording flips on when you open an assignment-tied document (or toggle it on for a personal doc). The bottom-left RECORDING badge is the visible signal.

Stop

Doc close, logout, navigation away. Badge disappears.

Pause / blur

Switching tabs logs focus: false, drops the sampler to 1 Hz, pauses capture. Returning resumes it. The gap stays as a real gap, not interpolated.

Recording reflects time in the editor, not elapsed time. Walk away for two hours — that's two hours of nothing.

No badge, no recording. Personal scratchpads, the help library, every non-assignment view start with recording off.
09:14:02
Recording started Document opened from "Persuasive Essay" assignment. Badge visible.
09:41:18
Focus lost — sampler idle You switched tabs. Capture pauses; the gap appears in the trail.
09:44:02
Focus returned Capture resumes. 2m 44s gap remains in the trail, marked.
10:23:47
Recording stopped Document closed. Badge disappears. Session sealed.

Where the recording lives localStorage + Convex File Storage

Two phases: browser while composing, signed envelope on the server at submit.

While composing — browser only

The event stream buffers in memory and flushes to localStorage under red-stet.provenance.v1.<slug> every 30 seconds and on page-close. Nothing leaves the device. Close without saving and the buffer stays.

At submit / autosave — signed envelope on the server

Buffered events wrap in a signed envelope and upload to Convex File Storage as one blob. The signature attests to the whole envelope; tampering breaks the chain. Retrievable by the doc owner, the assignment teacher, and anyone holding a shared verifier link.

Voice-profile mirror — aggregate only

An aggregate of your typing rhythm sits in authorProfiles so a teacher grading on another device sees your baseline:

  • Eight inter-keystroke timing buckets (histogram, not individual times)
  • Median and 95th-percentile pause length
  • Typo rate, scroll-up fraction, selection-read rate
  • Up to 200 contributing document slugs and chain-head hashes (no body, no content)

Not in the profile: individual keystroke times, paste events, cursor coordinates, document text. Statistics about how you write — not what you wrote.

Browser While composing
localStorage: red-stet.provenance.v1.<slug>
Raw event stream buffered locally until submit or autosave.
Convex File Storage At submit / autosave
signed envelope (one blob)
Whole stream uploaded as one signed envelope. Tampering breaks the chain.
Convex server Aggregate summary
authorProfiles table
Histogram buckets, median pause length, typo rate. No individual events. No document text. No paste content.
Convex server Chain heads
authorProfiles.chainHeads
Short djb2 hashes that link your sessions together — used to detect tampering. No content recoverable from these.

The quiet layer — rhythm fingerprints

Red Stet computes fingerprints from the document body — vocabulary spread, sentence length, AI-tell density. Derived from prose, not a separate surveillance channel.

Two essays from the same student with wildly different fingerprints raise a question. They don't answer it.

What the fingerprint isn't

Not a unique identifier. Students overlap on any single metric. Population statistic — can't unlock a phone, can't be queried against an unknown-writer database, can't identify you outside Red Stet.

Not a verdict. The number doesn't say "this is AI" or "this is plagiarized." It's a baseline.

Not biometric data under most state laws. Aggregate timing buckets don't meet FTC, BIPA, or CUBI "biometric identifier" definitions — they don't uniquely identify a person. If your district disagrees, the school is the FERPA data controller; we can scope or strip on request.
Median pause
412 ms between keystrokes
Typo rate
3.2% chars deleted & retyped
Avg sentence
17.4 words
Vocab spread
0.61 type-token ratio
Scroll-up rate
22% of scroll events
Selection-read
4.1 per 1000 chars
Each number is a population statistic. Many students share any given value. Baseline, not identifier.

Who can see your recording

Small audience by default.

You — always

Open the Review panel from the editor and scrub through any time.

Your teacher — for submissions

After submit, the recording is readable by the class owner. The Convex read function checks classroom ownership; teachers in your other classes can't read it.

Classroom staff with grading rights

A co-teacher or TA with grading enabled has the same access as the owning teacher for that class. Audit-logged.

Nobody else

Not other students. Not other teachers. Not administrators unless enrolled as classroom staff. Not Red Stet staff in routine operations. Not third-party AI-detection vendors.

You (the student) Your own localStorage; Review panel any time
Always
Your teacher Only for assignments you submitted to their class
For submissions
Co-teachers + TAs (grading) Same access as the owning teacher, audit-logged
If invited
Other students in your class Even with roster visibility on
Never
Other teachers / admins Unless they're enrolled as classroom staff
Never
Third-party services No analytics, no ad networks, no AI-detection vendors
Never

Where the teacher's review session resumes users.preferences.replayPositions

The teacher's replay state, not the student's recording. The recording stays what it was at submit.

When a teacher scrubs to a moment and closes the review, opening the same submission on another device picks up at the same timestamp. Per-submission position on the teacher's user row at users.preferences.replayPositions, saved as they scrub (throttled).

Teacher-side only. Students never see where their teacher is — no presence indicator, no read receipt.

When the position resets

Two cases: Restart from beginning, or the recording is purged via class retention (orphan cleaned up on next read). Tab close, device switch, session end don't reset.

Why this exists

A 90-minute recording across two sittings used to mean re-scrubbing. Position memory removes the friction.

Teacher A — Laptop Scrubbed to 14:23, closed the tab
Saved
Teacher A — Tablet, next morning Opens the same submission's review
Lands at 14:23
Co-teacher B opens the same recording Their position is separate
Lands at 00:00
The student opens their own recording Teacher position is not exposed
Not visible
Per-submission position lives on the teacher's user row. One position per teacher per submission.

Self-checks are logged

The Run self-check button next to Submit shows the same provenance flags your teacher would see — large-paste, tab-paste, off-page-paste, style-shift, whatever surfaces.

Use it to verify your work isn't tripping a flag for an innocent reason — a long quote, a citation paste, a fluent paragraph diverging from your baseline. See what the teacher sees, decide whether to clarify in a comment.

Every self-check is logged on your submission with a timestamp, flag categories, and a content hash. The teacher's grading view shows the history alongside the rubric.

What the teacher sees:

  • How many times you ran self-check, and when.
  • Categories surfaced at each check.
  • A category that appeared in an earlier check and disappeared later gets a red border — the disappearance is the signal.
Anonymous /verify/ checks aren't logged. No account, nothing to attach to. That surface verifies exported recordings, not in-progress assignments.
What your teacher sees
Nov 18 09:14 Large paste, Tab-paste
Nov 18 09:21 Large paste
fixed: Tab-paste
edited
Nov 18 09:34 No flags surfaced
fixed: Large paste
edited
3 self-checks. Last one 4 minutes before submit. A flag category disappeared between two checks — the document was edited in between. Worth a look at the recording.
Red border = a flag that vanished. Cadence + edit pattern is the signal.

Retention and deletion — voice profile as a lifetime asset

The model is lifetime by default with friction-wipe.

Why lifetime

The voice profile and accumulating recordings are the long-term value:

  • Prove authorship years later. A high-school piece re-verifies for college admissions, job applications, writing grants — anywhere a third party asks "did you actually write this?"
  • Portable identity-as-writer. The voice profile is the trace of how you write — phrase choices, sentence rhythm, idle cadences. Over time it becomes a portrait.

Default: recordings + voice profile live indefinitely, tied to your account.

Friction-wipe — the disaster button

Settings → Privacy → Wipe everything. Deliberately gated:

  • Cost disclosure — "you will lose your voice profile, your authorship-verification leverage, and your portfolio. This cannot be undone."
  • Typed confirmation — type "wipe my Red Stet history" before the cooldown starts.
  • 7-day cooldown. Cancellable from any device. Blocks impulse and account-takeover deletes.
  • Per-account scope. Deletes recordings + voice profile + author profile. Submitted assignments stay on the class as the teacher's record; recordings are stripped.

See Friction-wipe in the retention doc for the per-table inventory.

Close account, keep record

The less-destructive sibling at Settings → Privacy → Close account, keep record. Severs sign-in identity, keeps recordings as anonymous-but-attributed entries. See Close account, keep record.

Classroom deletion

Deleting a classroom cascades enrollments, assignments, group memberships. Your personal documents and recordings don't cascade — those belong to you.

The wipe is heavy by design. Friction means impulse deletes don't cost a portfolio. Available if you want it, not a one-click toggle.
Wipe my Red Stet history
You're about to permanently delete:
  • Your full voice profile (rhythm, vocabulary, sentence-shape fingerprints)
  • Every provenance recording tied to your account
  • Your author profile
This is not recoverable. Future authorship-verification of work you've already written becomes impossible. A 7-day cooldown gives you time to cancel.
Type to confirm:
wipe my Red Stet history
Cancel Start 7-day countdown
Cost disclosure + typed confirmation come BEFORE the 7-day cooldown. The sibling "Close account, keep record" lives in the same panel for anonymization.

How this is different from AI detection

AI detectors read the final text and guess whether a human wrote it — classifiers on the output, after the fact, with no access to how it was made. They produce false positives that harm real student writers and get gamed by light paraphrasing.

Red Stet runs the other way. We record the process. The recording is the evidence. No classifier to fool — there's a literal timeline of what happened in the editor.

Consequences:

  • Red Stet is a tool the student carries, not a verdict imposed. The recording is the student's proof first, the teacher's evidence second.
  • Third-party AI-likelihood scores aren't Red Stet outputs. We don't generate them.
  • The teacher does the judgment. The recording shows organic drafting or it doesn't.
Organic drafting is the strongest defense against a false AI accusation. A third-party tool flags an essay; the teacher pulls up two hours of real edits in the recording; the third-party tool loses.
Them
AI detectors
Look at the final text and run a classifier on it. Statistical guess, no access to how the text was made. False positives are routine; gaming is trivial.
Red Stet
Process recording
Records the writing itself, in real time. The trail is the evidence — no classifier, no guess. The teacher does the judgment with the recording in hand.
Opposite directions. One looks at text; the other at process. The recording is what gives a student a real defense when text-based tools flag by accident.

The one-line summary

Red Stet records the writing process inside the editor — keystroke positions, paste positions and lengths, idle gaps, focus changes. It does NOT record what you typed (the document has that), your screen, your camera, your other apps, or anything outside the editor. The recording lives indefinitely as part of your lifetime authorship record, with a friction-wipe escape hatch.

Students: the recording is on your side. The teacher uses it to verify you did your own work; you use it to prove you did against any tool or accusation. The voice profile accumulates into evidence — useful in college admissions, job applications, anywhere authorship needs proving.

Teachers: the small audience and structural scope make Red Stet defensible to an IT director on a Tuesday afternoon. The code can't reach the places where invasive things would happen.

Administrators and parents: DPA requests, account anonymization, breach notifications — [email protected]. Source of truth: docs/PRIVACY.md.

The shape of the contract
We record the writing process,
inside the editor,
for your lifetime authorship record,
with a frictional wipe path if you change your mind.
Lifetime-by-default is the value: a portable proof of authorship that holds up years later. The wipe path exists for opt-outs, with friction so impulse deletes don't cost a portfolio.

Related

Reading the provenance recording — the scrubber, spotting a paste, when to dig deeper.

Talking to students about the recording — a day-one script.

Co-teachers & TAs — who gets recording access when you invite grading help.

Back to the help library.

Privacy question this doc missed? Email feedback.