Simplify after review: drop dead field, dedupe, serialize discovery
Commit

- Drop TargetFeatures.HeadTarget. Receive-pack adverts omit HEAD by protocol design (server-side addReferences passes addHead=false for forPush), so the field was structurally always empty in real use. Real target HEAD lives on targetSession.headTarget from DiscoverHEAD.
- Serialize the target upload-pack discovery instead of running it concurrently with receive-pack. Both calls share targetConn, and RequestInfoRefs mutates conn.Endpoint.Scheme/Host under FollowInfoRefsRedirect — concurrent use raced on a shared *url.URL. Cost: one extra round-trip wall time. Correctness > the 50-100ms save.
- Add (s *syncSession) heads() helper; the six Result/ProbeResult construction sites previously repeated the same SourceHEAD/TargetHEAD field pair.
- Extract seedTargetWithFeatureHEAD test helper; the new sync and probe HEAD tests had an identical 18-line target-seed dance.
- Trim verbose docstrings on Result, DiscoverHEAD, the discovery block, the new test docstrings, and lsRefsCoversHead.
Refs #45.
Co-Authored-By: Claude Opus 4.7 (1M context) noreply@anthropic.com Entire-Checkpoint: 535cfb3709fd
Checkpoints
Checkpoint 1