Sync to targets with overlapping reachability
Commit

Three related fixes uncovered while syncing a repo into a target that already had main:
-
Materialized walker (planner.ObjectsToPush) treats objects pruned from the source pack as implicitly have'd by the target, instead of failing with "object not found". The fetch passes target refs as haves and the source server prunes everything reachable from them; the walker was erroring on those pruned objects even though receive-pack would accept the push (objects are reachable from existing target refs). Applies to both top-level wants and transitive references.
-
Incremental relay accepts branch creates and tolerates "no-thin" targets. Branch creates with non-empty target now use streaming relay with target refs as haves, instead of falling through to materialized. The no-thin restriction was over-conservative by the same reasoning already documented for replicate relay: gitproto.FetchPack never requests thin-pack, so the relayed pack is always self-contained.
-
httpError surfaces diagnostic response headers (Cf-Ray, Server, X-Request-Id, Content-Type, ...) when present. A 500 with a body of just "Internal Server Error" is unactionable; the headers give the user something concrete to share with the upstream service operator.
Co-Authored-By: Claude Opus 4.7 (1M context) noreply@anthropic.com Entire-Checkpoint: 0ceb3c36dd52