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”.