Moving your own code isn’t copying.
A paste that matches code you already typed is recognized as a move. It drops out of the review queue, and stays on the record.
Provenance records how student code gets written, edit by edit, in a tamper-evident log that travels with the submission.
2,800+ students recording their work
Similarity checkers compare final submissions, and AI tools now produce final submissions on demand. What’s much harder to produce is the afternoon behind one: the false starts, the deleted lines, the test that finally passed at 11:40 p.m.
Both end in exactly the same bytes. Only one of them is an evening of work.
633 edits10 test runs0 pastes
1 edit1 test run1 paste
Identical files. Completely different records.
Two recordings of the same assignment on one clock, 20:55 to 23:41. In the first, a student types the file over the evening: 633 edits and 10 test runs, stuck for a while on longest_flat, which they delete and write again, and every test passes at 23:40. In the second, the editor sits in the background for two and a half hours, then the whole file arrives in a single 26-line paste. Both final files are identical.
Every change, paste and save is sealed to the one before it, in one unbroken line from the first keystroke to the hand-in. Along the way the recorder signs checkpoints, like the gold link.
Rewrite one event and its seal stops matching. So does every event after it.
Reseal everything after the edit and the chain looks whole again, until the signed checkpoint. That signature can’t be redone.
Provenance points a person at the moments worth a look. Honest work stays out of the way.
A paste that matches code you already typed is recognized as a move. It drops out of the review queue, and stays on the record.
A check that can’t run reports that it was skipped. It never reports a failure it couldn’t see.
Staff can weight or switch off every signal, and a course can turn some kinds of capture off before anything is recorded.
Every flag opens the exact moment in the replay. Nothing happens automatically.
A flag is a question, not a verdict.
The replay shows where a student got stuck, what they tried, and when it clicked. Office hours can start from the actual evening, not a guess about it.
Three editors write the same signed log. Everything downstream reads it. Every piece is open source.
Record
provcode Provenance for VS Code The original recorder. On the VS Code Marketplace. provjet Provenance for JetBrains IntelliJ, PyCharm, CLion and the rest. On the JetBrains Marketplace. provnvim Provenance for Neovim Pure Lua, no native dependencies.Hand in
Check
Review
If you did the work, the record is the best evidence you have that you did.
Type something. Paste something. Click away and come back. The record writes itself alongside.
No log is impossible to forge, and our own design documents say so. Provenance makes the easy shortcuts leave marks, and the hard ones cost more than doing the work. The source is public, and the design assumes it.
“We will know if you do something obvious, and we will know enough to ask questions if you do something subtle.”
It’s open source, and it already runs at the scale of a large intro course. Tell us about yours.