- A build interrupted while writing the index leaves a partial file under
its digest name before the pointer exists. The next build rejects those
bytes ("content changed under its digest") and cannot repair the index.
- A skill edited after the entries are read leaves an index that still
matches the stored generation, and the next build reports that
generation stale. This pins the current behavior: the index is bound to
the generation, not to live sources.