keeps: warm public IPFS gateways after upload + after resync tx master
Uploads in keep-prepare-background and keep-update now also fire-and-forget a Range: bytes=0-0 GET to ipfs.io/gateway.ipfs.io/dweb.link/nftstorage.link per CID, triggering those gateways to DHT-fetch from our Kubo node and cache. Once cached there, objkt's indexer and the assets.objkt.media thumbnail pipeline have multiple well-peered providers to pull from instead of timing out against a single private node. Adds /api/warm-gateways endpoint (POST {cids:[...]}) and a post-tx client step in syncRebakeMetadataOnChain that calls it for the final artifact/ thumbnail/metadata CIDs, surfacing progress in the track log so the user sees "Warming public IPFS gateways for N CIDs..." → "Gateways warmed: ..." as visible steps in the resync confirmation panel. Large artifact HTMLs (~1MB+) may still 504 at the public gateways' internal timeouts — Filebase or a proper pinning service remains the durable fix for those. Small files (metadata JSON, animated WebP thumbs) land reliably. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>