# D4. Permanent state keys (`elabora.lock.json`)

Learner progress is keyed by short base-36 keys assigned once per id. Updates that insert, move or remove screens keep the progress of every element that still exists; `elabora diff` tells, LMS by LMS, whether the update is safe. The lock is a source file (like a package lock): losing it is detected as "keys changed".
