What: the launch repair's plan now includes 120000 (symlink) entries: a link's worktree blob is its
target text read with readlink (never followed), so type changes and deleted links are restored and
added links removed like files; a symlink with any other target is the user's. Gitlinks stay skipped.
Why: the plan skipped every non-regular entry, then spent the marker, leaving `T a.py` / `?? L` /
`D L` behind with no record (main-preexisting filter).
Red: pre-fix _early_recovery.py -> regular-to-symlink, added-symlink, deleted-symlink fail (restore returned False).
Green: all 4 symlink arms pass; test_update_interrupted_pull.py 21/21.