Problem: the single-level undo used shallow references so mutations during diff.apply() corrupted the saved state. JSON writes were also non-atomic, risking partial writes on crash. Solution: add M.snapshot() which deep-copies active tasks (including _extra). Change M.save() to write a .tmp file then rename atomically. |
||
|---|---|---|
| .. | ||
| pending | ||