/simplify: tidy rewrite (resolveAuthor, thread refName, sparse tasks graft)
Commit

- Collapse the fallback name/email into a commitAuthor and extract resolveAuthor, shrinking rewriteCheckpoint's parameter list and de-duplicating the per-session and tasks-graft author fallback.
- Compute the ref name once in the walk and thread it through rewriteCheckpoint and graftTasksSubtree instead of recomputing RefName three times per checkpoint.
- Graft tasks with a single UpdateSubtree(MergeKeepExisting) call — splicing the tasks/ entry into the root tree so sibling session subtrees keep their hashes — instead of flattening and rebuilding the whole tree.
- Reset the ref only under --force (the non-force existing-ref case is already skipped by the caller), dropping a redundant check.
- Add a graft test covering the tasks splice (tasks/ added, existing entries preserved, checkpoint still reads back).
Skipped as out of scope for hidden test tooling: adding a tasks WriteRequest type / AuthorReader.GetSessionAuthor, and dropping the deliberate metadata forwarding.
Co-Authored-By: Claude Opus 4.8 (1M context) noreply@anthropic.com Entire-Checkpoint: 48ce721ba1a2
Checkpoints
Checkpoint 1