alpha5: 6-agent perf wave (pipeline + compressed-blocks + pebble + peers + profile + mem-default) 16 commits across 6 parallel worktrees. Highlights ranked by impact: PIPELINE (#1+#2): Parallel within-block tx-sig recovery on the per-peer receive goroutine, plus a tx-sig cache (8K-entry LRU) to dedupe duplicate deliveries from multiple peers. +44% bps avg (855→1193, 920→1494 best). Tried separate decode/sig worker pool + singleflight on signerCache — both regressed because back-pressure stalled the TCP receive loop and triggered peer drops. COMPRESSED BLOCKS (#3+#8): proto v106→v107 + advertise zstd dict catalogue in hello user_data so peers send compressed_block_message (5002) instead of block_message (1001). 100% inbound traffic switched (0 → 55,972 compressed deliveries in 60s). Decompression via existing internal/blocklog/zstd. Lazy-decompress cache in chain/recent_blocks. PEERS (#6+#7): max-outbound 8→32, max-concurrent-dials →24. Fixed LegacyAddressMessage (5010) wire-encoding bug — fc::ip::address packs as LE uint32 — that was causing peerdb to never fill past the 8 seeds. Per-peer adaptive FetchBatch sized to recent blocks/sec, bounded [50, 5000]. Result: 8→22 peers verified in mainnet runs (2.6× fan-out). PEBBLE (#4): --cache-mb=1024 (was 256MB hard-coded). SoftCommit + chain-driven N-block batched commits + auto-replay crash recovery (restart compares persisted DGPO head vs block_log head, replays gap). Per-batch fsync via --commit-batch-fsync. Honest finding: per the profile, secp256k1 is 88% of CPU and pebble fsync is 0.6%, so the batching framework is for crash safety not throughput. PROFILE (#10): Full pprof report at docs/perf/sync-profile.md. Top hotspot: secp256k1 RecoverPublicKey 88.4% cum. Top alloc: state.Session.Put overlay copies 168MB / 200K blocks. Recommendations for the next round (skip-sig on trusted self-replay → 5-7×; per-tx parallel sig recovery — already in pipeline agent's work). Small wins: state.Range backend-only fast path (3% gain). pprof flag wiring. MEM DEFAULT for --verify-against (separate 1-line commit before fan-out). Verify-against runs throw away state — pebble fsync wasted. Now defaults to mem; explicit --backend=X overrides. State-commit batching (#9, agent-commit-batch) was developed in parallel but skipped at merge as duplicate-concept with pebble's already-merged batching framework. Worktree preserved if we want to revisit the deeper Database.BatchSize design. All ./internal/p2p/... + ./internal/chain/ + ./cmd/ghive-sync/ tests green. Replay regression: 2M blocks, 0 errors. Bottleneck has moved off network/peers and into per-block apply CPU; next round of work should target sig recovery itself (decred/secp256k1 has FieldVal as 35-30-10% leaves of ECDSA recovery).